In order to use the Campaign Item Calculation API, your Salesforce Org needs to have API usage activated through having an API usage license as well as having the finance module activated with the finance license. |
The Campaign Item Calculation API is implemented as Apex class and is exposed as REST web service by using Salesforce standard functionality (see Apex Developer Guide for more information). For general information about the Campaign Item calculations, see 4.5 Net Calculator . The Campaign Item Calculation functionality calculates the net and gross amounts (B3-N3) and also calculates values in package Campaign Items.
https://<my-domain-name>.my.salesforce.com/services/apexrest/ADvendio/ADvendio__Campaign_Item__c/DoCalculations/
PATCH
A JSON object with the attribute campaignItems, containing a JSON serialized list of Campaign Items.
Example: { "campaignItems":[{<Campaign Item>}, ...]}
Code: 200
Content: A JSON serialized list of the Campaign Items from the request body, but now with updated packages and amount fields.
Example: [{<Campaign Item>}, ...]
See Salesforce Apex REST Documentation
The Campaign Item amounts are calculated by using the Sales Price, the Quantity and the Frequency with all the surcharge and discount fields.
The following fields are calculated by either the amount calculation or the package calculation:
Sales_Price__c, SurchargeSalesPrice__c, SurchargeSalesPricePct__c, Quantity__c, Frequency__c, Amount_B3APEX__c, SurchargeB3__c, SurchargeB3Abs__c, Amount_B2APEX__c, SurchargeB2__c, SurchargeB2Abs__c, AmountAPEX__c, RateDiscount1AbsCustom__c, Quantity_Discount_custom__c, RateDiscount2AbsCustom__c, Rate_Discount_2_custom__c, RateDiscount3AbsCustom__c, Rate_Discount_3_custom__c, RateDiscount4AbsCustom__c, Rate_Discount_4__c, Amount_netAPEX__c, AC__c, Agency_Commission__c, Amount_net_netAPEX__c, ThirdPartyCommissionCustom__c, Amount_net3APEX__c, from_Date__c, until_Date__c, Guaranteed_AI__c, VatAmount__c, VatAmountB__c, AgencyEarnings__c, RateDiscount1Abs__c, RateDiscount2Abs__c, RateDiscount3Abs__c, RateDiscount4Abs__c, ThirdPartyCommissionAbs__c |
curl -v https://login.salesforce.com/services/oauth2/token -d "grant_type=password" -d "client_id=<CLIENT_ID>" -d "client_secret=<CLIENT_SECRET>" -d "username=<USER_NAME>" -d "password=<PASSWORD+TOKEN>" -H 'X-PrettyPrint:1' |
Get CLIENT_ID and CLIENT_SECRET from any connected app or create a new app in your org: App Manager -> New Connected App
A simple request with an existing Campaign Item to calculate the amounts with a new Quantity Discount of 10%.
curl https://<my-domain-name>.my.salesforce.com/services/apexrest/ADvendio/ADvendio__Campaign_Item__c/DoCalculations/ -H 'Authorization: Bearer <SESSION_ID>' -H "Content-Type: application/json" -H 'X-PrettyPrint:1' -d @requestBody.txt --request PATCH |
{ "campaignItems":[ { "Id":"a0Y2K00000Fe82gUAB", "ADvendio__Quantity_Discount_custom__c":10.0 } ] } |
[ { "attributes": { "type": "ADvendio__Campaign_Item__c", "url": "/services/data/v50.0/sobjects/ADvendio__Campaign_Item__c/a0w7Y00000oiqINQAY" }, "ADvendio__RateDiscount1AbsCustom__c": null, "ADvendio__Amount_B3APEX__c": 0.03, "ADvendio__VatAmount__c": 0E-9, "ADvendio__RateDiscount2AbsCustom__c": null, "ADvendio__TaxableAmountType__c": null, "ADvendio__RateDiscount3AbsCustom__c": null, "ADvendio__RateDiscount4AbsCustom__c": null, "ADvendio__Amount_B2APEX__c": 0.03, "ADvendio__RateDiscount1Abs__c": 0.00, "Name": "Google Video Delivery Data", "ADvendio__AC__c": false, "ADvendio__from_Date__c": "2022-01-01", "ADvendio__Amount_netAPEX__c": 0.03, "ADvendio__VatAmountB__c": 0E-9, "ADvendio__SurchargeSalesPrice__c": null, "ADvendio__RateDiscount4Abs__c": 0.00, "ADvendio__SortOrder__c": 9999.0, "ADvendio__Frequency__c": 1.0, "ADvendio__SurchargeB3Abs__c": null, "ADvendio__VatRate__c": null, "ADvendio__PacketItem__c": null, "ADvendio__Guaranteed_AI__c": null, "ADvendio__Quantity__c": 100.0, "ADvendio__Billing_category__c": "CPM", "ADvendio__RateCalculationQuantity__c": null, "ADvendio__Agency_Commission__c": "15", "ADvendio__ThirdPartyCommissionCustom__c": null, "Id": "a0w7Y00000oiqINQAY", "ADvendio__DstRate__c": null, "ADvendio__VatRateB__c": null, "ADvendio__SurchargeB2Abs__c": null, "ADvendio__Quantity_Discount_custom__c": 10.0, "ADvendio__Ad_Price__r": { "attributes": { "type": "ADvendio__Ad_price__c", "url": "/services/data/v50.0/sobjects/ADvendio__Ad_price__c/a0T7Y000005TxIQUA0" }, "ADvendio__NoThirdPartyCommission__c": false, "ADvendio__NoAgencyComission__c": false, "ADvendio__NoCustomerDiscount__c": false, "ADvendio__NoAgencyDiscount__c": false, "ADvendio__Ad_Spec__c": "a0R7Y00000Bi9J6UAJ", "ADvendio__Ad_Spec__r": { "attributes": { "type": "ADvendio__Ad_Specs__c", "url": "/services/data/v50.0/sobjects/ADvendio__Ad_Specs__c/a0R7Y00000Bi9J6UAJ" }, "ADvendio__NoThirdPartyCommission__c": false, "ADvendio__No_Quantity_Discount__c": false, "ADvendio__No_Agency_Discount__c": false, "ADvendio__NoAgencyComission__c": false, "ADvendio__No_Customer_Discount__c": false, "Id": "a0R7Y00000Bi9J6UAJ" }, "ADvendio__NoQuantityDiscount__c": false, "Id": "a0T7Y000005TxIQUA0" }, "ADvendio__Rate_Discount_4__c": null, "ADvendio__Media_Campaign__c": "a217Y000004lOHJQA2", "ADvendio__AmountAPEX__c": 0.03, "ADvendio__AgencyEarnings__c": null, "ADvendio__DstAmount__c": 0, "RecordType": { "attributes": { "type": "RecordType", "url": "/services/data/v50.0/sobjects/RecordType/0127Y000002Kg5VQAS" }, "Id": "0127Y000002Kg5VQAS", "DeveloperName": "Standard", "NamespacePrefix": "ADvendio" }, "ADvendio__SurchargeB3__c": null, "ADvendio__RateDiscount2Abs__c": 0.00, "ADvendio__Rate_Discount_2_custom__c": null, "RecordTypeId": "0127Y000002Kg5VQAS", "ADvendio__Ad_Price__c": "a0T7Y000005TxIQUA0", "ADvendio__Prorated__c": null, "ADvendio__ThirdPartyCommissionAbs__c": 0.00, "ADvendio__Rate_Discount_3_custom__c": null, "ADvendio__SurchargeSalesPricePct__c": null, "ADvendio__Amount_net3APEX__c": 0.03, "ADvendio__Amount_net_netAPEX__c": 0.03, "ADvendio__until_Date__c": "2022-12-31", "ADvendio__SurchargeB2__c": null, "ADvendio__Sales_Price__c": 0.34, "ADvendio__RateDiscount3Abs__c": 0.00 } ] |
A simple request with a Campaign Item we want to create, to calculate the amounts.
curl https://<my-domain-name>.my.salesforce.com/services/apexrest/ADvendio/ADvendio__Campaign_Item__c/DoCalculations/ -H 'Authorization: Bearer <SESSION_ID>' -H "Content-Type: application/json" -H 'X-PrettyPrint:1' -d @requestBody.txt --request PATCH |
{ "campaignItems": [ { "ADvendio__from_Date__c": "2023-05-22", "ADvendio__until_Date__c": "2023-05-28", "ADvendio__Quantity__c": 1.00, "ADvendio__Sales_Price__c": 100.000000000, "ADvendio__Quantity_Discount_custom__c": 10.0, "ADvendio__Ad_Price__c": "a0T7Y000005TxIWUA0", "ADvendio__Billing_category__c": "CPW" } ] } |
[ { "attributes": { "type": "ADvendio__Campaign_Item__c", "url": "/services/data/v50.0/sobjects/ADvendio__Campaign_Item__c/a0w000000000002" }, "ADvendio__Amount_B3APEX__c": 100.00, "ADvendio__VatAmount__c": null, "ADvendio__RateDiscount1AbsCustom__c": null, "ADvendio__SurchargeB2Abs__c": null, "ADvendio__Quantity_Discount_custom__c": 10.0, "ADvendio__Ad_Price__r": { "attributes": { "type": "ADvendio__Ad_price__c", "url": "/services/data/v50.0/sobjects/ADvendio__Ad_price__c/a0T7Y000005TxIWUA0" }, "ADvendio__NoThirdPartyCommission__c": false, "ADvendio__NoAgencyComission__c": false, "ADvendio__NoCustomerDiscount__c": false, "ADvendio__NoAgencyDiscount__c": false, "ADvendio__Ad_Spec__c": "a0R7Y00000Bi9JBUAZ", "ADvendio__Ad_Spec__r": { "attributes": { "type": "ADvendio__Ad_Specs__c", "url": "/services/data/v50.0/sobjects/ADvendio__Ad_Specs__c/a0R7Y00000Bi9JBUAZ" }, "ADvendio__NoThirdPartyCommission__c": false, "ADvendio__No_Quantity_Discount__c": false, "ADvendio__No_Agency_Discount__c": false, "ADvendio__NoAgencyComission__c": false, "ADvendio__No_Customer_Discount__c": false, "Id": "a0R7Y00000Bi9JBUAZ" }, "ADvendio__NoQuantityDiscount__c": false, "Id": "a0T7Y000005TxIWUA0" }, "ADvendio__RateDiscount2AbsCustom__c": null, "ADvendio__Rate_Discount_4__c": null, "ADvendio__Media_Campaign__c": "a21000000000001", "ADvendio__AmountAPEX__c": 100.00, "ADvendio__AgencyEarnings__c": null, "ADvendio__RateDiscount3AbsCustom__c": null, "ADvendio__Amount_B2APEX__c": 100.00, "ADvendio__RateDiscount4AbsCustom__c": null, "ADvendio__RateDiscount1Abs__c": 10.00, "ADvendio__AC__c": false, "ADvendio__from_Date__c": "2023-05-22", "ADvendio__Amount_netAPEX__c": 90.00, "ADvendio__DstAmount__c": 0, "ADvendio__VatAmountB__c": null, "ADvendio__SurchargeB3__c": null, "ADvendio__SurchargeSalesPrice__c": null, "ADvendio__Rate_Discount_2_custom__c": null, "ADvendio__RateDiscount2Abs__c": 0.00, "ADvendio__RateDiscount4Abs__c": 0.00, "ADvendio__Ad_Price__c": "a0T7Y000005TxIWUA0", "ADvendio__Frequency__c": null, "ADvendio__ThirdPartyCommissionAbs__c": 0.00, "ADvendio__SurchargeB3Abs__c": null, "ADvendio__Quantity__c": 1.0, "ADvendio__Guaranteed_AI__c": null, "ADvendio__Billing_category__c": "CPW", "ADvendio__Rate_Discount_3_custom__c": null, "ADvendio__SurchargeSalesPricePct__c": null, "ADvendio__Agency_Commission__c": "0", "ADvendio__Amount_net_netAPEX__c": 90.00, "ADvendio__Amount_net3APEX__c": 90.00, "ADvendio__ThirdPartyCommissionCustom__c": null, "ADvendio__until_Date__c": "2023-05-28", "ADvendio__SurchargeB2__c": null, "ADvendio__Sales_Price__c": 100.0, "Id": "a0w000000000002", "ADvendio__DstRate__c": null, "ADvendio__RateDiscount3Abs__c": 0.00 } ] |
A simple request with multiple Campaign Items in the same Media Campaign we want to create, to calculate the amounts.
curl https://<my-domain-name>.my.salesforce.com/services/apexrest/ADvendio/ADvendio__Campaign_Item__c/DoCalculations/ -H 'Authorization: Bearer <SESSION_ID>' -H "Content-Type: application/json" -H 'X-PrettyPrint:1' -d @requestBody.txt --request PATCH |
In this part you need to execute the an Apex method through the developer console in order to obtain a valid virtual MC Id.
System.debug(CheckAvailabilityService.getFakeId(MediaCampaign__c.SObjectType));
Then the following request can be used:
{ "campaignItems": [ { "ADvendio__from_Date__c": "2023-05-22", "ADvendio__until_Date__c": "2023-05-28", "ADvendio__Quantity__c": 1.00, "ADvendio__Sales_Price__c": 100.000000000, "ADvendio__Quantity_Discount_custom__c": 10.0, "ADvendio__Ad_Price__c": "a0T7Y000005TxIWUA0", "ADvendio__Billing_category__c": "CPW" }, { "ADvendio__from_Date__c": "2001-01-01", "ADvendio__until_Date__c": "2002-02-02", "ADvendio__Quantity__c": 1.00, "ADvendio__Sales_Price__c": 100.000000000, "ADvendio__Quantity_Discount_custom__c": 10.0, "ADvendio__Ad_Price__c": "a0T7Y000005TxIWUA0", "ADvendio__Billing_category__c": "CPW" } ] } |
A simple request with an existing Campaign Item to calculate the amounts for a package.
curl https://<my-domain-name>.my.salesforce.com/services/apexrest/ADvendio/ADvendio__Campaign_Item__c/DoCalculations/ -H 'Authorization: Bearer <SESSION_ID>' -H "Content-Type: application/json" -H 'X-PrettyPrint:1' -d @requestBody.txt --request PATCH |
{ "campaignItems": [ { "Id": "a0w7Y00000oirY1QAI", "ADvendio__from_Date__c": "2023-05-22", "ADvendio__until_Date__c": "2023-05-28" }, { "Id": "a0w7Y00000oirY3QAI" }, { "Id": "a0w7Y00000oirY4QAI" } ] } |
List<ADvendio__Campaign_Item__c> cis = ... cis = ADvendio.ItemCalculationsService.doCalculations(cis); |