SIL和Salesforce

在本文中,我将讨论如何使用SIL中的Salesforce。

SIL是一种用于在Atlassian Jira和Confluence中自动执行动作的编程语言。您可以在此处了解有关SIL的更多信息 

SIL中有3种使用Salesforce的选项:

  1. 使用Power Salesforce Connector插件 
  2. 在SIL上编写函数。
  3. 写您的SIL扩展名

在本文中,我们将介绍前两个选项。您可以在此处阅读有关如何为SIL创建自己的扩展的信息

但是在继续执行代码之前,您必须配置Salesforce。

设置Salesforce


我们将使用Salesforce Rest API与Salesforce一起使用,因此首先我们需要配置连接的应用程序。
为了配置插件应用程序,请转至齿轮->设置:



选择应用程序->应用程序管理器:



单击新建已连接的应用程序按钮:



选择选项以启用OAuth(启用OAuth设置)。安装  完全访问权限,单击“ 添加”按钮,然后单击  保存”按钮 

在下一页的OAuth设置下,我们将看到“使用者密钥”和用于打开“使用者密钥”的选项。记住这两个参数。我们将需要他们与Salesforce建立联系。

另外,您需要生成一个用户密码令牌。为此,请转到用户设置→重置我的安全令牌。新的秘密用户密钥将发送到我们的电子邮件:



现在,我们拥有与SIL一起使用Salesforce所需的一切。

电力销售人员连接器


Power Salesforce连接器允许您使用Salesforce中的“对象”和“机会”之类的对象,此外,您可以在SOQL中接收查询结果。您可以在SIL插件中找到所有可用功能

使用该插件的优点是,您无需编写SIL函数即可与Salesforce一起使用,也无需了解Salesforce Rest API的复杂性。这将使您可以专注于业务任务,而不是技术任务。

但是,当然,该插件也有许多缺点:



因此,假设我们决定使用Power Salesforce连接器。

首先,我们需要从Atlassian Marketplace安装此插件,然后从Atlassian Jira创建与Salesforce的连接(齿轮->管理应用程序-> SFDC连接配置):



单击添加连接按钮:



填写必填字段,然后单击保存按钮。输入密码时,必须输入用户密码,然后输入用户的密钥。

现在我们可以用SIL编写代码了。

首先,从Salesforce中选择商机。

让我们转到SIL Manager,创建一个新文件并编写以下代码:

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

如您所见,要编写商机数据,我们只编写了两行代码。在第一行中,我们连接到Salesforce(我将连接称为“我的SFDC连接”)。在第二行中,我们使用机会ID从Salesforce获取数据。

为了更改商机中的某些字段,我们将编写以下代码:

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

如您所见,代码非常简单,此外,该插件的文档还包含该插件中实现的每个功能的示例。示例可以在这里找到 

但是,如果Power Salesforce连接器不适合您怎么办?在这种情况下,我们可以创建自己的SIL函数。

创建自己的SIL功能


首先,创建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;
}

首先,我们创建了一个基于JSON的框架,该框架在连接后会从Salesforce返回。然后,他们使用https://login.salesforce.com/services/oauth2/token方法   连接到Salesforce。

现在,让我们创建一个检索机会数据的函数。为此,我们使用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;
}

再次,我们定义了商机数据的结构,然后调用了Salesforce Rest API方法。

现在,让我们编写一个使用我们的函数的代码:

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

我们得到了相同的两行代码。但是,我们的完整代码如下所示:

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

例如,如果要更新商机,则需要使用Salesforce Rest API为此实现SIL功能。

此外,从我们的示例中可以看出,我们从商机获得了以下字段:ID,名称,描述,阶段名称和所有者。

假设您要添加一个accountid字段。为此,您需要按如下所示更改结构:

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

我们在结构末尾添加了AccountId字段。

从示例中可以看到,如果您编写SIL函数,则可以实现对任何Salesforce Rest API方法的调用,但是为此,您需要花费更多的时间来编写代码。但是话又说回来,它是免费的。

All Articles