CreateEnvelopeFromTemplates - Guid应该包含32位数字和4个破折号

时间:2014-08-06 09:43:30

标签: asp.net vb.net docusignapi

我正在尝试使用CreateEnvelopeFromTemplates方法从模板文档创建DocuSign信封,该方法可在其v3 SOAP API Web服务中使用。这是从asp.NET v4.0网站实例化的。

在调用带有传递所需参数对象的方法时。我收到Web服务的异常,基本上告诉我模板ID不是有效的GUID。

669393: Guid should contain 32 digits with 4 dashes (xxxxxxxx-xxxx-xxxx-xxxx-xxxxxxxxxxxx).

Line 14889:        
Line 14890:        public DocuSignDSAPI.EnvelopeStatus CreateEnvelopeFromTemplates(DocuSignDSAPI.TemplateReference[] TemplateReferences, DocuSignDSAPI.Recipient[] Recipients, DocuSignDSAPI.EnvelopeInformation EnvelopeInformation, bool ActivateEnvelope) {
Line 14891:            return base.Channel.CreateEnvelopeFromTemplates(TemplateReferences, Recipients, EnvelopeInformation, ActivateEnvelope);
Line 14892:        }
Line 14893:

模板参考,一个guid。必须指定为"模板"针对TemplateReference对象的字符串属性。然后将其添加到TemplateReferences的动态数组中,该数组是CreateEnvelopeFromTemplates方法的输入参数之一。

  

实际模板GUID:f37b4d64-54e3-4723-a6f1-a4120f0e9695

我正在使用我编写的以下函数构建我的模板引用对象,以尝试使功能可重用:

Private Function GetTemplateReference(ByVal TemplateID As String) As TemplateReference

    Dim templateReference As New TemplateReference
    Dim guidTemplateID As Guid

    With TemplateReference

        .TemplateLocation = TemplateLocationCode.Server

        If Guid.TryParse(TemplateID, guidTemplateID) Then
            .Template = guidTemplateID.ToString
        End If

    End With

    Return TemplateReference

End Function

在TemplateReferences数组实例化时,TemplateID正在从appSetting配置值传入,如此...

templateReferences = New TemplateReference() {GetTemplateReference(ConfigurationManager.AppSettings("DocuSignTemplate_Reference"))}
            recipients = New Recipient() {AddRecipient("myself@work.email", "My Name")}

            envelopeInformation = CreateEnvelopeInformation()
            envelopeStatus = client.CreateEnvelopeFromTemplates(templateReferences, recipients, envelopeInformation, True)

正如你从我的GetTemplateReference函数中看到的那样,我在解析GUID之前将其设置为字符串,所以我知道它有效。模板在DocuSign端进行管理和存储,从而指定文档位置。

我指的是他们自己的文件: CreateEnvelopeFromTemplates

为什么哦为什么这个方法不喜欢我的模板ID?我可以使用他们自己的代码示例成功使用他们的REST API来调用相同的方法。最糟糕的情况我可以利用这个,但宁愿与Web服务交互,因为我需要用XML或JSON构建所有相关请求。

如果有人能够对这个问题有所了解,我真的很感激。

感谢您抽出宝贵时间阅读我的问题!

2 个答案:

答案 0 :(得分:1)

安德鲁可能会提到AccountId - 您是否在信封信息对象中设置了AccountId?另外,你有没有在Github上看到DocuSign SOAP SDK?这有5个示例SOAP项目,包括一个MS.NET项目。 .NET项目在C#而不是Visual Basic中,但我认为它对您有所帮助。在这里查看SOAP SDK:

https://github.com/docusign/DocuSign-eSignature-SDK

例如,这是CreateEnvelopeFromTemplates()函数的测试函数:

    public void CreateEnvelopeFromTemplatesTest()
    {
        // Construct all the recipient information
        DocuSignWeb.Recipient[] recipients = HeartbeatTests.CreateOneSigner();
        DocuSignWeb.TemplateReferenceRoleAssignment[] finalRoleAssignments = new DocuSignWeb.TemplateReferenceRoleAssignment[1];
        finalRoleAssignments[0] = new DocuSignWeb.TemplateReferenceRoleAssignment();
        finalRoleAssignments[0].RoleName = recipients[0].RoleName;
        finalRoleAssignments[0].RecipientID = recipients[0].ID;

        // Use a server-side template -- you could make more than one of these
        DocuSignWeb.TemplateReference templateReference = new DocuSignWeb.TemplateReference();
        templateReference.TemplateLocation = DocuSignWeb.TemplateLocationCode.Server;
        // TODO: replace with template ID from your account
        templateReference.Template = "server template ID";
        templateReference.RoleAssignments = finalRoleAssignments;

        // Construct the envelope information
        DocuSignWeb.EnvelopeInformation envelopeInfo = new DocuSignWeb.EnvelopeInformation();
        envelopeInfo.AccountId = _accountId;
        envelopeInfo.Subject = "create envelope from templates test";
        envelopeInfo.EmailBlurb = "testing docusign creation services";

        // Create draft with all the template information
        DocuSignWeb.EnvelopeStatus status = _apiClient.CreateEnvelopeFromTemplates(new DocuSignWeb.TemplateReference[] { templateReference },
            recipients, envelopeInfo, false);

        // Confirm that the envelope has been assigned an ID
        Assert.IsNotNullOrEmpty(status.EnvelopeID);
        Console.WriteLine("Status for envelope {0} is {1}", status.EnvelopeID, status.Status);
    }

这段代码调用了我没有包含的SDK中的其他示例函数,但希望这有助于揭示你做错了什么......

答案 1 :(得分:0)

如果未设置AccountId字段,则会出现此问题。您可以从自己的帐户中检索此字段。在Docusign的控制台中,转到Preferences / API并查看

Where to find AccountID Guid in Docusign's Console

使用API​​帐户ID(采用GUID格式),您应该没问题。