訴訟保留會無限期保存資料,以符合法律或保存義務。系統通常會讓一或多位使用者處於訴訟保留狀態,以確保與該案件相關的資料在已失效之前遭到刪除。
如果受到訴訟保留的使用者刪除訴訟保留資料,系統會將這類資料從使用者的檢視畫面中移除,但會保留在保管箱中。只要訴訟保留成立,保管箱管理員就可以搜尋及匯出這些資料。
訴訟保留含有下列元件:
- 服務:負責保存資料的應用程式。您可以將這項服務設為郵件、雲端硬碟或網路論壇服務。
- 範圍:訴訟保留所涵蓋的實體。範圍可設為一或多個使用者帳戶,或是機構單位 (OU)。
- 其他選項 (選用):用來指定哪些資料 (搜尋查詢或設定選項) 可縮小要在指定範圍內存放的資料。選項包括:
- 郵件、網路論壇: 縮小搜尋範圍
- 雲端硬碟:將共用雲端硬碟設為訴訟保留狀態
如要使用保管箱資源,該帳戶必須具備必要的保管箱權限,並可存取案件。若要存取案件,帳戶必須建立案件、共用案件或具備「查看所有案件」權限。
透過搜尋查詢將特定使用者帳戶的郵件設為訴訟保留狀態
以下範例說明如何建立名為「我的第一封郵件帳戶保留」的訴訟保留:
- 服務:mail
- 實體:使用者帳戶「user1」和「user2」
- 其他選項:搜尋查詢「to:ceo@company.com」
從 AdminSdk 擷取使用者帳戶 ID。請注意,HeldAccount 可以接受帳戶 ID 或電子郵件。如果同時提供兩者,系統會使用電子郵件並忽略帳戶 ID。
Java
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();
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()
針對特定機構單位建立雲端硬碟訴訟保留項目,並包含共用雲端硬碟內容
以下範例說明如何建立名為「我的第一個雲端硬碟機構單位訴訟保留」的訴訟保留:
- 服務:雲端硬碟
- 實體:機構單位「Finance」(機構單位 ID 擷取於 orgUnitId)
- 其他選項:包括這個機構單位中的使用者所屬的共用雲端硬碟
從 AdminSdk 擷取機構單位 ID。
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()
為特定日期範圍內的特定群組帳戶為群組建立訴訟保留
以下範例說明如何為名稱為「My First Group Hold」的群組建立訴訟保留:
- 服務:群組
- 實體:群組帳戶「group1」和「group2」
- 其他選項:僅保留傳送日期介於「startTime」和「endTime」之間的郵件
從 AdminSdk 擷取群組帳戶 ID。
Java
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();
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()
- 時間戳記格式。此外,start/endTimes 會轉換為 GMT,並四捨五入至指定日期。
查詢及修改現有的訴訟保留
以下範例說明如何列出現有訴訟保留中包含的所有帳戶:
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']
以下範例說明如何在現有的訴訟保留中新增及移除帳戶:
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()
以下範例說明如何修改現有機構單位的機構單位:
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()
以下範例說明如何列出案件的所有訴訟保留:
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()