SIL y Salesforce

En este artículo hablaré sobre cómo puede trabajar con Salesforce de SIL.

SIL es un lenguaje de programación para automatizar acciones en Atlassian Jira y Confluence. Puede obtener más información sobre SIL  aquí .

Hay 3 opciones para trabajar con Salesforce de SIL:

  1. Use el complemento  Power Salesforce Connector .
  2. Escribe tus funciones en SIL.
  3. Escribe tu extensión para SIL .

En este artículo, veremos las dos primeras opciones. Puede leer sobre cómo crear sus propias extensiones para SIL aquí .

Pero antes de pasar al código, debe configurar Salesforce.

Configurar Salesforce


Utilizaremos Salesforce Rest API para trabajar con Salesforce, por lo que primero debemos configurar la aplicación conectada.
Para configurar la aplicación de complemento, vaya a engranaje -> Configuración:



elija la aplicación -> Administrador de aplicaciones:



haga clic en el botón Nueva aplicación conectada:



seleccione la opción para habilitar OAuth (Habilitar configuración de OAuth) Instale  Full Access , haga clic en el botón  Agregar y luego en el botón  Guardar .

En la página siguiente, en la configuración de OAuth, veremos la clave del consumidor y la opción de abrir el secreto del consumidor. Recuerda estos dos parámetros. Los necesitaremos para establecer una conexión con Salesforce.

Además, debe generar un token secreto de usuario. Para hacer esto, vaya a Configuración de usuario → Restablecer mi token de seguridad. Se enviará una nueva clave de usuario secreta a nuestro correo electrónico:



ahora tenemos todo lo que necesitamos para trabajar con Salesforce de SIL.

Conector de fuerza de ventas de potencia


El conector Power Salesforce le permite trabajar con objetos en Salesforce como Cuenta y Oportunidad, además, puede recibir resultados de consultas en SOQL. Puede encontrar todas las funciones disponibles en el complemento SIL aquí .

La ventaja de usar el complemento es que no necesita escribir sus funciones SIL para trabajar con Salesforce y comprender las complejidades de la API de Salesforce Rest. Esto le permitirá concentrarse en tareas comerciales y no en tareas técnicas.

Pero, por supuesto, el complemento también tiene una serie de desventajas:



Entonces, digamos que decidimos usar el conector Power Salesforce.

Primero necesitamos instalar este complemento desde Atlassian Marketplace , y luego crear una conexión a Salesforce desde Atlassian Jira (engranaje -> administrar aplicaciones -> Configuración de conexión SFDC):



haga clic en el botón Agregar conexión:



complete los campos requeridos y haga clic en el botón Guardar. Al ingresar la contraseña, debe ingresar la contraseña del usuario y luego la clave secreta del usuario.

Ahora podemos escribir código en SIL.

Primero, seleccione Oportunidad de Salesforce.

Vayamos a SIL Manager, cree un nuevo archivo y escriba el siguiente código:

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

Como puede ver, para escribir datos de Opportunity, escribimos solo 2 líneas de código. En la primera línea, nos conectamos a Salesforce (llamé a mi conexión Mi conexión SFDC). En la segunda línea, obtenemos datos de Salesforce utilizando Id. De oportunidad.

Para cambiar algún campo en Oportunidad, escribiremos este código:

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

Como puede ver, el código es bastante simple y, además, la documentación del complemento contiene ejemplos para cada función implementada en el complemento. Los ejemplos se pueden encontrar  aquí .

Pero, ¿qué pasa si el Power Salesforce Connector no le conviene? En este caso, podemos crear nuestras propias funciones SIL.

Creando tus propias funciones SIL


Primero, cree la función de conexión de 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;
}

Primero, creamos un marco basado en JSON que regresa de Salesforce cuando está conectado. Y luego usaron el método  https://login.salesforce.com/services/oauth2/token  para conectarse a Salesforce.

Ahora creemos una función para recuperar datos de Oportunidad. Para hacer esto, usamos el 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;
}

Nuevamente, definimos la estructura para los datos de Oportunidad y luego llamamos al método API de Salesforce Rest.

Ahora escribamos un código que use nuestras funciones:

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

Tenemos las mismas 2 líneas de código. Sin embargo, nuestro código completo se ve así:

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);

Si desea, por ejemplo, actualizar Opportunity, entonces necesita implementar su función SIL para esto, utilizando la API de Salesforce Rest.

Además, como se puede ver en nuestro ejemplo, recibimos los siguientes campos de Opportunity: identificación, nombre, descripción, nombre artístico y propietario.

Supongamos que desea agregar un campo accountid. Para hacer esto, debe cambiar la estructura de la siguiente manera:

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

Hemos agregado el campo AccountId al final de la estructura.

Los ejemplos muestran que si escribe sus funciones SIL, puede implementar una llamada a cualquier método API de Salesforce Rest, pero para esto necesita pasar mucho más tiempo escribiendo su código. Pero, de nuevo, es gratis.

All Articles