Sie befinden sich hier:
Zuordnen von benutzerdefinierten Feldern mithilfe der erweiterten Transaktionsdetailseitenpreise
Benutzer können benutzerdefinierte Felder für Vertriebstransaktionselemente oder Details zu Vertriebstransaktionselementen über Preisgestaltungsverfahren mithilfe der Funktion "Erweiterte Detailbelegpostenpreise" aktualisieren. Mit dieser Funktion müssen Benutzer keine benutzerdefinierten Auslöser oder Flows mehr verwenden, um diese Felder zu aktualisieren. Diese Funktion ist für Anwendungsfälle zur Änderung, Verlängerung und Stornierung nützlich.
Erforderliche Editionen
| Verfügbarkeit: Lightning Experience |
| Verfügbarkeit: Enterprise, Unlimited und Developer Edition von Revenue Cloud mit aktivierter Transaktionsverwaltung |
| Erforderliche Benutzerberechtigungen | |
|---|---|
| Einrichten und Verwenden der erweiterten Detailbelegpostenpreise: | Salesforce-Administrator UND Berechtigungssatz "Preisgestaltungszeitbenutzer" |
Führen Sie zunächst die folgenden Aufgaben aus.
- Wenn Sie die Funktion "Erweiterte Detailbelegpostenpreise" aktivieren möchten, suchen Sie unter "Setup" nach Umsatzeinstellungen, wählen Sie diese Option aus und aktivieren Sie dann die Einstellung "Erweiterte Detailbelegpostenpreise".
- Konfigurieren Sie Ihr Preisgestaltungsverfahren.
- Hinzufügen von Kontext-Tag-Zuordnungen zum Element "Kartenbelegposten des Preisgestaltungsverfahrens" mithilfe von JSON
Wenn Sie ein Preisgestaltungsverfahren für die Verwendung der erweiterten Detailbelegpostenpreise konfigurieren möchten, kopieren Sie die Kartenbelegposten-JSON und fügen Sie sie in ein Preisgestaltungsverfahren unter "Umsatzpreise" ein. - Hinzufügen von Kontext-Tag-Zuordnungen zum Element "Kartenbelegposten des Entdeckungsverfahrens" mithilfe von JSON
Kopieren Sie zum Konfigurieren eines Erkundungsverfahrens für die Verwendung von erweiterten Detailbelegpostenpreisen für Produkte mit abgeleiteten Preisen den Kartenbelegposten für die JSON für abgeleitete Preise und fügen Sie ihn in ein Erkundungsverfahren unter "Umsatzpreise" ein.
Aktualisieren des Umsatzpreisverfahrens
Ändern Sie zum Konfigurieren der erweiterten Detailbelegpostenpreise Ihr Umsatzpreisverfahren.
- Suchen Sie im App Launcher nach Preisgestaltungsverfahren, wählen Sie diese Option aus und wählen Sie dann ein Preisgestaltungsverfahren aus, das aktualisiert werden soll.
- Ändern Sie das Preisgestaltungsverfahren, indem Sie ein neues Kartenbelegposten-Element als zweites Element neben der Preiseinstellung im Preisgestaltungsverfahren hinzufügen.
-
Fügen Sie dem Kartenbelegposten Kontext-Tag-Zuordnungen hinzu.
Eingabevariable
Ausgabevariable
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
ItemGroupSummarySubtotal
ItemDetailGroupSummaryTotal__std
ListPrice
ItemDetailListPrice__std
IsContracted
ItemDetailIsContracted__std
ItemContractPrice
ItemDetailContractPrice__std
STI_TenantName__c
STID_TenantName__c
Nach dem Hinzufügen der Kontext-Tag-Zuordnungen werden die Standardzuordnungen zwischen SalesTransaction und SalesTransactionItemDetail mit aktualisierten Kontextdefinitionen angezeigt.
Aktualisieren des abgeleiteten Preiserkennungsverfahrens
Wenn Sie abgeleitete Preise verwenden, nehmen Sie nach Abschluss der Änderungen an Ihrem Umsatzpreisverfahren zusätzliche Änderungen an Ihrem Discovery-Verfahren vor. Diese Änderungen sind erforderlich, um gültige beitragende und abgeleitete Produkte zu bestimmen.
- Suchen Sie im App Launcher nach Erkennungsverfahren, wählen Sie diese Option aus und wählen Sie dann ein zu aktualisierendes Erkundungsverfahren aus.
-
Fügen Sie dem Discovery-Verfahren zwei neue Elemente zum Preis abgeleiteter Produkte hinzu: Discovery-Einstellungen und Kartenbelegposten.
Fügen Sie diese Variablen den Discovery-Einstellungen hinzu.
- Eingabevariable: Belegposten
- Ausgabevariable: LineItem
Fügen Sie dem Kartenbelegposten diese Variablen hinzu.- Eingabevariable: SalesTransactionItem
- Ausgabevariable: SalesTransactionItemDetail
Fügen Sie dem Kartenbelegposten diese zusätzlichen Variablen hinzu.
Eingabevariable
Ausgabevariable
LineItem
SalesTrxnItemDetailSource
EffectiveFrom
ItemDetailEffectiveFrom__std
EffectiveTo
ItemDetailEffectiveTo__std
DerivedPricingAttribute
ItemDetailDerivedPricingAttribute__std
-
Unterstützen Sie benutzerdefinierte Felder, indem Sie Preisgestaltungsverfahren für Änderungs-, Verlängerungs- und Stornierungsanwendungsfälle verwenden.
Das Setup für benutzerdefinierte Felder ist anwendbar, wenn Sie ARC-APIs verwenden und benutzerdefinierte Felder verwenden möchten.
- Fügen Sie den Objekten "QuoteLineItem", "QuoteLineItem Detail", "OrderProduct" und "OrderProductDetails" benutzerdefinierte Felder hinzu.
- Erstellen Sie in der Kontextdefinition einen Eintrag für diese benutzerdefinierten Felder in den Knoten SalesTransactionItem und SalesTransactionItemDetail.
- Erstellen Sie die erforderlichen Zuordnungen in QuoteEntitiesMapping und OrderEntitiesMapping.
-
Ändern Sie das Umsatzpreisgestaltungsverfahren für benutzerdefinierte Felder.
- Ändern Sie das MapLineItem-Element im Preisgestaltungsverfahren, um eine Zuordnung zwischen SalesTransactionItem.CustomField und SalesTransactionItemDetail.CustomField hinzuzufügen.
-
Erstellen Sie alle erforderlichen Anpassungselemente im Rahmen des Preisgestaltungsverfahrens, um SalesTransactionItem.CustomField einen Wert zuzuweisen.
Das Preisgestaltungsverfahren erkennt automatisch, ob ein bestimmter Belegposten Detaileinträge aufweist, und schreibt in SalesTransactionItemDetail.CustomField, sofern vorhanden. Andernfalls wird in SalesTransactionItem.CustomField geschrieben.
Bei neuen Verkaufstransaktionen wird CustomField für SalesTransactionItem ausgefüllt. Bei ARC-Szenarien mit Detailzeilen wird die Detailzeile in "CustomField" in SalesTransactionItemDetail geschrieben. Wenn keine Detailzeilen für das Center für handlungsrelevante Beziehungen erstellt werden, wird die Detailzeile in CustomField auf SalesTransactionItem geschrieben.
-
Wenn Sie benutzerdefinierte Felder in "QuoteLineItem" oder "OrderProducts" mit Detailzeilen schreiben möchten, führen Sie diese zusätzliche Einrichtung mit Verfahrensplänen und Apex Klassen aus.
- Aktivieren Sie einen Verfahrensplan. Suchen Sie unter "Setup" nach Umsatzeinstellungen, wählen Sie diese Option aus und aktivieren Sie die Einstellung "Verfahrensplanorchestrierung für Preise".
- Erstellen Sie einen Verfahrensplan für das Angebot und den Auftrag.
- Überprüfen Sie im Verfahrensplan, ob alle Schritte das Element MapLineItem enthalten. Ändern Sie die Zuordnungen anhand der im Preisgestaltungsverfahren verwendeten Felder.
- Verwenden Sie dieses Apex-Klassenbeispiel für Apex CustomFieldHandler, das Sie bei Bedarf erweitern können, um mehrere benutzerdefinierte Felder zu aktualisieren. Diese Klasse fragt die Knoten SalesTransactionItem und SalesTransactionItemDetail ab, extrahiert benutzerdefinierte Feldwerte aus Detailelementen und aktualisiert dann die entsprechenden benutzerdefinierten Felder in 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;
}
}

