Вы находитесь здесь:
Использование расширенного ценообразования строки сведений о транзакции для соотнесения настраиваемых полей
Пользователи могут обновить настраиваемые поля элементов транзакций продажи или сведений об элементе транзакции продажи посредством процедур ценообразования посредством функции «Ценообразование расширенной подробной строки». С помощью этой функции пользователям больше не нужно использовать настраиваемые триггеры или потоки для обновления этих полей. Эта функция используется для внесения поправок, продления и отмены.
Требуемые версии
| Доступно в версиях: Lightning Experience |
| Доступно в версиях: Enterprise, Unlimited и Developer Edition Revenue Cloud с включенным управлением транзакциями |
| Необходимые полномочия пользователя | |
|---|---|
| Для настройки и использования расширенного ценообразования строки сведений: | Администратор Salesforce AND Набор полномочий «Пользователь времени проектирования ценообразования» |
Прежде чем начать, выполните данные задачи.
- Чтобы включить функцию «Расширенное ценообразование строки сведений», найдите и выберите «Параметры дохода» в меню «Настройка», а затем включите параметр «Расширенное ценообразование строки сведений».
- Настройте процедуру ценообразования.
- Добавление соотнесений контекстных тегов к элементу строки карты процедуры ценообразования посредством JSON
Чтобы настроить процедуру ценообразования на использование расширенного подробного ценообразования строки, скопируйте и вставьте элемент строки карты JSON в процедуру ценообразования в ценообразовании дохода. - Добавление соотнесений контекстных тегов к элементу строки карты процедуры обнаружения посредством JSON
Чтобы настроить процедуру обнаружения на использование расширенного подробного ценообразования строки с производными продуктами ценообразования, скопируйте и вставьте элемент строки соотнесения для производного ценообразования JSON в процедуру обнаружения в ценообразовании дохода.
Обновление процедуры ценообразования доходов
Чтобы настроить расширенное подробное ценообразование строки, измените процедуру ценообразования дохода.
- В средстве запуска приложений найдите и выберите «Процедуры ценообразования», а потом выберите процедуру ценообразования для обновления.
- Измените процедуру ценообразования, добавив новый элемент строки карты в качестве второго элемента рядом с параметром ценообразования в процедуре ценообразования.
-
Добавьте соотнесения тегов контекста к элементу строки карты.
Переменная ввода
Переменная вывода
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
После добавления соотнесений тегов контекста отобразятся стандартные соотнесения между SalesTransaction и SalesTransactionItemDetail с обновленными определениями контекста.
Обновление производной процедуры обнаружения ценообразования
Если вы используете производное ценообразование, внесите дополнительные изменения в процедуру обнаружения после завершения изменений в процедуре ценообразования дохода. Эти изменения необходимы для определения действительных входящих и извлеченных продуктов.
- В средстве запуска приложений найдите и выберите «Процедуры обнаружения», а потом выберите процедуру обнаружения для обновления.
-
Добавьте два новых элемента к процедуре обнаружения для определения цены производных продуктов: Параметры обнаружения и элемент строки карты.
Добавьте эти переменные к параметрам обнаружения.
- Переменная ввода: Элемент строки
- Переменная вывода: LineItem
Добавьте эти переменные к элементу строки карты.- Переменная ввода: SalesTransactionItem
- Переменная вывода: SalesTransactionItemDetail
Добавьте эти дополнительные переменные к элементу строки карты.
Переменная ввода
Переменная вывода
LineItem
SalesTrxnItemDetailSource
EffectiveFrom
ItemDetailEffectiveFrom__std
EffectiveTo
ItemDetailEffectiveTo__std
DerivedPricingAttribute
ItemDetailDerivedPricingAttribute__std
-
Поддержите настраиваемые поля, используя процедуры ценообразования для изменения, продления и отмены (ARC) способов использования.
Настройка настраиваемых полей применяется при использовании ARC API и необходимости использования настраиваемых полей.
- Добавьте настраиваемые поля к объектам QuoteLineItem, QuoteLineItem Detail, OrderProduct и OrderProductDetails.
- В определении контекста создайте запись для этих настраиваемых полей в узлах SalesTransactionItem и SalesTransactionItemDetail.
- Создайте требуемые соотнесения в QuoteEntitiesMapping и OrderEntitiesMapping.
-
Измените процедуру ценообразования дохода для настраиваемых полей.
- В процедуре ценообразования измените элемент MapLineItem, чтобы добавить соотнесение между SalesTransactionItem.CustomField и SalesTransactionItemDetail.CustomField.
-
Создайте необходимые элементы настройки в процедуре ценообразования для назначения значения SalesTransactionItem.CustomField.
Процедура ценообразования автоматически определяет наличие подробных записей в определенной строке и записывает их в SalesTransactionItemDetail.CustomField. В противном случае, он пишет в SalesTransactionItem.CustomField.
Во время новых транзакций продажи заполняется CustomField в SalesTransactionItem. Для сценариев ARC с линиями сведений линия сведений записывается в CustomField в SalesTransactionItemDetail. Если строки сведений не создаются для ARC, строкой сведений будет запись в CustomField в SalesTransactionItem.
-
Чтобы написать настраиваемые поля в QuoteLineItem или OrderProducts со строками сведений, выполните дополнительную настройку, включающую планы процедур и классы Apex.
- Включите план процедуры. Найдите и выберите «Параметры дохода» в меню «Настройка» и включите параметр «Оркестрация планирования процедур для ценообразования».
- Создание плана процедур для сметы и заказа.
- В плане процедуры проверьте все этапы, содержащие элемент MapLineItem. Изменение соотнесений на основе полей, используемых в процедуре ценообразования.
- Используйте пример класса Apex ApexCustomFieldHandler, который можно расширить для обновления нескольких настраиваемых полей. Этот класс запрашивает узлы SalesTransactionItem и SalesTransactionItemDetail, извлекает значения настраиваемых полей из элементов сведений, а потом обновляет соответствующие настраиваемые поля в 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;
}
}

