微信公众号搜"智元新知"关注
微信扫一扫可直接关注哦!

xml – 如何在SharePoint 2010中从数据库中找到SharePoint列表的字段?

在SharePoint 2003和2007中,有一个名为AllLists的表,其中有一个名为tp_Fields的列,其中包含一个包含特定列表的所有字段的xml.

存储在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列表中SharePoint数据库中的哪些字段?或者如果可能的话,如何将此varbinary列转换为与之前相同的xml?

我希望这个问题很明确(对它的可能性没什么希望).

谢谢,

解决方法

为了分享,我编写了下面的方法,它现在可以从中提取xml,尽管没有保证生成的xml与SharePoint 2003/2007兼容.

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();
                }
            }
        }

版权声明:本文内容由互联网用户自发贡献,该文观点与技术仅代表作者本人。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如发现本站有涉嫌侵权/违法违规的内容, 请发送邮件至 dio@foxmail.com 举报,一经查实,本站将立刻删除。