domingo, 26 de fevereiro de 2023

Integração ServiceNow e Sales Force - OAuth 2.0

Como criar uma conta no Sales Force através do ServiceNow ?

Este tipo de situação é bem comum no dia a dia das organizações, onde criar uma conta em um sistema e utilizar os mesmos dados para replicar acessos em outros sistemas. Isso acontece para agilizar os processos de criação de contas, e evitar possiveis erros de duplicar um usuário.

Este tutorial tem o objetivo de mostrar o passo a passo de como criar uma integração entre ServiceNow e Sales Force - OAuth 2.0.  Os dados são ilustrativo, para conseguir executar todas as etapas, considere trocar os dados demos pelos da sua pdi.


Passo 1 - Crie uma conta no Sales Force e outra no ServiceNow

Sales Force - https://developer.salesforce.com/

ServiceNowhttps://developer.servicenow.com/dev.do#!/home

 *Você pode usar contas existentes caso já possua uma.


Passo 2 - Acesse o ícone de configuração no header da Home Page da Plataforma Sales Force e abra o Setup conforme imagem abaixo:




Passo 3 - Ainda no Menu [Setup Home] encontre Platform Tools > Apps > App Manager
 



Passo 4 - Crie um novo app clicando em New Connected App e configure conforme imagens abaixo.





*Habilite o campo API (Enable OAuth Settings)



Preencha o campo Callback URL com a url abaixo:

//Troque o "dev123" pela sua instancia pessoal
  https://dev123.service-now.com/oauth_redirect.do



Escolha os escopos que serão disponibilizadas acessos dentro do ServiceNow



Após escolher, ele mostra um resumo do que cada escopo possui acesso




Clique em Manage Consumer Details para verificar Consumer Key e Consumer Secret que serão utilizados nos próximos passos dentro da ServiceNow



Antes de mostrar os dados o Sales Force costuma pedir uma verificação para fins de segurança




Os dados abaixo serão utilizados para configuração OAuth Provider na plataforma ServiceNow



Passo 5 - Abra a Instancia do ServiceNow acesse no Filter Navigator pesquise por OAuth no Menu System OAuth > Application Registry abra e clique em New



Ao clicar em "New” você será redirecionado para escolher o tipo de conexão, escolha conforme abaixo:


Passo 6 - Nesse passo você irá configurar dentro do ServiceNow conforme informações geradas na configuração dos Sales Force volte ao final do Passo 4 e copie a Consumer Key e Consumer Secret e insera nos campos Client ID e Client Secret


//No link abaixo você pode ver mais informações dos enpoints OAuth 2.0
https://help.salesforce.com/s/articleView?id=sf.remoteaccess_oauth_endpoints.htm&type=5

      https://login.salesforce.com/services/oauth2/authorize
https://login.salesforce.com/services/oauth2/token
  https://login.salesforce.com/services/oauth2/revoke

//Troque dev123 pela sua instância pessoal
https://dev123.service-now.com/oauth_redirect.do





Na aba OAuth Entity Scopes Insira conforme modelo abaixo os escopos que foram configurados no Sales Force para estarem disponível no ServiceNow


Após seguir o passo anterior, volte na aba OAuth Entity Profile abra numa nova janela….


… e adicione os escopos inseridos na aba OAuth Entity Scopes



Passo 7 - Acesse no Filter Navigator pesquise por Rest Message abra e clique em New


//Exemplo para criar uma nova conta no Sales Force
curl https://MyDomainName.my.salesforce.com/services/data/v57.0/sobjects/Account/ -H "Authorization: Bearer token" -H "Content-Type: application/json" -d "@newaccount.json"

//Exemplo [request body newaccount.json file] para criar uma nova conta
{
  "Name" : "Insera um nome aqui"
}

//Exemplo [response body] quando a nova conta foi criada com sucesso 
{
  "id" : "001D000000IqhSLIAZ",
  "errors" : [ ],
  "success" : true
}

Dica: Insira um nome intuitivo para que possa chama-lo dentro de um Script Include posteriormente

                                    - Preenche o Endpoint conforme sua instancia no Sales Force
                                    - No Tipo de Autenticação escolha OAuth 2.0
                                    - No OAuth profile encontre o OAuth profile criado no Passo 6

Após preenche os campos salve e clique em Get OAuth Token (caso seu token ainda não esteja válido).



Após ter salvo o passo anterior irá perceber que ele gerou um Método Get por padrão, troque o nome conforme o propósito da requisição troque o Método para Post


                                             - Na aba HTTP Request, preencha o HTTP Headers:
                                                         "Content-Type: application/json"

                                             - No campo Content insira o conteudo abaixo para fins de teste:
                                                         { "Name" : "Integration ServiceNow" }


No Related Links você irá encontrar alguns links uteis caso precise testar o endpoint sem precisar do Insomnia/Postman ou caso precise pegar uma estrutura de código para fazer a chamada dentro de um Script Include



