2015-08-05 3 views
0

пытаюсь использовать клиента DocuSign .Net для запроса подписи на документе, который я создаю динамически. До сих пор я мог изменить пример на vb.net, и он работает (Exmaple CS). Я конвертировал «Пошаговое руководство №4 - запрос на подпись в документе», примерно на 1/2 пути вниз по коду. Теперь я пытаюсь использовать Envelope.Document, который я видел в других примерах, например, DocuSign example. Но это похоже. Документ не является частью конверта, даже думал, что остальная часть кода в обоих примерах переводится на vb.Запросить подпись Docusign Rest API vb.net

Моим другим вариантом является использование Envelope.AddDocument, но я не могу понять, что он ожидает. Я должен передать fileBytes() как Byte, fileName как String и индекс As Integer. Я попробовал несколько разных методов, чтобы получить файлBytes, но продолжаю получать сообщение об ошибке Invalid_Content_Type. Тип контента не поддерживается.

Вот код, который я пытался. Любая помощь в том, как добавить документ в конверт, будет оценена по достоинству. В конечном итоге я хочу иметь возможность добавлять несколько документов в один конверт. Я могу заставить env.Create (docPath) работать, но это не помогает. Благодарим вас за любую помощь, которую вы можете предложить.

Public Function RequestEsignature(email As String, rName As String, docPath As String, strSubject As String) As String 
    main() 
    Dim AccountEmail = My.Settings.docusignUserName 
    Dim AccountPassword = My.Settings.docusignPassword 
    Dim RecipientEmail = email 
    Dim RecipientName = rName 
    Dim documentPath = docPath 
    Dim msgString As String 
    Dim acct As Account = New Account() 
    acct.Email = AccountEmail 
    acct.Password = AccountPassword 

    Dim result As Boolean = acct.Login() 
    If Not result Then 
     msgString = String.Format("There was an error logging in to DocuSign fo user {0}.\nError Code: {1}\nMessage: {2}", acct.Email, acct.RestError.errorCode, acct.RestError.message) 
     MsgBox(msgString) 
     Return Nothing 
    End If 

    Dim env As Envelope = New Envelope 
    env.Login = acct 

    env.Recipients = New Recipients() 
    Dim signer(0) As Signer 
    signer(0) = New Signer() 
    signer(0).email = email 
    signer(0).name = RecipientName 
    signer(0).routingOrder = "1" 
    signer(0).recipientId = "1" 
    env.Recipients.signers = signer 

    Dim envDocs = New Document() 
    envDocs.documentId = "1" 
    envDocs.name = "Test Document" 
    envDocs.uri = docPath 

    'Dim fileBytes As Byte() 
    'Dim fileBytes = getByteArrayII(documentPath) 
    'Dim oFile As FileInfo 
    'oFile = New FileInfo(documentPath) 
    'Dim oFileStream As FileStream = oFile.OpenRead() 
    'Dim lBytes As Long = oFileStream.Length 

    'If lBytes > 0 Then 
    ' Dim fileData(lBytes - 1) As Byte 
    ' oFileStream.Read(fileData, 0, lBytes) 
    'If Not env.AddDocument(fileBytes, documentPath, 0) Then 
    ' msgString = String.Format("The was an Error adding the Document." & vbCrLf & "Error Code: {0} " & vbCrLf & "Message: {1}", env.RestError.errorCode, env.RestError.message) 
    ' MsgBox(msgString) 
    ' Return Nothing 
    'Else 
    ' MsgBox("Doc Successfully Added") 
    'End If 
    'oFileStream.Close() 
    'End If 


    env.Status = "sent" 
    env.EmailSubject = strSubject 
    result = env.Create() 

    If Not result Then 
     If Not IsNothing(env.RestError) Then 
      msgString = String.Format("Error Code: {0}\nMessage: {1}", env.RestError.errorCode, env.RestError.message) 
      MsgBox(msgString) 
      Return Nothing 
     Else 
      MsgBox("There was a nondescript error while processing this request. \nPLease verify all information is correct before trying again.") 
      Return Nothing 
     End If 
    Else 
     Return env.EnvelopeId 
    End If 
End Function 

Private Function getByteArray(fileName As String) As Byte() 
    Dim fInfo As New FileInfo(fileName) 
    Dim numBytes As Long = fInfo.Length 
    Dim fStream As New FileStream(fileName, FileMode.Open, FileAccess.Read) 
    Dim br As New BinaryReader(fStream) 
    Dim data As Byte() = br.ReadBytes(CInt(numBytes)) 
    br.Close() 
    fStream.Close() 
    Return data 
End Function 

