在本部分中,我们将增强业务流程以处理传入的机会通知,从通知中提取机会名称,并使用该名称创建要发送到 Salesforce 的请求查询。 这将检索与商机相关的产品的特定详细信息。 Salesforce 的查询响应将接收回 BizTalk Server。 为此,我们将执行以下步骤:
创建架构和消息变量以将查询消息发送到 Salesforce。
创建映射以使用机会通知中的值生成查询,检索与该机会相关联的产品详细信息。
创建架构以从 Salesforce 接收查询响应。
为请求和响应架构创建消息变量。
创建架构和消息变量以将查询消息发送到 Salesforce
若要使用通过机会通知提供的信息从 Salesforce 检索产品详细信息,需要向 Salesforce 发送查询。 查询作为 XML 消息发送到 Salesforce。 因此,在以下过程中,我们将为请求消息创建架构。 在后续过程中,我们将使用此架构映射机会通知架构,以构造用于检索机会的产品详细信息的查询。
创建用于发送查询请求的架构
向 BizTalk Server 项目添加新架构。 将其命名为
QueryRequest.xsd
。将根节点重命名为
QueryRequest
. 在 QueryRequest 记录下添加子字段元素并将其命名Query
。在架构中提升 Query 元素的位置,使其可用于流程编排。 在后面的步骤中,我们将使用此提升的元素来分配查询字符串。
右键单击“查询”元素,移至“提升”,然后单击“快速提升”。 这会导致使用 Query 元素创建 PropertySchema.xsd 架构。 记下 PropertySchema 的命名空间。 在 BizTalk Server 管理控制台中配置物理端口时,需要在后续步骤中执行此作。
保存所有更改。
将机会通知架构映射到查询架构
若要检索与商机相关的产品详细信息,我们需要向 Salesforce 发送类似的查询。
SELECT Amount, Id, Name,(SELECT Quantity, ListPrice, PricebookEntry.UnitPrice, PricebookEntry.Name FROM OpportunityLineItems) FROM Opportunity Where Name = '<opportunity_name>'
在前面的过程中,我们已经创建了查询消息的架构。 在此过程中,我们将机会通知架构映射到查询请求架构,并使用 functoid 构造此查询。 此查询将作为值传递给 QueryRequest.xsd 架构中的 Query 元素。
映射机会通知
将地图添加到 BizTalk Server 项目。 将地图
Notification_QueryRequest.btm
命名为 。将源架构设置为 NotificationService_soap_sforce_com_2005_09_outbound.xsd。 将目标架构设置为 QueryRequest.xsd。
将字符串连接 functoid 添加到映射界面。 打开 “配置字符串连接 Functoid ”对话框,并按如下所示指定输入值:
输入 价值 输入[0] 选择 Amount,Id,Name,(选择 Quantity,ListPrice,PricebookEntry.UnitPrice,PricebookEntry.Name 来自 OpportunityLineItems)来自 Opportunity 当 Name = ' Input[1] 将源架构中的 Name 元素连接到 functoid,以将 Name 元素的值用作第二个输入。 Input[2] “注意:对于最后一个输入值,只指定右引号(')。 以下屏幕截图描述了 String Concatenate functoid 的配置。
连接三个输入参数时,它将形成要发送到 Salesforce 所需的查询。
将 String Concatenate functoid 连接到目标架构中的 Query 元素,如以下屏幕截图所示。
保存对地图的更改。
创建架构以接收查询响应消息
在本部分中,我们将创建架构以从 Salesforce 接收查询响应消息。 在本部分中,我们手动为查询响应创建架构。
创建用于接收查询响应的架构
向 BizTalk Server 项目添加新架构并将其命名
QueryResult.xsd
。Salesforce QueryResult 对象描述了从 Salesforce 收到的查询响应。 因此,我们将生成一个架构来描述以下内容:
<?xml version="1.0" encoding="utf-16" ?> - <xs:schema xmlns="http://BtsSalesforceIntegration.QueryResult" xmlns:b="http://schemas.microsoft.com/BizTalk/2003" targetNamespace="http://BtsSalesforceIntegration.QueryResult" xmlns:xs="http://www.w3.org/2001/XMLSchema"> - <xs:element name="QueryResult"> - <xs:complexType> - <xs:sequence> <xs:element name="done" type="xs:string" /> - <xs:sequence> - <xs:element name="records"> - <xs:complexType> - <xs:sequence> <xs:element name="Id" type="xs:string" /> <xs:element name="Amount" type="xs:string" /> <xs:element name="Name" type="xs:string" /> - <xs:sequence> - <xs:element name="OpportunityLineItems"> - <xs:complexType> - <xs:sequence> <xs:element name="done" type="xs:string" /> - <xs:sequence minOccurs="1" maxOccurs="unbounded"> - <xs:element name="records"> - <xs:complexType> - <xs:sequence> <xs:element name="Quantity" type="xs:string" /> <xs:element name="ListPrice" type="xs:string" /> - <xs:element name="PricebookEntry"> - <xs:complexType> - <xs:sequence> <xs:element name="UnitPrice" type="xs:string" /> <xs:element name="Name" type="xs:string" /> </xs:sequence> <xs:attribute name="type" type="xs:string" /> <xs:attribute name="url" type="xs:string" /> </xs:complexType> </xs:element> </xs:sequence> <xs:attribute name="type" type="xs:string" /> <xs:attribute name="url" type="xs:string" /> </xs:complexType> </xs:element> </xs:sequence> <xs:element name="totalSize" type="xs:string" /> </xs:sequence> </xs:complexType> </xs:element> </xs:sequence> </xs:sequence> <xs:attribute name="type" type="xs:string" /> <xs:attribute name="url" type="xs:string" /> </xs:complexType> </xs:element> </xs:sequence> <xs:element name="totalSize" type="xs:string" /> </xs:sequence> </xs:complexType> </xs:element> </xs:schema>
架构结构应如下所示:
保存对架构的更改。
为 QueryRequest 和 QueryResult 架构创建消息变量
创建 QueryRequest 和 QueryResult 架构后,必须在业务流程中创建两个消息变量来表示这两种消息类型。
创建消息变量
打开 NotificationService.odx 业务流程并在业务流程视图中添加两个新消息。 将消息名称设置为
QueryRequestMsg
和QueryResultMsg
。将 QueryRequestMsg 的消息类型设置为 BtsSalesforceIntegration.QueryRequest。
将 QueryResultMsg 的消息类型设置为 BtsSalesforceIntegration.QueryResult。
保存对编排的更改。
更新业务流程以将消息发送到 Salesforce 并接收响应
在主题 步骤 3a:将 Salesforce 机会通知接收到 BizTalk Server 中,我们构建了从 Salesforce 接收机会通知并发送确认的业务流程。 在此步骤中,我们基于此业务流程构建,向 Salesforce 发送查询请求,以获取与机会相关的产品详细信息并接收响应。 我们已经创建了架构(QueryRequest.xsd 和 QueryResult.xsd),以及我们将在此步骤中使用的消息变量(QueryRequestMsg 和 QueryResultMsg)。
向 Salesforce 发送查询请求并接收响应
在 SendNotificationAck 形状后面添加构造消息形状。 将形状
ConstructQuery
的名称设置为 QueryRequestMsg 并将 Messages Constructed 属性设置为 QueryRequestMsg。在 ConstructQuery 形状中,添加 转换 形状。 双击“转换”形状以打开“转换配置”对话框。 在对话框中,选择 “现有映射 ”选项,然后从下拉列表中选择 BtsSalesforceIntegration.Notification_QueryRequest。 将 Source 设置为 NotificaitonMessage, 将目标 设置为 QueryRequestMsg,然后单击“ 确定”。
在 ConstructQuery 形状中,在“转换”形状之后,添加消息分配形状。 双击“消息分配”图形并添加以下表达式:
QueryRequestMsg(BtsSalesforceIntegration.PropertySchema.Query) = QueryRequestMsg.Query;
通过执行此作,我们将 QueryRequestMsg 架构中的 Query 元素的值传递给属性架构中的提升元素 Query。 配置 WCF-WebHttp 端口时,我们将使用此元素将查询值动态传递给请求消息。
在构造查询形状之后,添加一个发送形状。 将形状
SendQueryRequest
命名,并将消息类型设置为 QueryRequestMsg。在“发送”形状后,添加接收形状并将其命名
ReceiveQueryResult
。 将形状的消息类型设置为 QueryResultMsg。添加端口以将查询请求发送到 Salesforce,并在响应中接收查询结果。 在端口配置向导中,选择以下选项:
将端口名称指定为
SalesforceRESTInterface
.选择用于创建新端口类型的选项。
将 通信模式 设置为 请求-响应。
将 通信的端口方向 设置为 我将发送请求并接收响应 ,并将 端口绑定 设置为 稍后指定。
将端口的 请求操作连接到发送形状(SendQueryRequest),并将端口的 响应操作连接到接收形状(ReceiveQueryResult)。 以下屏幕截图描述了业务流程的一部分,该部分表示将查询请求发送到 Salesforce 并接收响应的过程。
在本主题中,我们更新了业务流程,以向 Salesforce 发送查询请求,并接收有关 Salesforce 中创建的机会的更多详细信息(例如产品、数量等)。 在后续主题中,我们将更新此解决方案,以将 Salesforce 响应输入到本地 SQL Server 数据库中。