最新文件和文件的动态命名
Latest files and dynamic naming of files
我正在做一项 talend 工作,它发出 HTTP GET 请求来获取多个 PDF 文档。请求 returns 一个 JSON 文件,包含:documentDate 和 documentLink。我想从 documentDate 获取最新的 documentLink(s) 并使用文件名 "Document_1" 的 FileFetch 组件上传文档,如果最新日期只有一个文档存在的话。如果 2 个文档具有最新日期,则 FileFetch 组件应上传 2 个文档,其中一个文件名为 "Document_1",另一个文件名为 "Document_2" 我不确定如何遍历 JSON 文件以获取最新日期并正确命名文档。
到目前为止我做了什么:
tHTTPRequest_1 --> tExtractJSONFields_1 --> tXMLMap_1 --> tFileFetch_1
这可以上传一个文件,但没有检查最新的文档日期或 tFileFetch_1 组件中的文件名命名。
返回的 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。
tJava行将包含 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 响应和 maximum/recent 日期。
第一部分(子作业)完成后 运行 第二部分将包括:
tJava -> tExtractJsonFields -> tMap -> tFileFetch
tJava 将简单地从第一部分中设置的全局变量中获取 JSON 消息和 MaxDate。
tExtractJsonFields 将为每个数组条目提取 documentLink 和 documentDate,并将它们与最大日期一起传递给 tMap 组件。
tMap 组件将简单地在 documentDate 和最大日期之间进行比较,并检查是否等于将 documentLink 传递给 tFileFetch,否则它将忽略它。
这允许您只发送具有最新日期的文档链接。
希望这对您有所帮助,而且已经足够清楚了。
我正在做一项 talend 工作,它发出 HTTP GET 请求来获取多个 PDF 文档。请求 returns 一个 JSON 文件,包含:documentDate 和 documentLink。我想从 documentDate 获取最新的 documentLink(s) 并使用文件名 "Document_1" 的 FileFetch 组件上传文档,如果最新日期只有一个文档存在的话。如果 2 个文档具有最新日期,则 FileFetch 组件应上传 2 个文档,其中一个文件名为 "Document_1",另一个文件名为 "Document_2" 我不确定如何遍历 JSON 文件以获取最新日期并正确命名文档。
到目前为止我做了什么:
tHTTPRequest_1 --> tExtractJSONFields_1 --> tXMLMap_1 --> tFileFetch_1
这可以上传一个文件,但没有检查最新的文档日期或 tFileFetch_1 组件中的文件名命名。
返回的 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。
tJava行将包含 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 响应和 maximum/recent 日期。
第一部分(子作业)完成后 运行 第二部分将包括:
tJava -> tExtractJsonFields -> tMap -> tFileFetch
tJava 将简单地从第一部分中设置的全局变量中获取 JSON 消息和 MaxDate。
tExtractJsonFields 将为每个数组条目提取 documentLink 和 documentDate,并将它们与最大日期一起传递给 tMap 组件。
tMap 组件将简单地在 documentDate 和最大日期之间进行比较,并检查是否等于将 documentLink 传递给 tFileFetch,否则它将忽略它。
这允许您只发送具有最新日期的文档链接。
希望这对您有所帮助,而且已经足够清楚了。