i95dev
Blog
 

Handling 1000+ records in MS Dynamics Great Plains

When a call is made to GetCustomerList method, only the first 1000 records are received. . This is not possible in the GP 10 because the number of records for the GetCustomerList is fixed to 1000 in the Dynamics GP Web Service. To receive the complete list of the customers from the RM00101 table, use the following code.

To call more than 1000 records call the GetCustomerList in a loop. Use the last customer number from the first 1000 records and get the next 1000 records from that customer number.

C# Program Code

CompanyKey companyKey;
Context context;

// Create an instance of the web service

GPWebReference.DynamicsGP wsDynamicsGP = new DynamicsGP();

//Web Service credentials

wsDynamicsGP.Credentials = new System.Net.NetworkCredential(“DomainUserName”, “DomainPassword”,”DomainName”);

// Create a context with which to call the web service

context = new Context();

// Specify which company to use (sample company)

companyKey = new CompanyKey();

companyKey.Id = -1;

// Set up the context

context.OrganizationKey = (OrganizationKey)companyKey;

context.CultureName = “en-US”;

// Create variables to store the last customer ID and Name returned by the GetCustomerList method.

string strLastCustomerNumber = “”;

string strLastCustomerName = “”;

// When results are returned by method call, this variable will be set to 1

int intResultsExist = 0;

// Create a CustomerCriteria object

CustomerCriteria customerCriteria = new CustomerCriteria();

// Create a LikeRestrictionOfstring for Customer Name that starts with a C

LikeRestrictionOfString customerNameCriteria = new LikeRestrictionOfString();

customerNameCriteria.Like = “%”;

// Create a LikeRestriction for Customer ID used later

LikeRestrictionOfString customerIDCriteria = new LikeRestrictionOfString();

// Create CustomerSummary object

CustomerSummary[] customerSummaryList;

try

{

// Set Customer Name Criteria for first GetCustomerList call

customerCriteria.Name = customerNameCriteria;

// Retrieve the list of customer summaries

customerSummaryList = wsDynamicsGP.GetCustomerList(customerCriteria, context);

// Create a for loop.

int intCustomerCount = 0;

// Create a counter to track number of customers

int totalCustomerCount = 0;

/***********Do some operation to save the customers into a temporary object ***********/

// Obtain the customer Id and name of last customer returned.

strLastCustomerNumber = customerSummaryList[customerSummaryList.Length – 1].Key.Id;

strLastCustomerName = customerSummaryList[customerSummaryList.Length – 1].Name;

// Set the total counter

totalCustomerCount = intCustomerCount;

// Check the iCustomerCount to see we need to call the GetCustomerList method again.

if (intCustomerCount >= 1000)

{

// Set iResultsExist = 1 which indicates results are still being returned from the Web service method call

intResultsExist = 1;

// While iResultsExist = 1, call the GetCustomerList

while (intResultsExist == 1)

{

/* Add Criteria restriction to return customers where the Customer ID is larger than the last Customer ID returned.*/

customerIDCriteria.GreaterThan = strLastCustomerNumber;

customerCriteria.Id = customerIDCriteria;

//Call GetCustomerList to obtain the next 1000 customers

customerSummaryList = wsDynamicsGP.GetCustomerList(customerCriteria, context);

/***********Do some operation to add these customers to the temporary object***********/

//Obtain the Id of the last customer returned.

strLastCustomerNumber = customerSummaryList[intCustomerCount].Key.Id;

strLastCustomerName = customerSummaryList[intCustomerCount].Name;

// Add to the Total Customer Counter

totalCustomerCount = totalCustomerCount + intCustomerCount;

// Evaluate whether iCustomerCount is larger than or equal to 1000. If it is, set the iResultsExist and call the GetCustomerList method again.

if (intCustomerCount >= 1000)

{

//Set iResultsExist = 1 and call GetCustomerList again.

intResultsExist = 1;

}

else

{

//Set iResultsExist = 0 and exit the while statement

intResultsExist = 0;

}

}

}

}

catch (Exception ex)

{

throw ex;

}

No Comments

Leave a Comment