我正在尝试使用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构建所有相关请求。
如果有人能够对这个问题有所了解,我真的很感激。
感谢您抽出宝贵时间阅读我的问题!
答案 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格式),您应该没问题。