Power Automate中如何获取SharePoint列表昨日创建的已提交项?
预期行为
每日运行循环流,从SharePoint列表获取满足以下条件的项:
- 状态为
Submitted - 昨日创建的项
已尝试方案
最初在Get items动作的Filter query中使用:
Status eq 'Submitted' and Created eq '@{addDays(utcNow(),-1,'yyyy-MM-dd')}'
但未返回任何结果,原因是Created列的时间格式为2023-08-17T05:07:46Z(带时分秒),而addDays()输出的是仅日期格式2023-08-17,两者无法匹配。
搜索到的常见方案:
Created gt '@{addDays(utcNow(),-1,'yyyy-MM-dd')}' Created ge '@{addDays(utcNow('yyyy-MM-dd'),-1,'yyyy-MM-dd')}'
但这两个表达式会返回昨日及今日创建的项,不符合仅需昨日项的需求。
问题
在Get Items动作中,应使用什么Filter query来精准获取所有昨日创建且状态为Submitted的项?
参考信息
已创建多个Compose动作排查时间问题:
- Compose - 示例Created值:
2023-08-17T05:07:46Z
- Compose - UTC时间转换为布里斯班时区:
@{convertTimeZone(utcNow(),'UTC','E. Australia Standard Time')}
- Compose - UTC时间转换为布里斯班时区并格式化:
@{formatDateTime(convertTimeZone(utcNow(), 'UTC', 'E. Australia Standard Time'), 'yyyy-MM-dd')}
- Compose - UTC昨日时间转换为布里斯班时区并格式化:
@{formatDateTime(convertTimeZone(addDays(utcNow(), -1), 'UTC', 'E. Australia Standard Time'), 'yyyy-MM-dd')}
解决方案
要精准筛选昨日创建的项,需针对Created字段设置时间范围过滤,匹配昨日00:00:00到今日00:00:00之间的记录,同时结合状态筛选。
适配布里斯班时区的Filter Query
如果业务时间基于布里斯班时区(E. Australia Standard Time),使用以下表达式:
Status eq 'Submitted' and Created ge '@{convertTimeZone(startOfDay(addDays(utcNow(), -1)), 'UTC', 'E. Australia Standard Time')}' and Created lt '@{convertTimeZone(startOfDay(utcNow()), 'UTC', 'E. Australia Standard Time')}'
表达式解释
startOfDay(addDays(utcNow(), -1)):获取UTC时间的昨日0点时刻convertTimeZone(..., 'UTC', 'E. Australia Standard Time'):将UTC时间转换为布里斯班时区的对应时间Created ge [昨日布里斯班时区0点]:筛选创建时间晚于等于昨日0点的记录Created lt [今日布里斯班时区0点]:筛选创建时间早于今日0点的记录
通过这个范围,就能精准获取布里斯班时区下昨日全天创建、且状态为Submitted的项。
纯UTC时区的简化版本(无需时区转换)
如果业务时间基于UTC,直接使用UTC时间范围即可:
Status eq 'Submitted' and Created ge '@{startOfDay(addDays(utcNow(), -1))}' and Created lt '@{startOfDay(utcNow())}'
内容的提问来源于stack exchange,提问作者user1063287
相关产品推荐
相关产品推荐

