Retrieving Data
  • 09 Oct 2024
  • 18 Minutes to read
  • Dark
    Light
  • PDF

Retrieving Data

  • Dark
    Light
  • PDF

Article summary

It is strongly recommended that you use a Callback Listener instead of polling for transaction statuses. The use of polling may consume unnecessary resources on both your end, and on the OneSpan Sign service.

This section discusses the following topics related to retrieving information about e-signature processes:

Retrieving Version Information

The following code samples illustrate how to retrieve your version of OneSpan Sign.

Java Code

package com.eSignLive.com.esl.sdk.examples;
import java.util.Properties;

public class ApplicationVersionExample extends SDKSample {
 
  public String applicationVersion;
  
  public static void main( String... args ) {
    new ApplicationVersionExample(Props.get()).run();
  }
  
  public ApplicationVersionExample( Properties props ) {
    this( props.getProperty( "api.key" ),
      props.getProperty( "api.url" ));
  }
  
  public ApplicationVersionExample( String apiKey, String apiUrl ) {
    super( apiKey, apiUrl );
  }
  
  public void execute() {
    applicationVersion = eslClient.getSystemService().getApplicationVersion();
  }
}

C# Code

using System;

namespace SDK.Examples
{
  public class ApplicationVersionExample : SDKSample
  {
    public static void Main(string[] args)
    {
      new ApplicationVersionExample(Props.GetInstance()).Run();
    }
    
    public string applicationVersion;
    
    public ApplicationVersionExample(Props props) : this(props.Get("api.key"), props.Get("api.url"))
    {
    }
    
    public ApplicationVersionExample(string apiKey, string apiUrl) : base(apiKey, apiUrl)
    {
    }
    
    override public void Execute()
    {
      applicationVersion = eslClient.SystemService.GetApplicationVersion();
    }
  }
}

Retrieving Information for Technical Support

The following code samples illustrate how to retrieve transaction information for our Support Team.

Java Code

package com.eSignLive.com.esl.sdk.examples;

import com.eSignLive.com.esl.sdk.DocumentPackage;
import com.eSignLive.com.esl.sdk.DocumentType;
import com.eSignLive.com.esl.sdk.SupportConfiguration;

import java.io.InputStream;
import java.text.SimpleDateFormat;
import java.util.Date;
import java.util.Properties;

import static com.eSignLive.com.esl.sdk.builder.DocumentBuilder.newDocumentWithName;
import static com.eSignLive.com.esl.sdk.builder.PackageBuilder.newPackageNamed;
import static com.eSignLive.com.esl.sdk.builder.SignatureBuilder.signatureFor;
import static com.eSignLive.com.esl.sdk.builder.SignerBuilder.newSignerWithEmail;

public class PackageInformationExample extends SDKSample {
  private String email1;
  private InputStream documentInputStream1;
  
  public SupportConfiguration supportConfiguration;
  
  public static void main( String... args ) {
    new PackageInformationExample(Props.get()).run();
  }
  
  public PackageInformationExample( Properties props ) {
    this( props.getProperty( "api.key" ),
      props.getProperty( "api.url" ),
      props.getProperty( "1.email" ));
  }
  
  public PackageInformationExample( String apiKey, String apiUrl, String email1 ) {
    super( apiKey, apiUrl );
    this.email1 = email1;
    documentInputStream1 = this.getClass().getClassLoader().getResourceAsStream( "document.pdf" );
  }
  
  public void execute() {
    DocumentPackage superDuperPackage = newPackageNamed("PackageInformationExample " + new SimpleDateFormat("HH:mm:ss").format(new Date()))
    .describedAs("This is a package created using the eSignLive SDK")
    .withSigner(newSignerWithEmail(email1)
      .withFirstName("John1")
      .withLastName("Smith1"))
    .withDocument(newDocumentWithName("First Document")
      .fromStream(documentInputStream1, DocumentType.PDF)
      .withSignature(signatureFor(email1)
       .onPage(0)
       .atPosition(100, 100)))
    .build();
    
    packageId = eslClient.createPackage( superDuperPackage );
    eslClient.sendPackage( packageId );
    
    supportConfiguration = eslClient.getPackageService().getConfig(packageId);
  }
}

C# Code

using System;
using System.IO;
using eSignLive.com.ESL.SDK;
using eSignLive.com.ESL.SDK.Builder;

namespace SDK.Examples
{
  public class PackageInformationExample : SDKSample
  {
    public static void Main(string[] args)
    {
      new PackageInformationExample(Props.GetInstance()).Run();
    }
    
    private string email1;
    private Stream fileStream1;
    
    public SupportConfiguration supportConfiguration;
    
    public readonly string DOCUMENT_NAME = "First Document";
    
    public PackageInformationExample(Props props) : this(props.Get("api.key"), props.Get("api.url"), props.Get("1.email"))
    {
    }
    
    public PackageInformationExample(string apiKey, string apiUrl, string email1) : base(apiKey, apiUrl)
    {
      this.email1 = email1;
      this.fileStream1 = File.OpenRead(new FileInfo(Directory.GetCurrentDirectory() + "/src/document.pdf").FullName);
    }
    
