(私は、これは古い質問です実現が、私は最近、コアサービスの観点から、この同じ問題で戦ったし、私が撮ったルートを共有したいと思いましたおそらく誰かが、これを本番環境に導入する前に間違っていたかもしれないところを指摘するでしょう)。
Core Serviceでいくつかのアプローチを試した結果、前回の自動アクティビティに対するワークフローとカスタムロジックに最終的な手動アクティビティを追加することに決めました。自動アクティビティのコアサービスロジックでは、現在の自動アクティビティ(最終的な手動アクティビティインスタンスを返す)を終了し、元の著者を偽装し、最終アクティビティインスタンスを作成者として開始し、最終アクティビティインスタンスを終了します(著者)。
私はSessionAwareCoreServiceClientを使用しており、Content Managerマシン上で実行しています。
:私は(そこに偽装を使用して、セキュリティへの影響が考えられますので、確認してください、それはあなたの環境のために理にかなっている可能性が)TridionのContent Managerの設定ユーティリティで偽装ユーザーに「NT AUTHORITY \システム」を追加する必要がありました
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);
}
:(私は最初、マニュアル活動から元の著者を検索し、現在のアクティビティインスタンスを取得するようないくつかの物事を残してきたと私はいくつかのコンテキストを与えるために使用してSessionAwareCoreServiceClientを追加しましたが)のコードは次のようになりますうまくいけば私は何もしていないひどくばかげていて、おそらくこの答えは、他のさまざまな質問/ブログ/リファレンスからまとめて、試行錯誤(ワークフローで面倒なことがあります)を少し行わなければならなかったような人に役立ちます。
ワークフローの最後のタイプは自動アクティビティですか? –
@Igor正確には、自動アクティビティは通常、ローカルシステムによって実行されます。 – Quirijn
私のワークフローの最後のアクティビティは自動的です。つまり、ワークフローを実行するすべてのコンポーネントには正確なバージョン履歴がありません。このようなワークフロープロセスを使用する場合、コンポーネントの作成者をバージョン履歴に表示させるにはどうしますか? –