我有一个工作流,由创建列表项触发,并在创建列表项时发送电子邮件。
如果我通过Sharepoint前端在该列表中创建新项目,则会发送电子邮件。
我有一个小型控制台应用程序,旨在通过Sharepoint API设置列表项。这是每天作为预定任务运行的(列表的目的是在半夜提名某人进行每日轮换)。计划任务使用站点的网站集管理员凭据运行。
添加了列表项但未触发工作流。在日志中,我收到以下消息:
Declarative workflows cannot automatically start if the triggering action was performed by System Account. Canceling workflow auto-start.
好像列表项是由系统帐户而不是正在运行代码的用户添加的。为了让我的代码使用运行应用程序的相同标识与Sharepoint交互,我需要做什么?
答案 0 :(得分:1)
考虑明确模仿您的某个SharePoint用户(在本例中为网站集管理员。)我在此处回答了类似的问题:UpdateListItem method and System Account
使用模拟用户的上下文创建SPSite对象后,对该对象及其子对象的所有操作都将以该用户身份执行。
答案 1 :(得分:0)
最好将第二个工作流设置为手动启动,然后以编程方式启动它(系统帐户可以执行此操作):
这可能是一种更好的方法,但这对我有用:
// Look through all potential workflows for the correct one:
foreach (Microsoft.SharePoint.Workflow.SPWorkflowAssociation flowAssoc in SPContext.Current.Web.Lists["YourListName"].WorkflowAssociations) {
if (flowAssoc.Enabled && flowAssoc.AllowManual && (flowAssoc.Name.Trim() == workflowNameToLookFor.Trim())) {
// Start the workflow on the current item:
SPContext.Current.Site.WorkflowManager.StartWorkflow(SPContext.Current.Web.Lists["YourListName"].Items[itemIndex], flowAssoc, flowAssoc.AssociationData, true);
}
}