Anchor选项卡未应用于使用.NET SOAP API通过DocuSign发送的文档

时间:2014-01-21 05:54:02

标签: asp.net vb.net soap docusignapi

我一直试图让Anchor Tabs通过.NET使用DocuSign SOAP API。我已成功使用类似的方法获得正常的标签(当然减去AnchorTabItem代码)。

如果在指定了锚点选项卡的情况下发送文档,则选项卡不会显示在任何收件人的文档上。相反,每个收件人都可以将自己的签名选项卡放在文档上,如下所示:

docusign anchor tabs

当我尝试使用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)将每个标签添加到我的列表中...愚蠢的错误!

1 个答案:

答案 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请求中。