1

我有一个由创建列表项触发的工作流,并在创建列表项时发送一封电子邮件。

如果我通过 Sharepoint 前端在该列表中创建一个新项目,它会发送电子邮件。

我有一个小型控制台应用程序,旨在通过 Sharepoint API 设置列表项。这在每天半夜作为计划任务运行(列表的目的是提名某人参加每日轮班)。计划任务使用站点的站点集管理员凭据运行。

添加了列表项,但未触发工作流。在日志中,我收到以下消息:

Declarative workflows cannot automatically start if the triggering action was performed by System Account. Canceling workflow auto-start.

似乎列表项是由系统帐户而不是运行代码的用户添加的。为了让我的代码使用运行应用程序的相同身份与 Sharepoint 交互,我需要做什么?

4

2 回答 2

1

考虑明确模拟您的一个 SharePoint 用户(在本例中为网站集管理员)。我在这里回答了一个类似的问题:UpdateListItem 方法和系统帐户

使用模拟用户的上下文创建 SPSite 对象后,针对该对象及其子对象的所有操作都将作为该用户执行。

于 2010-04-29T15:37:32.867 回答
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);
    }
}
于 2011-07-25T14:18:46.247 回答