Gerenciar retenções

As guardas de documentos preservam os dados por tempo indeterminado para cumprir obrigações legais ou de preservação. Geralmente, as guardas de documentos são colocadas em um ou mais usuários para garantir que os dados potencialmente relevantes para um caso não possam ser excluídos até que ele não esteja mais ativo.

Se um usuário sujeito a uma guarda de documentos excluir os dados, eles serão removidos da visualização do usuário, mas preservados no Vault. Enquanto a guarda de documentos estiver em vigor, um administrador do Vault poderá pesquisar e exportar esses dados.

As retenções têm os seguintes componentes:

  • Um serviço: o aplicativo responsável pelos dados a serem retidos. O serviço pode ser definido como e-mail, Drive ou Grupos.
  • Um escopo: as entidades cobertas pela retenção. O escopo pode ser definido para uma ou mais contas de usuário ou para uma unidade organizacional (UO).
  • Opções adicionais (opcional): os detalhes específicos (consultas de pesquisa ou opções de configuração) usados para restringir os dados a serem mantidos no escopo definido. As opções incluem:
    • mail, Grupos: pesquisa para restringir a retenção
    • Drive: incluir drives compartilhados na retenção

Para trabalhar com os recursos do Vault, a conta precisa ter os privilégios necessários e acesso ao assunto. Para acessar um caso, a conta precisa ter criado o caso, ter o caso compartilhado com ela ou ter o privilégio Acessar todos os casos.

Criar uma retenção de e-mails em contas de usuários específicas com uma consulta de pesquisa

O exemplo a seguir mostra como criar uma retenção chamada "My First mail Accounts Hold" para:

  • Serviço: e-mail
  • Entidade: contas de usuário "user1" e "user2"
  • Outras opções: consulta de pesquisa "to:ceo@company.com"

Extraia os IDs das contas de usuário do AdminSdk. A HeldAccount pode usar o ID da conta ou o e-mail. Se ambos forem fornecidos, o e-mail será usado e o ID da conta será ignorado.

Java

HeldMailQuery mailQuery = new HeldMailQuery().setTerms("to:ceo@company.com");
List accounts = 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();
  

Python

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()

Criar uma retenção para o Drive em uma UO e incluir o conteúdo do drive compartilhado

O exemplo a seguir mostra como criar uma retenção chamada "My First Drive OU Hold" para:

  • Serviço: Drive
  • Entidade: unidade organizacional "Finance" (o ID da unidade é capturado em orgUnitId)
  • Opções adicionais: incluir drives compartilhados em que os usuários desta unidade organizacional são participantes

Extraia os IDs de OU do AdminSdk.

Java

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;

Python

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()

Criar uma guarda de documentos para Grupos em contas de grupo específicas com um período

O exemplo a seguir mostra como criar uma retenção chamada "My First Group Hold" para:

  • Serviço: Grupos
  • Entidade: contas de grupo "group1" e "group2"
  • Outras opções: reter apenas mensagens com datas de envio entre "startTime" e "endTime"

Extraia os IDs das contas de grupo do AdminSdk.

Java

String APRIL_2_2017_GMT = "2017-04-02T00:00:00Z"; // See below for format*.
 
List accounts = 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();
 

Python

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()
 
  • Formato do carimbo de data/hora. Além disso, as datas de início/término são convertidas para GMT e arredondadas para baixo até o início da data especificada.

Consultar e modificar retenções

O exemplo a seguir mostra como listar todas as contas incluídas em uma retenção:

Java

client.matters().holds().accounts().list(matterId, holdId).execute().getAccounts();

Python

# 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'] 

O exemplo a seguir mostra como adicionar e remover uma conta de uma retenção:

Java

// 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();

Python

 
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()
 

O exemplo a seguir mostra como modificar a unidade de origem em uma retenção de unidade de origem:

Java

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;
 

Python

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() 

O exemplo a seguir mostra como listar todas as retenções de uma questão:

Java

 
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(); }

Python

# 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()