    override public void Execute()
    {
      DocumentPackage superDuperPackage = PackageBuilder.NewPackageNamed("PackageInformationExample: " + DateTime.Now)
      .WithSettings(DocumentPackageSettingsBuilder.NewDocumentPackageSettings().WithInPerson())
      .WithSigner(SignerBuilder.NewSignerWithEmail(email1)
        .WithFirstName("John1")
        .WithLastName("Smith1"))
      .WithDocument(DocumentBuilder.NewDocumentNamed(DOCUMENT_NAME)
        .FromStream(fileStream1, DocumentType.PDF)
        .WithSignature(SignatureBuilder.SignatureFor(email1)
         .OnPage(0)
         .AtPosition(100, 100)))
      .Build();
      
      packageId = eslClient.CreatePackage(superDuperPackage);
      eslClient.SendPackage(packageId);
      
      supportConfiguration = eslClient.PackageService.GetConfig(packageId);
    }
  }
}

Retrieving All Approvals for a Transaction

The following code samples illustrate how to retrieve all approvals for a specified transaction.

Java Code

package com.eSignLive.com.esl.sdk.examples;

import com.eSignLive.com.esl.sdk.DocumentPackage;
import com.eSignLive.com.esl.sdk.DocumentType;
import com.eSignLive.com.esl.sdk.Signature;

import java.io.InputStream;
import java.text.SimpleDateFormat;
import java.util.Date;
import java.util.List;
import java.util.Properties;

import static com.eSignLive.com.esl.sdk.builder.DocumentBuilder.newDocumentWithName;
import static com.eSignLive.com.esl.sdk.builder.PackageBuilder.newPackageNamed;
import static com.eSignLive.com.esl.sdk.builder.SignatureBuilder.signatureFor;
import static com.eSignLive.com.esl.sdk.builder.SignerBuilder.newSignerWithEmail;

public class SignableSignaturesExample extends SDKSample {
 
  private InputStream documentInputStream1;
  
  private DocumentPackage sentPackage;
  
  private String signer1Id = "signer1Id";
  private String signer2Id = "signer2Id";
  private String documentId = "documentId";
  
  public String email1;
  public String email2;
  public List<Signature> signer1SignableSignatures, signer2SignableSignatures;
  
  public static void main( String... args ) {
    new SignableSignaturesExample(Props.get()).run();
  }
  
  public SignableSignaturesExample(Properties props) {
    this( props.getProperty( "api.key" ),
      props.getProperty( "api.url" ),
      props.getProperty( "1.email" ),
      props.getProperty( "2.email" ));
  }
  
  public SignableSignaturesExample(String apiKey, String apiUrl, String email1, String email2) {
    super( apiKey, apiUrl );
    this.email1 = email1;
    this.email2 = email2;
    documentInputStream1 = this.getClass().getClassLoader().getResourceAsStream( "document.pdf" );
  }
  
  public void execute() {
    DocumentPackage superDuperPackage = newPackageNamed("SignableSignaturesExample " + new SimpleDateFormat("HH:mm:ss").format(new Date()))
    .describedAs("This is a package created using the eSignLive SDK")
    .withSigner(newSignerWithEmail(email1)
      .withFirstName("John1")
      .withLastName("Smith1")
      .withCustomId(signer1Id))
    .withSigner(newSignerWithEmail(email2)
      .withFirstName("John2")
      .withLastName("Smith2")
      .withCustomId(signer2Id))
    .withDocument(newDocumentWithName("First Document")
      .fromStream(documentInputStream1, DocumentType.PDF)
      .withId(documentId)
      .withSignature(signatureFor(email1)
       .onPage(0)
       .atPosition(100, 100))
      .withSignature(signatureFor(email1)
       .onPage(0)
       .atPosition(300, 100))
      .withSignature(signatureFor(email2)
       .onPage(0)
       .atPosition(500, 100)))
    .build();
    
    packageId = eslClient.createPackage( superDuperPackage );
    eslClient.sendPackage( packageId );
    sentPackage = eslClient.getPackage( packageId );
    signer1SignableSignatures = eslClient.getApprovalService().getAllSignableSignatures(sentPackage, documentId, signer1Id);
    signer2SignableSignatures = eslClient.getApprovalService().getAllSignableSignatures(sentPackage, documentId, signer2Id);
  }
}

C# Code

using System;
using System.IO;
using eSignLive.com.ESL.SDK;
using System.Collections.Generic;
using eSignLive.com.ESL.SDK.Builder;

namespace SDK.Examples
{
  public class SignableSignaturesExample : SDKSample
  {
    public static void Main(string[] args)
    {
      new SignableSignaturesExample(Props.GetInstance()).Run();
    }
    
    private Stream fileStream1;
    public DocumentPackage sentPackage;
    
    private string signer1Id = "signer1Id";
    private string signer2Id = "signer2Id";
    private string documentId = "documentId";
    private string DOCUMENT_NAME = "First Document";
    
