xml – 如何在SharePoint 2010中从数据库中找到SharePoint列表的
发布时间:2020-12-16 23:31:01 所属栏目:百科 来源:网络整理
导读:在SharePoint 2003和2007中,有一个名为AllLists的表,其中有一个名为tp_Fields的列,其中包含一个包含特定列表的所有字段的xml. 存储在tp_Fields列中的xml示例对于包含3个字段的SharePoint列表是这样的: FieldRef Name="ContentTypeId" /FieldRef Name="_Mode
在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(); } } } (编辑:李大同) 【声明】本站内容均来自网络,其相关言论仅代表作者个人观点,不代表本站立场。若无意侵犯到您的权利,请及时与联系站长删除相关内容! |