Private Function getByteArrayII(ByVal fileName As String) As Byte() 
    Dim tempByte() As Byte = Nothing 
    If String.IsNullOrEmpty(fileName) Then 
     Throw New ArgumentNullException("FileName Not Provided") 
     Return Nothing 
    End If 
    Try 
     Dim fileInfo As New FileInfo(fileName) 
     Dim numBytes As Long = fileInfo.Length 
     Dim fStream As New FileStream(fileName, FileMode.Open, FileAccess.Read) 
     Dim binaryReader As New BinaryReader(fStream) 
     tempByte = binaryReader.ReadBytes(Convert.ToInt32(numBytes)) 
     fileInfo = Nothing 
     numBytes = 0 
     fStream.Close() 
     fStream.Dispose() 
     Return tempByte 
    Catch ex As Exception 
     Return Nothing 
    End Try 
End Function 

ИСТОРИЯ Я новичок в vb.net и программирования. До сих пор я смог создать программу, которая позволяет пользователям вводить информацию о клиенте с изменяемыми формами на основе определенных выборов. У нас есть система, которая использует наши данные SQL для слияния почты в Word, а затем отправляет PDF-код для оповещения клиента через DocuSign. Мы используем бэкэнд SQL и внешний интерфейс vb.net.

Наконец, я искал ответ в выходные, и теперь я обращаюсь за помощью. Я искал google для всех возможных терминов (терминов), которые я могу думать, чтобы включить/исключить. Если я спрашиваю публично, что это действительно означает, что я исчерпал каждый ресурс, который у меня есть. Пожалуйста, не публикуйте ссылки на любую документацию DocuSign, поскольку я уже посетил все эти сайты. Спасибо.

+0

У вас возникли какие-либо ошибки? Являются ли они во время компиляции или времени выполнения? Кто они такие? В какой строке они происходят? –

ответ

1

Похоже, что класс Envelope имеет свойство Document, а свойство Documents, которое, как представляется, представляет собой массив.

C# пример вы вывесили на this link кажется, чтобы показать, как прикрепить документ:

// Attach the document(s) C# 
envelope.Documents = new DocuSignWeb.Document[1]; 
DocuSignWeb.Document doc = new DocuSignWeb.Document(); 
doc.ID = "1"; 
doc.Name = "Document Name"; 
doc.PDFBytes = [Location of Document]; 
envelope.Documents[0] = doc; 

Что в VB было бы что-то вроде этого:

'Attach the document(s) VB 
envelope.Documents = new DocuSignWeb.Document(0); 
Dim doc As New DocuSignWeb.Document() 
doc.ID = "1" 
doc.Name = "Document Name" 
doc.PDFBytes = [Location of Document] 
envelope.Documents(0) = doc 

Если это не проблема, которую вы обращайтесь, пожалуйста, предоставьте дополнительную информацию.

+0

Крис, спасибо за быстрый ответ, но это то, что я пытался объяснить. Когда я перехожу к использованию Envelope.Documents или Envelope.Document, они не являются членами Envelope. Еще раз спасибо за ответ. –

+1

@PatrickCasey - У него есть метод «Создать»? Я думаю, что я видел один пример, который передал имя файла методу создания. Возможно, именно это вы ищите. –

+0

Существует конверт.AddDcoument, но мне не очень повезло с этим. Когда я пытаюсь преобразовать свой документ в байт, я получаю сообщение об ошибке, которое я упомянул: «Мой другой вариант - использовать Envelope.AddDocument, но я не могу понять, что он ожидает. Я должен передать файлBytes() как Byte, fileName как String и index As Integer. Я попробовал несколько разных методов для получения файлов, но продолжаю получать сообщение об ошибке Invalid_Content_Type. Тип контента не поддерживается. " –

0

Очевидно, что мой подход к обучению vb, api и всем остальным материалам, необходимым для работы моей программы, чрезвычайно сложный. Я не уверен, что это моя нехватка знаний или просто неправильное понимание кода, но я, наконец, смог понять это. Моя функция принимает объект «клиент», который имеет такие вещи, как «Имя» и «Электронная почта», также передаю список путей к документам и строку «Тема» для электронной почты. Это перебирает список документов и добавляет их в конверт. У меня также есть некоторые примеры добавления тегов, которые сами были процессом обучения. Я надеюсь, что я только один достаточно неудачны должны учиться так много различных новых концепций, что что-то это просто занимает месяцы, чтобы выяснить, но если нет вот код:

'Request Signature - Send Envelope 
Public Function RequestEsignature(pClient As iqClient, docPaths As List(Of String), strSubject As String) As DocuSign.Integrations.Client.Envelope 
    '***************************************************************** 
    ' ENTER VALUES FOR FOLLOWING VARIABLES! 
    '***************************************************************** 
    Dim AccountEmail As String = My.Settings.docusignUserName 
    Dim AccountPassword As String = My.Settings.docusignPassword 
    Dim RecipientEmail As String = pClient.Email 
    Dim RecipientName As String = pClient.Name.NameFL 
    '***************************************************************** 

    ' user credentials 
    Dim account As New Account() 
    account = LoginToDocusign() 

    If Not IsNothing(account) Then 

    End If 
    Dim result As Boolean ' = account.Login() 

    ' create envelope object and assign login info 
    Dim envelope As New Envelope() 
    Dim recip = New Recipients() 
    Dim signers = New List(Of Signer) 
    Dim signer As New Signer() 
    signer.email = RecipientEmail 
    signer.name = RecipientName 
    signer.routingOrder = "1" 
    signer.recipientId = "1" 

    Dim fileBytes = New List(Of Byte()) 
    Dim docNames = New List(Of String) 
    Dim iqDoc As iqPublicClasses.iqDocement 
    Dim docs = New List(Of Document) 
    Dim doc As Document 
    Dim tabs = New List(Of Tab) 
    Dim tab As New Tab() 
    Dim iTabs = New List(Of Tab) 
    Dim iTab As New Tab() 
    Dim dTabs = New List(Of DateSignedTab) 
    Dim dTab As New DateSignedTab 
    Dim rTabs = New List(Of RadioGroupTab) 
    Dim rTab As New RadioGroupTab() 
    Dim radios = New List(Of Radios) 
    Dim radio As New Radios() 

    tab = New Tab() 
    tab.anchorIgnoreIfNotPresent = True 
    tab.anchorString = "\s1\" 
    tabs.Add(tab) 

    dTab = New DateSignedTab 
    dTab.anchorIgnoreIfNotPresent = True 
    dTab.anchorString = "\d1\" 
    dTabs.Add(dTab) 

    iTab = New Tab() 
    iTab.anchorIgnoreIfNotPresent = True 
    iTab.anchorString = "\i1\" 
    iTab.anchorYOffset = 15 
    iTabs.Add(iTab) 
    iTab = New Tab() 
    iTab.anchorIgnoreIfNotPresent = True 
    iTab.anchorString = "\nri1\" 
    iTabs.Add(iTab) 

    rTab = New RadioGroupTab() 
    rTab.groupName = "RG1" 
    rTab.anchorIgnoreIfNotPresent = True 

    radio = New Radios() 
    radio.anchorString = "\rbn\" 
    radio.anchorIgnoreIfNotPresent = True 
    radio.anchorYOffset = -10 
    radios.Add(radio) 
    radio = New Radios() 
    radio.anchorString = "\rby\" 
    radio.anchorIgnoreIfNotPresent = True 
    radio.anchorYOffset = -10 
    radios.Add(radio) 

    rTab.radios = radios.ToArray 
    rTabs.Add(rTab) 

    signer.tabs = New Tabs() 
    signer.tabs.signHereTabs = tabs.ToArray 
    signer.tabs.dateSignedTabs = dTabs.ToArray 
    signer.tabs.initialHereTabs = iTabs.ToArray 
    signer.tabs.radioGroupTabs = rTabs.ToArray 

    Dim cnt = 0 

    For Each docName As String In docPaths 
     cnt += 1 

     iqDoc = New iqPublicClasses.iqDocement(docName) 
     doc = New Document() 
     doc.attachmentDescription = iqDoc.Name 
     doc.name = String.Format("{0}{1}", iqDoc.Name, iqDoc.Extension) 
     doc.fileExtension = iqDoc.Extension 
     doc.uri = iqDoc.FullPath 
     doc.documentId = cnt 
     docs.Add(doc) 

     docNames.Add(iqDoc.FullPath) 
     fileBytes.Add(File.ReadAllBytes(iqDoc.FullPath)) 
    Next 

    ' create envelope and send the signature request (since status is set to "sent") 
    envelope.Login = account 
    signers.Add(signer) 
    recip.signers = signers.ToArray 
    envelope.Recipients = recip 
    envelope.Status = "sent" 
    envelope.EmailSubject = strSubject 
    result = envelope.Create(fileBytes, docs) 

    If Not result Then 
     If envelope.RestError IsNot Nothing Then 
      Console.WriteLine("Error code: {0}" & vbLf & "Message: {1}", envelope.RestError.errorCode, envelope.RestError.message) 
      Return Nothing 
     Else 
      Console.WriteLine("Error encountered while requesting signature from template, please review your envelope and recipient data.") 
      Return Nothing 
     End If 
    Else 
     Console.WriteLine("Signature request has been sent to {0}, envelopeId is {1}.", envelope.Recipients.signers(0).email, envelope.EnvelopeId) 
     Return envelope 
    End If 
End Function 

PS - Как я уже сказал, Я чрезвычайно новичок в этом, и я учусь, когда иду.Я понимаю, что это не самый элегантный подход или правильно отформатированный код, но, к сожалению, у меня очень мало времени, чтобы вернуться к обновленному коду, который я написал. Надеюсь, однажды я смогу вернуться и исправить все, что я не понял, когда впервые создал его.

Смежные вопросы