    public string email1;
    public string email2;
    public IList<Signature> signer1SignableSignatures, signer2SignableSignatures;
    
    public SignableSignaturesExample(Props props) : this(props.Get("api.key"), props.Get("api.url"), props.Get("1.email"), props.Get("2.email"))
    {
    }
    
    public SignableSignaturesExample(string apiKey, string apiUrl, string email1, string email2) : base(apiKey, apiUrl)
    {
      this.email1 = email1;
      this.email2 = email2;
      this.fileStream1 = File.OpenRead(new FileInfo(Directory.GetCurrentDirectory() + "/src/document.pdf").FullName);
    }
    
    override public void Execute()
    {
      DocumentPackage superDuperPackage = PackageBuilder.NewPackageNamed("SignableSignaturesExample: " + DateTime.Now)
      .WithSettings(DocumentPackageSettingsBuilder.NewDocumentPackageSettings().WithInPerson())
      .WithSigner(SignerBuilder.NewSignerWithEmail(email1)
        .WithFirstName("John1")
        .WithLastName("Smith1")
        .WithCustomId(signer1Id))
      .WithSigner(SignerBuilder.NewSignerWithEmail(email2)
        .WithFirstName("John2")
        .WithLastName("Smith2")
        .WithCustomId(signer2Id))
      .WithDocument(DocumentBuilder.NewDocumentNamed(DOCUMENT_NAME)
        .FromStream(fileStream1, DocumentType.PDF)
        .WithId(documentId)
        .WithSignature(SignatureBuilder.SignatureFor(email1)
          .OnPage(0)
          .AtPosition(100, 100))
        .WithSignature(SignatureBuilder.SignatureFor(email1)
          .OnPage(0)
          .AtPosition(300, 100))
        .WithSignature(SignatureBuilder.SignatureFor(email2)
          .OnPage(0)
          .AtPosition(500, 100)))
      .Build();
      
      packageId = eslClient.CreatePackage(superDuperPackage);
      eslClient.SendPackage(packageId);
      sentPackage = eslClient.GetPackage(packageId);
      
      signer1SignableSignatures = eslClient.ApprovalService.GetAllSignableSignatures(sentPackage, documentId, signer1Id);
      signer2SignableSignatures = eslClient.ApprovalService.GetAllSignableSignatures(sentPackage, documentId, signer2Id);
    }
  }
}

Retrieving a Transaction

Once you have begun to create and send transactions, you may want to retrieve the latest version of a particular transaction. To do this, you need the ID of the transaction you want to retrieve.

The following code samples illustrate how to retrieve a transaction ID.

Java Code

EslClient esl = new EslClient( API_KEY, API_URL );
PackageId packageId = new PackageId("your package id");
DocumentPackage pkg = esl.getPackage(packageId);

C# Code

EslClient client = new EslClient (API_KEY, API_URL);
PackageId packageId = new PackageId ("GLK2xasqLvFe2wc4qwO5iTKyjx42");
DocumentPackage pkg = client.getPackage (packageId);

Downloading Documents

Once you have begun to create and send transactions, you may want to retrieve the latest versions of the documents that are in a particular transaction. To do this, you need the ID of the transaction and the IDs of the relevant documents.

The following code samples illustrate how to download: (1) a specific document; (2) the transaction's Evidence Summary; (3) a zip file that contains all the transaction's documents.

Java Code

EslClient esl = new EslClient( API_KEY, API_URL );

PackageId packageId = new PackageId("your package id");
byte[] documentContent = esl.downloadDocument(packageId, "your document id");

Files.saveTo(documentContent, "downloaded.pdf");

byte[] evidenceContent = esl.downloadEvidenceSummary(packageId);
Files.saveTo(evidenceContent, "evidence.pdf");

byte[] zip = esl.downloadZippedDocuments(packageId);
Files.saveTo(zip, "package.zip");

C# Code

 
EslClient client = new EslClient (API_KEY, API_URL);
PackageId packageId = new PackageId ("GLK2xasqLvFe2wc4qwO5iTKyjx42");

byte[] documentContent = client.DownloadDocument (packageId, "testing");
File.WriteAllBytes (Directory.GetCurrentDirectory() + "/downloaded.pdf", documentContent);

byte[] evidenceContent = client.DownloadEvidenceSummary (packageId);
File.WriteAllBytes (Directory.GetCurrentDirectory() + "/evidence-summary.pdf", evidenceContent);

byte[] zipContent = client.DownloadZippedDocuments (packageId);
File.WriteAllBytes (Directory.GetCurrentDirectory() + "/package-documents.zip", zipContent);

Downloading Documents Completed within a Date Range

The following code samples illustrate how to download documents that were completed within a specified range of dates.

Java Code

package com.eSignLive.com.esl.sdk.examples;

import com.eSignLive.com.esl.sdk.DocumentPackage;
import com.eSignLive.com.esl.sdk.PackageStatus;
import com.eSignLive.com.esl.sdk.Page;
import com.eSignLive.com.esl.sdk.PageRequest;
import org.joda.time.DateTime;

