修改字符串字段内容的 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, '-')
}
我将如何修改以下 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, '-')
}