Function Dataweave 2.0:如何将else块数据分配给变量

Function Dataweave 2.0:如何将else块数据分配给变量,function,variables,dataweave,mule4,Function,Variables,Dataweave,Mule4,我使用的是外部dwl文件,它在函数中有if-else块。函数的输出将成为有效负载,但是如何让“IF”将有效数据阻塞到一个变量中,“ELSE”将无效数据阻塞到另一个变量中,这样我就可以使用这两个变量写入两个单独的文件,一个有成功记录,另一个有失败记录 运行时:4.2.1 fun providerObjMapping(payload) = (if(! isEmpty(payload.ProviderUniqueID)) { providerUniqueID: payload.Provide

我使用的是外部dwl文件,它在函数中有if-else块。函数的输出将成为有效负载,但是如何让“IF”将有效数据阻塞到一个变量中,“ELSE”将无效数据阻塞到另一个变量中,这样我就可以使用这两个变量写入两个单独的文件,一个有成功记录,另一个有失败记录

运行时:4.2.1

fun providerObjMapping(payload) = (if(! isEmpty(payload.ProviderUniqueID)) {

  providerUniqueID:   payload.ProviderUniqueID,
  salutation:payload.Salutation,
  firstName:payload.FirstName,
  middleName:payload.MiddleName,
  lastName:payload.LastName 
        
} else {
errorProviderUniqueID:   payload.ProviderUniqueID,
errorSalutation:payload.Salutation,
errorFirstName:payload.FirstName,
errorMiddleName:payload.MiddleName,
errorLastName:payload.LastName
})

从DataWeave内部是不可能的。通过设计,Mule 4流中的每个组件都可以返回一个值,该值可以分配给或一个变量


使用选择路由器执行不同的任务。

@aled是正确的;如果您只对成功或失败感兴趣,可以使用
选项
处理器来完成

另一方面,如果您同时需要两者,则可以使用
转换消息
处理器,并添加另一个将转换存储在变量中的目标。这是我的建议

下面是
转换消息
的样子:

        <ee:transform doc:name="Transform Message" doc:id="4a9eae14-79e8-4ef3-acec-00901f548e00" >
            <ee:message >
            </ee:message>
            <ee:variables >
                <ee:set-variable variableName="valid" ><![CDATA[%dw 2.0
output application/json

fun providerObjMapping(payload) = if (! isEmpty(payload.ProviderUniqueID) ) {
    providerUniqueID:   payload.ProviderUniqueID,
    salutation:payload.Salutation,
    firstName:payload.FirstName,
    middleName:payload.MiddleName,
    lastName:payload.LastName       
} else {
    errorProviderUniqueID:   payload.ProviderUniqueID,
    errorSalutation:payload.Salutation,
    errorFirstName:payload.FirstName,
    errorMiddleName:payload.MiddleName,
    errorLastName:payload.LastName
}

---
providerObjMapping(payload)]]></ee:set-variable>
                <ee:set-variable variableName="invalid" ><![CDATA[%dw 2.0
output application/json

fun providerObjMapping(payload) = if ( isEmpty(payload.ProviderUniqueID) ) {
    providerUniqueID:   payload.ProviderUniqueID,
    salutation:payload.Salutation,
    firstName:payload.FirstName,
    middleName:payload.MiddleName,
    lastName:payload.LastName       
} else {
    errorProviderUniqueID:   payload.ProviderUniqueID,
    errorSalutation:payload.Salutation,
    errorFirstName:payload.FirstName,
    errorMiddleName:payload.MiddleName,
    errorLastName:payload.LastName
}

---
providerObjMapping(payload)]]></ee:set-variable>
            </ee:variables>
        </ee:transform>

我可能在一个批处理文件中获得100万条记录,使用上述方法,我必须处理同一个文件两次。有什么优化的方法吗