使用Azure功能构建SOAP侦听器

And*_*wes 4 soap salesforce azure azure-functions

我正在使用Azure Functions在各种系统之间构建一些集成.我的新要求是响应Salesforce中的记录更新.一些快速的研究产生了Salesforce方面看起来很好的解决方案.使用可以在记录修改时发送SOAP请求的出站消息传递.

如何创建Salesforce应用程序,在创建/更改记录时将记录发送到外部Web服务(https://salesforce.stackexchange.com/questions/73425/how-to-create-salesforce-application-that-will-send-record到外部网络服务)

现在的挑战是能够在Azure Function中创建SOAP侦听器.我为其他听众创建了基本的HTTP触发器.Azure函数是否有"内置"功能可以让我轻松使用传入的SOAP请求?

Salesforce具有基于更传统的Web服务和ASMX文件的解决方案的基础知识,但我不确定是否或如何在Azure功能中应用它.(https://developer.salesforce.com/docs/atlas.en-us.api.meta/api/sforce_api_om_outboundmessaging_listener.htm)

Fab*_*nte 10

该通知只是通过HTTP发出的SOAP请求,因此与常规HTTP触发器请求实际上没有太大区别.

虽然您可以将其视为普通请求并自行解析内容,但Azure Functions确实公开了我们从ASP.NET WebHooks获得的出色WebHook支持,幸运的是,有一个Salesforce接收器可以显着简化此任务.

免责声明:值得注意的是,虽然接收器在Azure功能中已经在技术上启用,但它还没有官方支持,因此您将找不到大量文档,并且帮助仅限于您在SO和论坛上获得的内容.希望这个和其他接收器的官方支持很快就会到来,这意味着文档,模板和UI支持将变得可用.

要开始使用,您需要以下内容:

  • 创建一个新函数,选择GenericWebHook - CSharp模板(这也适用于节点,但我会在这里专注于C#.
  • 按照ASP.NET WebHooks与Salesforce post集成的步骤进行操作,以创建出站消息.在这里,您希望使用门户网站提供的功能URL,而不需要代码查询字符串(代码不会受到影响,但接收方不会使用该信息).
    • 重要信息:获取将用于身份验证的Salesforce组织标识,该标识位于管理>公司配置文件>公司信息> Salesforce.com组织标识下,然后返回Azure功能门户,打开" 密钥"面板,删除默认功能密钥(不是主机密钥)并使用从Salesforce获得的组织ID值创建一个名为default(此名称很重要)的新密钥.
  • 集成
    • 在集成页面上,选择右上角的高级编辑器(如上所述,没有官方支持,因此用户界面不会公开这一点.我们正在开发我们的探险家帽子,并冒险进入更高级的工作流程:))
    • webHookType属性值更改为sfsoap并保存配置.您的function.json配置应如下所示:

function.json:

{
  "bindings": [
    {
      "type": "httpTrigger",
      "direction": "in",
      "webHookType": "sfsoap",
      "name": "req"
    },
    {
      "type": "http",
      "direction": "out",
      "name": "res"
    }
  ],
  "disabled": false
}
Run Code Online (Sandbox Code Playgroud)
  • 切换到" 开发"选项卡.我们准备编写代码了.

这是ASP.NET WebHooks接收器闪耀的地方!它将为您解析通知,公开您可以使用的强类型对象.您需要做的就是修改模板使用SalesforceNotifications类型的方法/函数签名,确保您引用所需的程序集(Microsoft.AspNet.WebHooks.Receivers.Salesforce可供您使用,因此不需要包引用)和命名空间引用(Microsoft.AspNet.WebHooks).

以下是将接收请求并记录组织ID,操作ID,获取第一个通知并记录其所有属性的函数的完整示例:

#r "Microsoft.AspNet.WebHooks.Receivers.Salesforce"
using Microsoft.AspNet.WebHooks;

public static void Run(SalesforceNotifications req, TraceWriter log)
{
    log.Info($"Salesforce webhook was triggered!");

    log.Info(req.OrganizationId);
    log.Info(req.ActionId);

    var notification = req.Notifications.First();

    foreach (var p in notification.Keys)
    {
        log.Info($"{p} = {notification[p]}");
    }
}
Run Code Online (Sandbox Code Playgroud)

当接收器得到官方支持时,这个过程会更顺畅,但即使添加了步骤,这仍然需要自己解析SOAP消息:)

我希望这有帮助!