A necessidade de uma definição de mapeamento de externalização surge frequentemente em projetos de integração. Ele deve ser gerenciado e mantido fora do código do aplicativo Mule e para o Mule recuperá-lo dinamicamente.
Neste exemplo, aproveitei um dos modelos do Anypoint Exchange – Banco de Dados para a Migração de Usuário do Salesforce. Usaremos a definição de mapeamento do objeto personalizado do Salesforce para mapear as informações do usuário do banco de dados para um usuário do Salesforce.
Contents
- 1 Prós de uma definição de mapeamento externo:
- 2 Pré-requisitos:
- 3 Etapa 1: inscrever-se em uma conta de desenvolvedor do Salesforce
- 4 Etapa 2: Criar objeto personalizado do Salesforce – Mapping_Object__c
- 5 Etapa 3: configurar os valores para o mapeamento dos campos de origem e destino
- 6 Etapa 4: configurar o banco de dados local com detalhes do usuário
- 7 Etapa 5: Importe “template-db2sfdc-user-migration” para o Anypoint Studio e teste
- 8 Saber mais
Prós de uma definição de mapeamento externo:
1. Estabelecendo uma maneira configurável de configurar novas regras de mapeamento em vez de alterá-las no código de mapeamento no Mule, que requer uma reimplementação.
2. Controlar o mapeamento externamente pelos Administradores do Sistema, tornando-o menos propenso a erros.
Pré-requisitos:
Você precisará do seguinte para fazer esta demonstração funcionar:
1. Inscreva-se em uma conta de desenvolvedor do Salesforce.
2. Crie um objeto personalizado do Salesforce “Mapping_Object__c” no Salesforce e configure a definição de mapeamento para os campos de origem e destino.
3. Configure os valores para o mapeamento dos campos de origem e destino.
4. Configure um banco de dados local com detalhes do usuário.
5. Importe “template-db2 sfdc-user-migration” para o Anypoint Studio e teste.
Etapa 1: inscrever-se em uma conta de desenvolvedor do Salesforce
Inscreva-se para uma conta de desenvolvedor do Salesforce em https://developer.salesforce.com/.
Depois de configurar a conta, abra a conta de desenvolvedor e clique em “Configuração”.
Etapa 2: Criar objeto personalizado do Salesforce – Mapping_Object__c
Selecione “Configuração” e clique em “Objeto personalizado”.
Forneça um nome significativo que represente a definição de mapeamento. Nesta demonstração, chamei de “Mapping_Object__c”.
Crie campos em “Mapping_Object__c”. Vamos precisar de campos que representem origem, destino, valor padrão, se aplicável, e nome do objeto.
Para os fins desta demonstração, eu próprio configurei o objeto personalizado e seus campos, mas você pode solicitar aos colegas do Salesforce que o ajudem a configurá-lo.
Etapa 3: configurar os valores para o mapeamento dos campos de origem e destino
Uma vez configurado, precisaremos carregar os valores necessários para o mapeamento real no Mule.
Novamente, para esta demonstração, usei a operação “create” no Salesforce connector.
Abaixo está a carga útil:
}
]
1 1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28. 29 30 31 32. 33 34 35 36. 37. 38. 39. 40. 41. 42. 43 44 45 46. 47 48. 49. 50. 51 52 53 54 55 56. 57 58 59. 60 61 62 63. 64 |
[[ { “Object_Name__c”: “Do utilizador”, “Destination_Field__c”: “O email”, “Source_Field__c”: “o email” }, { “Object_Name__c”: “Do utilizador”, “Destination_Field__c”: “Primeiro nome”, “Source_Field__c”: “primeiro nome” }, { “Object_Name__c”: “Do utilizador”, “Destination_Field__c”: “Último nome”, “Source_Field__c”: “último nome” }, { “Object_Name__c”: “Do utilizador”, “Destination_Field__c”: “CommunityNickname”, “Source_Field__c”: “apelido” }, { “Object_Name__c”: “Do utilizador”, “Destination_Field__c”: “Alias”, “Source_Field__c”: “alias” }, { “Object_Name__c”: “Do utilizador”, “Destination_Field__c”: “Nome do usuário”, “Source_Field__c”: “o email” }, { “Object_Name__c”: “Do utilizador”, “Destination_Field__c”: “ProfileId”, “Source_Field__c”: “profileid”, “default__c” : “00e5w000001FNuXAAW” }, { “Object_Name__c”: “Do utilizador”, “Destination_Field__c”: “EmailEncodingKey”, “Source_Field__c”: “emailEncodingKey”, “default__c” : “ISO-8859-1” }, { “Object_Name__c”: “Do utilizador”, “Destination_Field__c”: “LanguageLocaleKey”, “Source_Field__c”: “languageLocaleKey”, “default__c” : “en_US” }, { “Object_Name__c”: “Do utilizador”, “Destination_Field__c”: “LocaleSidKey”, “Source_Field__c”: “localeSidKey”, “default__c” : “en_US” }, { “Object_Name__c”: “Do utilizador”, “Destination_Field__c”: “TimeZoneSidKey”, “Source_Field__c”: “timeZoneSidKey”, “default__c” : “América / Los_Angeles”
} ] |
Ele ficará assim no Salesforce quando você consultar usando o console do desenvolvedor.
Etapa 4: configurar o banco de dados local com detalhes do usuário
Eu criei o esquema para a tabela de usuários, como mostrado abaixo, e inseri três registros.
Etapa 5: Importe “template-db2sfdc-user-migration” para o Anypoint Studio e teste
Agora que a definição de mapeamento está configurada e os valores para o mapeamento são criados, podemos usar isso no código do aplicativo Mule.
Importe “template-db2sfdc-user-migration” do Anypoint Exchange no Anypoint Studio.
No aplicativo Mule, no arquivo de configuração, “businesslogicFlow”, consulte o Salesforce para obter a definição de mapeamento e salve-a em uma variável “vars.mapping”. Use uma estratégia de armazenamento em cache com base no requisito para atualizar o mapeamento no Mule. Nesta demonstração, usei a estratégia de cache padrão.
No mapeamento do DataWeave, use o código abaixo para mapear a origem e o destino. Como você pode ver, não há mapeamento codificado para os campos.
% dw 2,0
aplicativo de saída / java
var applyMapping = (in, mappingsDef) -> (
mappingsDef map (def) -> (
{
(def.Destination_Field__c): (em[def.Source_Field__c]) padrão def. “default__c”
}
)
)
—
((mapa de carga útil (item, índice) -> (
applyMapping (item, vars.mapping)
) reduzir ((item, acumulador) -> item ++ acumulador)))
%dw 2.0 resultado inscrição/Java var applyMapping = (no, mappingsDef) -> ( mappingsDef mapa (def) -> ( { (def.Destination_Field__c) : (no[[def.Source_Field__c]) padrão def.“default__c” } ) ) –– ((carga útil mapa (item, índice) -> ( applyMapping(item,vars.mapeamento) ) reduzir ((item, acumulador) -> item ++ acumulador) )) |
Carga útil de entrada:
1 1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 |
[[ { “apelido”: “JD”, “último nome”: “Corça”, “alias”: “JD”, “primeiro nome”: “Jane”, “última modificação”: “2020-04-18T18: 02: 24”, “o email”: “[email protected]” }, { “apelido”: “JB”, “último nome”: “Burke”, “alias”: “JB”, “primeiro nome”: “Jared”, “última modificação”: “2020-04-18T18: 02: 24”, “o email”: “[email protected]” }, { “apelido”: “JS”, “último nome”: “Smith”, “alias”: “JS”, “primeiro nome”: “John”, “última modificação”: “2020-04-18T19: 02: 24”, “o email”: “[email protected]” } ] |
Carga útil de saída:
1 1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28. 29 30 31 32. 33 34 35 36. 37. 38. 39. 40. 41. |
[[ { “TimeZoneSidKey”: “América / Los_Angeles”, “LocaleSidKey”: “en_US”, “LanguageLocaleKey”: “en_US”, “EmailEncodingKey”: “ISO-8859-1”, “ProfileId”: “00e5w000001FNuXAAW”, “Nome do usuário”: “[email protected]”, “Alias”: “JD”, “CommunityNickname”: “JD”, “Último nome”: “Corça”, “Primeiro nome”: “Jane”, “O email”: “[email protected]” }, { “TimeZoneSidKey”: “América / Los_Angeles”, “LocaleSidKey”: “en_US”, “LanguageLocaleKey”: “en_US”, “EmailEncodingKey”: “ISO-8859-1”, “ProfileId”: “00e5w000001FNuXAAW”, “Nome do usuário”: “[email protected]”, “Alias”: “JB”, “CommunityNickname”: “JB”, “Último nome”: “Burke”, “Primeiro nome”: “Jared”, “O email”: “[email protected]” }, { “TimeZoneSidKey”: “América / Los_Angeles”, “LocaleSidKey”: “en_US”, “LanguageLocaleKey”: “en_US”, “EmailEncodingKey”: “ISO-8859-1”, “ProfileId”: “00e5w000001FNuXAAW”, “Nome do usuário”: “[email protected]”, “Alias”: “JS”, “CommunityNickname”: “JS”, “Último nome”: “Smith”, “Primeiro nome”: “John”, “O email”: “[email protected]” } ] |
Após a conclusão da tarefa em lote, você pode visualizar os usuários criados no Salesforce, conforme mostrado na figura abaixo.
Saber mais
Espero que este exemplo o ajude a pensar em maneiras mais criativas de utilizar o mapeamento dinâmico no DataWeave e usá-lo em suas integrações. Para saber mais sobre esse recurso, leia como mapear dinamicamente com base em um recurso.