Aqui temos um Preview Script Usage, que você poderá copia-lo e levar para seu Script Include


Aqui temos o Resultado após ter clicado no Test


E após o test anterior você já consegue ver o resultado da “Criação de uma nova conta” dentro do Sales Force, através do ServiceNow.





Passo 7 foi ilustrativo para mostrar o processo de integração, mas considere criar um Script Include e chama-lo dentro de uma Business Rules para rodar toda vez que um usuário for criado na tabela de usuários do ServiceNow [sys_user] a criação também acontecerá no Sales Force. Você também pode criar um RP customizado e popular a tabela de usuários da ServiceNow para deixar mais apresentavél. Agora seja criativo e crie seus próprios requisitos. 

quarta-feira, 1 de fevereiro de 2023

WS - Como modificar atributos de payload [Rest Api] para facilitar o consumo de dados no portal.

Hoje vamos ver sobre "como modificar atributos de payload". Sabemos que o ideal seria poder consumir os dados do payload de acordo como ele foi estruturado, porém em alguns casos vamos nos deparar com a necessidade de tratar aquele dado para atender o objetivo que ele será utilizado ou até mesmo por questão de padronização.

Mas antes de começar veja as dicas de ferramentas que podem ser utilizada até que você estruture e debug seu script. 

Dicas de como testar antes de aplicar o script definitivo com o dado a ser tratado.

Dica 1: Use o Background Script.

Dica 2: Use o Xplore (Precisa baixar o .xml e subir/commit na sua PDI ) https://developer.servicenow.com/connect.do#!/share/contents/9650888_xplore_developer_toolkit?t=PRODUCT_DETAILS


Background Script - Crie seu script e debug.



Xplore - Crie seu script e debug.



Para tratar os dados do payload  utilizei o Xplore

Exemplo 1 - Foi modificado o nome do primeiro atributo de: 1. symbol para: ticker e dos demais foram removidos todos os números+(.) mantendo o mesmo nome. 





Exemplo 2 - Foi modificado todos atributos dentro do objeto, e como o payload vai repetir os atributos conforme o parâmetro enviado vs retorno do payload, foi utilizado o método .map para fazer a verificação e modificações necessárias.





Agora como fazer isso dento do Script include já que você provavelmente irá consumir dados de Web Server (Veja abaixo como ficou dentro do script include.)

Script Exemplo 1 

quoteDataCompany: function(symbol) {

    //chama função que retorna payload default da api consumida.
    var companies = this.getCompanyQuote(symbol);

    //var que recebe os dados tratados  
    var data = [];    

    //var que acessa os dados da cotação da compania dentro de "Global Quote"
    var myObj = companies["Global Quote"];
       
    //função para renomear valores com novos atributos
    data = {

            "ticker": myObj["01. symbol"],
            "open": myObj["02. name"],
            "high": myObj["03. high"],
            "low": myObj["04. low"],
            "price": myObj["05. price"],
            "volume": myObj["06. volume"],
            "latest trading day": myObj["07. latest trading day"],
            "previous close": myObj["08. previous close"],
            "change": myObj["09. change"],
            "change percent": myObj["10. change percent"],

};
       
    //Voce também pode acrescenta esse gs.log para validar dentro dos logs se
obteve o resultado esperado. Mas não esqueça de remover após testar ou deixar
comentado para não correr riscos de expor dados sensiveis.
    //gs.log("#CompanyData "+JSON.stringify(data));


        //retorna dados tratados.
        return data;
 
},

Script Exemplo 2

companyData: function(keyword) {

    //chama função que retorna payload default api consumida.
    var companies = this.getCompanySearch(keyword);

    //var que recebe os dados tratados  
    var data= [];      

    //var que acessa os dados da companias dentro de "bestMatches"
    var myObj = companies.bestMatches;

    //função para percorrer o objeto e renomear os novos atributos
    data = myObj.map(function(item) {
        return {
            "ticker": item["1. symbol"],
            "name": item["2. name"],
            "type": item["3. type"],
            "region": item["4. region"],
            "marketOpen": item["5. marketOpen"],
            "marketClose": item["6. marketClose"],
            "timezone": item["7. timezone"],
            "currency": item["8. currency"],
            "matchScore": item["9. matchScore"],
        };
});
         //Voce também pode acrescenta esse gs.log para validar dentro dos logs
se obteve o resultado esperado. Mas não esqueça de remover após testar ou
deixar comentado para não correr riscos de expor dados sensiveis.
    //gs.log("#CompanyData "+JSON.stringify(data));

        //retorna dados tratados.
        return data;
 
},

 

Adicionando campos ao formulário - Servicenow

 1 - Abra a lista da tabela criada recentemente All > nome da tabela e clique em "New". 2 - Clique no context menu > Configu...