トップレベル サイトからサブサイトにページをコピーするカスタム ワークフローが開発されました。ページは、サブサイトのページ ライブラリ内の特定のフォルダーにコピーされます。
このワークフローは 3 つのサイト コレクションにインストールされており、そのうちの 2 つで問題なく動作します。3 番目のサイト コレクションでは、ページが一部のサブサイトに正常にコピーされ、他のサブサイトにはコピーされないという、さまざまな結果が得られます。
SPListItem.CopyTo メソッド呼び出しのいくつかの深さで例外が発生します。コール スタックは次のとおりです。
System.InvalidOperationException: Collection was modified; enumeration operation may not execute.
at System.Collections.ArrayList.ArrayListEnumeratorSimple.MoveNext()
at Microsoft.SharePoint.SPCopy.CopyIntoItem(String srcUrl, SPListItem target, Hashtable props, Byte[] stream, Boolean saveStream)
at Microsoft.SharePoint.SPCopy.CopyIntoNewItem(Hashtable props, Byte[] stream, SPFolder targetFolder, String targetUrl, String srcUrl)
at Microsoft.SharePoint.SPCopy.CopyIntoNewItem(SPListItem src, SPFolder targetFolder, String targetUrl)
at Microsoft.SharePoint.SPCopy.CopyIntoItem(SPListItem src, String targetUrl)
ワークフロー コードは、コピー操作を実行する前に、元のページの関連付けられたコンテンツ タイプがコピー先のページ ライブラリに添付されていることを確認します。Reflector を使用すると、元のページのプロパティをコピーするために多くの ArrayList オブジェクトが使用されているように見えます。これが問題の原因のようです。
問題のあるサブサイト内のページ ライブラリは、ページが正常にコピーされたものと構成が異なるようには見えません。
コピー先のフォルダーは、ワークフローによって、コピー先のページ ライブラリのルート フォルダーのサブフォルダーとして作成されます。デフォルトの Folder コンテンツ タイプを使用します。
以前のバージョンのワークフローでは、コードによってページがページ ライブラリのルート フォルダーにコピーされ、この問題は発生しませんでした。このバージョンではフォルダを使用して、そのフォルダ内のページに独自のセキュリティ設定を適用しています。
発行機能はサイト コレクション全体でアクティブ化されており、使用しているプラットフォームは MOSS 2007 です。
これについてのご意見は大歓迎です。
前もって感謝します。