全域
- Adobe Acrobat Sign 整合
- 新增功能
- 產品版本與生命週期
- 適用於 Salesforce 的 Acrobat Sign
- 適用於 Microsoft 的 Acrobat Sign
- 適用於 Microsoft 365 的 Acrobat Sign
- 適用於 Outlook 的 Acrobat Sign
- 適用於 Word/PowerPoint 的 Acrobat Sign
- 適用於 Teams 的 Acrobat Sign
- 適用於 Microsoft PowerApps 和 Power Automate 的 Acrobat Sign
- 適用於 Microsoft Search 的 Acrobat Sign 連接器
- 適用於 Microsoft Dynamics 的 Acrobat Sign
- 適用於 Microsoft SharePoint 的 Acrobat Sign
- 適用於 Microsoft 365 的 Acrobat Sign
- 適用於 ServiceNow 的 Acrobat Sign
- 適用於 HR ServiceNow 的 Acrobat Sign
- 適用於 SAP SuccessFactors 的 Acrobat Sign
- 適用於 Workday 的 Acrobat Sign
- 適用於 NetSuite 的 Acrobat Sign
- 適用於 SugarCRM 的 Acrobat Sign
- 適用於 VeevaVault 的 Acrobat Sign
- 適用於 Coupa BSM Suite 的 Acrobat Sign
- 適用於 Zapier 的 Acrobat Sign
- Acrobat Sign 開發人員文件
概述
適用於 Salesforce 的 Adobe Acrobat Sign:開發人員指南旨在協助 Salesforce 開發人員瞭解整合 Salesforce 套件與 Adobe Acrobat Sign 所需的物件和參數。
適用於 Salesforce 的 Adobe Acrobat Sign 物件在未來的版本中可能會變更。如果您建置的自訂解決方案相依於這些有所變更的物件,那麼您可能會需要更新您的自訂內容。
整合準則
- 如果您需要知道合約何時完全簽署,請在更新後或更新前 (視用途和需求而定),於 echosign_dev1__SIGN_Agreement__c 物件上實作 Apex 觸發。當「echosign_dev1__Status__c」欄位變更為「已簽署」或「已核准」又或是其他的最終狀態時,即表示合約已完成。
- 如果您需要知道每個已簽署的 PDF 檔何時插入,例如若您需要取得每個中繼的已簽署 PDF,那麼請在插入後,於 Attachment 或 ContentVersion 物件上實作 Apex 觸發,並注意父合約以及結尾為「- signed.pdf」或「- approved.pdf」又或是其他最終狀態的名稱
- 如果您需要知道個別收件者何時已簽署或核准,請在更新後或更新前 (視用途和需求而定),於 echosign_dev1__SIGN_Recipients__c 物件上實作 Apex 觸發。當「echosign_dev1__Status__c」欄位變更為「已簽署」或「已核准」又或是其他的最終狀態時,收件者即完成。
- 如果您需要知道簽署程序中特定事件的發生時間,例如為簽署而傳送的合約或是傳送出來的提醒,那麼可在合約事件物件 (echosign_dev1__SIGN_AgreementEvent__c) 上建立觸發程序,並檢查事件類型
- 已完成的合約的最終合約狀態名稱為:「已簽署」、「已核准」、「已接受」、「已填寫表單」和「已傳送」
- 已終止的合約的最終合約狀態名稱為:「已取消/已拒絕」、「已取消/已拒絕」、「已過期」
更新順序
在 v21 中,更新的順序已變更。以下是合約及其相關物件的更新順序:
- 附件
- 收件者
- 合約 (狀態和它的其他屬性)
- 合約事件
- Chatter 意見反應
Apex 服務
使用中的 Apex 方法
從適用於 Salesforce 的 Acrobat Sign V 21.0 開始,所有非同步處理程序 (包括自動更新和資料對應) 都已從未來的方法切換至 Salesforce 建議採取的可排入佇列的方法。
有了這項變更,在自動更新或資料對應程序中,訂閱者組織在自動更新或資料對應的過程中,將工作新增至 Salesforce 佇列的任何自訂作業都會失敗,並顯示錯誤訊息「System.LimitException:將太多可排入佇列的工作新增至佇列:2」。
失敗是因為可排入佇列的程序只能新增一個可排入佇列的子工作,但此配額已由 Adobe Sign 所使用。如需詳細資訊,請參閱可排入佇列的 Apex 限制。
錯誤:「將工作鏈結時,您只能透過 System.enqueueJob 從執行中的工作新增一個工作,換句話說,每個可排入佇列的父工作只能有一個子工作。不支援從同一個可排入佇列的工作啟動多個子工作。」
當合約狀態未變更,或資料對應作業未正確執行時,上述錯誤便會發生。若要解決此錯誤,請尋找違規的觸發器、程序產生器或工作流程並加以停用,或將其切換為使用同步呼叫,或排程於稍後執行。
合約範本服務
合約範本服務會以管理套件的全域 Apex 服務之形式顯示。這可讓管理套件之外的 Apex 程式碼根據現有合約範本載入合約。類別和所有顯示方法都會標示為全域以允許此類存取。
Apex 服務會透過下列叫用類別顯示: echosign_dev1.AgreementTemplateService
目前不支援使用電子簽署資料庫範本來載入合約範本。建議您將文件範本移至 Salesforce 文件庫。
方法
|
static Id load() |
使用標示為預設且沒有主要物件類型的合約範本載入合約。 |
全域 |
static Id load(String templateId) |
使用沒有主要物件類型的指定合約範本 ID 載入合約。
|
全域 |
static Id load(String templateId, String masterId) |
使用指定合約範本 ID 和指定主要記錄 ID 載入合約,其類型必須符合指定合約範本中設定的主要物件類型。 |
全域 |
static Id load(String templateId, String masterId, Map<String,AgreementTemplateVariable> agreementTemplateVariables) |
使用指定合約範本 ID 和指定主要記錄 ID 載入合約,其類型必須符合指定合約範本中設定的主要物件類型。也會在指定的執行階段變數中以名稱值組合的形式傳送。
|
全域 |
static List<AgreementTemplateService.AgreementTemplateBasicInfo> getAgreementTemplateList(AgreementTemplateListOptions options) |
根據篩選選項取得合約範本清單。如果以該篩選選項找不到合約範本,則傳回空白清單。 |
全域 |
static AgreementTemplateService.AgreementTemplateDetails getAgreementTemplateDetails(String templateId) |
取得指定合約範本 ID 的合約範本詳細資料。 如果找不到合約範本,就傳回空白物件。 |
全域 |
static String getAgreementTemplateUrl(String templateId) |
取得 URL 以編輯所給定合約範本 ID 的合約範本。 |
全域 |
static String getNewAgreementTemplateUrl() |
取得 URL 以在 Adobe Sign 中建立新的合約範本。 |
建構函式 (1)
存取 |
簽名 |
---|---|
全域 |
AgreementTemplateListOptions() |
全域 |
AgreementTemplateListOptions(String masterObjectType, Boolean isActive, Boolean hasAttachment, Boolean hasRecipient, Boolean autoSend) |
global class AgreementTemplateService.AgreementTemplateListOptions
屬性 (5)
存取 |
名稱 |
---|---|
全域 |
masterObjectType |
全域 |
isActive |
全域 |
hasAttachment |
全域 |
hasRecipient |
全域 |
autoSend |
查詢合約範本時,如果上列欄位的值為空值,則其對應欄位不會套用篩選。
global class AgreementTemplateService.AgreementTemplateBasicInfo
屬性 (6)
存取 |
名稱 |
---|---|
全域 |
name |
全域 |
recordId |
全域 |
url |
全域 |
isDefault |
全域 |
daysUntilExpiration |
全域 |
language |
global class AgreementTemplateService.AgreementTemplateDetails
屬性 (6)
存取 |
名稱 |
---|---|
全域 |
message |
全域 |
ccList |
全域 |
dataMappingName |
全域 |
mergeMappingName |
全域 |
url |
全域 |
recipients |
global class AgreementTemplateService.RecipientInfo
屬性 (4)
存取 |
名稱 |
---|---|
全域 |
recipientRole |
全域 |
recipientType |
全域 |
recipientName |
全域 |
signOrder |
執行階段變數
echosign_dev1.AgreementTemplateVariable 全域類別有兩個全域欄位。
- 名稱: 變數名稱,這必須符合合約範本中設定的執行階段變數名稱。
- 值: 該變數的值,將於範本載入期間使用。此值取決於要使用變數之處。例如,若是收件者,這必須是連絡人、商機或使用者記錄 ID 或電子郵件。若是文件變數,這必須是附件記錄 ID。
結果
每種方法都會傳回新建立合約記錄的 ID 或擲出例外狀況,而如果在載入作業期間發生錯誤,將會顯示詳細錯誤訊息。
API 服務
Adobe 電子簽署 API 範本服務會顯示為管理套件的全域 Apex 服務。這可讓管理套件之外的 Apex 程式碼透過這些包裝函式,叫用一組 Adobe 電子簽署 API。包裝函式大幅簡化了 API 的叫用,因為消費者不需要建立要求及回應資料模型。此外,消費者也不需要負責將 Salesforce 資料轉換為電子簽署資料模型。消費者不需要處理大多數的複雜情況。例如,若要傳送合約,消費者只需傳入合約記錄 ID,服務就會負責查詢,擷取所有相關資料,將資料傳遞到 API,然後剖析結果。
類別和所有顯示方法都會標示為全域以允許此類存取。
- 第 17 版和較舊版本會叫用 SOAP API
- 第 18 版和更新版本會叫用 REST API
Apex 服務會透過下列叫用類別顯示: echosign_dev1.EchoSignApiService
方法
全域 |
static void cancelDocument(Id agreementId) |
取消具有指定合約 ID 的合約。 |
全域 |
static void delegateSigner(Id agreementId, String delegatedEmail) |
委派簽署給指定的電子郵件。 |
全域 |
static void delegateSigner(Id agreementId, String delegatedEmail, String message) |
委派簽署給具有指定訊息的指定電子郵件。 |
全域 |
static echosign_dev1.EchoSignApiService.DocumentInfo getDocumentInfo(Id agreementId) |
擷取指定合約 ID 的詳細資訊。 |
全域 |
static List<EchoSignApiService.SigningUrl> getSigningUrls(Id agreementId) |
擷取指定合約 ID 的所有簽署 URL。 |
全域 |
static void removeDocument(Id agreementId) |
取消具有指定合約 ID 的合約,並刪除 Salesforce 中的合約記錄 (不會從 Adobe 電子簽署帳戶中移除合約)。 |
全域 |
static void replaceSigner(Id replacementRecipientId) |
取代指定的簽署者。 |
全域 |
static void replaceSigner(Id replacementRecipientId, String message) |
以指定的訊息取代指定的簽署者。 |
全域 |
static echosign_dev1.EchoSignApiService. SendDocumentResult sendDocument(Id agreementId) |
傳送具有指定合約 ID 的合約,傳回具有文件金鑰和 URL 的結果。 |
全域 |
static void sendReminder(Id agreementId) |
傳送提醒給指定合約 ID 的目前簽署者。 |
全域 | static void updateAgreement(Id agreementId) | 更新具有指定 agreementId 的合約 |
全域 | static EchoSignApiService.AgreementViewUrl getViewAgreementUrl(Id agreementId) |
從具有 viewURL 屬性的指定合約 ID 的簽署中擷取檢視/管理頁面。 注意:基於安全理由,所產生的合約 URL 僅具有暫時的使用期限,因此會產生 REST-HTTPS 呼叫,以從 Adobe Sign 服務取得新的 URL。 |
內部類別
global class DocumentHistoryEvent
屬性 (2)
存取 |
名稱 |
---|---|
全域 |
String eventType |
全域 |
String participantEmail |
建構函式 (1)
存取 |
簽名 |
---|---|
全域 |
DocumentHistoryEvent() |
global class DocumentInfo
屬性 (5)
存取 |
名稱 |
---|---|
全域 |
Map<string,list> historyByEmail |
全域 |
Map participantsByEmail |
全域 |
Map participantsByName |
全域 |
String senderEmail |
全域 |
字串狀態 |
建構函式 (1)
存取 |
簽名 |
---|---|
全域 |
DocumentInfo() |
global class ParticipantInfo
屬性 (5)
存取 |
名稱 |
---|---|
全域 |
字串公司 |
全域 |
字串電子郵件 |
全域 |
字串名稱 |
全域 |
字串狀態 |
全域 |
字串標題 |
建構函式 (1)
存取 |
簽名 |
---|---|
全域 |
ParticipantInfo() |
global class SendDocumentResult
屬性 (3)
存取 |
名稱 |
---|---|
全域 |
String documentKey |
全域 |
例外狀況錯誤 |
全域 |
String url |
建構函式 (1)
存取 |
簽名 |
---|---|
全域 |
SendDocumentResult() |
global class SigningUrl
屬性 (3)
存取 |
名稱 |
---|---|
全域 |
字串電子郵件 |
全域 |
String esignUrl |
全域 |
String simpleEsignUrl |
建構函式 (1)
存取 |
簽名 |
---|---|
全球 |
|
Apex 批次服務
顯示大多數的主要電子簽署合約動作,可在一組合約上執行作業。此類別會導入 Salesforce Database.Batchable 介面。可處理任何數量的記錄,這將劃分為 5 組,並以個別交易的形式處理每一組,讓管理員能夠自行設定限制。
Apex 批次服務會透過下列叫用類別顯示: echosign_dev1.EchoSignActionBatch
參數
您必須指定下列參數才能初始化批次作業。
合約記錄 ID 清單,可在該清單上執行指定的動作。要執行的動作,支援下列其中一個值:
- 提醒
- 傳送
- 取消
- 刪除
- 更新
目前使用者工作階段 ID。只有更新動作類型才需要。
提交者使用者記錄,用於在完成大量處理後,透過電子郵件通知此使用者。
使用範例
User submitterUser = UserInfo.getUserId();
EchoSignActionBatch batch = new EchoSignActionBatch( agreementIds, 'Remind', UserInfo.getSessionId(), submitterUser); syncProcessId = Database.executeBatch(batch, 5);
合約範本批次
包含 SOQL 查詢和合約範本記錄 ID。執行查詢可取得一組主要物件記錄,每一組都會透過指定的合約範本執行,以產生合約記錄。此類別會導入 Salesforce Database.Batchable 介面。可處理任何數量的記錄,這將劃分為 5 組,並以個別交易的形式處理每一組,讓管理員能夠自行設定限制。
SOQL 查詢傳回的記錄類型必須符合指定的合約範本主要物件類型。針對每一筆記錄,都會叫用合約範本服務。
Apex 批次服務會透過下列叫用類別顯示:
echosign_dev1.AgreementTemplateBatch
參數
您必須指定下列參數才能初始化批次作業。
要執行的 SOQL 查詢,必須包含可作為選取欄位的記錄 ID。任何其他欄位皆為選用。
合約範本記錄 ID,可搭配主要記錄 ID 用來載入合約。
使用範例
String agreementTemplateId = [SELECT Id from echosign_dev1__Agreement_Template__c where Name = 'Default Template']; String soqlQuery = 'SELECT Id from Contact where Account.IsActive = true';
AgreementTemplateBatch batch = new AgreementTemplateBatch(soqlQuery, agreementTemplateId); syncProcessId = Database.executeBatch(batch, 5);
合約範本服務批次
包含主要物件記錄 ID 和主要物件類型清單,接著會查詢該清單,而每個項目都會透過指定的合約範本執行,以產生合約記錄。此類別會導入 Salesforce Database.Batchable 介面。可處理任何數量的記錄,這將劃分為 5 組,並以個別交易的形式處理每一組,讓管理員能夠自行設定限制。
指定的主要物件類型必須符合指定的合約範本主要物件類型。針對每一筆記錄,都會叫用合約範本服務。
Apex 批次服務會透過下列叫用類別顯示:
echosign_dev1.AgreementTemplateServiceBatch
參數
您必須指定下列參數才能初始化批次作業。
- 主要記錄 ID 的清單。
- 合約範本記錄 ID,可搭配主要記錄用來載入合約。
- 主要物件名稱,可查詢主要記錄。
使用範例
String agreementTemplateId = [SELECT Id from echosign_dev1__Agreement_Template__c where Name = 'Default Template'];
AgreementTemplateBatch batch = new AgreementTemplateServiceBatch(new List<Id>{'01p50000000HoMB'}, agreementTemplateId, 'Contact');
syncProcessId = Database.executeBatch(batch, 5);
REST 服務
合約範本服務
合約範本服務會以管理套件的 Salesforce REST Web 服務之形式顯示。這可讓 Salesforce 組織之外的外部系統根據現有合約範本載入合約。請參閱使用 Apex REST 建立 REST API 一文,瞭解有關如何從 Salesforce 中存取和叫用自訂 REST Apex 服務的詳細資訊。叫用必須提供有效的工作階段 ID,以供驗證和授權使用。
Web 服務會從下列 URL 公開:
https://<instance_name>.salesforce.com/services/apexrest/echosign_dev1/template/load/<template_id>?masterId=<master_id>&varName1=var Value1&varName2=varValue2
- 例項名稱將依貴組織的例項而異。
- https://_<instance_name>_.salesforce.com/services/apexrest/echosign_dev1/template/load/<template_id> 是適用於 20.0 以上套件版本的 POST HTTP 方法。
- v20 之前的版本使用 GET 方法。
範本 ID
URL 的最後一部分是目前 Salesforce 組織中合約範本記錄的 ID,這應用來載入合約。URL 的此一部分為選用。如果省略,將會載入標示為預設的合約範本。如果省略範本 ID 且不存在預設合約範本 ID,則會傳回錯誤。
範本 ID 可為 15 或 18 個字元的格式。
主要 ID
masterId 參數會指定應使用哪個主要記錄從指定合約範本載入合約。此參數為選用,但針對指定主要物件類型且在範本中參照該主要物件的任何合約範本,則必須指定此參數。
主要 ID 可為 15 或 18 個字元的格式。
執行階段變數
任何其他參數皆可用來當作執行階段變數、當作名稱值組合,以及用來填入合約範本中指定的任何執行階段變數。
結果
REST Web 服務傳回包含下列欄位的 LoadResult 物件:
- agreementId: 如果合約載入作業成功,這會包含新建立的合約記錄的 ID。
- error: 如果載入合約期間發生任何錯誤,此欄位將包含詳細錯誤訊息。
背景服務
背景服務功能可讓套件消費者將「背景動作」(echosign_dev1 Background_Actions c) 欄位更新為對應的值,以在合約物件上叫用各種動作。一旦欄位值從空白值或其他值變更為下列其中一個值,便會從屬於電子簽署管理套件一部分的觸發器開始執行動作。
- 提醒
- 傳送
- 取消
- 刪除
- 更新
所有動作都是以非同步的未來模式執行,因此狀態將會儲存在合約的「錯誤」欄位中。
回溯相容性變更
- 合約狀態現已在文件和收件者更新之後更新
- 在 v21 以前,狀態如同以前的設定。
- 「簽署合約」物件 (此物件會儲存影像 URL) 現在完全不會插入
- 在 v21 以前,該物件會在其他所有更新完成之後插入
- 對於非同步 Apex,標註請求或回應的最大大小限制為 12MB,如同各個 Salesforce 管理員的限制:https://developer.salesforce.com/docs/atlas.en-us.210.0.apexcode.meta/apexcode/apex_gov_limits.htm
- 由於上述限制,所以大於 12MB 的文件無法從 Sign 取回。
- 合約事件說明已變更。現在符合 Sign API 所傳回的說明,並且具有稽核報告。
- 更新程序現在會以 Salesforce 內原生 Apex 批次程序 (它是非同步的程序) 的形式執行
- 在使用 Salesforce 外部的 API 呼叫進行更新之前
- 因為 Salesforce 限制了從已在執行中的非同步程序呼叫其他非同步程序,所以觸發這些狀態更新 (會開始執行非同步程序) 不再適用
- 在 v21 以前,合約屬性更新會分割成個別的更新呼叫,而現在合約物件是完全在一個交易中進行更新。
- 在 v21 以前,失敗的合約只能藉由從 Salesforce 內執行手動更新來重試
- 現在更新更加可靠,因為 Sign 後端會自動對失敗事件重試指定的次數。
- 手動更新現在會更新合約的所有層面,包括相關物件。
- 推送合約現在是在非同步模式中執行,與一般更新相同並且會更新其他屬性,與一般更新相同。
- 導入了新的設定,以便啟用/停用合約不同層面的更新。
- 在 Salesforce 中儲存已簽署的 PDF 時,PDF 檔案名稱結尾不會再加上描述項 (-signed 或 -approved)。