有时用户需要更改他们不可编辑的 SharePoint 列表项中的信息,例如,隐藏在编辑表单中的字段(在我的情况下是记录编号)。
我决定创建一个小型 Windows GUI 应用程序,管理员将在服务器上运行它并进行请求的更改。但是,获取SPListItem
我发现的实例的最简单方案是:
- 管理员输入根站点的 URL
- 使用给定的 URL 创建一个
SPSite
ojbect:SPSite oSite=new SPSite(this.txtURL.text);
- admin 输入所需网站的相对 URL
- 一个
SPWeb
对象被创建为SPWeb oWeb = oSite.OpenWeb(this.txtWebUrl.text);
- 一个下拉框填充了所有列表标题
oWeb.Lists
- admin 从列表框中选择一个列表并输入所请求项目的 ID;
- 所需
SPListItem
的被发现为oWeb.Lists[this.lstAllLists.selectedValue].GetItemById(this.txtItemId.value);
这是一条很长的路,管理员不喜欢打字、点击和等待。
他们想复制列表项显示表单的 URL(从 Web 浏览器或某人的电子邮件中),将其粘贴到更新工具中,然后单击“查找它!”。
我需要有关如何做到这一点的提示。
我知道我可能可以使用正则表达式解析 URL,因为它通常采用 的形式http://server/sites/[somesite]/[someweb/somesubweb]/lists/[somelist]/forms/dispform.aspx?ID=[123]
,但存在变体 - 例如,http://[server]/[DocumentLibrary]/Forms/RenamedDispForm.aspx?ID=[1234]
与第一个示例具有完全不同的结构。
SPListItem
所以,问题是 - 有没有一些简单的方法可以通过它的 URL找到一个?从 URL重建一个SPContext
会很棒。
编辑:刚刚发现可以SPSite
通过传递一个更长的 URL 来构造一个有效的对象:
Dim oSite as New SPSite("http://server/sites/site/Lists/test/DispForm.aspx?ID=136")