如何在DHF5 Flows源查询中添加当前日期作为动态集合
在DHF5 Flows源查询中添加当前日期作为集合的实现方法
方法1:SPARQL源查询直接生成当前日期集合
如果你的源是SPARQL端点或MarkLogic SPARQL查询,可直接在查询逻辑中绑定当前日期变量:
PREFIX xsd: <http://www.w3.org/2001/XMLSchema#> SELECT ?item ?currentDate WHERE { # 原有业务查询逻辑 ?item a :YourTargetEntity . # 绑定当前日期(带时间) BIND(NOW() AS ?currentDate) # 若仅需纯日期格式,替换为: # BIND(STRDT(STR(NOW()), xsd:date) AS ?currentDate) }
查询结果会自动包含currentDate字段,后续Flow步骤可直接引用该字段作为集合属性。
方法2:JavaScript源查询脚本中添加
如果源是基于JavaScript的文档查询(比如从MarkLogic集合中提取文档),可在查询脚本中直接注入当前日期:
function getSourceDocuments() { // 原有文档查询逻辑 const sourceDocs = cts.search(cts.collectionQuery("your-source-collection")); // 遍历文档,添加当前日期字段 return Array.from(sourceDocs).map(doc => { const docContent = fn.head(doc.root); // 添加纯日期字段(不带时间) docContent.currentDate = fn.currentDate(); // 若需带时间戳,替换为: // docContent.currentDateTime = fn.currentDateTime(); return docContent; }); }
方法3:Flow转换步骤中追加当前日期
如果源查询不便修改,可在Flow的转换阶段添加自定义逻辑:
- 打开DHF5 Flow配置界面,找到「转换步骤」
- 添加自定义JavaScript转换,代码如下:
function transform(inputDoc) { // 给输入文档追加当前日期字段 inputDoc.currentDate = fn.currentDate(); // 如需指定日期格式,使用格式化函数: // inputDoc.formattedDate = fn.formatDateTime(fn.currentDateTime(), "[Y0001]-[M01]-[D01]"); return inputDoc; }
注意事项
- 时区处理:MarkLogic日期函数默认使用服务器时区,如需指定时区,可传入时区参数,例如
fn.currentTime(xs.dateTime("2024-01-01T00:00:00-05:00").timezone) - 格式自定义:通过
fn.formatDateTime函数可生成任意格式的日期字符串,参数参考MarkLogic官方日期格式化规则
内容的提问来源于stack exchange,提问作者ramz123
相关产品推荐
相关产品推荐

