5

SharePoint 2003および2007には、特定のリストのすべてのフィールドを含むxmlを含むtp_Fieldsという列を持つAllListsというテーブルがありました。

tp_Fields列に格納されているxmlの例は、次の3つのフィールドを持つSharePointリストの場合です。

<FieldRef Name="ContentTypeId" />
<FieldRef Name="_ModerationComments" ColName="ntext1" />
<FieldRef Name="WebPartTypeName" ColName="nvarchar9" />

C#コードを使用してこの列から読み取っているアプリケーションがあります。

var tpFields = (String) drView["tp_Fields"];

SharePoint 2010では、この列のデータ型がvarbinaryに変更され、代わりにいくつかのバイナリデータのみが含まれています。

(理想的/推奨されるソリューションは、SharePoint WebサービスまたはSharePointオブジェクトモデルを使用し、基になるテーブルに依存しないことでしたが、残念ながら既存のアプリがあり、2010年でも機能させる必要があります。すべてを再設計する必要はありません!)

SharePoint 2010のデータベースからSharePointリストのフィールドを知るにはどうすればよいですか?または、可能であれば、このvarbinary列を以前のように同等のxmlに変換する方法はありますか?

質問が明確であることを願っています(その可能性についてはほとんど希望がありません)。

ありがとう、

4

2 に答える 2

2

共有するために、私は以下のメソッドを作成しました。結果のxmlがSharePoint 2003/2007と互換性があるという保証はありませんが、このメソッドからxmlを抽出できるようになりました。

 private static string getXmlFromTpFields(byte[] tpFields)
        {
            using (var memoryStream = new MemoryStream(tpFields))
            {
                // ignore the first 14 bytes; I'm not sure why but it works!
                for (var index = 0; index <= 13; index++)
                    memoryStream.ReadByte();

                var deflateStream = new DeflateStream(memoryStream, CompressionMode.Decompress);

                using (var destination = new MemoryStream())
                {
                    deflateStream.CopyTo(destination);

                    var streamReader = new StreamReader(destination);
                    destination.Position = 0;
                    return streamReader.ReadToEnd();
                }
            }
        }
于 2012-01-24T16:44:49.087 に答える
0

私は長い間これを行っていて、SPViewsという名前のユーティリティプログラムを見つけました。コンテンツデータベースにポイントすると、ビューを作成するためのSQLスクリプトが生成されます。圧縮フィールドを読み取って列を取得し、スクリプトを生成します。そこから列を取得できます。

jd

于 2013-07-12T17:35:33.890 に答える