修改字符串字段内容的 MuleSoft 转换消息

MuleSoft Transform Message that Modifies Content of String Field

我将如何修改以下 MuleSoft 转换消息以反转 EMPLOYEE_CODE 字段的串联?

背景:我正在使用 MuleSoft 进程,该进程 (i) 使用 'SELECT' 组件从数据库中查询数据 (ii) 然后使用一系列 'Transform Message' 组件和 (iii) 将 .csv 存放到 SFTP 服务器上。

其中一个数据字段 (EMPLOYEE_CODE) 包含来自 DB 的数据,格式为:01-1111(“-”前两个字符,“-”后四个字符)。我需要我的 MuleSoft Transform 消息来交换 EMPLOYEE_CODE 字段中此分隔的顺序,以这种格式输出它:1111-01(后四个字符现在在“-”之前,前两个字符在“-”之后') 在生成 .csv 文件之前。

当前 MuleSoft 转换消息:

%dw 2.0
output application/csv
quoteValues=true
---
payload map {
    employeeID: $.EMPL_ID,
    firstName: $.FIRST_NAME,
    lastName: $.LAST_NAME,
    employeeCode: $.EMPLOYEE_CODE
}

作为参考,下面是我从 DB 收到的示例数据 Table:

EMPL_ID FIRST_NAME LAST_NAME EMPLOYEE_CODE
0000001 John Doe 01-1111
0000002 Rick James 02-2222
0000003 John Smith 03-3333

Transform Message 需要将其更改为(1111-01、2222-02 和 3333-03)。

作为参考,这是我 Select 中的 SQL 查询:

SELECT
   EMPL_ID
   FIRST_NAME
   LAST_NAME
   EMPLOYEE_CODE
FROM DATABASE.TABLE

看起来您只需要使用非常基本的字符串操作(以不同的顺序连接子字符串)来更新字段 EMPLOYEE_CODE。我使用更新运算符来解决它在您的脚本之前转换数据的问题。其他字段与此解决方案无关。

%dw 2.0
output application/java
---
payload map (
    $ update {
        case code at .EMPLOYEE_CODE -> code[3 to -1] ++ "-" ++ code[0 to 1]
    }
)

如果您希望与您的脚本集成,只需替换此行:

          employeeCode: $.EMPLOYEE_CODE[3 to -1] ++ "-" ++ $.EMPLOYEE_CODE[0 to 1]

另一种带有一些内置字符串函数的方法:

%dw 2.0
import * from dw::core::Strings
output application/json
var inp = "01-1111"
---
substringAfter(inp,"-")++"-"++ substringBefore(inp,"-")


使用纯字符串操作的替代方法

%dw 2.0
import * from dw::core::Strings
output application/json
var inp = "01-1111"
---
rightPad(rightPad(substringAfter(inp,"-"),5,"-"),6,substringBefore(inp,"-"))

无论哪种情况,您都可以将 inp 替换为 $.EMPLOYEE_CODE

更通用的方法:

StringUtils.dwl:

%dw 2.0

/**
* Reverse the tokens position of a delimited string.
*
* === Parameters
*
* [%header, cols="1,13"]
* |===
* | Name | Type | Description
* | `delimitedString` | `String \| Null` | An optional string that contains a delimiter.
* | `delimiter` | `String` | The delimiter.
* |===
*
* === Example
*
* This example reverse the string "01-1111" into "1111-01"
*
* ==== Source
*
* [source,DataWeave,linenums]
* ----
* %dw 2.0
* output application/json
* ---
* reverseTokens("01-1111", "-")
* ----
*
* ==== Output
*
* `Expression Output`
*
* [source,XML,linenums]
* ----
* "1111-01"
* ----
*/
fun reverseTokens(delimitedString : String | Null, delimiter : String) = do {
    var tokens = (delimitedString splitBy delimiter ) default []
    ---
    tokens[-1 to 0] joinBy delimiter
}

main.dwl:

%dw 2.0
output application/csv quoteValues=true
import StringUtils
---
payload map {
    employeeID: $.EMPL_ID,
    firstName: $.FIRST_NAME,
    lastName: $.LAST_NAME,
    employeeCode: StringUtils::reverseTokens($.EMPLOYEE_CODE, '-')
}