⼜解决⼀个问题:“在位置0处没有任何
⾏”(“Thereisnorowatposition0.”)使⽤Content Deployment API做导出的时候,遇到如下错误:
message: System.IndexOutOfRangeException: 在位置 0 处没有任何⾏。
在 System.Data.RBTree`1.GetNodeByIndex(Int32 userIndex)
在 System.Data._Item(Int32 index)
在 System._Item(Int32 index)
在 Microsoft.SharePoint.Deployment.ObjectHelper.RetrieveDataFromDatabase(ExportObject exportObject)在 Microsoft.SharePoint.Deployment.FolderObjectHelper.RetrieveData(ExportObject exportObject)
在 Microsoft.SharePoint.Deployment.ExportObjectManager.GetObjectData(ExportObject exportObject)
在 Microsoft.SharePoint.Deployment.ExportObjectManager.MoveNext()
在 Microsoft.SharePoint.Deployment.ExportObjectManager.ExportObjectEnumerator.MoveNext()
在 Microsoft.SharePoint.Deployment.SPExport.SerializeObjects()
在 Microsoft.SharePoint.Deployment.SPExport.Run()
在 AVEVA.NET.SH.Program.Main(String[] args) 位置 C:\Workspace\TestQuery\SH\Program.cs:⾏号 1828
在 System.Data.RBTree`1.GetNodeByIndex(Int32 userIndex)
在 System.Data._Item(Int32 index)
在 System._Item(Int32 index)
在 Microsoft.SharePoint.Deployment.ObjectHelper.RetrieveDataFromDatabase(ExportObject exportObject)在 Microsoft.SharePoint.Deployment.FolderObjectHelper.RetrieveData(ExportObject exportObject)
在 Microsoft.SharePoint.Deployment.ExportObjectManager.GetObjectData(ExportObject exportObject)
在 Microsoft.SharePoint.Deployment.ExportObjectManager.MoveNext()
在 Microsoft.SharePoint.Deployment.ExportObjectManager.ExportObjectEnumerator.MoveNext()
linux添加java环境变量在 Microsoft.SharePoint.Deployment.SPExport.SerializeObjects()
在 Microsoft.SharePoint.Deployment.SPExport.Run()
在 AVEVA.NET.SH.Program.Main(String[] args) 位置 C:\Workspace\TestQuery\SH\Program.cs:⾏号 1828
代码如下:
//临时⽬录
string temp_path = "d:\\export";
js源码分析SPExportObject exportObject = new SPExportObject();
exportObject.Id = contextWeb.ID;
exportObject.IncludeDescendants = SPIncludeDescendants.None;
exportObject.Type = SPDeploymentObjectType.Web;
SPExportSettings settings = new SPExportSettings();
settings.IncludeVersions = SPIncludeVersions.LastMajor;
settings.SiteUrl = contextWeb.Site.Url;
settings.ExportMethod = SPExportMethodType.ExportAll;
settings.FileLocation = temp_path;
settings.FileCompression = false;
settings.CommandLineVerbose = true;
settings.ExcludeDependencies = false;
settings.OverwriteExistingDataFile = true;
settings.HaltOnNonfatalError = false;
settings.HaltOnWarning = false;
/
/settings.IncludeSecurity = SPIncludeSecurity.All;
settings.Validate();
settings.ExportObjects.Add(exportObject);
List<string> workflowasses = new List<string>();
//导出列表和某个folder item
SPExportObject e1 = new SPExportObject();
文件删除后可以恢复吗SPList theList01 = contextWeb.Lists["我的列表"];
e1.Id = theList01.ID;
e1.IncludeDescendants = SPIncludeDescendants.None;
e1.Type = SPDeploymentObjectType.List;
settings.ExportObjects.Add(e1);
SPExportObject eo = new SPExportObject();
SPListItem item = theList01.GetItemById(185);
eo.Id = item.UniqueId;
eo.Type = SPDeploymentObjectType.Folder;
settings.ExportObjects.Add(eo);
SPExport export = new SPExport(settings);
export.Run();
在⽹上搜索也没有发现可⽤的信息,⾮常困惑,使⽤codeplex上的开源⼯具“SPDeploymentWizard_Beta2.7_Exe”也出现⼀样的错误,估计和我的⽤法基本类似,反编译Microsoft.SharePoint.Deployment也没看出太多头绪,经过反复尝试,发现问题出在Item上,因为⽼的Item可以,新的Item就有问题,⽽且是在同⼀个列表同⼀个⽂件夹下,怀疑是和关联的属性相关,于是逐个把属性删光,结果问题依旧。
偶然发现,将settings.IncludeVersions 改为SPIncludeVersions.CurrentVersion,问题突然没有了,难道版本有什么问题吗?查msdn上关于SPIncludeVersions的信息是这样的:
All
position和location的区别>regularoryInclude all versions
CurrentVersion
Include the most recent version
LastMajor
(Default) Include the last major version
LastMajorAndMinor
Include the last major and last minor versions
查看没有问题的条⽬,发现有⼀个已经批准的版本1.0,还有⼀个草稿版本2.0,⽽有问题的条⽬,都没有已经批准的条⽬,于是猜
测,LastMajor可能指的是“已批准”的版本,⽽不是我们通常意义上的⼤版本(例如版本2.1,2⼀般认为是⼤版本,⽽1是⼩版本),于是把有问题item也批准,结果没有问题了,能正常导出,但是做这个程序的要求是取最新的版本,所以上述代码改成了:
settings.IncludeVersions = SPIncludeVersions.CurrentVersion;
问题就解决了。
总结:程序设计语言c
CurrentVersion指的是最新的版本
LastMajor指的是最后⼀个批准的版本
LastMajorAndMinor指的是最后⼀个批准和最新的草稿版本
如果按照msdn上直接理解,是很容易迷惑的。
出现上述问题,估计是由于开始没有取到LastMajor插⼊到临时表,⽽从临时表⾥写xml的时候出的问题。不过我觉得,既然没有取到LastMajor,临时表⾥没有插⼊数据,写xml的时候就不要取空⾏了嘛,这样也不会中断导出。这是我的猜测,若有其他原因也未可知。

版权声明:本站内容均来自互联网,仅供演示用,请勿用于商业和其他非法用途。如果侵犯了您的权益请与我们联系QQ:729038198,我们将在24小时内删除。