特定のタイプのコンテンツに対して、非常に単純な承認ワークフローをセットアップしました。しかし、何らかの理由で最初の手動アクティビティを完了できなかったため、ワークフローがブロックされました。
アクティビティを終了しようとすると、次のエラーが表示されます。
An item with the same key has already been added.
Unable to finish the Workflow Activity (tcm:x-xxxxx-xxxxxx)
これが私が扱っているデータです(読みやすくするために切り捨てられています):
<Content xmlns="uuid:fac33fb4-7b36-465a-af40-f3b80c4f3f65">
<contactlist>
<name>Lorem ipsum dolor</name>
<address>sit amet consectetur</address>
<photo xmlns:xlink="http://www.w3.org/1999/xlink"
xlink:type="simple" xlink:href="tcm:5-80196"
xlink:title="photo-1"></photo>
<email>email1@email.com</email>
<phone>interdu eget</phone>
<mailimage xmlns:xlink="http://www.w3.org/1999/xlink"
xlink:type="simple" xlink:href="tcm:5-80195"
xlink:title="email-icon"></mailimage>
</contactlist>
<contactlist>
<name>Lorem ipsum dolor</name>
<address>sit amet consectetur</address>
<photo xmlns:xlink="http://www.w3.org/1999/xlink"
xlink:type="simple" xlink:href="tcm:5-80197"
xlink:title="photo-2"></photo>
<email>email@email.com</email>
<phone>interdu eget</phone>
<mailimage xmlns:xlink="http://www.w3.org/1999/xlink"
xlink:type="simple" xlink:href="tcm:5-80195"
xlink:title="email-icon"></mailimage>
</contactlist>
</Content>
[mailImage]属性に同じメール アイコン イメージを再利用していることに注意してください。リスト内で重複している唯一のコンポーネント リンクであるため、これがエラーの原因であると考えがちです。
メール画像コンポーネントのリンクを削除してアクティビティを終了すると、動作してワークフローを続行できます。変でしょ?
ワークフローを続行できるという点で、同じコンポーネントでコンポーネント リンクを再利用できない理由がわかりません。つまり、CMS ではコンポーネントを保存できたのに、なぜワークフローを続行できないのでしょうか?
編集:ちなみに、これはイベントログからのエラーです:
Unable to finish the Workflow Activity (tcm:5-18430-131104)
An item with the same key has already been added.
Error Code:
0x80040000 (-2147221504)
Call stack:
System.ThrowHelper.ThrowArgumentException(ExceptionResource)
System.Collections.Generic.Dictionary`2.Insert(TKey,TValue,Boolean)
System.Collections.Generic.Dictionary`2.Add(TKey,TValue)
Tridion.ContentManager.Workflow.ActivityInstance.SaveBinariesAndGetBinaryIds(String,IDictionary`2)
Tridion.ContentManager.Workflow.ActivityInstance.OnFinishing(FinishActivityEventArgs)
Tridion.ContentManager.Workflow.ActivityInstance.Finish(ActivityFinish)
Tridion.ContentManager.BLFacade.Workflow.ActivityInstanceFacade.FinishActivity(UserContext,String,String,String,String,String,String)
ActivityInstance.FinishActivity