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.

To submit large number of items, see Begin Job Scheduling Transaction.

Note

Resource 

1UPDATE_PRODUCT_ASSORTMENT

Available version 

55.0

Apex Request Example 

1String DEFAULT_JOBNAME = 'Update';
2Integer DEFAULT_JOBTHREADS = 1;
3String DEFAULT_BATCHCHAIN = 'Assortment';
4String DEFAULT_BATCHCHAINTYPE = 'paapla';
5Id assortmentId = 'assortmentId1';
6List<Map<String, Object>> papList = new List<Map<String, Object>>();
7Set<Id> accountIds = new Set<Id>();
8Assortment productAssortment = [
9    SELECT Id, cgcloud__Sales_Org__c, cgcloud__Valid_From__c, cgcloud__Valid_Thru__c, cgcloud__Version__c
10    FROM Assortment
11    WHERE Id = :assortmentId
12    LIMIT 1
13];
14for (AssortmentProduct pap : [SELECT ProductId, cgcloud__Valid_From__c, cgcloud__Valid_Thru__c FROM AssortmentProduct where AssortmentId =: assortmentId]) {
15    papList.add(
16        new Map<String, Object>{
17            'sfid' => pap.ProductId,
18            'validfrom' => Datetime.newInstanceGmt(pap.cgcloud__Valid_From__c.year(), pap.cgcloud__Valid_From__c.month(), pap.cgcloud__Valid_From__c.day()).getTime(),
19            'validthru' => Datetime.newInstanceGmt(pap.cgcloud__Valid_Thru__c.year(), pap.cgcloud__Valid_Thru__c.month(), pap.cgcloud__Valid_Thru__c.day()).getTime()
20        }
21    );
22}
23for (
24    StoreAssortment customerProductAssortment :  [
25    SELECT Id, AccountId
26    FROM StoreAssortment
27    WHERE AssortmentId = :assortmentId
28]
29) {
30    accountIds.add(customerProductAssortment.AccountId);
31}
32String payload = JSON.serialize(
33    new Map<String, Object> {
34        'accountsfids' => accountIds,
35        'validfrom' => Datetime.newInstanceGmt(productAssortment.cgcloud__Valid_From__c.year(), productAssortment.cgcloud__Valid_From__c.month(), productAssortment.cgcloud__Valid_From__c.day()).getTime(),
36        'validthru' => Datetime.newInstanceGmt(productAssortment.cgcloud__Valid_Thru__c.year(), productAssortment.cgcloud__Valid_Thru__c.month(), productAssortment.cgcloud__Valid_Thru__c.day()).getTime(),
37        'version' => productAssortment.cgcloud__Version__c,
38        'salesorg' => productAssortment.cgcloud__Sales_Org__c,
39        'products' => papList,
40        'jobname' => DEFAULT_JOBNAME,
41        'jobthreads' => DEFAULT_JOBTHREADS,
42        'batchchain' => DEFAULT_BATCHCHAIN,
43        'batchchaintype' => DEFAULT_BATCHCHAINTYPE
44    }
45);
46<namespace>.OffplatformCallout request = new <namespace>.OffplatformCallout('UPDATE_PRODUCT_ASSORTMENT', productAssortment.cgcloud__Sales_Org__c);
47<namespace>.OffPlatformCalloutResponse response = request.execute(
48    <namespace>.TransactionHandler.getTransactionIdentifier(),
49    new Map<String, String>{'productassortmentid' => assortmentId},
50    payload
51);
52System.debug(response.status);