将talend中的Joblet与tMemorize和tJavaFlex一起使用

将talend中的Joblet与tMemorize和tJavaFlex一起使用,talend,Talend,我正在尝试在Talend中创建一些小作业,以加快某些流程。 我有一个来自MSSQLSINPUT的输入,然后对结果进行排序和过滤。然后我有一个tMemorizeRows和一个tJavaFlex,其目的是记忆列中的行以进行计数。计数基于客户ID,一旦ID更改,计数将重新开始为1,过程再次开始并持续到结束。我已将其重构为joblet,但它不起作用,错误是: ID_tMemorizeRows_1无法解析为变量 我有一个以 int counte = 1; 主代码为 if(ID_tMemorizeRows

我正在尝试在Talend中创建一些小作业,以加快某些流程。 我有一个来自MSSQLSINPUT的输入,然后对结果进行排序和过滤。然后我有一个tMemorizeRows和一个tJavaFlex,其目的是记忆列中的行以进行计数。计数基于客户ID,一旦ID更改,计数将重新开始为1,过程再次开始并持续到结束。我已将其重构为joblet,但它不起作用,错误是:

ID_tMemorizeRows_1无法解析为变量

我有一个以

int counte = 1;
主代码为

if(ID_tMemorizeRows_1[0].equals(ID_tMemorizeRows_1[1]))
{
counte = counte + 1; 
} 
else 
{ 
counte = 1; 
} 
context.Enqnum = counte;
Enqnum变量和已正确创建并添加到tMaps组件中

有人告诉我,有人知道为什么会发生这种情况,因为当你将某个东西移动到一个joblet时,它会得到一个新的/不同的名称,因此必须在Java中专门调用它,如果是这种情况,我如何找到该名称

多谢各位
里奇

我确实有一个决心。我曾尝试添加图片,但我的声誉不够高

在使用joblet时,我们知道Talend通过将代码插入主作业的代码中,基本上回收了joblet中使用的代码

这是我创建的joblet,我知道它可以工作,因为我将它重构为joblet,而不是从sctatch构建它。它所做的只是在一个有序的数据集中存储第0行和第1行,java执行计数,tMap将结果附加到作业中(如上所述)

(我将在我的问题中尝试插入图像,我没有足够的信誉点将其插入问题)

作业运行时,运行正常。但是,当我想在作业的另一部分重用同一个joblet时,就会出现问题。Talend所做的是根据joblet的名称在源代码中为每个组件分配名称。 例如,如果该作业被称为ThisJob,则tMemorizeRows\u 1将被称为ThisJob\u 1\tMemorizeRows\u 1。 组件中的行(在本例中为ReferenceID)将重命名为: 引用ID\u此作业\u 1\u tMemorizeRows\u 1

但是,当您将第二个joblet添加到您的作业时,它会给它起一个新名称,例如ThisJob\u 2。此名称将根据您在添加第二个joblet之前更改工作的程度而有所不同。因此,名称中的数字将取决于此活动

如果您立即将该joblet添加到作业中,则该joblet将被称为ThisJob_2,如果您在添加之前添加了5个其他组件,则该joblet可能会被称为ThisJob_6等(我不确定talend如何重命名组件)

添加joblet时,可以在joblet组件上看到该joblet的名称,然后在创建到其他组件的任何链接/联接时,将其还原为原始joblet名称

同样重要的是,代码中的每个组件都分配给一个名为currentComponent的变量

分辨率

我所做的是使用Java代码使用下面的代码拆分名称。这样,我就可以获得joblet的当前名称,并在Java中使用这个名称

String string = currentComponent;
String[] parts = string.split("_");
String part1 = parts[0];
String part2 = parts[1];
String joblet = part1+'_'+part2;
String newrow = "ReferenceID_"+joblet+"_tMemorizeRows_1";
我希望这是有道理的。
谢谢

您能更详细地解释您的要求吗?或者您是否尝试过不使用tMemorizerow?可能是taggregaterow…等等。您还能展示您的工作形象吗