SharepointでOffice 2007ドキュメントを使用してItemUpdateを実行するとデータが消える
-
03-07-2019 - |
質問
ItemUpdatedメソッドで必要な列の値を変更するItemAddingイベントを持つ単純なイベントハンドラーがあります。 Word 2007ドキュメント(* .docx、*。pptxまたはxlsx)をアップロードすると、列の値が変更されますが、ドキュメントを保護すると、ItemUpdatedメソッドで列の値が消えます。これはOffice 2007ドキュメントでのみ発生し、他のファイルは値をクリアしません。
イベントハンドラーは、MOSS 2007のドキュメントライブラリで実行されます。
ありがとう
解決
同じ問題があります。リストのプロパティはoffice 2007ドキュメントに追加されているようですが、アップロード/作成時のフィールドのデフォルト値のみが含まれています。アイテムを編集すると、オフィスドキュメントの値がイベントハンドラーで設定された値をオーバーライドしていることがわかります。
非同期イベントハンドラーを使用する場合、これは発生しませんが、非同期イベントハンドラーは、特定の種類の更新を含む他のスレッドの更新と競合します。
この問題についてマイクロソフトとのアクティブなサポートコールがあります。彼らはこれがそうではないことを認めます まだ結果がありません。
非同期イベントハンドラーを使用してみてください(オフィスドキュメントから更新するコードよりも少し遅れて実行されます)。ただし、注意してください。
更新:
回避策は、 SPWeb.ParserEnabled をFALSEにすると、ドキュメントプロパティへの接続が削除され、上記の動作が停止します。リストプロパティがオフィスドキュメントに追加されないようにします。
他のヒント
OfficeドキュメントをSharePointにアップロードすると、ドキュメントから列を抽出してリストに昇格しようとします。
ドキュメントに属性が設定されているかどうかを確認してください。この場合、表示内容を説明できます。
注:事前のドキュメントプロパティを開き、すべてのカスタムプロパティを削除して確認してください
ItemUpdatingメソッドにSPWeb.ParserEnabled = falseを入れる問題を解決しました。
コード:
properties.ListItem.Web.ParserEnabled = false;
助けてくれてありがとう
SPWeb.ParserEnabled = falseの設定は機能しますが、効果があります! 1つの非常に顕著なものは、サイトとリストのテンプレートを壊すことです。 SPWeb.ParserEnabled = falseの場合、リストまたはサイトテンプレートを保存すると、メタデータ(機能ID、製品バージョンなど)が設定されず、選択するテンプレートのリストで使用できなくなります。 itemUpdatedイベント中にSPWeb.ParserEnabled = trueをリセットすることでこれを回避できるかもしれませんが、これですべての問題が解決されるかどうかはまだ完全にはテストしていません...