我正在将Salesforce Lightning Connect(OData连接器(连接到Teiid。
在Teiid后面是一个名为getCustomers的存储过程,它需要3个参数:@field,@operator,@value。例如,getCustomers('Last_Name', '=', 'Porter'(。所有调用都将是只读的。
Salesforce 无法直接调用 ActionImports 和 FunctionImports,我需要它们是 EntitySets。Salesforce将在OData中将详细信息发送为"$filter=Last_Name+eq+'Porter'"。
我可以使用视图来确保公开实体集,并且该视图可以调用存储过程。我的问题是如何检测 WHERE 子句 ($filter=Last_Name+eq+'Porter'( 并将其传递给存储过程?
由于$filter可能是项目链,因此我怀疑我在虚拟过程中需要动态 SQL,但仍然存在传入访问视图的 OData 属性的问题。
<metadata type="DDL"><![CDATA[
CREATE FOREIGN PROCEDURE getCustomers(field varchar, operator varchar, value varchar)
RETURNS TABLE (Id, integer, First_Name varchar, Last_Name varchar)
OPTIONS (UPDATECOUNT 0);]]>
</metadata>
<metadata type="DDL"><![CDATA[
CREATE VIEW SalesforceGetCustomers (Id PRIMARY KEY, First_Name varchar, Last_Name varchar)
AS SELECT * FROM (CALL getCustomers('?????','?????','?????')) t;]]>
</metadata>
我的问题是如何检测 WHERE 子句($filter=Last_Name+eq+'Porter'(并将其传递给存储过程?
最简单的方法是使用过程关系映射隐式发生这种情况:http://teiid.github.io/teiid-documents/master/content/reference/r_procedural-relational-command.html
简单地说,您可以像调用表一样调用该过程。 如果要添加视图,它将如下所示:
创建视图 销售队伍获取客户 作为选择 ID、First_Name Last_Name 来自 getCustomers;
只要用户提供输入作为谓词,它就会按预期工作:
从 SalesforceGetCustomers WHERE 字段中选择 * = '...'和运算符 ='...'和"值" = '...'