[SalesForce] only update 200 records at once with SOAP API? Enterprise WSDL Limitation

We used Enterprise WSDL to integrate external system to Salesforce. When I try to update the records of a particular field in opportunity, it throws an error that I cannot submit records more than 200. Similarly in getting the records. Is it really the number of records you can retrieve, update, insert to an object is 200? If it is, can I use an offset?

Best Answer

Updating the database using SOAP API

You can only send 200 records at once to the DML operations

  • create
  • update
  • upsert
  • delete

This is in the documentation under Reference > Core Calls for each of the DML calls. eg from the entry for upsert:

Arguments:

ExternalIDFieldName string Contains the name of the field on this object with the external ID field attribute for custom objects or the idLookup field property for standard objects. The idLookup field property is usually on a field that is the object's ID field or name field, but there are exceptions, so check for the presence of the property in the object you wish to upsert().

sObjects sObject[] Array of one or more records (maximum of 200) to create or update.

Fetching records using the SOAP API

You can retrieve up to 2000 records at once. From the same documentation, listed under the query call:

The query result object contains up to 500 rows of data by default. If the query results exceed 500 rows, then the client application uses the queryMore() call and a server-side cursor to retrieve additional rows in 500-row chunks. You can increase the default size up to 2,000 in the QueryOptions header. For more details see Change the Batch Size in Queries in the Force.com SOQL and SOSL Reference.

Bulk API

If you are going to be writing and retrieving huge numbers of records and 200 upload, 2000 download is too small for the number of records you're expecting to be writing, consider using the Bulk API.