Удерживает данные на неопределенный срок для выполнения юридических обязательств или обязательств по сохранению. Обычно удержания накладываются на одного или нескольких пользователей, чтобы гарантировать, что данные, потенциально относящиеся к делу, не могут быть удалены до тех пор, пока дело не перестанет быть активным.
Если пользователь, на которого распространяется запрет, удаляет хранимые данные, эти данные удаляются из поля зрения пользователя, но сохраняются в Сейфе. Пока действует запрет, администратор Сейфа может искать и экспортировать эти данные.
Удержания состоят из следующих компонентов:
- Служба — приложение, отвечающее за хранящиеся данные. В качестве службы можно выбрать почту, диск или группы.
- Область действия — объекты, на которые распространяется запрет. Область действия может быть установлена на одну или несколько учетных записей пользователей или на организационное подразделение (OU).
- Дополнительные параметры (необязательно) — конкретные сведения (поисковые запросы или параметры конфигурации), используемые для сужения данных, которые должны храниться в пределах определенной области. Опции включают в себя:
- почта, Группы: поисковый запрос, чтобы сузить область хранения
- Диск: включить общие диски в запрет
Для работы с ресурсами Сейфа у учетной записи должны быть необходимые права Сейфа и доступ к делу. Чтобы получить доступ к делу, учетная запись должна создать дело, иметь к нему доступ к делу или иметь право просмотра всех дел .
Создайте удержание почты для определенных учетных записей пользователей с помощью поискового запроса.
В следующем примере показано, как создается удержание с именем «Мои первые почтовые учетные записи» для:
- Сервис: почта
- Сущность: учетные записи пользователей «user1» и «user2».
- Дополнительные параметры: поисковый запрос «to:ceo@company.com».
Получите идентификаторы учетных записей пользователей из AdminSdk . Обратите внимание, что HeldAccount может принимать идентификатор учетной записи или адрес электронной почты. Если указаны оба параметра, используется адрес электронной почты и идентификатор учетной записи игнорируется.
Ява
HeldMailQuery mailQuery = new HeldMailQuery().setTerms("to:ceo@company.com"); Listaccounts = Lists.newArrayList(); accounts.add(new HeldAccount().setAccountId(user1accountId)); accounts.add(new HeldAccount().setEmail(user2Email)); Hold hold = new Hold() .setName("My First mail Accounts Hold") .setCorpus("MAIL"); .setQuery(new CorpusQuery().setMailQuery(mailQuery)) .setAccounts(accounts); Hold createdHold = client.matters().holds().create(matterId, hold).execute();
Питон
def create_hold_mail_accounts(service, matter_id, account_id): mail_query = {'terms': 'to:ceo@company.com'} accounts = [ {'accountId': user1_account_id}, {'email': user2_email} ] wanted_hold = { 'name': 'My First mail Accounts Hold', 'corpus': 'MAIL', 'query': { 'mailQuery': mail_query }, 'accounts': accounts } return service.matters().holds().create( matterId=matter_id, body=wanted_hold).execute()
Создайте запрет на доступ к Диску в подразделении и включите контент общего диска.
В следующем примере показано, как создается удержание под названием «Моя первая поездка в подразделении» для:
- Услуга: Драйв
- Сущность: организационное подразделение «Финансы» (идентификатор подразделения фиксируется в orgUnitId).
- Дополнительные параметры: включить общие диски, членами которых являются пользователи в этом организационном подразделении.
Получите идентификаторы подразделений из AdminSdk .
Ява
HeldOrgUnit orgUnit = new HeldOrgUnit().setOrgUnitId(orgUnitId); // Include shared drives content. HeldDriveQuery driveQuery = new HeldDriveQuery().setIncludeSharedDriveFiles(true); // Create the hold. Hold hold = new Hold() .setName("My First Drive OU Hold") .setCorpus("DRIVE") .setQuery(new CorpusQuery().setDriveQuery(driveQuery)) .setOrgUnit(orgUnit); Hold createdHold = client.matters().holds().create(matterId, hold).execute(); return createdHold;
Питон
def create_hold_drive_org(service, matter_id, org_unit_id): drive_query = {'includeSharedDriveFiles': True} org_unit = {'orgUnitId': org_unit_id} wanted_hold = { 'name': 'My First Drive OU Hold', 'corpus': 'DRIVE', 'orgUnit': org_unit, 'query': { 'driveQuery': drive_query } } return service.matters().holds().create( matterId=matter_id, body=wanted_hold).execute()
Создайте блокировку для групп в учетных записях определенных групп с диапазоном дат.
В следующем примере показано, как создается удержание с названием «Мое первое групповое удержание» для:
- Сервис: Группы
- Сущность: групповые учетные записи «group1» и «group2».
- Дополнительные параметры: хранить только сообщения с датами отправки между «startTime» и «endTime».
Получите идентификаторы групповых учетных записей из AdminSdk .
Ява
String APRIL_2_2017_GMT = "2017-04-02T00:00:00Z"; // See below for format*. Listaccounts = Lists.newArrayList(); accounts.add(new HeldAccount().setAccountId(accountId)); accounts.add(new HeldAccount().setAccountId(accountId2)); HeldGroupsQuery groupQuery = new HeldGroupsQuery(); // Restrict by sent date. groupQuery.setStartTime(APRIL_2_2017_GMT); groupQuery.setEndTime(APRIL_2_2017_GMT); // create the hold Hold hold = new Hold() .setName("My First Group Hold") .setCorpus("GROUPS") .setQuery(new CorpusQuery().setGroupsQuery(groupQuery)); hold.setAccounts(accounts); Hold createdHold = client.matters().holds().create(matterId, hold).execute();
Питон
def create_hold_groups_date_range(service, matter_id, group_account_id): groups_query = { 'startTime': '2017-04-02T00:00:00Z', # See below for format* 'endTime': '2017-04-02T00:00:00Z' } accounts = [{'accountId': group_account_id}] wanted_hold = { 'name': 'My First Group Hold', 'corpus': 'GROUPS', 'query': { 'groupsQuery': groups_query }, 'accounts': accounts } return service.matters().holds().create( matterId=matter_id, body=wanted_hold).execute()
- Формат временной метки . Кроме того, время начала/окончания преобразуется в GMT и округляется до начала заданной даты.
Запросить и изменить существующие запреты на удаление
В следующем примере показано, как составить список всех учетных записей, включенных в существующее удержание:
Ява
client.matters().holds().accounts().list(matterId, holdId).execute().getAccounts();
Питон
# If no accounts are on hold, ['accounts'] will raise an error. def list_held_accounts(service, matter_id, hold_id): return service.matters().holds().accounts().list( matterId=matter_id, holdId=hold_id).execute()['accounts']
В следующем примере показано, как добавить учетную запись в существующее удержание и удалить его из него:
Ява
// Add an account by id. client .matters() .holds() .accounts() .create(matterId, holdId, new HeldAccount().setAccountId(accountId)) .execute(); // Remove an account by id. client.matters().holds().accounts().delete(matterId, holdId, accountId).execute(); String email = "email@email.com"; // Add an account by email. client .matters() .holds() .accounts() .create(matterId, holdId, new HeldAccount().setEmail(email)) .execute();
Питон
def add_held_account(service, matter_id, hold_id, account_id): held_account = {'accountId': account_id} return service.matters().holds().accounts().create( matterId=matter_id, holdId=hold_id, body=held_account).execute() def remove_held_account(service, matter_id, hold_id, account_id): return service.matters().holds().accounts().delete( matterId=matter_id, holdId=hold_id, accountId=account_id).execute() def add_held_account(service, matter_id, hold_id, email): held_account = {'email': email} return service.matters().holds().accounts().create( matterId=matter_id, holdId=hold_id, body=held_account).execute()
В следующем примере показано, как изменить подразделение в существующем удержании подразделения:
Ява
Hold hold = client.matters().holds().get(matterId, holdId).execute(); hold.getOrgUnit().setOrgUnitId(newOrgUnitId); Hold modifiedHold = client.matters().holds().update(matterId, holdId, hold).execute(); return modifiedHold;
Питон
def update_hold_ou(service, matter_id, hold_id, org_unit_id): current_hold = get_hold(matter_id, hold_id) current_hold['orgUnit'] = {'orgUnitId': org_unit_id} return service.matters().holds().update( matterId=matter_id, holdId=hold_id, body=current_hold).execute()
В следующем примере показано, как составить список всех удержаний по делу:
Ява
String matterId = "Matter Id";// List all holds. List
holdsList = client.matters().holds().list(matterId).execute().getHolds(); // Paginate on holds. ListHoldsResponse response = client .matters() .holds() .list(matterId) .setPageSize(10) .execute();
String nextPageToken = response.getNextPageToken(); if (nextPageToken != null) { client .matters() .holds() .list(matterId) .setPageSize(10) .setPageToken(nextPageToken) .execute(); }
Питон
# This can paginate in the same manner as with matters. def list_holds(service, matter_id): return service.matters().holds().list(matterId=matter_id).execute()