SIL und Salesforce

In diesem Artikel werde ich darüber sprechen, wie Sie mit Salesforce von SIL aus arbeiten können.

SIL ist eine Programmiersprache zur Automatisierung von Aktionen in Atlassian Jira und Confluence. Mehr über SIL erfahren Sie  hier .

Es gibt drei Optionen für die Arbeit mit Salesforce von SIL:

  1. Verwenden Sie das Power Salesforce Connector- Plugin  .
  2. Schreiben Sie Ihre Funktionen auf SIL.
  3. Schreiben Sie Ihre Erweiterung für SIL .

In diesem Artikel werden wir uns die ersten beiden Optionen ansehen. Sie können lesen , wie Sie Ihre eigenen Erweiterungen für SIL erstellen hier .

Bevor Sie jedoch mit dem Code fortfahren, müssen Sie Salesforce konfigurieren.

Salesforce einrichten


Wir werden die Salesforce Rest-API verwenden , um mit Salesforce zu arbeiten. Daher müssen wir zuerst die verbundene App konfigurieren.
Um die Plug-In-Anwendung zu konfigurieren, gehen Sie zu Gang -> Setup:



Wählen Sie App -> App Manager:



Klicken Sie auf die Schaltfläche Neue verbundene App:



Wählen Sie die Option zum Aktivieren von OAuth (OAuth-Einstellungen aktivieren). Installieren Sie  Full Access , klicken Sie auf die Schaltfläche  Hinzufügen und dann auf die Schaltfläche  Speichern .

Auf der nächsten Seite sehen wir unter OAuth-Einstellungen den Consumer Key und die Option zum Öffnen des Consumer Secret. Denken Sie an diese beiden Parameter. Sie werden benötigt, um eine Verbindung mit Salesforce herzustellen.

Außerdem müssen Sie ein geheimes Benutzer-Token generieren. Gehen Sie dazu zu Benutzereinstellungen → Mein Sicherheitstoken zurücksetzen. Ein neuer geheimer Benutzerschlüssel wird an unsere E-Mail gesendet:



Jetzt haben wir alles, was wir für die Arbeit mit Salesforce von SIL benötigen.

Power Salesforce-Anschluss


Mit dem Power Salesforce-Connector können Sie mit Objekten in Salesforce wie Konto und Opportunity arbeiten. Außerdem können Sie Abfrageergebnisse in SOQL erhalten. Alle im SIL-Plugin verfügbaren Funktionen finden Sie hier .

Der Vorteil der Verwendung des Plugins besteht darin, dass Sie Ihre SIL-Funktionen nicht schreiben müssen, um mit Salesforce zu arbeiten und die Feinheiten der Salesforce Rest-API zu verstehen. Auf diese Weise können Sie sich auf Geschäftsaufgaben konzentrieren und nicht auf technische Aufgaben.

Das Plugin hat aber natürlich auch eine Reihe von Nachteilen:



Nehmen wir also an, wir haben uns für den Power Salesforce-Connector entschieden.

Zuerst müssen wir dieses Plugin vom Atlassian Marketplace installieren und dann über Atlassian Jira eine Verbindung zu Salesforce herstellen (Ausrüstung -> Apps verwalten -> SFDC-Verbindungskonfiguration):



Klicken Sie auf die Schaltfläche Verbindung hinzufügen :



Füllen Sie die erforderlichen Felder aus und klicken Sie auf die Schaltfläche Speichern. Bei der Eingabe des Passworts müssen Sie das Benutzerpasswort und dann den geheimen Schlüssel des Benutzers eingeben.

Jetzt können wir Code in SIL schreiben.

Wählen Sie zunächst Opportunity aus Salesforce aus.

Gehen wir zum SIL-Manager, erstellen eine neue Datei und schreiben den folgenden Code:

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

Wie Sie sehen können, haben wir zum Schreiben von Opportunity-Daten nur zwei Codezeilen geschrieben. In der ersten Zeile stellen wir eine Verbindung zu Salesforce her (ich habe meine Verbindung My SFDC Connection genannt). In der zweiten Zeile erhalten wir Daten von Salesforce mithilfe der Opportunity-ID.

Um ein Feld in Opportunity zu ändern, schreiben wir diesen Code:

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

Wie Sie sehen können, ist der Code recht einfach, und außerdem enthält die Dokumentation zum Plugin Beispiele für jede im Plugin implementierte Funktion. Beispiele finden Sie  hier .

Was aber, wenn der Power Salesforce Connector nicht zu Ihnen passt? In diesem Fall können wir unsere eigenen SIL-Funktionen erstellen.

Erstellen eigener SIL-Funktionen


Erstellen Sie zunächst die Salesforce-Verbindungsfunktion:

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

Zunächst haben wir ein JSON-basiertes Framework erstellt, das bei Verbindung von Salesforce zurückgegeben wird. Anschließend verwendeten sie die Methode https://login.salesforce.com/services/oauth2/token um eine Verbindung zu Salesforce herzustellen.

Erstellen wir nun eine Funktion zum Abrufen von Opportunity-Daten. Dazu verwenden wir die Methode 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;
}

Wir haben erneut die Struktur für die Opportunity-Daten definiert und dann die Salesforce Rest-API-Methode aufgerufen.

Schreiben wir nun einen Code, der unsere Funktionen verwendet:

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

Wir haben die gleichen 2 Codezeilen. Unser vollständiger Code sieht jedoch folgendermaßen aus:

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

Wenn Sie beispielsweise Opportunity aktualisieren möchten, müssen Sie hierfür Ihre SIL-Funktion mithilfe der Salesforce Rest-API implementieren.

Wie in unserem Beispiel zu sehen ist, haben wir außerdem die folgenden Felder von Opportunity erhalten: ID, Name, Beschreibung, Stagename und Eigentümer.

Angenommen, Sie möchten ein Konto-ID-Feld hinzufügen. Dazu müssen Sie die Struktur wie folgt ändern:

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

Wir haben das Feld AccountId am Ende der Struktur hinzugefügt.

Aus den Beispielen geht hervor, dass Sie beim Schreiben Ihrer SIL-Funktionen einen Aufruf einer beliebigen Salesforce Rest-API-Methode implementieren können. Dazu müssen Sie jedoch viel mehr Zeit für das Schreiben Ihres Codes aufwenden. Aber andererseits ist es kostenlos.

All Articles