Você está aqui:
Usar precificação avançada de linha de detalhes da transação para mapear campos personalizados
Os usuários podem atualizar campos personalizados em itens da transação de vendas ou detalhes do item da transação de vendas por meio de procedimentos de precificação usando o recurso Precificação avançada da linha de detalhes. Com esse recurso, os usuários não precisam mais usar acionadores ou fluxos personalizados para atualizar esses campos. Esse recurso é útil para casos de uso de emenda, renovação e cancelamento.
Edições obrigatórias
| Disponível em: Lightning Experience |
| Disponível em: Edições Enterprise, Unlimited e Developer do Revenue Cloud em que o Gerenciamento de transações está habilitado |
| Permissões de usuário necessárias | |
|---|---|
| Para configurar e usar a precificação avançada de linha de detalhes: | Administrador do Salesforce E Conjunto de permissões de Usuário do tempo de design de precificação |
Antes de começar, conclua estas tarefas.
- Para ativar o recurso Precificação avançada de linha de detalhes, em Configuração, localize e selecione Configurações de receita e, em seguida, ative a configuração Precificação avançada de linha de detalhes.
- Configure seu procedimento de precificação.
- Adicionar mapeamentos de marcação de contexto ao elemento de item de linha do mapa do procedimento de precificação usando JSON
Para configurar um procedimento de precificação para usar a precificação avançada de linha de detalhes, copie e cole o JSON do item de linha de mapa em um procedimento de precificação em Precificação de receita. - Adicionar mapeamentos de marcação de contexto ao elemento de item de linha do mapa do procedimento de descoberta usando JSON
Para configurar um procedimento de descoberta para usar a precificação avançada de linha de detalhes com produtos de precificação derivada, copie e cole o item de linha de mapa para JSON de precificação derivada em um procedimento de descoberta em Precificação de receita.
Atualizar procedimento de precificação de receita
Para configurar a precificação avançada da linha de detalhes, modifique seu procedimento de precificação de receita.
- No Iniciador de aplicativos, localize e selecione Procedimentos de precificação e selecione um procedimento de precificação para atualizar.
- Modifique o procedimento de precificação adicionando um novo elemento de item de linha de mapa como o segundo elemento ao lado da configuração de precificação no procedimento de precificação.
-
Adicione mapeamentos de marcas de contexto ao item de linha do mapa.
Variável de entrada
Variável de saída
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
Depois de adicionar os mapeamentos de marcação de contexto, você verá os mapeamentos padrão entre SalesTransaction e SalesTransactionItemDetail com definições de contexto atualizadas.
Atualizar procedimento de descoberta de precificação derivada
Se você estiver usando precificação derivada, faça alterações adicionais ao seu procedimento de descoberta depois de concluir alterações ao seu procedimento de precificação de receita. Essas alterações são necessárias para determinar produtos contribuintes e derivados válidos.
- No Iniciador de aplicativos, localize e selecione Procedimentos de descoberta e selecione um procedimento de descoberta para atualizar.
-
Adicione dois novos elementos ao procedimento de descoberta para precificar produtos derivados: Configurações de descoberta e Item de linha de mapa.
Adicione estas variáveis às configurações de descoberta.
- Variável de entrada: Item de linha
- Variável de saída: LineItem
Adicione essas variáveis ao item de linha do mapa.- Variável de entrada: SalesTransactionItem
- Variável de saída: SalesTransactionItemDetail
Adicione estas variáveis adicionais ao item de linha do mapa.
Variável de entrada
Variável de saída
LineItem
SalesTrxnItemDetailSource
EffectiveFrom
ItemDetailEffectiveFrom__std
EffectiveTo
ItemDetailEffectiveTo__std
DerivedPricingAttribute
ItemDetailDerivedPricingAttribute__std
-
Dê suporte a campos personalizados usando procedimentos de precificação para casos de uso de emendar, renovar e cancelar (ARC).
A configuração de campo personalizado será aplicável se você usar APIs do ARC e quiser usar campos personalizados.
- Adicione campos personalizados aos objetos QuoteLineItem, QuoteLineItem Detail, OrderProduct e OrderProductDetails.
- Na definição de contexto, crie uma entrada para esses campos personalizados nos nós SalesTransactionItem e SalesTransactionItemDetail.
- Crie os mapeamentos necessários em QuoteEntitiesMapping e OrderEntitiesMapping.
-
Modifique o procedimento de precificação de receita para campos personalizados.
- No procedimento de precificação, modifique o elemento MapLineItem para adicionar um mapeamento entre SalesTransactionItem.CustomField e SalesTransactionItemDetail.CustomField.
-
Crie qualquer elemento de personalização necessário no procedimento de precificação para atribuir um valor a SalesTransactionItem.CustomField.
O procedimento de precificação detecta automaticamente se uma linha específica tem entradas de detalhes e grava em SalesTransactionItemDetail.CustomField, caso existam. Caso contrário, ele gravará em SalesTransactionItem.CustomField.
Durante novas transações de vendas, CustomField no SalesTransactionItem é preenchido. Para cenários do ARC com linhas de detalhes, a linha de detalhes é gravada em CustomField em SalesTransactionItemDetail. Se nenhuma linha de detalhes for criada para o ARC, a linha de detalhes será escrita em CustomField no SalesTransactionItem.
-
Para escrever campos personalizados em QuoteLineItem ou OrderProducts com linhas de detalhes, conclua esta configuração adicional envolvendo planos de procedimento e classes do Apex.
- Habilite um plano de procedimento. Em Configuração, localize e selecione Configurações de receita e ative a configuração Orquestração do plano de procedimento para precificação.
- Criar um plano de procedimento para a cotação e o pedido.
- No plano de procedimento, verifique se todas as etapas incluem o elemento MapLineItem. Modifique os mapeamentos com base nos campos usados no procedimento de precificação.
- Use este exemplo de classe do Apex ApexCustomFieldHandler, que você pode aprimorar para atualizar vários campos personalizados, se necessário. Essa classe consulta os nós SalesTransactionItem e SalesTransactionItemDetail, extrai valores de campo personalizados de itens de detalhes e atualiza os campos personalizados correspondentes no 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;
}
}

