SIL et Salesforce

Dans cet article, je vais vous expliquer comment vous pouvez travailler avec Salesforce à partir de SIL.

SIL est un langage de programmation pour automatiser les actions dans Atlassian Jira et Confluence. Vous pouvez en savoir plus sur SIL  ici .

Il existe 3 options pour travailler avec Salesforce à partir de SIL:

  1. Utilisez le plug-in  Power Salesforce Connector .
  2. Écrivez vos fonctions sur SIL.
  3. Écrivez votre extension pour SIL .

Dans cet article, nous examinerons les deux premières options. Vous pouvez découvrir comment créer vos propres extensions pour SIL ici .

Mais avant de passer au code, vous devez configurer Salesforce.

Configuration de Salesforce


Nous utiliserons l' API Salesforce Rest pour travailler avec Salesforce, nous devons donc d'abord configurer l'application connectée.
Pour configurer l'application plug-in, allez dans gear -> Setup:



Choisissez App -> App Manager:



Cliquez sur le bouton New Connected App:



Sélectionnez l'option pour activer OAuth (Enable OAuth settings). Installez  Full Access , cliquez sur le bouton  Ajouter puis sur le bouton  Enregistrer .

Sur la page suivante, sous les paramètres OAuth, nous verrons la clé du consommateur et l'option pour ouvrir le secret du consommateur. N'oubliez pas ces deux paramètres. Nous en aurons besoin pour établir une connexion avec Salesforce.

De plus, vous devez générer un jeton secret utilisateur. Pour ce faire, accédez à Paramètres utilisateur → Réinitialiser mon jeton de sécurité. Une nouvelle clé d'utilisateur secrète sera envoyée à notre e-mail:



nous avons maintenant tout ce dont nous avons besoin pour travailler avec Salesforce de SIL.

Connecteur d'alimentation Salesforce


Le connecteur Power Salesforce vous permet de travailler avec de tels objets dans Salesforce comme compte et opportunité.En outre, vous pouvez recevoir des résultats de requête dans SOQL. Vous pouvez trouver toutes les fonctions disponibles dans le plugin SIL ici .

L'avantage d'utiliser le plugin est que vous n'avez pas besoin d'écrire vos fonctions SIL pour travailler avec Salesforce et comprendre les subtilités de l'API Salesforce Rest. Cela vous permettra de vous concentrer sur les tâches métier et non sur les tâches techniques.

Mais bien sûr, le plugin présente également un certain nombre d'inconvénients:



Supposons donc que nous ayons décidé d'utiliser le connecteur Power Salesforce.

Nous devons d'abord installer ce plugin depuis Atlassian Marketplace , puis créer une connexion à Salesforce depuis Atlassian Jira (équipement -> gérer les applications -> Configuration de connexion SFDC):



cliquez sur le bouton Ajouter une connexion:



remplissez les champs requis et cliquez sur le bouton Enregistrer. Lors de la saisie du mot de passe, vous devez saisir le mot de passe utilisateur puis la clé secrète de l'utilisateur.

Maintenant, nous pouvons écrire du code en SIL.

Tout d'abord, sélectionnez Opportunité dans Salesforce.

Allons dans SIL Manager, créons un nouveau fichier et écrivons le code suivant:

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

Comme vous pouvez le voir, pour écrire des données d'opportunité, nous n'avons écrit que 2 lignes de code. Dans la première ligne, nous nous connectons à Salesforce (j'ai appelé ma connexion Ma connexion SFDC). Sur la deuxième ligne, nous obtenons des données de Salesforce à l'aide de l'ID d'opportunité.

Afin de modifier un champ dans Opportunity, nous allons écrire ce code:

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

Comme vous pouvez le voir, le code est assez simple et, en outre, la documentation du plugin contient des exemples pour chaque fonction implémentée dans le plugin. Des exemples peuvent être trouvés  ici .

Mais que faire si le connecteur Power Salesforce ne vous convient pas? Dans ce cas, nous pouvons créer nos propres fonctions SIL.

Création de vos propres fonctions SIL


Créez d'abord la fonction de connexion 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;
}

Tout d'abord, nous avons créé un framework basé sur JSON qui revient de Salesforce lorsqu'il est connecté. Ils ont ensuite utilisé la méthode  https://login.salesforce.com/services/oauth2/token  pour se connecter à Salesforce.

Créons maintenant une fonction pour récupérer les données d'opportunité. Pour ce faire, nous utilisons la méthode 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;
}

Encore une fois, nous avons défini la structure des données d'opportunité, puis appelé la méthode API Salesforce Rest.

Écrivons maintenant un code qui utilise nos fonctions:

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

Nous avons obtenu les mêmes 2 lignes de code. Cependant, notre code complet ressemble à ceci:

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 vous souhaitez, par exemple, mettre à jour Opportunity, vous devez implémenter votre fonction SIL pour cela, à l'aide de l'API Salesforce Rest.

De plus, comme on peut le voir dans notre exemple, nous avons reçu les champs suivants de l'opportunité: id, nom, description, stagename et propriétaire.

Supposons que vous souhaitiez ajouter un champ accountid. Pour ce faire, vous devez modifier la structure comme suit:

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

Nous avons ajouté le champ AccountId à la fin de la structure.

Les exemples montrent que si vous écrivez vos fonctions SIL, vous pouvez implémenter un appel à n'importe quelle méthode d'API Salesforce Rest, mais pour cela, vous devez passer beaucoup plus de temps à écrire votre code. Mais là encore, c'est gratuit.

All Articles