1

我是DocuSign API编程的初学者。我有一个.cshtml页面用于创建发送给客户的信封。当我尝试从 DocuSign API 创建信封时,它会显示如下错误消息:

选项卡元素中未指定页码。选项卡“SignHere”缺少页码或 AnchorTabItem。

请在下面查看我的 HTML 和代码。

html

 <span>
         <br />
           <br />
<span><b>SIGNATURE:</b></span> <span style="color:white;">pleasesignhereBP</span>
                <br />
                <br />
      <span><b>DATE:</b></span><span style="color:white;">pleasedatehereBP</span>
                <br />
                <br />
            </span>

代码

SignerModel objPerson = new SignerModel();

            TabsModel objPersonTab = new TabsModel();
            List<SignHereModel> lstPersonSignHere = new List<SignHereModel>();
            SignHereModel objPersonSignHere = new SignHereModel();
            objPersonSignHere.DocumentId = "1";
            objPersonSignHere.PageNumber = "1";
            objPersonSignHere.RecipientId = "2";
            objPersonSignHere.AnchorString = "pleasesignhereBP";
            objPersonSignHere.AnchorXOffset = ".2";
            objPersonSignHere.AnchorYOffset = ".01";
            objPersonSignHere.AnchorIgnoreIfNotPresent = "true";
            objPersonSignHere.AnchorUnits = "cms";
            lstPersonSignHere.Add(objPersonSignHere);
            objPersonTab.SignHereTabs = lstPersonSignHere;

            List<DateModel> lstPersonDateHere = new List<DateModel>();
            DateModel objPersonDate = new DateModel();
            objPersonDate.DocumentId = "1";
            objPersonDate.PageNumber = "1";
            objPersonDate.RecipientId = "1";
            objPersonDate.AnchorString = "pleasedatehereBP";
            objPersonDate.AnchorXOffset = ".2";
            objPersonDate.AnchorYOffset = ".01";
            objPersonDate.AnchorIgnoreIfNotPresent = "true";
            objPersonDate.AnchorUnits = "cms";
            objPersonDate.Value = DateTime.Now.ToShortDateString();
            lstPersonDateHere.Add(objPersonDate);
            objPersonTab.DateTabs = lstPersonDateHere;

            objPerson.Tabs = objPersonTab;

我已经添加了 objPersonDate.PageNumber = "1"但它不起作用。

更新

我的项目解决方案中有 DocuSign.eSign 库。我将此项目称为我的网络应用程序。然后我对类的SetDocuSignSigners 功能DocuSignCommunicator做一些改变。

objSHere.PageNumber = (!string.IsNullOrEmpty(objSHere.PageNumber)) ? objSHere.PageNumber : "1";

请在下面查看我的详细代码。

    private List<Signer> SetDocuSignSigners(List<SignerModel> lstSignerModel)
    {
        List<Signer> lstSigner = new List<Signer>();
        if (lstSignerModel != null && lstSignerModel.Count > 0)
        {
            foreach (SignerModel objModel in lstSignerModel)
            {
                Signer objSigner = new Signer();
                objSigner.Name = objModel.Name;
                objSigner.Email = objModel.Email;
                objSigner.RecipientId = objModel.RecipientId;
                objSigner.RoutingOrder = objModel.RoutingOrder;
                Tabs objTab = new Tabs();
                List<SignHere> lstSalesSignHere = new List<SignHere>();
                List<DateSigned> lstSalesDateHere = new List<DateSigned>();
                List<FullName> lstSalesNameHere = new List<FullName>();

                if (objModel.Tabs != null)
                {
                    if (objModel.Tabs.SignHereTabs != null && objModel.Tabs.SignHereTabs.Count > 0)
                    {
                        foreach (SignHereModel objSignHere in objModel.Tabs.SignHereTabs)
                        {
                            SignHere objSHere = new Model.SignHere();
                            objSHere.PageNumber = (!string.IsNullOrEmpty(objSHere.PageNumber)) ? objSHere.PageNumber : "1";
                            objSHere.AnchorString = objSignHere.AnchorString;
                            objSHere.DocumentId = objSignHere.DocumentId;
                            objSHere.RecipientId = objSignHere.RecipientId;
                            objSHere.AnchorXOffset = objSignHere.AnchorXOffset;
                            objSHere.AnchorYOffset = objSignHere.AnchorYOffset;
                            objSHere.AnchorUnits = objSignHere.AnchorUnits;
                            objSHere.AnchorIgnoreIfNotPresent = objSignHere.AnchorIgnoreIfNotPresent;
                            objSHere.AnchorMatchWholeWord = "true";
                            lstSalesSignHere.Add(objSHere);
                        }
                    }

                    if (objModel.Tabs.DateTabs != null && objModel.Tabs.DateTabs.Count > 0)
                    {
                        foreach (DateModel objDateHere in objModel.Tabs.DateTabs)
                        {
                            DateSigned objDSHere = new DateSigned();
                            objDSHere.PageNumber = (!string.IsNullOrEmpty(objDSHere.PageNumber)) ? objDSHere.PageNumber : "1"; 
                            objDSHere.AnchorString = objDateHere.AnchorString;
                            objDSHere.DocumentId = objDateHere.DocumentId;
                            objDSHere.RecipientId = objDateHere.RecipientId;
                            objDSHere.AnchorXOffset = objDateHere.AnchorXOffset;
                            objDSHere.AnchorYOffset = objDateHere.AnchorYOffset;
                            objDSHere.AnchorUnits = objDateHere.AnchorUnits;
                            objDSHere.AnchorIgnoreIfNotPresent = objDateHere.AnchorIgnoreIfNotPresent;
                            objDSHere.AnchorMatchWholeWord = "true";
                            ////objDSHere.Value = objDateHere.Value;
                            lstSalesDateHere.Add(objDSHere);
                        }
                    }

                    if (objModel.Tabs.FullNameTabs != null && objModel.Tabs.FullNameTabs.Count > 0)
                    {
                        foreach (FullNameModel objDateHere in objModel.Tabs.FullNameTabs)
                        {
                            FullName objNameHere = new FullName();
                            objNameHere.PageNumber = (!string.IsNullOrEmpty(objNameHere.PageNumber)) ? objNameHere.PageNumber : "1"; 
                            objNameHere.AnchorString = objDateHere.AnchorString;
                            objNameHere.DocumentId = objDateHere.DocumentId;
                            objNameHere.RecipientId = objDateHere.RecipientId;
                            objNameHere.AnchorXOffset = objDateHere.AnchorXOffset;
                            objNameHere.AnchorYOffset = objDateHere.AnchorYOffset;
                            objNameHere.AnchorUnits = objDateHere.AnchorUnits;
                            objNameHere.AnchorIgnoreIfNotPresent = objDateHere.AnchorIgnoreIfNotPresent;
                            objNameHere.Value = objDateHere.Value;
                            objNameHere.AnchorMatchWholeWord = "true";
                            lstSalesNameHere.Add(objNameHere);
                        }
                    }
                }

                objTab.SignHereTabs = lstSalesSignHere;
                objTab.DateSignedTabs = lstSalesDateHere;
                objTab.FullNameTabs = lstSalesNameHere;
                objSigner.Tabs = objTab;
                lstSigner.Add(objSigner);
            }
        }

        return lstSigner;
    }

