Warning: file_get_contents(/data/phpspider/zhask/data//catemap/3/heroku/2.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Jboss 将OData属性通过TEID视图传递到存储过程中_Jboss_Virtualization_Teiid - Fatal编程技术网

Jboss 将OData属性通过TEID视图传递到存储过程中

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

我正在将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属性的问题

<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没有投影/参数。在自定义翻译器中,这种处理方式可能是最好的。