Sharepoint 2007 工作流与 powershell 脚本
Sharepoint 2007 workflow vs powershell script
在 Sharepoint 2007 文档列表中,我需要有一列是过期日期,然后是另一列作为过期日期的指示器。
我已经与最终用户谈过,只是让额外的视图仅显示已过期的文档是不够的 - 他们希望该列显示单词 "Expired"。
我可以通过在项目创建事件上设置一个工作流来实现这一点,该工作流只需等待日期小于今天。这将 运行 工作流程,工作流程将保持 "In progress" 状态,直到项目到期(可能是 5 年)
我也可以通过 powershell 和 运行 每晚的计划任务来迭代列表中的所有项目,并在满足条件时手动设置列文本。
我的问题是哪个最好,因为此文档列表将包含超过 100,000 个文档。对工作流程 运行 持续 5 年有什么影响吗?而且其中有很多?
暂停一万个工作流并等待五年是一个坏主意。这不仅会给您的工作流计时器服务带来不必要的负载,而且如果您的工作流计时器服务在这五年内的某个时间点意外停止,您将 运行 面临所有一万个工作流进入错误状态的风险,这将强制您终止并重新启动所有 10,000 个工作流程以保持流程继续进行。
触发控制台应用程序或 Powershell 脚本执行的计划任务是更好的方法,或者您可以在 Visual Studio 中编写自己的 SharePoint 计时器作业。两种方式都将使用 SharePoint 服务器端对象模型通过 SPQuery 对象来查询列表。使用 SharePoint 服务器端对象模型时,重要的是尽可能使用最高效的查询。
您 不需要 遍历列表中的所有项目,永远。您的 CAML 查询应该足够具体,仅 return 指标列不等于 "Expired" 且过期日期小于今天的项目子集。
为这两列添加列索引以减少该查询对数据库的压力。
在 Sharepoint 2007 文档列表中,我需要有一列是过期日期,然后是另一列作为过期日期的指示器。
我已经与最终用户谈过,只是让额外的视图仅显示已过期的文档是不够的 - 他们希望该列显示单词 "Expired"。
我可以通过在项目创建事件上设置一个工作流来实现这一点,该工作流只需等待日期小于今天。这将 运行 工作流程,工作流程将保持 "In progress" 状态,直到项目到期(可能是 5 年)
我也可以通过 powershell 和 运行 每晚的计划任务来迭代列表中的所有项目,并在满足条件时手动设置列文本。
我的问题是哪个最好,因为此文档列表将包含超过 100,000 个文档。对工作流程 运行 持续 5 年有什么影响吗?而且其中有很多?
暂停一万个工作流并等待五年是一个坏主意。这不仅会给您的工作流计时器服务带来不必要的负载,而且如果您的工作流计时器服务在这五年内的某个时间点意外停止,您将 运行 面临所有一万个工作流进入错误状态的风险,这将强制您终止并重新启动所有 10,000 个工作流程以保持流程继续进行。
触发控制台应用程序或 Powershell 脚本执行的计划任务是更好的方法,或者您可以在 Visual Studio 中编写自己的 SharePoint 计时器作业。两种方式都将使用 SharePoint 服务器端对象模型通过 SPQuery 对象来查询列表。使用 SharePoint 服务器端对象模型时,重要的是尽可能使用最高效的查询。
您 不需要 遍历列表中的所有项目,永远。您的 CAML 查询应该足够具体,仅 return 指标列不等于 "Expired" 且过期日期小于今天的项目子集。
为这两列添加列索引以减少该查询对数据库的压力。