Du er her:
Bruke avanserte transaksjonsdetaljlinjepriser til å tilordne tilpassede felt
Brukere kan oppdatere tilpassede felt i salgstransaksjonselementer eller salgstransaksjonselementdetaljer via prisprosedyrer ved å bruke funksjonen Avansert detaljlinjeprising. Med denne funksjonen trenger ikke brukere lenger å bruke tilpassede utløsere eller flyter til å oppdatere disse feltene. Denne funksjonen er nyttig for brukstilfeller med endring, fornyelse og kansellering.
Nødvendige utgaver
| Tilgjengelig i Lightning Experience |
| Tilgjengelig i Enterprise, Unlimited og Developer Edition i Revenue Cloud der Transaksjonsbehandling er aktivert |
| Nødvendig brukertillatelse | |
|---|---|
| For å konfigurere og bruke avansert detaljlinjeprising: | Salesforce-administrator OG Tillatelsessettet Prisutformingstidsbruker |
Utfør disse oppgavene før du begynner.
- Hvis du vil slå på funksjonen Avansert pris på detaljlinjer, finner og velger du innstillinger for omsetning i Oppsett, og deretter slår du på innstillingen Avansert pris på detaljlinjer.
- Konfigurer din prisprosedyre.
- Legge til kontekstkodeilordninger i linjeelementet for prisprosedyre med JSON
Hvis du vil konfigurere en prisprosedyre til å bruke avansert detaljlinjeprising, kopierer og limer du inn JSON-koden for kartlinjeelementet i en prisprosedyre i Omsetningsprising. - Legge til kontekstkodeilordninger i linjeelementet i Discovery-prosedyre med JSON
Hvis du vil konfigurere en oppdagelsesprosedyre til å bruke avansert detaljlinjeprising med utledede prisprodukter, kopierer og limer du inn kartlinjeelementet for JSON-koden for utledet prising i en oppdagelsesprosedyre i Omsetningsprising.
Oppdatere omsetningsprisprosedyre
Endre omsetningsprisprosedyren for å konfigurere avanserte detaljlinjepriser.
- Finn og velg Prisprosedyrer fra Appstarter, og velg deretter en prisprosedyre som skal oppdateres.
- Endre prisprosedyren ved å legge til et nytt kartlinjeelement som det andre elementet ved siden av prisinnstillingen i prisprosedyren.
-
Legg til kontekstkodenettilordninger i kartlinjeelementet.
Inndatavariabel
Utdatavariabel
LineItem
SalesTrxnItemDetailSource
LineItemQuantity
ItemDetailQuantity
NetUnitPrice
ItemDetailNetUnitPrice
price_water_fall
DetailPriceWaterfallIdentifier
InputUnitPrice
ItemDetailUnitPrice
ItemBillingReference
ItemDetailBillingReference
ItemNetTotalPrice
ItemDetailTotalPrice
TotalLineAmount
ItemDetailTotalLineAmount
EffectiveFrom
ItemDetailEffectiveFrom__std
EffectiveTo
ItemDetailEffectiveTo__std
PricingTermCount
ItemDetailPricingTermCount__std
itemTransientEndDate
ItemDetailTransientEndDate__std
ItemPricingSource
ItemDetailPricingSource__std
DerivedPricingAttribute
ItemDetailDerivedPricingAttribute__std
ItemGroupSummaryUndertotal
ItemDetailGroupSummaryTotal__std
ListPrice (Listepris)
ItemDetailListPrice__std
IsContracted (Erkontraktert)
ItemDetailIsContracted__std
ItemContractPrice
ItemDetailContractPrice__std
STI_TenantName__c
STID_TenantName__c
Når du har lagt til kontekstkodenes tilordninger, ser du standardtilordningene mellom SalesTransaction og SalesTransactionItemDetail med oppdaterte kontekstdefinisjoner.
Oppdatere oppdagelsesprosedyre for utledede priser
Hvis du bruker utledet pris, gjør du flere endringer i oppdagelsesprosedyren etter å ha fullført endringer i omsetningsprisprosedyren. Disse endringene er nødvendige for å bestemme gyldige bidrags- og utledede produkter.
- Finn og velg Oppdagelsesprosedyrer fra Appstarter, og velg deretter en oppdagelsesprosedyre som skal oppdateres.
-
Legg til to nye elementer i oppdagelsesprosedyren for prisutledede produkter: Innstillinger for oppdagelse og Tilordningslinjeelement.
Legg til disse variablene i oppdagelsesinnstillinger.
- Inndatavariabel: Linjeelement
- Utdatavariabel: LineItem
Legg til disse variablene i kartlinjeelementet.- Inndatavariabel: SalesTransactionItem
- Utdatavariabel: SalesTransactionItemDetail
Legg til disse ekstra variablene i kartlinjeelementet.
Inndatavariabel
Utdatavariabel
LineItem
SalesTrxnItemDetailSource
EffectiveFrom
ItemDetailEffectiveFrom__std
EffectiveTo
ItemDetailEffectiveTo__std
DerivedPricingAttribute
ItemDetailDerivedPricingAttribute__std
-
Støtt tilpassede felt ved å bruke prisprosedyrer for brukstilfeller med endring, fornyelse og kansellering (ARC).
Tilpasset feltoppsett gjelder hvis du bruker ARC API-er og vil bruke tilpassede felt.
- Legg til tilpassede felt i objektene QuoteLineItem, QuoteLineItem Detail, OrderProduct og OrderProductDetails.
- I kontekstdefinisjonen oppretter du en oppføring for disse tilpassede feltene i både SalesTransactionItem- og SalesTransactionItemDetail-nodene.
- Opprett de nødvendige tilordningene i QuoteEntitiesMapping og OrderEntitiesMapping.
-
Endre omsetningsprisprosedyren for tilpassede felt.
- I prisprosedyren endrer du MapLineItem-elementet for å legge til en tilordning mellom SalesTransactionItem.CustomField og SalesTransactionItemDetail.CustomField.
-
Opprett eventuelle nødvendige tilpassingselementer i prisprosedyren for å tildele en verdi til SalesTransactionItem.CustomField.
Prisprosedyren oppdager automatisk om en bestemt linje har detaljoppføringer, og skriver til SalesTransactionItemDetail.CustomField hvis de finnes. Ellers skriver den til SalesTransactionItem.CustomField.
Ved nye salgstransaksjoner fylles CustomField på SalesTransactionItem ut. Når det gjelder ARC-scenarier med detaljlinjer, skrives detaljlinjen til CustomField i SalesTransactionItemDetail. Hvis ingen detaljlinjer opprettes for ARC, er detaljlinjen den som skrives til CustomField på SalesTransactionItem.
-
Hvis du vil skrive tilpassede felt på QuoteLineItem eller OrderProducts med detaljlinjer, utfører du dette ekstra oppsettet som involverer prosedyreplaner og Apex.
- Aktiver en prosedyreplan. Finn og velg omsetningsinnstillinger under Oppsett, og slå på innstillingen Prosedyreplanorkestrering for pris.
- Opprett en prosedyreplan for tilbudet og bestillingen.
- I prosedyreplanen kontrollerer du at alle trinn inkluderer MapLineItem-elementet. Endre tilordningene basert på feltene som brukes i prisprosedyren.
- Bruk dette ApexCustomFieldHandler Apex-klasseeksempelet, som du kan forbedre for å oppdatere flere tilpassede felt hvis det er nødvendig. Denne klassen spør SalesTransactionItem- og SalesTransactionItemDetail-nodene, trekker ut tilpassede feltverdier fra detaljelementer, og oppdaterer deretter de tilsvarende tilpassede feltene 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;
}
}

