我工作的一个了Talend工作,使一个HTTP GET请求来获取多个PDF文档。请求返回由一个JSON文件:documentDate和documentLink。我想从documentDate最新documentLink(S)和与文件名是“Document_1”如果只有一个文档FileFetch组件上传的文件(S)的最新日期的存在。如果2个文件具有最新的日期,则FileFetch组件应上传2个文件一个文件名是“Document_1”和其他的“Document_2”我对如何循环JSON文件以获得最新的日期,并命名文档(不确定S)正确。
我迄今所做的:
tHTTPRequest_1 --> tExtractJSONFields_1 --> tXMLMap_1 --> tFileFetch_1
此作品上传一个文件,但没有在tFileFetch_1组件的最新documentDate或文件名的命名作出检查。
返回的JSON如下所示:
{
"documents": [
{
"documentDate ": 200119,
"documentLink": "someLink1",
},
{
"documentDate ": 200119,
"documentLink": "someLink2",
},
{
"documentDate ": 150119,
"documentLink": "someLink3",
}
]
}
你们是否有关于如何解决这个问题的任何想法?
我相信你正在寻找类似下面的内容:
工作的第一部分包括:
tFileInputJson(或你的情况tHttpRequest1) - > tSetGlobalVar - > tExtractJsonFields - > tJavaRow
tHttpRequest1将抓住JSON响应(可以进行排序或不)
tsetGlobalVar将保存JSON在全局变量中的第二部分中使用。
tExtractJson会从每一个JSON数组项提取DocumentDate。
tJavaRow将包含比较来自不同文件的日期和设置在一个全局变量中最大的一个的Java逻辑的:
String maxDate = (String) globalMap.get("MaxDate");
if (maxDate != null && !maxDate.trim().isEmpty() )
//Some Logic here to take the max i.e. Convert it to proper date format and compare them.
globalMap.put("MaxDate", *comparedMaxDate*);
else
globalMap.put("MaxDate", row4.DOCDATE);
一旦完成,在我们的全局变量,我们将有原来的JSON响应和最大/最近的日期。
这将一旦第一部分(SUBJOB)运行第二部分已完成将包括:
tJava - > tExtractJsonFields - > TMAP - > tFileFetch
tJava就干脆抢在第一部分设置的全局变量的JSON消息和MAXDATE。
tExtractJsonFields将提取documentLink和documentDate为每个阵列条目,并通过他们沿最大日期tMap组件。
tMap组件将简单地执行documentDate和最大日期之间的比较,并检查是否等于documentLink传递给tFileFetch,否则将忽略它。
这使您可以仅发送最新的日期documentLinks。
希望这有助于它是非常明显的。