Talend:如何 return 来自 tESBProviderResponse 中 tRunJob 的值?

Talend: How to return values from tRunJob in tESBProviderResponse?

运行在 Web 服务中创建子作业时是否需要一些特殊的东西?

我知道我可以通过 tRunJob 的上下文传递值并通过 tRunJob 模式(通过 tBufferOutput 组件呈现)检索值。 但是,当从 Web 服务 运行 时,这似乎不起作用;即,调用包含 tESBProviderRequest 和 tESBProviderResponse 的服务的 tESBConsumer。通过 tRunJob 上下文传递值有效,但通过 tRunJob 模式检索值无效。在下面的输出中,"service_received_from_child" 输出显示来自 tRunJob 的空值。

[statistics] connecting to socket on port 3744
[statistics] connected
.------------------.
|  client_passed_to_service |
|=----------------=|
|Id                |
|=----------------=|
|a7d0b000000XamBAAS|
'------------------'

.------+------.
|client_received_from_service |
|=-----+-----=|
|Status|CaseId|
|=-----+-----=|
'------+------'

[statistics] disconnected

.------------------.
|  child_received_from_service |
|=----------------=|
|Id                |
|=----------------=|
|a7d0b000000XamBAAS|
'------------------'

.------------------------------------+----------.
|                child_returned_to_service      |
|=-----------------------------------+---------=|
|result                              |case_id   |
|=-----------------------------------+---------=|
|Test: Received Id a7d0b000000XamBAAS|0987654321|
'------------------------------------+----------'

.------------------.
|  service_passed_to_child |
|=----------------=|
|Id                |
|=----------------=|
|a7d0b000000XamBAAS|
'------------------'

.------+-------.
|service_received_from_child |
|=-----+------=|
|result|case_id|
|=-----+------=|
|null  |null   |
'------+-------'

我构建了一个测试父作业来执行同一个子作业,它工作正常,通过 tRunJob 上下文传递值并从 tRunJob 模式检索值。在下面的输出中,"parent_received_from_child" 输出显示了 tRunJob 的正确结果。

[statistics] connecting to socket on port 4045
[statistics] connected
.------------------.
|  child_received_from_parent |
|=----------------=|
|Id                |
|=----------------=|
|a7d0b000000XamBAAS|
'------------------'

.------------------------------------+----------.
|                child_returned_to_parent       |
|=-----------------------------------+---------=|
|result                              |case_id   |
|=-----------------------------------+---------=|
|Test: Received Id a7d0b000000XamBAAS|0987654321|
'------------------------------------+----------'

.------------------------------------+----------.
|                parent_received_from_child     |
|=-----------------------------------+---------=|
|result                              |case_id   |
|=-----------------------------------+---------=|
|Test: Received Id a7d0b000000XamBAAS|0987654321|
'------------------------------------+----------'

[statistics] disconnected

找到答案了:输入流好像不能直接连接到tRunJob,必须先经过一个tFlowToIterate,再到tRunJob。进行此更改后,客户端会收到正确的值。

我猜是因为 Web 服务连续运行并且每个请求都是一个新的 "row" 通过流程所以需要迭代才能单独处理每个请求(?)