我一直试图让Anchor Tabs通过.NET使用DocuSign SOAP API。我已成功使用类似的方法获得正常的标签(当然减去AnchorTabItem代码)。
如果在指定了锚点选项卡的情况下发送文档,则选项卡不会显示在任何收件人的文档上。相反,每个收件人都可以将自己的签名选项卡放在文档上,如下所示:
当我尝试使用Web界面在模板上创建锚标签时,它可以很好地工作,并在我Row("anchorString")
变量中指定的文档中找到文本。下面是我用来添加选项卡并将它们分配给文档ID和收件人ID的代码。 Data.Tab.GetTabsByDocName
用于获取标签位置和收件人角色。
Dim DT As DataTable = Data.Tab.GetTabsByDocName(DocName)
Dim Tabs As New List(Of DemoDocuSign.Tab)
For Each Row As DataRow In DT.Rows
Dim Tab As New DemoDocuSign.Tab With {.AnchorTabItem = New DemoDocuSign.AnchorTab()}
With Tab
.Type = [Enum].Parse(GetType(DemoDocuSign.TabTypeCode), Row("type"))
.TabLabel = Row("role")
.PageNumber = Row("pageNum")
.AnchorTabItem.AnchorTabString = Row("anchorString")
.AnchorTabItem.IgnoreIfNotPresent = False
.AnchorTabItem.IgnoreIfNotPresentSpecified = True
.AnchorTabItem.Unit = DemoDocuSign.UnitTypeCode.Cms
.AnchorTabItem.UnitSpecified = True
.AnchorTabItem.YOffset = Row("yOffset")
.AnchorTabItem.XOffset = Row("xOffset")
End With
Next
If Recipients IsNot Nothing Then
For Each Recipient In Recipients
For Each Tab In Tabs
If Recipient.Role = Tab.TabLabel Then
Tab.RecipientID = Recipient.RecID
End If
Tab.DocumentID = Document.DocID
Next
Next
Dim FinalTabs As New List(Of DemoDocuSign.Tab)
For Each Tab In Tabs
If Tab.RecipientID <> "" Then
FinalTabs.Add(Tab)
End If
Next
Tabs = FinalTabs
End If
Return Tabs
我不知道为什么会发生这种情况,而且我没有从SOAP端点收到任何错误,这些标签只是没有为收件人显示。
以下是请求的XML(***中省略了敏感信息)。似乎根本没有附加标签,即使我使用的方法与我通常做的相同!:
<s:Envelope xmlns:s="http://schemas.xmlsoap.org/soap/envelope/" xmlns:u="http://docs.oasis-open.org/wss/2004/01/oasis-200401-wss-wssecurity-utility-1.0.xsd">
<s:Header>
<o:Security s:mustUnderstand="1" xmlns:o="http://docs.oasis-open.org/wss/2004/01/oasis-200401-wss-wssecurity-secext-1.0.xsd">
<u:Timestamp u:Id="_0">
<u:Created>2014-01-21T22:31:01.565Z</u:Created>
<u:Expires>2014-01-21T22:36:01.565Z</u:Expires>
</u:Timestamp>
<o:UsernameToken u:Id="uuid-cfaefba6-85c2-43e5-a3b8-cc6daa8cbf44-1">
<o:Username>***</o:Username>
<o:Password Type="http://docs.oasis-open.org/wss/2004/01/oasis-200401-wss-username-token-profile-1.0#PasswordText">***</o:Password>
</o:UsernameToken>
</o:Security>
</s:Header>
<s:Body xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance" xmlns:xsd="http://www.w3.org/2001/XMLSchema">
<CreateAndSendEnvelope xmlns="http://www.docusign.net/API/3.0">
<Envelope>
<AccountId>***</AccountId>
<Documents>
<Document>
<ID>998</ID>
<Name>***.pdf</Name>
</Document>
</Documents>
<Recipients>
<Recipient>
<ID>1998</ID>
<UserName>Martin</UserName>
<Email>*@gmail.com</Email>
<Type>Signer</Type>
<AccessCode xsi:nil="true"/>
</Recipient>
<Recipient>
<ID>1999</ID>
<UserName>Test</UserName>
<Email>a@b.com</Email>
<Type>Signer</Type>
<AccessCode xsi:nil="true"/>
</Recipient>
</Recipients>
<Tabs/>
<Subject>***</Subject>
<EmailBlurb>Please sign the attached document for ****.</EmailBlurb>
<Notification>
<Reminders>
<ReminderEnabled>true</ReminderEnabled>
<ReminderDelay>2</ReminderDelay>
<ReminderFrequency>2</ReminderFrequency>
</Reminders>
</Notification>
</Envelope>
</CreateAndSendEnvelope>
</s:Body>
</s:Envelope>
编辑:那是因为我不是没有Tabs.Add(Tab)将每个标签添加到我的列表中...愚蠢的错误!
答案 0 :(得分:1)
感谢您发布XML请求正文。因此,当您的XML请求正文没有为收件人指定选项卡时,DocuSign的行为与预期完全一致 - 即,它为收件人提供“自由格式”签名体验,因此他们可以简单地拖放标签他们选择了。
在您的XML请求中,我没有看到收件人的角色属性 - 这可能是您的问题的根源。即,在您的代码中,看起来是否将标签添加到 FinalTabs 集合取决于 Tab.RecipientID 是否已填充...这取决于收件人.Role被填充(并匹配Tab.TabLabel)。
...
If Recipient.Role = Tab.TabLabel Then
Tab.RecipientID = Recipient.RecID
End If
...
For Each Tab In Tabs
If Tab.RecipientID <> "" Then
FinalTabs.Add(Tab)
End If
Next
...
因此,我建议您首先验证是否正确为每个收件人填充了 Recipient.Role 。如果这不能解决您的问题,我建议您在调试模式中逐步执行代码(沿途检查属性/集合值)以确定它与您的数据有关(特别是 DT的内容)。行和收件人)导致没有标签添加到XML请求中。