首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >在Mule (3.8.1)和Anypoint Studio(6.2.1)中从Server 2016中获取结果集

在Mule (3.8.1)和Anypoint Studio(6.2.1)中从Server 2016中获取结果集
EN

Stack Overflow用户
提问于 2017-01-20 19:56:59
回答 2查看 392关注 0票数 0

在当前的Mule流中,我能够在Server 2016中执行一个存储过程,结果集以{resultSet1={ROWEXISTS=1}}的形式返回。这将击中一个流变量rowExists,我将对变量集作出进一步的决定。我期望从存储过程中得到的值是0或1,并且它正确地返回到ROWEXISTS列中。现在我的问题是如何从结果集中访问ROWEXISTS列。我尝试了#payload.get(0).ROWEXISTS和#[payload.get(0)‘ROWEXISTS’等,但是没有运气。它要么会给我一个错误,要么将为空。

下面给出了我正在使用的XML有效负载示例。我将从XML有效负载中提取EmployeeNumber,并执行一个存储过程以丰富消息。目标变量#flowVars.rowExists。但是我在这里看到的是从存储过程中得到的0或1的特定值。我无法取回那个值。任何帮助都是非常感谢的。

代码语言:javascript
复制
 <Employees>
    <Employee>
            <CompanyCode>SMBMI</CompanyCode>
            <EmployeeLastName>LastName1</EmployeeLastName>
            <EmployeeFirstName>FirstName1</EmployeeFirstName>
            <MiddleName/>
            <EmployeeNumber>00479</EmployeeNumber>
            <Department>Public Safety</Department>
    </Employee>
    <Employee>
            <CompanyCode>SMBMI</CompanyCode>
            <EmployeeLastName>LastName2</EmployeeLastName>
            <EmployeeFirstName>FirstName2</EmployeeFirstName>
            <MiddleName/>
            <EmployeeNumber>08945</EmployeeNumber>
            <Department>Transport</Department>
    </Employee>
</Employees>                    

下面给出了Mule流xml

代码语言:javascript
复制
<flow name="DBtest" >
        <file:inbound-endpoint path="C:\Backup\Files\Input" moveToDirectory="C:\Backup\Files\Output" connector-ref="FileGodsake" responseTimeout="10000" doc:name="File">
            <file:filename-regex-filter pattern="(EmployeeList){1}.*(\.xml)" caseSensitive="true"/>
        </file:inbound-endpoint>
        <splitter expression="#[xpath3('//Employee',payload,'NODESET')]" doc:name="Splitter"/>
        <mulexml:dom-to-xml-transformer doc:name="DOM to XML"/>
        <enricher  target="#[flowVars.rowExists]" doc:name="Message Enricher">
            <db:stored-procedure config-ref="adventure" doc:name="Check Employee Exists">
                <db:parameterized-query><![CDATA[{CALL EmployeeExists (:EmployeeNumber)}]]></db:parameterized-query>
                <db:in-param name="EmployeeNumber" value="#[xpath3('//EmployeeNumber',payload,'STRING')]"/>
            </db:stored-procedure>
        </enricher>
        <logger message="Employee Number:  #[xpath3('//EmployeeNumber',payload,'STRING')] and If Exists is #[flowVars.rowExists] . The get request #[flowVars.rowExists]" level="INFO" doc:name="Logger"/>
        <choice doc:name="Choice">
            <when expression="#[flowVars.rowExists]">
                <db:stored-procedure config-ref="adventure" doc:name="Update Employee">
                    <db:parameterized-query><![CDATA[{CALL UpdateEmployee (:CompanyCode,:EmployeeLastName,:EmployeeFirstName,:MiddleName,:EmployeeNumber,:Department
,:DeptNumber)}]]></db:parameterized-query>
                    <db:in-param name="CompanyCode" type="VARCHAR" value="#[xpath3('//CompanyCode',payload,'STRING')]"/>
                    <db:in-param name="EmployeeLastName" type="VARCHAR" value="#[xpath3('//EmployeeLastName',payload,'STRING')]"/>
                    <db:in-param name="EmployeeFirstName" type="VARCHAR" value="#[xpath3('//EmployeeFirstName',payload,'STRING')]"/>
                    <db:in-param name="MiddleName" type="VARCHAR" value="#[xpath3('//MiddleName',payload,'STRING')]"/>
                    <db:in-param name="EmployeeNumber" type="VARCHAR" value="#[xpath3('//EmployeeNumber',payload,'STRING')]"/>
                    <db:in-param name="Department" type="VARCHAR" value="#[xpath3('//Department',payload,'STRING')]"/>
                 </db:stored-procedure>
            </when>
            <otherwise>
                <db:stored-procedure config-ref="adventure" doc:name="Insert Employee">
                    <db:parameterized-query><![CDATA[{CALL InsertEmployee (:CompanyCode,:EmployeeLastName,:EmployeeFirstName,:MiddleName,:EmployeeNumber,:Department)}]]></db:parameterized-query>
                    <db:in-param name="CompanyCode" type="VARCHAR" value="#[xpath3('//CompanyCode',payload,'STRING')]"/>
                    <db:in-param name="EmployeeLastName" type="VARCHAR" value="#[xpath3('//EmployeeLastName',payload,'STRING')]"/>
                    <db:in-param name="EmployeeFirstName" type="VARCHAR" value="#[xpath3('//EmployeeFirstName',payload,'STRING')]"/>
                    <db:in-param name="MiddleName" type="VARCHAR" value="#[xpath3('//MiddleName',payload,'STRING')]"/>
                    <db:in-param name="EmployeeNumber" type="VARCHAR" value="#[xpath3('//EmployeeNumber',payload,'STRING')]"/>
                    <db:in-param name="Department" type="VARCHAR" value="#[xpath3('//Department',payload,'STRING')]"/>                
        </db:stored-procedure>
            </otherwise>
        </choice>
 </flow >  

我希望将ROWEXISTS的值提取出来并更新到目标变量rowExists

EN

回答 2

Stack Overflow用户

回答已采纳

发布于 2017-01-22 22:03:12

尝试这个表达式- #[payload.resultSet1.get(0).ROWEXISTS]

票数 0
EN

Stack Overflow用户

发布于 2017-02-11 21:59:54

好的。我要把荣誉归功于森希尔。Enricher源应该是

.ROWEXISTS==1。这将根据该行是以1还是0的形式返回,从而计算为true还是false。

票数 0
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/41771383

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档