import java.util.Date;
import java.util.Properties;

public class GetCompletedPackagesWithinDateRangeExample extends SDKSample {

  public static final Date START_DATE = new DateTime().toDate();
  public static final Date END_DATE = new DateTime().toDate();

  public Page<DocumentPackage> draftPackages;
  public Page<DocumentPackage> sentPackages;
  public Page<DocumentPackage> declinedPackages;
  public Page<DocumentPackage> archivedPackages;
  public Page<DocumentPackage> completedPackages;

  public static void main( String... args ) {
    new GetCompletedPackagesWithinDateRangeExample( Props.get() ).run();
  }

  public GetCompletedPackagesWithinDateRangeExample( Properties properties ) {
    this( properties.getProperty( "api.key" ),
      properties.getProperty( "api.url" ) );
  }

  public GetCompletedPackagesWithinDateRangeExample( String apiKey, String apiUrl ) {
    super( apiKey, apiUrl );
  }

  public void execute() {
    draftPackages = getPackagesByPackageStatus(PackageStatus.DRAFT, START_DATE, END_DATE);
    sentPackages = getPackagesByPackageStatus(PackageStatus.SENT, START_DATE, END_DATE);
    declinedPackages = getPackagesByPackageStatus(PackageStatus.DECLINED, START_DATE, END_DATE);
    archivedPackages = getPackagesByPackageStatus(PackageStatus.ARCHIVED, START_DATE, END_DATE);
    completedPackages = getPackagesByPackageStatus(PackageStatus.COMPLETED, START_DATE, END_DATE);

    private Page<DocumentPackage> getPackagesByPackageStatus(PackageStatus packageStatus, Date startDate, Date endDate) {
      Page<DocumentPackage> resultPage = eslClient.getPackageService().getUpdatedPackagesWithinDateRange(packageStatus, new PageRequest(1), startDate, endDate);
      return resultPage;
    }
  }
}

C# Code

using System;
using eSignLive.com.ESL.SDK;

namespace SDK.Examples
{
  public class GetCompletedPackagesWithinDateRangeExample : SDKSample
  {
    public static void Main (string[] args) 
    {
      new GetCompletedPackagesWithinDateRangeExample(Props.GetInstance()).Run();
    }

    public readonly DateTime START_DATE = DateTime.Now;
    public readonly DateTime END_DATE = DateTime.Now;

    public Page<DocumentPackage> draftPackages;
    public Page<DocumentPackage> sentPackages;
    public Page<DocumentPackage> declinedPackages;
    public Page<DocumentPackage> archivedPackages;
    public Page<DocumentPackage> completedPackages;

    public GetCompletedPackagesWithinDateRangeExample( Props props ) : this(props.Get("api.key"), props.Get("api.url")) 
    {
    }

    public GetCompletedPackagesWithinDateRangeExample( String apiKey, String apiUrl ) : base( apiKey, apiUrl ) 
    {
    }

    override public void Execute() 
    {
      draftPackages = getPackagesByPackageStatus(DocumentPackageStatus.DRAFT, START_DATE, END_DATE);
      sentPackages = getPackagesByPackageStatus(DocumentPackageStatus.SENT, START_DATE, END_DATE);
      declinedPackages = getPackagesByPackageStatus(DocumentPackageStatus.DECLINED, START_DATE, END_DATE);
      archivedPackages = getPackagesByPackageStatus(DocumentPackageStatus.ARCHIVED, START_DATE, END_DATE);
      completedPackages = getPackagesByPackageStatus(DocumentPackageStatus.COMPLETED, START_DATE, END_DATE);

      private Page<DocumentPackage> getPackagesByPackageStatus(DocumentPackageStatus packageStatus, DateTime startDate, DateTime endDate) 
      {
        Page<DocumentPackage> resultPage = eslClient.PackageService.GetUpdatedPackagesWithinDateRange(packageStatus, new PageRequest(1), startDate, endDate);
        return resultPage;
      }
    }
  }
}

Retrieving a transaction's Status

Once a transaction has been created, you might want to retrieve just its signing status (instead of the entire transaction). The following code samples illustrate how to retrieve a transaction's signing status.

Java Code

EslClient eslClient = new EslClient( API_KEY, API_URL );
DocumentPackage superDuperPackage = newPackageNamed( "GetSigningStatus example" )
.withSigner( newSignerWithEmail( "bob@email.com" )
  .withFirstName( "John" )
  .withLastName( "Smith" ))
.withDocument( newDocumentWithName( "First Document" )
  .fromFile( "src/main/Resources/document.pdf" )
  .withSignature( signatureFor( "bob@email.com" )
    .onPage( 0 )
    .atPosition( 100, 100 ) ) )
.build();

PackageId packageId = eslClient.createPackage( superDuperPackage );

SigningStatus draftSigningStatus = eslClient.getSigningStatus( packageId, null, null );
System.out.println(draftSigningStatus.getToken());

