SIL e Salesforce

Neste artigo, falarei sobre como você pode trabalhar com o Salesforce da SIL.

SIL é uma linguagem de programação para automatizar ações no Atlassian Jira and Confluence. Você pode aprender mais sobre o SIL  aqui .

Existem 3 opções para trabalhar com o Salesforce da SIL:

  1. Use o plug-in  Power Salesforce Connector .
  2. Escreva suas funções no SIL.
  3. Escreva sua extensão para SIL .

Neste artigo, veremos as duas primeiras opções. Você pode ler sobre como criar suas próprias extensões para o SIL aqui .

Mas antes de passar para o código, você deve configurar o Salesforce.

Configurando o Salesforce


Usaremos a API do Salesforce Rest para trabalhar com o Salesforce; portanto, primeiro precisamos configurar o aplicativo conectado.
Para configurar o aplicativo de plug-in, vá para gear -> Setup:



Escolha App -> App Manager:



Clique no botão Novo aplicativo conectado:



selecione a opção para ativar o OAuth (Ativar configurações do OAuth). Instale o  Acesso total , clique no botão  Adicionar e, em seguida, no botão  Salvar .

Na próxima página, nas configurações do OAuth, veremos a chave do consumidor e a opção de abrir o segredo do consumidor. Lembre-se destes dois parâmetros. Precisamos deles para estabelecer uma conexão com o Salesforce.

Além disso, você precisa gerar um token secreto do usuário. Para fazer isso, vá para Configurações do usuário → Redefinir meu token de segurança. Uma nova chave secreta do usuário será enviada para o nosso e-mail:



Agora temos tudo o que precisamos para trabalhar com o Salesforce da SIL.

Conector de força do salesforce


O conector do Power Salesforce permite que você trabalhe com esses objetos no Salesforce como Conta e Oportunidade. Além disso, você pode receber resultados de consulta no SOQL. Você pode encontrar todas as funções disponíveis no plug-in SIL aqui .

A vantagem de usar o plug-in é que você não precisa gravar suas funções SIL para trabalhar com o Salesforce e entender os meandros da API do Salesforce Rest. Isso permitirá que você se concentre nas tarefas de negócios, e não nas tarefas técnicas.

Mas, é claro, o plugin também tem várias desvantagens:



Então, digamos que decidimos usar o conector do Power Salesforce.

Primeiro, precisamos instalar esse plug-in no Atlassian Marketplace e, em seguida, criar uma conexão com o Salesforce a partir do Atlassian Jira (engrenagem -> gerenciar aplicativos -> Configuração da conexão SFDC):



Clique no botão Adicionar conexão:



preencha os campos obrigatórios e clique no botão Salvar. Ao digitar a senha, você deve digitar a senha do usuário e a chave secreta do usuário.

Agora podemos escrever código no SIL.

Primeiro, selecione Oportunidade no Salesforce.

Vamos para o SIL Manager, crie um novo arquivo e escreva o seguinte código:

SFDCConnection sfdcConnection = connectToSalesforce("My SFDC Connection");
SFDCOpportunity opp = sfdcGetOpportunity(sfdcConnection, "0064F00000NKA7CQAX");
runnerLog(opp);

Como você pode ver, para escrever dados da oportunidade, escrevemos apenas 2 linhas de código. Na primeira linha, nos conectamos ao Salesforce (chamei minha conexão de Minha conexão SFDC). Na segunda linha, obtemos dados do Salesforce usando o código da oportunidade.

Para alterar algum campo na oportunidade, escreveremos este código:

SFDCConnection sfdcConnection = connectToSalesforce("My SFDC Connection");
SFDCOpportunity opp;
opp.Description = "My new description";
sfdcUpdateOpportunity(sfdcConnection, "0064F00000NKA7CQAX", opp);

Como você pode ver, o código é bastante simples e, além disso, a documentação do plug-in contém exemplos para cada função implementada no plug-in. Exemplos podem ser encontrados  aqui .

Mas e se o Power Salesforce Connector não se adequar a você? Nesse caso, podemos criar nossas próprias funções SIL.

Criando suas próprias funções SIL


Primeiro, crie a função de conexão do Salesforce:

struct SFDCConnection {
    string access_token;
    string instance_url;
    string id;
    string token_type;
    string issued_at;
    string signature;
}

