これは古い質問だと思いますが、最近、コア サービスの観点から同じ問題と戦ったので、私がたどったルートを共有したいと思いました (これを本番環境に展開する前に、誰かがどこで間違っていたのか指摘してくれるかもしれません)。
コア サービスでいくつかの異なるアプローチを試みた後、最終的な手動アクティビティをワークフローに追加し、カスタム ロジックを前の自動アクティビティに追加することにしました。自動アクティビティのコア サービス ロジックでは、現在の自動アクティビティを終了し (最終的な手動アクティビティ インスタンスを返します)、元の作成者になりすまして、最終アクティビティ インスタンスを (作成者として) 開始し、その最終アクティビティ インスタンスを終了します (再び、著者)。
私は SessionAwareCoreServiceClient を使用しており、Content Manager マシン自体で実行しています。Tridion Content Manager 構成ユーティリティの Impersonation Users に「NT AUTHORITY\SYSTEM」を追加する必要がありました (Impersonate を使用するとセキュリティに影響する可能性があるため、環境に適していることを確認してください)。
コードは次のようになります (ただし、現在のアクティビティ インスタンスの取得、最初の手動アクティビティからの元の作成者の取得などは省略し、コンテキストを提供するために using SessionAwareCoreServiceClient を追加しました)。
using (SessionAwareCoreServiceClient client = new SessionAwareCoreServiceClient())
{
ActivityFinishData activityFinish = new ActivityFinishData()
{
Message = message,
NextAssignee = new LinkToTrusteeData() { IdRef = authorUser.IdRef }
};
// Finish current automatic activity
ActivityInstanceData finalActivity = client.FinishActivity(activityInstance.Id, activityFinish, new ReadOptions());
// Impersonate original author
client.Impersonate(authorUser.Title);
// Start final (manual) activity as author - if you don't start it, then non-Administrators can't finish them.
client.StartActivity(finalActivity.Id, null);
// Finish final (manual) activity as author
client.FinishActivity(finalActivity.Id, activityFinish, null);
}
うまくいけば、私はあまりにも愚かなことをしていません。おそらく、この回答は、他のさまざまな質問/ブログ/参考文献からまとめて、試行錯誤を少し実行しなければならなかった私のような誰かを助けるでしょう(ワークフローで退屈になる可能性があります) )。