eslClient.sendPackage( packageId );
SigningStatus sentSigningStatus = eslClient.getSigningStatus( packageId, null, null );
System.out.println(sentSigningStatus.getToken());

C# Code

DocumentPackage package = PackageBuilder.NewPackageNamed ("GetSigningStatus example")
.DescribedAs ("This is a new package")
.WithSigner(SignerBuilder.NewSignerWithEmail("bob@email.com")
  .WithFirstName("John")
  .WithLastName("Smith"))
.WithDocument(DocumentBuilder.NewDocumentNamed("First Document")
  .FromFile("src/main/Resources/document.pdf")
  .WithSignature(SignatureBuilder.SignatureFor("bob@email.com")
    .OnPage(0)
    .AtPosition(100, 100)))
.Build ();

PackageId id = eslClient.CreatePackage (package);
SigningStatus draftSigningStatus = eslClient.GetSigningStatus( id, null, null );
Console.WriteLine(draftSigningStatus);

eslClient.SendPackage(id);

draftSigningStatus = eslClient.GetSigningStatus( id, null, null );
Console.WriteLine(draftSigningStatus);

Retrieving Field Values

Once a transaction has been completed, it may be useful to retrieve the values entered in certain fields. A single call can access all fields in the transaction.

The following code samples retrieve a list of all fields, and then outputs their values. The samples assume that: (1) signing is complete for a transaction that contains fields; (2) you know the transaction's PackageId.

Java Code

EslClient eslClient = new EslClient( API_KEY, API_URL );
List<FieldSummary> fieldSummaries = eslClient.getFieldValues( new PackageId( PACKAGE_ID ) );

System.out.println( "SignerId, DocumentId, FieldId: Value" );
for ( FieldSummary fieldSummary : fieldSummaries ) {
  System.out.println( fieldSummary.getSignerId() + ", " + fieldSummary.getDocumentId() + ", " + 
    fieldSummary.getFieldId() + ": " + fieldSummary.getFieldValue() );
}

C# Code

EslClient eslClient = new EslClient( API_KEY, API_URL );
List<FieldSummary> fieldSummaries = eslClient.FieldSummaryService.GetFieldSummary(new PackageId( CURR_PACKAGE_ID ) );

Console.WriteLine( "SignerId, DocumentId, FieldId: Value" );
foreach ( FieldSummary fieldSummary in fieldSummaries ) 
{
  Console.WriteLine( fieldSummary.SignerId + ", " + fieldSummary.DocumentId + ", " + 
    fieldSummary.FieldId + ": " + fieldSummary.FieldValue );
}

Retrieving Decline Reasons

A signer can decline to sign a transaction electronically. When that happens, the signer is prompted to provide a reason. That reason is saved in the transaction's list of messages.

The following code samples illustrate how to retrieve a decline reason from a transaction.

Java Code

// Get the list of messages from signer (the decline reason)
DocumentPackage documentPackage = eslClient.getPackage(packageId);
List<Message> messages = eslClient.getPackage(packageId).getMessages();
 
System.out.println(documentPackage.getStatus().toString() + " reason : " + messages.get(0).getContent());

C# Code

// Get the list of messages from signer (the decline reason)
DocumentPackage documentPackage = eslClient.GetPackage(packageId);
IList<Message> messages = eslClient.GetPackage(packageId).Messages;
 
Console.WriteLine(documentPackage.Status.ToString() + " reason : " + messages[0].Content);

Retrieving a Completion Report

A Completion Report contains information about: (1) a sender; (2) their transactions with a specified status (e.g., DRAFT, SENT, COMPLETED).

Such a report can be retrieved via two alternative methods: (1) as a CompletionReport object; (2) in CSV format.

The following code samples illustrate how to retrieve a Completion Report using both methods.

Java Code

// Date and time range to get completion report
Calendar fromCalendar = new GregorianCalendar();
fromCalendar.add(Calendar.DATE, -1);
Date from = fromCalendar.getTime();
 
Calendar toCalendar = new GregorianCalendar();
toCalendar.setTime(new Date(System.currentTimeMillis()));
Date to = toCalendar.getTime();
 
// Get the completion report object
CompletionReport sdkCompletionReport = eslClient.getPackageService().downloadCompletionReport(com.eSignLive.com.esl.sdk.PackageStatus.DRAFT, senderUID, from, to);
 
// Get the completion report in csv format
String csvCompletionReport = eslClient.getPackageService().downloadCompletionReportAsCSV(com.eSignLive.com.esl.sdk.PackageStatus.DRAFT, senderUID, from, to);
 
// Display package id and name of packages in DRAFT from sender
System.out.print("Sender: " + sdkCompletionReport.getSenders().get(0).getSender().getEmail());
System.out.println(" has " + sdkCompletionReport.getSenders().get(0).getPackages().size() + " packages in DRAFT");
for (PackageCompletionReport packageCompletionReport : sdkCompletionReport.getSenders().get(0).getPackages()) {
    System.out.println(packageCompletionReport.getId() + " , " + packageCompletionReport.getName());
}

