トップ回答者
SPListitem.Propertiesの日付型について

質問
-
SharePoint2010でイベントレシーバーの開発を行っているのですが、
SPListitem.Propertiesのハッシュデーブルからアイテムの列情報のオブジェクトを取得する際に、
Field.typeがSPFieldType.DateTimeの情報を取得すると
*.docや*.xls、*.pptなどは、String型
*.docxや*.xlsx,*.pptxでは、DateTime型
になっております。
この仕様について、Microsoftの資料で記載されているページ等は存在するのでしょうか?
なぜそのような動作になっているのか、理由が知りたいので、
もし知っている方がいらっしゃればご教授願います。
回答
-
以下は、WSS3.0での内容ですが、SharePoint2010にも同じ事が言えると
思いますので書きます。Office文書をドキュメントライブラリに登録すると
デフォルトでOfficeのメタデータ(カスタムプロパティ)と
ドキュメントライブラリのフィールドが
連携する事はご存じでしょうか。この連携にはSharePointのドキュメントパーサーが使われているのですが、
ご指摘の現象はこのドキュメントパーサーの仕様だと思います。http://msdn.microsoft.com/ja-jp/library/aa543341%28office.12%29.aspx
OpenXML形式のOfficeドキュメントからはカスタムプロパティの型まで
取得できているのでしょうが、バイナリ形式からは文字列としてのみ
取得しているのでしょう。また、イベントレシーバ内でPropertyを拾った時だけの
現象なのでしょうか。海外の情報では、イベントレシーバでドキュメントパーサーに
依存する情報を取得した場合、予期しない情報が取得される場合が
あるというポストをいくつか見つけました。これは、ドキュメントをアップロード(更新)した際に、
イベントレシーバが呼ばれるタイミングと、ドキュメントパーサーの
動作するタイミングが同期されていないからのようです。# 今回はこちらは関係ないかもしれないですね。
尚、SPWebのParserEnabledをfalseにする事で、このドキュメントパーサーを
使用しないように設定可能です。この場合、ご指摘の事象が起こらなくなると思いますので、
上記プロパティを設定して試してみては如何でしょう。- 回答としてマーク AKINORI_HG 2011年3月30日 3:08
すべての返信
-
以下は、WSS3.0での内容ですが、SharePoint2010にも同じ事が言えると
思いますので書きます。Office文書をドキュメントライブラリに登録すると
デフォルトでOfficeのメタデータ(カスタムプロパティ)と
ドキュメントライブラリのフィールドが
連携する事はご存じでしょうか。この連携にはSharePointのドキュメントパーサーが使われているのですが、
ご指摘の現象はこのドキュメントパーサーの仕様だと思います。http://msdn.microsoft.com/ja-jp/library/aa543341%28office.12%29.aspx
OpenXML形式のOfficeドキュメントからはカスタムプロパティの型まで
取得できているのでしょうが、バイナリ形式からは文字列としてのみ
取得しているのでしょう。また、イベントレシーバ内でPropertyを拾った時だけの
現象なのでしょうか。海外の情報では、イベントレシーバでドキュメントパーサーに
依存する情報を取得した場合、予期しない情報が取得される場合が
あるというポストをいくつか見つけました。これは、ドキュメントをアップロード(更新)した際に、
イベントレシーバが呼ばれるタイミングと、ドキュメントパーサーの
動作するタイミングが同期されていないからのようです。# 今回はこちらは関係ないかもしれないですね。
尚、SPWebのParserEnabledをfalseにする事で、このドキュメントパーサーを
使用しないように設定可能です。この場合、ご指摘の事象が起こらなくなると思いますので、
上記プロパティを設定して試してみては如何でしょう。- 回答としてマーク AKINORI_HG 2011年3月30日 3:08
-
返答頂き、ありがとうございます。
あの後、別件でWSS3.0でも動作確認していたため、WSSでも発生することは確認しました。
OpenXML型式のOfficeドキュメントが連携しているのは知っていましたが、
SharePointの属性取得にまで影響しているとは思っておりませんでした。
自身はイベントレシーバーでのみ取得していたため、他では試しておりません。
SPListItem型をSPFile型に変換し、属性値を取得すると問題無く取れたため取得方法を変え対応しました。
>尚、SPWebのParserEnabledをfalseにする事で、このドキュメントパーサーを
>使用しないように設定可能です。知りませんでした。
こちらの方法も試し、動作検証をしてみたいと思います。
ありがとうございます。