Du är här:
Använd avancerad transaktionsdetaljprissättning för att mappa egna fält
Användare kan uppdatera egna fält i försäljningstransaktionsobjekt eller försäljningstransaktionsobjektdetaljer genom prissättningsprocesser genom att använda funktionen Avancerad detaljradprissättning. Med denna funktion behöver användare inte längre använda egna utlösare eller flöden för att uppdatera dessa fält. Denna funktion är användbar för användningsfall för ändring, förnyelse och annullering.
Versioner som krävs
| Tillgängliga i: Lightning Experience |
| Tillgängliga i: Enterprise, Unlimited och Developer Editions av Revenue Cloud där transaktionshantering är aktiverat |
| Användarbehörigheter som krävs | |
|---|---|
| Konfigurera och använda avancerad detaljlinjeprissättning: | Salesforce-administratör OCH Behörighetsuppsättningen Användare av prissättningsdesigntid |
Innan du börjar, utför dessa uppgifter.
- För att slå på funktionen Avancerad detaljradprissättning: i Inställningar, hitta och välj Intäktsinställningar och slå sedan på inställningen Avancerad detaljradprissättning.
- Konfigurera din prissättningsprocess.
- Lägg till mappningar av sammanhangstaggar i radartikelelementet för prissättningsprocedurmappning med JSON
För att konfigurera en prissättningsprocess för att använda avancerad detaljlinjeprissättning, kopiera och klistra in kartradartikeln JSON i en prissättningsprocess i Intäktsprissättning. - Lägg till mappningar av sammanhangstaggar i radartikelelementet Discovery-procedurkarta med JSON
För att konfigurera en upptäcktsprocess för att använda avancerad detaljlinjeprissättning med deriverade prissättningsprodukter, kopiera och klistra in kartradartikeln för deriverad prissättnings-JSON till en upptäcktsprocess i Intäktsprissättning.
Uppdatera prissättningsförfarande för intäkter
För att konfigurera avancerad detaljprissättning, ändra din intäktsprissättningsprocess.
- Sök fram och öppna Prissättningsprocesser i Appstartaren och välj sedan en prissättningsprocess att uppdatera.
- Ändra prissättningsförfarandet genom att lägga till ett nytt kartradartikelelement som det andra elementet bredvid prissättningsinställningen i prissättningsförfarandet.
-
Lägg till mappningar av sammanhangstaggar i kartradartikeln.
Indatavariabel
Utdatavariabel
LineItem
SalesTrxnItemDetailSource
LineItemQuantity
ItemDetailQuantity
NetUnitPrice
ItemDetailNetUnitPrice
price_water_fall
DetailPriceWaterfallIdentifier
InputUnitPrice
ItemDetailUnitPrice
ItemBillingReference
ItemDetailBillingReference
ItemNetTotalPrice
ItemDetailTotalPrice
Total radbelopp
ItemDetailTotalLineAmount
Gällerfrån
ItemDetailEffectiveFrom__std
EffectiveTo
ItemDetailEffectiveTo__std
PricingTermCount
ItemDetailPricingTermCount__std
itemTransientEndDate
ItemDetailTransientEndDate__std
ItemPricingSource
ItemDetailPricingSource__std
DerivedPricingAttribute
ItemDetailDerivedPricingAttribute__std
ItemGroupSummarySubtotal
ItemDetailGroupSummaryTotal__std
ListPrice
ItemDetailListPrice__std
IsContracted
ItemDetailIsContracted__std
ItemContractPrice
ItemDetailContractPrice__std
STI_TenantName__c
STID_TenantName__c
När du har lagt till mappningarna för sammanhangstaggar ser du standardmappningarna mellan SalesTransaction och SalesTransactionItemDetail med uppdaterade sammanhangsdefinitioner.
Uppdatera Discovery-procedur för härledd prissättning
Om du använder deriverad prissättning, gör ytterligare ändringar av din upptäcktsprocess efter att du har slutfört ändringarna av din intäktsprissättningsprocess. Dessa ändringar är nödvändiga för att avgöra giltiga bidragande och härledda produkter.
- Sök fram och öppna Upptäcksprocesser i Appstartaren och välj sedan en upptäcksprocess att uppdatera.
-
Lägg till två nya element i upptäcktsförfarandet för prisderiverade produkter: Discovery-inställningar och kartradartikel.
Lägg till dessa variabler i upptäcktsinställningar.
- Indatavariabel: Radartikel
- Utdatavariabel: LineItem
Lägg till dessa variabler i kartradartikeln.- Indatavariabel: SalesTransactionItem
- Utdatavariabel: SalesTransactionItemDetail
Lägg till dessa ytterligare variabler i kartradartikeln.
Indatavariabel
Utdatavariabel
LineItem
SalesTrxnItemDetailSource
Gällerfrån
ItemDetailEffectiveFrom__std
EffectiveTo
ItemDetailEffectiveTo__std
DerivedPricingAttribute
ItemDetailDerivedPricingAttribute__std
-
Stöd för egna fält genom att använda prissättningsprocesser för användningsfall för att ändra, förnya och annullera (ARC).
Konfiguration av egna fält gäller om du använder ARC API och vill använda egna fält.
- Lägg till egna fält i objekten QuoteLineItem, QuoteLineItem Detail, OrderProduct och OrderProductDetails.
- I sammanhangsdefinitionen, skapa en post för dessa egna fält i både SalesTransactionItem- och SalesTransactionItemDetail-noderna.
- Skapa de mappningar som behövs i QuoteEntitiesMapping och OrderEntitiesMapping.
-
Ändra prissättningsförfarandet för intäkter för egna fält.
- I prissättningsförfarandet, ändra MapLineItem-elementet för att lägga till en mappning mellan SalesTransactionItem.CustomField och SalesTransactionItemDetail.CustomField.
-
Skapa de anpassningselement som behövs inom prissättningsförfarandet för att tilldela ett värde till SalesTransactionItem.CustomField.
Prissättningsförfarandet upptäcker automatiskt om en specifik rad har detaljposter och skriver till SalesTransactionItemDetail.CustomField om de finns. Annars skriver den till SalesTransactionItem.CustomField.
Under nya försäljningstransaktioner fylls CustomField i SalesTransactionItem. För ARC-scenarion med detaljlinjer skrivs detaljlinjen till CustomField i SalesTransactionItemDetail. Om inga detaljlinjer skapas för ARC är detaljlinjen den skriven till CustomField på SalesTransactionItem.
-
För att skriva egna fält i QuoteLineItem eller OrderProducts med detaljlinjer, utför denna ytterligare konfiguration som involverar procedurplaner och Apex klasser.
- Aktivera en procedurplan. I Inställningar, hitta och välj Intäktsinställningar och slå på inställningen Orkestrering av processplan för prissättning.
- Skapa en procedurplan för offerten och ordern.
- I förfarandeplanen, kontrollera att alla steg inkluderar elementet MapLineItem. Ändra mappningarna baserat på de fält som används i prissättningsförfarandet.
- Använd detta ApexCustomFieldHandler Apex klassexempel, som du kan utöka för att uppdatera flera egna fält om det behövs. Denna klass frågar SalesTransactionItem och SalesTransactionItemDetail-noder, extraherar egna fältvärden från detaljobjekt och uppdaterar sedan motsvarande egna fält i SalesTransactionItem.
global class ApexCustomFieldHandler implements RevSignaling.SignalingApexProcessor {
public virtual class BaseException extends Exception {}
public class OtherException extends BaseException {}
public RevSignaling.TransactionResponse execute(RevSignaling.TransactionRequest request) {
String contextId = request.ctxInstanceId;
Context.IndustriesContext industriesContext = new Context.IndustriesContext();
// STEP 2 - Query SalesTransactionItem nodes
Map<String, Object> inputQueryItem = new Map<String, Object>{
'contextId' => contextId,
'tags' => new List<String>{ 'SalesTransactionItem', 'SalesTransactionItemDetail' }
};
Map<String, Object> itemQueryOutput = industriesContext.queryTags(inputQueryItem);
Map<String, Object> itemQueryResult = (Map<String, Object>) itemQueryOutput.get('queryResult');
List<Object> itemData = (List<Object>) itemQueryResult.get('SalesTransactionItem');
List<Object> itemDetailData = (List<Object>) itemQueryResult.get('SalesTransactionItemDetail');
Map<String, String> salesTransactionItemIdToCustomAggregatedValue = new Map<String, String>();
// STEP 3 - Custom Field Value from SalesTransactionItemDetail
for(Object itemDetailObj : itemDetailData) {
Map<String, Object> itemDetailNode = (Map<String, Object>) itemDetailObj;
Map<String, Object> detailTagMap = (Map<String, Object>) itemDetailNode.get('tagValue');
String lineItemId = (String)((Map<String, Object>) detailTagMap.get('SalesTrxnItemDetailParent')).get('tagValue');
String cfValue = (String)((Map<String, Object>) detailTagMap.get('STID_TenantName__c')).get('tagValue');
System.debug('Custom Field Value for Detail Item' + cfValue);
if(cfValue != null) {
salesTransactionItemIdToCustomAggregatedValue.put(lineItemId, cfValue);
}
}
// STEP 4 - Build update list
List<Map<String, Object>> itemNodeUpdates = new List<Map<String, Object>>();
for (Object itemObj : itemData) {
Map<String, Object> itemNode = (Map<String, Object>) itemObj;
Map<String, Object> tagMap = (Map<String, Object>) itemNode.get('tagValue');
String lineItemId = (String)((Map<String, Object>) tagMap.get('LineItem')).get('tagValue');
List<Object> dataPath = (List<Object>) itemNode.get('dataPath');
dataPath.remove(0); // Remove contextId
itemNodeUpdates.add(new Map<String, Object>{
'nodePath' => new Map<String, Object>{ 'dataPath' => dataPath },
'attributes' => new List<Object>{
new Map<String, Object>{
'attributeName' => 'STI_TenantName__c',
'attributeValue' => salesTransactionItemIdToCustomAggregatedValue.get(lineItemId)
}
}
});
}
// STEP 5 - Create collection context update
if (!itemNodeUpdates.isEmpty()) {
Map<String, Object> updateInput = new Map<String, Object>{
'contextId' => contextId,
'nodePathAndAttributes' => itemNodeUpdates
};
//Step 6 - Update context
System.debug('--- PREHOOK: SUBMITTING CONTEXT UPDATE ---');
System.debug(JSON.serializePretty(updateInput));
industriesContext.updateContextAttributes(updateInput);
}
RevSignaling.TransactionResponse response = new RevSignaling.TransactionResponse();
response.status = RevSignaling.TransactionStatus.SUCCESS;
return response;
}
}