C# Code

// Date and time range to get completion report
DateTime from = DateTime.Today.AddDays(-1);
DateTime to = DateTime.Now;
 
// Get the completion report object
CompletionReport sdkCompletionReport = eslClient.PackageService.DownloadCompletionReport(DocumentPackageStatus.DRAFT, senderUID, from, to);
 
// Get the completion report in csv format
string csvCompletionReport = eslClient.PackageService.DownloadCompletionReportAsCSV(DocumentPackageStatus.DRAFT, senderUID, from, to);
 
// Display package id and name of packages in DRAFT from sender
Console.Write("Sender: " + sdkCompletionReport.Senders[0].Sender.Email);
Console.WriteLine(" has " + sdkCompletionReport.Senders[0].Packages.Count + " packages in DRAFT");
foreach (PackageCompletionReport packageCompletionReport in sdkCompletionReport.Senders[0].Packages) {
    Console.WriteLine(packageCompletionReport.Id + " , " + packageCompletionReport.Name);
}

Retrieving a Usage Report

A Usage Report contains: (1) a list of all senders on an account; (2) for each sender, the number of transactions and their signing statuses (e.g., DRAFT, SENT, COMPLETED).

Such a report can be retrieved via two alternative methods: (1) as a UsageReport object; (2) in CSV format.

The following code samples illustrate how to retrieve a Usage Report using both methods.

Java Code

package com.eSignLive.com.esl.sdk.examples;

import com.eSignLive.com.esl.sdk.*;
import com.eSignLive.com.esl.sdk.builder.FieldBuilder;
import com.eSignLive.com.esl.sdk.internal.Converter;

import java.io.InputStream;
import java.text.SimpleDateFormat;
import java.util.*;

import static com.eSignLive.com.esl.sdk.builder.DocumentBuilder.newDocumentWithName;
import static com.eSignLive.com.esl.sdk.builder.PackageBuilder.newPackageNamed;
import static com.eSignLive.com.esl.sdk.builder.SignatureBuilder.signatureFor;
import static com.eSignLive.com.esl.sdk.builder.SignerBuilder.newSignerWithEmail;
import static org.joda.time.DateMidnight.now;

public class DownloadCompletionAndUsageReportExample extends SDKSample {

  public final String email1;
  private String senderUID;
  private InputStream documentInputStream1;

  public com.eSignLive.com.esl.sdk.CompletionReport sdkCompletionReportForSender;
  public com.eSignLive.com.esl.sdk.CompletionReport sdkCompletionReport;
  public com.eSignLive.com.esl.sdk.UsageReport sdkUsageReport;
  public String csvCompletionReportForSender;
  public String csvCompletionReport;
  public String csvUsageReport;

  public static void main(String... args) {
    new DownloadCompletionAndUsageReportExample(Props.get()).run();
  }

  public DownloadCompletionAndUsageReportExample(Properties properties) {
    this(properties.getProperty("api.key"),
      properties.getProperty("api.url"),
      properties.getProperty("1.email"));
  }

