2014-10-31 78 views
0

我正在嘗試通過組合服務器上的模板和本地PDF文檔來測試DocuSign。使用DocuSign TemplateReference包裝InlineTemplate需要將有效負載翻倍?

以下代碼有效,但是,我擔心發送的數據量是InlineTemplate的兩倍。

public virtual TemplateReference CreateInlineTemplate(Recipient[] recipients, AdHocTemplate adHocTemplate, int sequenceId) 
{ 
    var templateReference = new TemplateReference(); 
    templateReference.TemplateLocation = TemplateLocationCode.SOAP; 

    var inlineTemplate = new InlineTemplate 
    { 
     Sequence = sequenceId.ToString(CultureInfo.InvariantCulture), 
     Envelope = new Envelope 
     { 
      Recipients = recipients, AccountId = _apiAccountId 
     } 
    }; 

    var document = new Document 
    { 
     ID = sequenceId.ToString(CultureInfo.InvariantCulture), 
     Name = string.IsNullOrWhiteSpace(adHocTemplate.Name) 
       ? "Contract " + sequenceId 
       : adHocTemplate.Name, 
     PDFBytes = adHocTemplate.Bytes, 
     FileExtension = ".pdf", 
    }; 

    // added once 
    inlineTemplate.Envelope.Documents = new[] { document }; 

    // added twice. Effectively doubled the size of the message. 
    templateReference.Document = document; 
    templateReference.Template = SerializeTemplate(inlineTemplate); 
    templateReference.RoleAssignments = CreateRoleAssignments(recipients).ToArray(); 

    return templateReference; 
} 

正如你可以看到我創建一個Document與本地文件,然後將其提供給InlineTemplateTemplateReference。這似乎是讓這個成功發送的唯一方法。

如果我不提供文件的內聯模板,我得到的錯誤:

"Unable to load template. Unable to load template from TemplateReference(1). Error: Object reference not set to an instance of an object"

不將其提供給TemplateReference,我得到一個錯誤,告訴我,緩衝區不能爲空。

試圖只設置空白文檔失敗,因爲它說文檔不完整。

有沒有辦法讓這個工作沒有發送兩個字節的消息?

我看着做CompositeTemplate並使用CreateEnvelopeFromTemplatesAndForms()送它,但是,我需要在服務器上的模板預先填寫的數據,並使用ServerTemplate不提供一種方法來在自定義字段數據添加。

+0

請問您能分享一個代碼示例嗎?我試圖完成你所做的事情,發現它完全混亂。 – 2016-06-02 04:43:25

回答

2

我認爲這可以通過createEnvelopeFromTemplatesAndForms()。請參閱SOAP API指南的第76頁,並仔細閱讀「複合模板使用規則」一節。這一切的工作方式困擾了我很長一段時間。但基本上模板都是添加劑,因此您可以包括標籤任何InlineTemplate其中TabLabel領域的標籤匹配您的服務器模板來設置你的服務器模板字段值。有一個在文檔提供了80頁的一個很好的例子(上搜索「從聯模板」)

在我的例子我的服務器模板有一個數據字段與TabLabel「MyField的」的所以這片被裝進InlineTemplate設置值。

Date Field on server template

<ns:Tab> 
    <ns:RecipientID>1</ns:RecipientID> 
    <ns:TabLabel>MyField</ns:TabLabel> 
    <ns:Value>Value from Inline Template</ns:Value> 
    <ns:Type>Custom</ns:Type> 
</ns:Tab> 

我重視我結束了在嘗試解決你的問題的請求。其餘的問題是它看起來像一個CompositeTemplate只能拿一組文檔。所以你需要分成兩個CompositeTemplates。但我絕對能夠填充我的「MyField」服務器模板字段。