function connectToSalesforce(string consumer_key,
                      string consumer_secret,
                      string user_name,
                      string user_password) {
    HttpRequest request;
    HttpHeader header = httpCreateHeader("Content-Type", "application/json");
    request.headers += header;
    string dummyPayload;
    string url = "https://login.salesforce.com/services/oauth2/token";
    string url_string = "?grant_type=password&client_id=" + consumer_key+ 
                    "&client_secret=" + consumer_secret + 
                    "&username=" + user_name + 
                    "&password=" + user_password; 
    SFDCConnection connection = httpPost(url + url_string, request, dummyPayload);
    runnerLog(httpGetErrorMessage());
    return connection;
}

Primeiro, criamos uma estrutura baseada em JSON que retorna do Salesforce quando conectado. E eles usaram o método  https://login.salesforce.com/services/oauth2/token  para se conectar ao Salesforce.

Agora vamos criar uma função para recuperar dados da oportunidade. Para fazer isso, usamos o método XX.X / sobjects / SObjectNam / id /:

struct Opportunity {
    string Id;
    string AccountId;
    string Name;
    string Description;
    string StageName;
    string OwnerId;
}

function getOppFromOppId(string access_token,
                string url,
                string oppId) {
    Opportunity result;
    HttpRequest request;
    HttpHeader header = httpCreateHeader("Content-Type", "application/json");
    request.headers += header;
    header = httpCreateHeader("Authorization", "Bearer " + access_token);
    request.headers += header;
    result = httpGet(url + "/services/data/v39.0/sobjects/Opportunity/" + oppId, request);
    return result;
}

Novamente, definimos a estrutura dos dados do Opportunity e, em seguida, chamamos o método Salesforce Rest API.

Agora vamos escrever um código que use nossas funções:

SFDCConnection connection = connectToSalesforce(consumer_key, consumer_secret, user_name, user_password);
Opportunity opp = getOppFromOppId(connection.access_token, connection.instance_url, "0064F00000NKA7CQAX");
runnerLog(opp);

Temos as mesmas duas linhas de código. No entanto, nosso código completo fica assim:

struct SFDCConnection {
    string access_token;
    string instance_url;
    string id;
    string token_type;
    string issued_at;
    string signature;
}

function connectToSalesforce(string consumer_key,
                      string consumer_secret,
                      string user_name,
                      string user_password) {
    HttpRequest request;
    HttpHeader header = httpCreateHeader("Content-Type", "application/json");
    request.headers += header;
    string dummyPayload;
    string url = "https://login.salesforce.com/services/oauth2/token";
    string url_string = "?grant_type=password&client_id=" + consumer_key+ 
                    "&client_secret=" + consumer_secret + 
                    "&username=" + user_name + 
                    "&password=" + user_password; 
    SFDCConnection connection = httpPost(url + url_string, request, dummyPayload);
    runnerLog(httpGetErrorMessage());
    return connection;
}

struct Opportunity {
    string Id;
    string Name;
    string Description;
    string StageName;
    string OwnerId;
}

function getOppFromOppId(string access_token,
                string url,
                string oppId) {
    Opportunity result;
    HttpRequest request;
    HttpHeader header = httpCreateHeader("Content-Type", "application/json");
    request.headers += header;
    header = httpCreateHeader("Authorization", "Bearer " + access_token);
    request.headers += header;
    result = httpGet(url + "/services/data/v39.0/sobjects/Opportunity/" + oppId, request);
    return result;
}

string consumer_key = "your consumer key";
string consumer_secret = "your consumer secret";  
string user_name = "your user name";
string user_password = "password and user secret token";

SFDCConnection connection = connectToSalesforce(consumer_key, consumer_secret, user_name, user_password);
Opportunity opp = getOppFromOppId(connection.access_token, connection.instance_url, "0064F00000NKA7CQAX");
runnerLog(opp);

Se você quiser, por exemplo, atualizar o Opportunity, precisará implementar sua função SIL para isso, usando a API do Salesforce Rest.

Além disso, como pode ser visto em nosso exemplo, recebemos os seguintes campos da oportunidade: id, nome, descrição, nome do usuário e proprietário.

Suponha que você queira adicionar um campo accountid. Para fazer isso, você precisa alterar a estrutura da seguinte maneira:

struct Opportunity {
    string Id;
    string Name;
    string Description;
    string StageName;
    string OwnerId;
    string AccountId;
}

Nós adicionamos o campo AccountId no final da estrutura.

Como você pode ver nos exemplos, se você escrever suas funções SIL, poderá implementar uma chamada para qualquer método da API Salesforce Rest, mas para isso, precisará gastar muito mais tempo escrevendo seu código. Mas, novamente, é grátis.

All Articles