  public DownloadCompletionAndUsageReportExample(String apiKey, String apiUrl, String email1) {
    super(apiKey, apiUrl);
    this.email1 = email1;
    this.senderUID = Converter.apiKeyToUID(apiKey);
    documentInputStream1 = this.getClass().getClassLoader().getResourceAsStream("document.pdf");
  }
  @Override
  public void execute() {
    DocumentPackage superDuperPackage = newPackageNamed( "DownloadCompletionAndUsageReport " + new SimpleDateFormat( "HH:mm:ss" ).format( new Date() ) )
    .describedAs("This is a package created using the eSignLive SDK")
    .expiresAt(now().plusMonths(1).toDate())
    .withEmailMessage("This message should be delivered to all signers")
    .withSigner(newSignerWithEmail(email1)
      .withFirstName("John")
      .withLastName("Smith")
      .withTitle("Managing Director")
      .withCustomId("signer1")
      .withCompany("Acme Inc."))
    .withDocument(newDocumentWithName("First Document")
      .fromStream(documentInputStream1, DocumentType.PDF)
      .withSignature(signatureFor(email1)
        .onPage(0)
        .atPosition(100, 100)
        .withField(FieldBuilder.textField()
          .onPage(0)
          .atPosition(400, 100)
          .withSize(200, 50))))
    .build();

    packageId = eslClient.createPackage(superDuperPackage);

    // Date and time range to get completion/usage report.
    Calendar fromCalendar = new GregorianCalendar();
    fromCalendar.add(Calendar.DATE, -1);
    Date from = fromCalendar.getTime();

    Calendar toCalendar = new GregorianCalendar();
    toCalendar.setTime(new Date(System.currentTimeMillis()));
    Date to = toCalendar.getTime();

    // Download the completion report for a sender
    sdkCompletionReportForSender = eslClient.getPackageService().downloadCompletionReport(PackageStatus.DRAFT, senderUID, from, to);
    csvCompletionReportForSender = eslClient.getPackageService().downloadCompletionReportAsCSV(com.eSignLive.com.esl.sdk.PackageStatus.DRAFT, senderUID, from, to);

    // Display package id and name of packages in DRAFT from sender
    for(SenderCompletionReport senderCompletionReport : sdkCompletionReportForSender.getSenders()) {
      System.out.print("Sender: " + senderCompletionReport.getSender().getEmail());
      System.out.println(" has " + senderCompletionReport.getPackages().size() + " packages in DRAFT");
      for (PackageCompletionReport packageCompletionReport : senderCompletionReport.getPackages()) {
        System.out.println(packageCompletionReport.getId() + " , " + packageCompletionReport.getName() + " , Sender : " + getEslClient().getPackage(new PackageId(packageCompletionReport.getId())).getSenderInfo().getEmail());
      }
    }

    // Download the completion report for all senders
    sdkCompletionReport = eslClient.getPackageService().downloadCompletionReport(com.eSignLive.com.esl.sdk.PackageStatus.DRAFT, from, to);
    csvCompletionReport = eslClient.getPackageService().downloadCompletionReportAsCSV(com.eSignLive.com.esl.sdk.PackageStatus.DRAFT, from, to);

    // Display package id and name of packages in DRAFT from sender
    System.out.println();
    for(SenderCompletionReport senderCompletionReport : sdkCompletionReport.getSenders()) {
      System.out.print("Sender: " + senderCompletionReport.getSender().getEmail());
      System.out.println(" has " + senderCompletionReport.getPackages().size() + " packages in DRAFT");

      for (PackageCompletionReport packageCompletionReport : senderCompletionReport.getPackages()) {
        System.out.println(packageCompletionReport.getId() + " , " + packageCompletionReport.getName() + " , Sender : " + getEslClient().getPackage(new PackageId(packageCompletionReport.getId())).getSenderInfo().getEmail());
      }
    }

    // Download the usage report
    sdkUsageReport = eslClient.getPackageService().downloadUsageReport(from, to);
    csvUsageReport = eslClient.getPackageService().downloadUsageReportAsCSV(from, to);
  }
}

C# Code

using System;
using System.IO;
using eSignLive.com.ESL.SDK;
using eSignLive.com.ESL.SDK.Builder;
using eSignLive.com.ESL.SDK.Internal;
using System.Collections.Generic;

namespace SDK.Examples
{
  public class DownloadCompletionAndUsageReportExample : SDKSample
  {
    public string email1;
    private string senderUID;
    private Stream fileStream1;

    public eSignLive.com.ESL.SDK.CompletionReport sdkCompletionReportForSender;
    public eSignLive.com.ESL.SDK.CompletionReport sdkCompletionReport;
    public eSignLive.com.ESL.SDK.UsageReport sdkUsageReport;
    public string csvCompletionReportForSender;
    public string csvCompletionReport;
    public string csvUsageReport;


    public static void Main(string[] args)
    {
      new DownloadCompletionAndUsageReportExample(Props.GetInstance()).Run();
    }

    public DownloadCompletionAndUsageReportExample(Props props) : this(props.Get("api.key"), props.Get("api.url"), props.Get("1.email"))
    {
    }

    public DownloadCompletionAndUsageReportExample(string apiKey, string apiUrl, string email1) : base( apiKey, apiUrl )
    {
      this.email1 = email1;
      this.senderUID = Converter.apiKeyToUID(apiKey);
      this.fileStream1 = File.OpenRead(new FileInfo(Directory.GetCurrentDirectory() + "/src/document.pdf").FullName);
    }