我不知道这是最佳做法,但我的问题已解决。如果这不是一个好习惯,请提出建议。

图书馆变更后

遗憾的是,它不适用于文档中的签名位置。我的文档SignatureSignaturedate中有两个字段,但是当我通过 DocuSign 网站签署文档时,这些字段放置在错误的位置。请参阅下面的文档。

在此处输入图像描述

所以分配页码不是我的问题的解决方案。

4

1 回答 1

2

请用实际的代码更改更新上面的内容,因为您所显示的内容和您在下面“说”的内容似乎有冲突。

看起来您缺少“TabId”又名“Tab Item”

              "name": "sample string 1",
              "tabLabel": "sample string 2",
              "scaleValue": 3.1,
              "optional": "sample string 4",
              "documentId": "sample string 5",
              "recipientId": "sample string 6",
              "pageNumber": "sample string 7",
              "xPosition": "sample string 8",
              "yPosition": "sample string 9",
              "anchorString": "sample string 10",
              "anchorXOffset": "sample string 11",
              "anchorYOffset": "sample string 12",
              "anchorUnits": "sample string 13",
              "anchorIgnoreIfNotPresent": "sample string 14",
              "tabId": "sample string 15",
              "conditionalParentLabel": "sample string 16",
              "conditionalParentValue": "sample string 17"

https://www.docusign.net/restapi/help

我真的建议使用 PostMan Client 和/或 SoapUI 来验证您是否可以进行 api 调用,尤其是在开始时。这样你就可以看到返回的实际错误,因为它会在响应中更多地说明非常常见的错误。PostMan 或 SoapUI 将成功发出实际的 API 调用(Demo 或 Prod,一旦您通过了 prod API 认证)向您显示实际响应,而无需担心编码错字、对象属性或调试日志以查看真正返回的内容。

这允许您在使用您选择的 SDK 时学习 DocuSign API。您在 Stack Overflow 上寻求帮助是正确的。

我有几个链接供您入门:

DocuSign 开发人员中心,您可能在其中找到了 PHP SDK https://developers.docusign.com/esign-rest-api/sdk-tools

有关 PostMan 信息的链接(旧版本,您可以获得最新的 - 又名 Orange Rocket Man 标志与蓝色世界,适用于 Chrome 或 Mac Standalone - https://blog.grigsbyconsultingllc.com/postman-rest-client-a-google -铬应用/

X-DocuSign-Authentication Header Q&A on StackOverflow 如何将标头 X-DocuSign-Authentication 用于 REST 和 SOAP?

我喜欢 DocuSign API 浏览器的概念,遗憾的是它不适用于 prod,所以当你从 demo 转移到 prod 时,你仍然需要使用其他东西。

正如上面提到的“Amit K Bist”,您可以捕获发布您的 PHP | 的确切 JSON 请求。按照此 DocuSign 支持文章https://support.docusign.com/guides/ndse-user-guide-api-request-logging中说明的步骤进行 API 调用

祝您好运,享受您的 DocuSign API 之旅!

于 2018-03-23T10:52:38.577 回答