如何在SharePoint 2013工作流中检索仅限日期字段的正确值

时间:2017-03-28 12:05:48

标签: c# datetime sharepoint sharepoint-2013 sharepoint-workflow

对于具有多年通用C#和其他SharePoint体验的SharePoint 2013工作流程,我相当陌生。

我的问题在于时区。我正在Visual Studio 2013中开发一个列表工作流,它必须根据列表中当前项的仅日期字段的值进行一些操作。我正在使用GetDynamicValueProperties检索此字段的值并将其分配给变量。但是,如果我检查这个值,我可以看到它不正确,因为它是我实际为列表项设置的那一天的23:00。我假设这是因为无论是仅限日期字段,在幕后它仍然存储在常规DateTime对象中。

因此,我的所有日​​期计算都是1天休假(因为我只使用日期部分)。我注意到所有时区特定的类和方法都不能在工作流程中使用。

有没有什么方法可以正确检索此字段值的日期部分而无需对任何偏移量进行硬编码?我最好寻找一种不包含变通方法和黑客攻击的解决方案,并且适用于所有环境。

背景资料:我必须在此日期前n天在给定时间(例如上午8点)执行任务。第二部分也很棘手,因为这个时间部分也将是1小时。我也在寻找解决方案。

1 个答案:

答案 0 :(得分:0)

管理解决它在HttpSend活动中调用适当的SharePoint REST API端点。

SPTimeZone.utcToLocalTime endpoint

SPTimeZone.localTimeToUTC endpoint

我将原始日期作为url参数传递,并在JSON对象中接收转换后的日期,该对象可以在工作流程中轻松解析。根据网站集区域设置进行转换。

注意:从本地转换为UTC时,结果字符串包含" Z"最后的字符,表明它确实是一个UTC日期。在工作流中将整个字符串解析为DateTime时,会将其转换回原始日期。我已经使用String.Substring方法剪切了最后一个字符,现在它正常工作。