breadcrumbDescription
Brug Avanceret prissætning af transaktionsdetaljer for at tilknytte tilpassede felter
Brugere kan opdatere tilpassede felter på salgstransaktionselementer eller salgstransaktionselementdetaljer gennem prissætningsprocedurer ved brug af funktionen Avanceret pris for linje for detaljer. Med denne funktion behøver brugerne ikke længere at bruge tilpassede udløsere eller forløb til at opdatere disse felter. Denne funktion er nyttig til anvendelsessituationer med ændring, fornyelse og annullering.
EditionsHeading
| Tilgængelig i: Lightning Experience |
| Tilgængelig i: Enterprise, Unlimited og Developer Edition af Omsætningsstyring (tidligere Revenue Cloud), hvor Transaktionsstyring er aktiveret |
| Brugertilladelser påkrævet | |
|---|---|
| Hvis du vil opsætte og bruge avanceret pris for linje: | Salesforce-administrator OG Tilladelsessættet Prissætningsdesigntidsbruger |
Før du går i gang, skal du udføre disse opgaver.
- Hvis du vil aktivere funktionen Avanceret detaljepris for linje, skal du i Opsætning finde og vælge Indtjeningsindstillinger og derefter aktivere indstillingen Avanceret detaljepris for linje.
- Konfigurer din prissætningsprocedure.
- Føj konteksttagtilknytninger til elementet Tilknyt linjevare for prissætningsprocedure ved brug af JSON
Hvis du vil konfigurere en prissætningsprocedure til at bruge avanceret pris for linje, skal du kopiere og indsætte kortlinjevaren JSON til en prissætningsprocedure i Omsætningsprissætning. - Føj konteksttagtilknytninger til elementet Discovery-proceduretilknyt linjevare ved brug af JSON
Hvis du vil konfigurere en udforskningsprocedure til at bruge avanceret detaljelinjeprissætning med afledte prissætningsprodukter, skal du kopiere og indsætte kortlinjevaren for afledt prissætning JSON til en udforskningsprocedure i Omsætningsprissætning.
Opdater procedure for omsætningsprissætning
Hvis du vil konfigurere pris for avanceret linje, skal du redigere din omsætningsprissætningsprocedure.
- Fra Appstarter skal du finde og vælge Prisprocedurer og derefter vælge en prissætningsprocedure, der skal opdateres.
- Rediger prissætningsproceduren ved at tilføje et nyt kortlinjevareelement som det andet element ud for prissætningsindstillingen i prissætningsproceduren.
-
Føj konteksttagtilknytninger til kortlinjevaren.
Inputvariabel
Outputvariabel
LineItem
SalesTrxnItemDetailSource
LineItemQuantity
ItemDetailQuantity
NetUnitPrice
ItemDetailNetUnitPrice
price_water_fall
DetailPriceWaterfallIdentifier
InputUnitPrice
ItemDetailUnitPrice
ItemBillingReference
ItemDetailBillingReference
ItemNetTotalPrice
ItemDetailTotalPrice
TotalLineAmount
ItemDetailTotalLineAmount
EffectiveFrom (Effektiv fra)
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 tilføjet konteksttagtilknytninger, ser du standardtilknytningerne mellem SalesTransaction og SalesTransactionItemDetail med opdaterede kontekstdefinitioner.
Opdater afledt prissætningsdiscovery-procedure
Hvis du bruger afledt prissætning, skal du foretage yderligere ændringer af din opdagelsesprocedure, når du har fuldført ændringer af din omsætningsprissætningsprocedure. Disse ændringer er nødvendige for at bestemme gyldige bidragydende og afledte produkter.
- Fra Appstarter skal du finde og vælge Udforskningsprocedurer og derefter vælge en udforskningsprocedure, der skal opdateres.
-
Føj to nye elementer til opdagelsesproceduren for at prissætte afledte produkter: Discovery-indstillinger og Tilknyt linjevare.
Føj disse variabler til Discovery-indstillinger.
- Inputvariabel: Linjevare
- Outputvariabel: LineItem
Føj disse variabler til kortlinjevaren.- Inputvariabel: SalesTransactionItem
- Outputvariabel: SalesTransactionItemDetail
Føj disse yderligere variabler til kortlinjevaren.
Inputvariabel
Outputvariabel
LineItem
SalesTrxnItemDetailSource
EffectiveFrom (Effektiv fra)
ItemDetailEffectiveFrom__std
EffectiveTo
ItemDetailEffectiveTo__std
DerivedPricingAttribute
ItemDetailDerivedPricingAttribute__std
-
Understøt tilpassede felter ved at bruge prissætningsprocedurer til ARC-anvendelsessituationer (rediger, forny og annuller).
Tilpasset feltopsætning er gældende, hvis du bruger ARC-API'er og ønsker at bruge tilpassede felter.
- Føj tilpassede felter til objekterne QuoteLineItem, QuoteLineItem Detail, OrderProduct og OrderProductDetails.
- I kontekstdefinitionen skal du oprette en oplysning for disse tilpassede felter i både SalesTransactionItem- og SalesTransactionItemDetail-noder.
- Opret de påkrævede tilknytninger i QuoteEntitiesMapping og OrderEntitiesMapping.
-
Rediger omsætningsprissætningsproceduren for tilpassede felter.
- I prissætningsproceduren skal du redigere MapLineItem-elementet for at tilføje en tilknytning mellem SalesTransactionItem.CustomField og SalesTransactionItemDetail.CustomField.
-
Opret alle nødvendige tilpasningselementer i prissætningsproceduren for at tildele en værdi til SalesTransactionItem.CustomField.
Prissætningsproceduren registrerer automatisk, om en specifik linje har detaljeregistreringer og skriver til SalesTransactionItemDetail.CustomField, hvis de findes. Ellers skriver den til SalesTransactionItem.CustomField.
Under nye salgstransaktioner udfyldes CustomField på SalesTransactionItem. For ARC-scenarier med detaljelinjer skrives detaljelinjen til CustomField på SalesTransactionItemDetail. Hvis der ikke oprettes nogen detaljelinjer for ARC, er detaljelinjen den skrevet til CustomField på SalesTransactionItem.
-
Hvis du vil skrive tilpassede felter på QuoteLineItem eller OrderProducts med detaljelinjer, skal du fuldføre denne yderligere opsætning, der involverer procedureplaner og Apex.
- Aktiver en procedureplan. I Opsætning skal du finde og vælge omsætningsindstillinger og aktivere indstillingen Procedureplanorkestrering for prissætning.
- Opret en procedureplan for tilbuddet og bestillingen.
- I procedureplanen skal du bekræfte, at alle trin inkluderer MapLineItem-elementet. Rediger tilknytningerne baseret på de felter, der bruges i prissætningsproceduren.
- Brug dette ApexCustomFieldHandler Apex-klasseeksempel, som du kan forbedre for at opdatere flere tilpassede felter, hvis det er nødvendigt. Denne klasse forespørger på SalesTransactionItem- og SalesTransactionItemDetail-noder, udtrækker tilpassede feltværdier fra detaljeelementer og opdaterer derefter de tilsvarende tilpassede felter på 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;
}
}

