Jboss 将OData属性通过TEID视图传递到存储过程中
我正在将Salesforce Lightning Connect(OData连接器)连接到TEID TEID后面是一个名为getCustomers的存储过程,它接受3个参数:@field、@operator、@value。例如,getCustomers('Last_Name','=','Porter')。所有呼叫都将是只读的 Salesforce无法直接调用ActionImports和FunctionImports,我需要它们是EntitySet。Salesforce将在OData中以“$filter=Last_Name+eq+'Porter'”的形式发送详细信息 我可以使用视图来确保EntitySet是公开的,并且该视图可以调用存储过程。我的问题是如何检测WHERE子句($filter=Last_Name+eq+'Porter')并将其传递给存储过程 由于$filter可能是一个项目链,我怀疑我需要在虚拟过程中使用动态SQL,但仍然存在传递命中视图的OData属性的问题Jboss 将OData属性通过TEID视图传递到存储过程中,jboss,virtualization,teiid,Jboss,Virtualization,Teiid,我正在将Salesforce Lightning Connect(OData连接器)连接到TEID TEID后面是一个名为getCustomers的存储过程,它接受3个参数:@field、@operator、@value。例如,getCustomers('Last_Name','=','Porter')。所有呼叫都将是只读的 Salesforce无法直接调用ActionImports和FunctionImports,我需要它们是EntitySet。Salesforce将在OData中以“$fil
<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')并将其传递给存储过程
最简单的方法是使用过程关系映射隐式实现这一点:
简单地说,您可以像调用表一样调用该过程。如果要添加视图,其外观如下所示:
创建视图SalesforceGetCustomers
从getCustomers中选择Id、名字、姓氏
只要用户将输入作为谓词提供,它就会按预期工作:
从SalesforceGetCustomers中选择*,其中字段='…',运算符='…',值='…'
我的问题是如何检测WHERE子句($filter=Last_Name+eq+'Porter')并将其传递给存储过程
最简单的方法是使用过程关系映射隐式实现这一点:
简单地说,您可以像调用表一样调用该过程。如果要添加视图,其外观如下所示:
创建视图SalesforceGetCustomers
从getCustomers中选择Id、名字、姓氏
只要用户将输入作为谓词提供,它就会按预期工作:
从SalesforceGetCustomers中选择*字段=“…”和运算符=“…”和“值”=“…”谢谢@Steven。存储的过程运算符可以是多个运算符之一,例如getCustomers('CreatedDate','>','2020-01-01')。如果我发送一个SQL查询,如SELECT。。。如果CreatedDate>2020-01-01,是否有任何方法可以在不编写客户TEID转换器的情况下将其发送到存储过程?或者我必须确保使用运算符='>'?如果您有一个接受参数的过程,并且希望像调用表一样调用它,那么我所展示的将起作用。因此,如果通过odata或sql进行查询时使用:
SELECT*FROM SalesforceGetCustomers,其中field='CreatedDate'和operator='>'以及“value”='2020-01-01'
,则将使用这些参数调用该过程。如果要使用类似于的内容进行查询,请从SalesforceGetCustomers WHERE CreatedDate>“2020-01-01”
中选择*这将不起作用。首先,CreatedDate没有投影/参数。这种处理方式在定制翻译中可能是最好的。谢谢@Steven。存储的过程运算符可以是多个运算符之一,例如getCustomers('CreatedDate','>','2020-01-01')。如果我发送一个SQL查询,如SELECT。。。如果CreatedDate>2020-01-01,是否有任何方法可以在不编写客户TEID转换器的情况下将其发送到存储过程?或者我必须确保使用运算符='>'?如果您有一个接受参数的过程,并且希望像调用表一样调用它,那么我所展示的将起作用。因此,如果通过odata或sql进行查询时使用:SELECT*FROM SalesforceGetCustomers,其中field='CreatedDate'和operator='>'以及“value”='2020-01-01'
,则将使用这些参数调用该过程。如果要使用类似于的内容进行查询,请从SalesforceGetCustomers WHERE CreatedDate>“2020-01-01”
中选择*这将不起作用。首先,CreatedDate没有投影/参数。在自定义翻译器中,这种处理方式可能是最好的。