最新文件和文件的动态命名

时间:2019-02-02 12:00:25

标签: java talend

我正在做一个天才工作,该工作发出HTTP GET请求以获取多个PDF文档。该请求返回一个JSON文件,该文件包含:documentDate和documentLink。我想从documentDate获取最新的documentLink,并使用FileFetch组件上载该文档,文件名是“ Document_1”,如果只有一个最新日期的文档。如果2个文档具有最新日期,则FileFetch组件应上传2个文档,其中一个文件名为“ Document_1”,另一个为“ Document_2”。我不确定如何循环JSON文件以获取最新日期并命名该文档( s)

到目前为止我所做的:

 tHTTPRequest_1 --> tExtractJSONFields_1 --> tXMLMap_1 --> tFileFetch_1

这可以上传一个文件,但是没有检查最新的documentDate或tFileFetch_1组件中文件名的命名。

返回的JSON如下所示:

{
"documents": [
    {
        "documentDate ": 200119,
        "documentLink": "someLink1",
    },
    {
        "documentDate ": 200119,
        "documentLink": "someLink2",
    },
    {
        "documentDate ": 150119,
        "documentLink": "someLink3",
    }
   ]
}

你们对如何解决这个问题有任何想法吗?

1 个答案:

答案 0 :(得分:1)

我相信您正在寻找类似于以下内容的东西:

enter image description here

工作的第一部分包括:

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,否则它将忽略它。

这允许您仅发送具有最新日期的文档链接。

希望这会有所帮助,而且很清楚。