1

リスト アイテムの作成によってトリガーされ、リスト アイテムが作成されたときに電子メールを送信するワークフローがあります。

Sharepoint フロント エンドを介してそのリストに新しいアイテムを作成すると、メールが送信されます。

Sharepoint API を介してリスト項目を設定するように設計された小さなコンソール アプリケーションがあります。これは、スケジュールされたタスクとして毎日真夜中に実行されます (リストの目的は、毎日の勤務表に誰かを指名することです)。スケジュールされたタスクは、サイトのサイト コレクション管理者の資格情報を使用して実行されます。

リスト アイテムは追加されますが、ワークフローはトリガーされません。ログに次のメッセージが表示されます。

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

コードを実行しているユーザーではなく、システム アカウントによってリスト項目が追加されているように見えます。アプリケーションを実行しているのと同じ ID を使用してコードを SharePoint とやり取りするには、どうすればよいですか?

4

2 に答える 2

1

SharePoint ユーザー (この場合はサイト コレクション管理者) の 1 人を明示的に偽装することを検討してください。ここで同様の質問に答えました: UpdateListItem メソッドとシステム アカウント

偽装ユーザーのコンテキストを使用して SPSite オブジェクトを作成すると、そのオブジェクトとその子に対するすべての操作がそのユーザーとして実行されます。

于 2010-04-29T15:37:32.867 に答える
0

2番目のワークフローを手動で開始するように設定してから、プログラムで開始する方がよい場合があります(システムアカウントで実行できます)。

これを行うにはおそらくもっと良い方法がありますが、これは私のために働いています:

// 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 に答える