<soapenv:Envelope xmlns:soapenv="http://schemas.xmlsoap.org/soap/envelope/" xmlns:ns="http://www.docusign.net/API/3.0"> 
    <soapenv:Header/> 
    <soapenv:Body> 
     <ns:CreateEnvelopeFromTemplatesAndForms> 
     <ns:EnvelopeInformation> 
      <ns:AccountId>ACCOUNT ID</ns:AccountId>    
     </ns:EnvelopeInformation> 
     <ns:CompositeTemplates> 
      <ns:CompositeTemplate> 
       <ns:ServerTemplates> 
        <ns:ServerTemplate> 
        <ns:Sequence>1</ns:Sequence> 
        <ns:TemplateID>TEMPLATE ID</ns:TemplateID> 
        </ns:ServerTemplate> 
       </ns:ServerTemplates> 
       <ns:InlineTemplates> 
        <ns:InlineTemplate> 
        <ns:Sequence>2</ns:Sequence> 
        <ns:Envelope> 
         <ns:Asynchronous>false</ns:Asynchronous> 
         <ns:AccountId>ACCOUNT ID</ns:AccountId> 
         <ns:Recipients> 
          <ns:Recipient> 
           <ns:ID>1</ns:ID> 
           <ns:UserName>John Q Signer</ns:UserName> 
           <ns:Email>EMAIL HERE</ns:Email> 
           <ns:Type>Signer</ns:Type> 
           <ns:RoleName>Signer1</ns:RoleName> 
           <ns:RoutingOrder>1</ns:RoutingOrder> 
          </ns:Recipient> 
         </ns:Recipients> 

         <ns:Documents>  
          <ns:Document> 
           <ns:ID>1</ns:ID> 
           <ns:Name>Inline Document</ns:Name> 
           <ns:PDFBytes>PDF BYTES HERE</ns:PDFBytes> 
           <ns:TransformPdfFields>false</ns:TransformPdfFields> 
          </ns:Document> 
         </ns:Documents> 

         <ns:Tabs> 
          <ns:Tab> 
          <ns:RecipientID>1</ns:RecipientID> 
          <ns:TabLabel>MyField</ns:TabLabel> 
          <ns:Value>Updated by Inline Template</ns:Value> 
          <ns:Type>Custom</ns:Type> 
         </ns:Tab> 

          <ns:Tab> 
           <ns:RecipientID>1</ns:RecipientID> 
           <ns:AnchorTabItem> 
           <ns:AnchorTabString>{{s1_sign}}</ns:AnchorTabString> 
           <ns:XOffset>0</ns:XOffset> 
           <ns:YOffset>0</ns:YOffset> 
           <ns:IgnoreIfNotPresent>true</ns:IgnoreIfNotPresent> 
           </ns:AnchorTabItem>        
           <ns:Type>SignHere</ns:Type> 
          </ns:Tab> 
          <ns:Tab> 
           <ns:RecipientID>1</ns:RecipientID> 
           <ns:AnchorTabItem> 
           <ns:AnchorTabString>{{s1_initial}}</ns:AnchorTabString> 
           <ns:XOffset>0</ns:XOffset> 
           <ns:YOffset>0</ns:YOffset> 
           <ns:IgnoreIfNotPresent>true</ns:IgnoreIfNotPresent> 
           </ns:AnchorTabItem>        
           <ns:Type>InitialHere</ns:Type> 
          </ns:Tab> 
         </ns:Tabs> 

         <ns:Subject>Composite Test</ns:Subject> 
         <ns:EmailBlurb>Composite Test</ns:EmailBlurb> 
         <ns:SigningLocation>Online</ns:SigningLocation> 
          <ns:AutoNavigation>false</ns:AutoNavigation> 
          <ns:EnvelopeIdStamping>false</ns:EnvelopeIdStamping> 
          <ns:AuthoritativeCopy>false</ns:AuthoritativeCopy> 
         <ns:Notification> 
          <ns:UseAccountDefaults>false</ns:UseAccountDefaults> 
          <ns:Reminders> 
           <ns:ReminderEnabled>false</ns:ReminderEnabled> 
           <ns:ReminderDelay>1</ns:ReminderDelay> 
           <ns:ReminderFrequency>1</ns:ReminderFrequency> 
          </ns:Reminders> 
          <ns:Expirations> 
           <ns:ExpireEnabled>true</ns:ExpireEnabled> 
           <ns:ExpireAfter>2</ns:ExpireAfter> 
           <ns:ExpireWarn>1</ns:ExpireWarn> 
          </ns:Expirations> 
         </ns:Notification>       
         <ns:EnforceSignerVisibility>true</ns:EnforceSignerVisibility> 
         <ns:EnableWetSign>false</ns:EnableWetSign> 
         <ns:AllowMarkup>false</ns:AllowMarkup> 
         <ns:AllowReassign>false</ns:AllowReassign> 
         <ns:BrandId>BRAND ID</ns:BrandId> 
         <ns:BrandLock>true</ns:BrandLock> 
         <ns:MessageLock>true</ns:MessageLock> 
         <ns:RecipientsLock>true</ns:RecipientsLock> 
        </ns:Envelope> 
        </ns:InlineTemplate> 
       </ns:InlineTemplates>    
      </ns:CompositeTemplate> 
     </ns:CompositeTemplates> 
     <ns:ActivateEnvelope>true</ns:ActivateEnvelope> 
     </ns:CreateEnvelopeFromTemplatesAndForms> 
    </soapenv:Body> 
</soapenv:Envelope> 
+0

因此,服務器模板將讀取內聯模板中的選項卡以填充其自己的字段?我將不得不在週一進行測試,因爲我們剛剛發現我們不得不爲另一個目的調用'createEnvelopeFromTemplatesAndForms'。 – TyCobb 2014-11-23 05:16:11

+0

是的。這個想法是你不需要在每個模板中使用完整的信封,它們可以像定義收件人一樣部分。它採用每個模板中的元素,並使用優先順序將其組合成一個巨大的信封。有三個不同的地方來定義一些事情可能會讓人困惑,試圖找出他們應該去的地方。 – reinkesm 2014-11-23 13:45:43

+0

這麼棒的信息。明天會試試這個,讓你知道。 – TyCobb 2014-11-23 17:53:59