---
schema_version: "1"
id: c049520c524253d6639fd3063bfa9d2d5b54264d1adf294d4bb3474b05cc5e78
title: Update Product Assortment
collection: legacydeveloper
version: current
locale: en-us
portal_url: https://docs.salesforce.com/legacydeveloper/current/en-us/retail_api/cgtpm_update_product_assortment.md
canonical_url: https://developer.salesforce.com/docs/atlas.en-us.retail_api.meta/retail_api/cgtpm_update_product_assortment.htm
source_site: developer.salesforce.com
content_type: documentation
content_hash: 8f51f8c7237b818b7cd22b43087a887ea2edb4b53efab68de58a2d940553e887
description: Receives a list of products within the time-dependent account product list and updates it.
---
# Update Product Assortment

Receives a list of products within the time-dependent account product list and updates it.

Soft limits:

- Maximum number of products per assortment is based on MaxNumberOfProductsPerAssortment. Default value is 10000.

![Note](https://developer.salesforce.com/docs/atlas.en-us.retail_api.meta/retail_api/images/icon_note.png)

#### Note

To submit large number of items, see [Begin Job Scheduling Transaction](https://developer.salesforce.com/docs/atlas.en-us.retail_api.meta/retail_api/cgtpm_begin_job_sch_transaction.htm "Begin a scheduling transaction for a job in a job chain. The job either starts an open transaction (if the number of job items is not announced) that must be explicitly committed to, or communicates the expected number of job items to the off-platform system.").

## Resource

UPDATE\_PRODUCT\_ASSORTMENT

## Available version

55.0

## Apex Request Example

String DEFAULT\_JOBNAME = 'Update';
Integer DEFAULT\_JOBTHREADS = 1;
String DEFAULT\_BATCHCHAIN = 'Assortment';
String DEFAULT\_BATCHCHAINTYPE = 'paapla';
Id assortmentId = 'assortmentId1';
List<Map<String, Object\>> papList = new List<Map<String, Object\>>();
Set<Id> accountIds = new Set<Id>();
Assortment productAssortment = \[
    SELECT Id, cgcloud\_\_Sales\_Org\_\_c, cgcloud\_\_Valid\_From\_\_c, cgcloud\_\_Valid\_Thru\_\_c, cgcloud\_\_Version\_\_c
    FROM Assortment
    WHERE Id = :assortmentId
    LIMIT 1
\];
for (AssortmentProduct pap : \[SELECT ProductId, cgcloud\_\_Valid\_From\_\_c, cgcloud\_\_Valid\_Thru\_\_c FROM AssortmentProduct where AssortmentId =: assortmentId\]) {
    papList.add(
        new Map<String, Object\>{
            'sfid' => pap.ProductId,
            'validfrom' => Datetime.newInstanceGmt(pap.cgcloud\_\_Valid\_From\_\_c.year(), pap.cgcloud\_\_Valid\_From\_\_c.month(), pap.cgcloud\_\_Valid\_From\_\_c.day()).getTime(),
            'validthru' => Datetime.newInstanceGmt(pap.cgcloud\_\_Valid\_Thru\_\_c.year(), pap.cgcloud\_\_Valid\_Thru\_\_c.month(), pap.cgcloud\_\_Valid\_Thru\_\_c.day()).getTime()
        }
    );
}
for (
    StoreAssortment customerProductAssortment :  \[
    SELECT Id, AccountId
    FROM StoreAssortment
    WHERE AssortmentId = :assortmentId
\]
) {
    accountIds.add(customerProductAssortment.AccountId);
}
String payload = JSON.serialize(
    new Map<String, Object\> {
        'accountsfids' => accountIds,
        'validfrom' => Datetime.newInstanceGmt(productAssortment.cgcloud\_\_Valid\_From\_\_c.year(), productAssortment.cgcloud\_\_Valid\_From\_\_c.month(), productAssortment.cgcloud\_\_Valid\_From\_\_c.day()).getTime(),
        'validthru' => Datetime.newInstanceGmt(productAssortment.cgcloud\_\_Valid\_Thru\_\_c.year(), productAssortment.cgcloud\_\_Valid\_Thru\_\_c.month(), productAssortment.cgcloud\_\_Valid\_Thru\_\_c.day()).getTime(),
        'version' => productAssortment.cgcloud\_\_Version\_\_c,
        'salesorg' => productAssortment.cgcloud\_\_Sales\_Org\_\_c,
        'products' => papList,
        'jobname' => DEFAULT\_JOBNAME,
        'jobthreads' => DEFAULT\_JOBTHREADS,
        'batchchain' => DEFAULT\_BATCHCHAIN,
        'batchchaintype' => DEFAULT\_BATCHCHAINTYPE
    }
);
<namespace>.OffplatformCallout request = new <namespace>.OffplatformCallout('UPDATE\_PRODUCT\_ASSORTMENT', productAssortment.cgcloud\_\_Sales\_Org\_\_c);
<namespace>.OffPlatformCalloutResponse response = request.execute(
    <namespace>.TransactionHandler.getTransactionIdentifier(),
    new Map<String, String\>{'productassortmentid' => assortmentId},
    payload
);
System.debug(response.status);