    override public void Execute()
    {
      DocumentPackage superDuperPackage =
      PackageBuilder.NewPackageNamed("DownloadCompletionAndUsageReport: " + DateTime.Now)
      .DescribedAs("This is a package created using the eSignLive SDK")
      .ExpiresOn(DateTime.Now.AddMonths(100))
      .WithEmailMessage("This message should be delivered to all signers")
      .WithSigner(SignerBuilder.NewSignerWithEmail(email1)
        .WithCustomId("Client1")
        .WithFirstName("John")
        .WithLastName("Smith")
        .WithTitle("Managing Director")
        .WithCompany("Acme Inc.")
        )
      .WithDocument(DocumentBuilder.NewDocumentNamed("First Document")
        .FromStream(fileStream1, DocumentType.PDF)
        .WithSignature(SignatureBuilder.SignatureFor(email1)
          .OnPage(0)
          .WithField(FieldBuilder.CheckBox()
            .OnPage(0)
            .AtPosition(400, 200)
            .WithValue(FieldBuilder.CHECKBOX_CHECKED)
            )
          .AtPosition(100, 100)
          )
        )
      .Build();

      packageId = eslClient.CreatePackage(superDuperPackage);

      // Date and time range to get completion report.
      DateTime from = DateTime.Today.AddDays(-1);
      DateTime to = DateTime.Now;

      // Download the completion report for a sender
      sdkCompletionReportForSender = eslClient.PackageService.DownloadCompletionReport(DocumentPackageStatus.DRAFT, senderUID, from, to);
      csvCompletionReportForSender = eslClient.PackageService.DownloadCompletionReportAsCSV(DocumentPackageStatus.DRAFT, senderUID, from, to);

      // Display package id and name of packages in DRAFT from sender
      foreach(SenderCompletionReport senderCompletionReport in sdkCompletionReportForSender.Senders) {
        Console.Write("Sender: " + senderCompletionReport.Sender.Email);
        Console.WriteLine(" has " + senderCompletionReport.Packages.Count + " packages in DRAFT");
        foreach (PackageCompletionReport packageCompletionReport in senderCompletionReport.Packages) {
          Console.WriteLine(packageCompletionReport.Id + " , " + packageCompletionReport.Name + " , Sender : " + eslClient.GetPackage(new PackageId(packageCompletionReport.Id)).SenderInfo.Email);
        }
      }

      // Download the completion report for all senders
      sdkCompletionReport = eslClient.PackageService.DownloadCompletionReport(DocumentPackageStatus.DRAFT, from, to);
      csvCompletionReport = eslClient.PackageService.DownloadCompletionReportAsCSV(DocumentPackageStatus.DRAFT, from, to);

      // Display package id and name of packages in DRAFT from sender
      foreach(SenderCompletionReport senderCompletionReport in sdkCompletionReport.Senders) {
        Console.Write("Sender: " + senderCompletionReport.Sender.Email);
        Console.WriteLine(" has " + senderCompletionReport.Packages.Count + " packages in DRAFT");
        foreach (PackageCompletionReport packageCompletionReport in senderCompletionReport.Packages) {
          Console.WriteLine(packageCompletionReport.Id + " , " + packageCompletionReport.Name + " , Sender : " + eslClient.GetPackage(new PackageId(packageCompletionReport.Id)).SenderInfo.Email);
        }
      }

      // Download the usage report
      sdkUsageReport = eslClient.PackageService.DownloadUsageReport(from, to);
      csvUsageReport = eslClient.PackageService.DownloadUsageReportAsCSV(from, to);

      // Get the number of packages in draft for sender
      IDictionary<UsageReportCategory, int> categoryCounts = sdkUsageReport.SenderUsageReports[0].CountByUsageReportCategory;
      int numOfDrafts = categoryCounts[UsageReportCategory.DRAFT];
    }
  }
}

Retrieving IPEN Journal Entries

IPEN Journal entries can be retrieved in either JSON format or CSV format. The following code samples illustrate how to do both.

Java Code

package com.eSignLive.com.esl.sdk.examples;

import com.eSignLive.com.esl.sdk.NotaryJournalEntry;
import com.eSignLive.com.esl.sdk.internal.Converter;

import java.util.List;
import java.util.Properties;

public class NotaryJournalExample extends SDKSample {
 
  public List<NotaryJournalEntry> sdkJournalEntries;
  public String csvJournalEntries;
  private String senderUID;
  
  public static void main( String... args ) {
    new NotaryJournalExample(Props.get()).run();
  }
  
  public NotaryJournalExample( Properties props ) {
    this( props.getProperty( "api.key" ),
      props.getProperty( "api.url" ) );
  }
  
  public NotaryJournalExample( String apiKey, String apiUrl ) {
    super( apiKey, apiUrl );
    this.senderUID = Converter.apiKeyToUID(apiKey);
  }
  
  public void execute() {
    sdkJournalEntries = eslClient.getPackageService().getJournalEntries(senderUID);
    csvJournalEntries = eslClient.getPackageService().getJournalEntriesAsCSV(senderUID);
  }
}

C# Code

using System;
using System.Collections.Generic;
using eSignLive.com.ESL.SDK;
using eSignLive.com.ESL.SDK.Internal;

namespace SDK.Examples
{
  public class NotaryJournalExample : SDKSample
  {
    public List<NotaryJournalEntry> sdkJournalEntries;
    public string csvJournalEntries;
    private string senderUID;
    
    public static void Main(string[] args)
    {
      new NotaryJournalExample(Props.GetInstance()).Run();
    }
    
    public NotaryJournalExample(Props props) : this(props.Get("api.key"), props.Get("api.url"))
    {
    }
    
    public NotaryJournalExample(string apiKey, string apiUrl) : base(apiKey, apiUrl)
    {
      this.senderUID = Converter.apiKeyToUID(apiKey);
    }
    
    override public void Execute()
    {
      sdkJournalEntries = eslClient.PackageService.GetJournalEntries(senderUID);
      csvJournalEntries = eslClient.PackageService.GetJournalEntriesAsCSV(senderUID);
    }
  }
}


Was this article helpful?

Changing your password will log you out immediately. Use the new password to log back in.
First name must have atleast 2 characters. Numbers and special characters are not allowed.
Last name must have atleast 1 characters. Numbers and special characters are not allowed.
Enter a valid email
Enter a valid password
Your profile has been successfully updated.
ESC

Ozzy, our interactive help assistant