通过其显示形式查找SharePoint列表项';s网址
有时用户需要更改SharePoint列表项中不可编辑的信息,例如,在编辑表单中隐藏的字段(在我的示例中是记录编号) 我决定创建一个小的Windows GUI应用程序,管理员将在服务器上运行该应用程序并进行请求的更改。但是,获取我找到的通过其显示形式查找SharePoint列表项';s网址,sharepoint,sharepoint-api,splistitem,Sharepoint,Sharepoint Api,Splistitem,有时用户需要更改SharePoint列表项中不可编辑的信息,例如,在编辑表单中隐藏的字段(在我的示例中是记录编号) 我决定创建一个小的Windows GUI应用程序,管理员将在服务器上运行该应用程序并进行请求的更改。但是,获取我找到的SPListItem实例的最简单方案是: 管理员输入根站点的URL 使用给定的URL创建一个SPSiteojbect:SPSite oSite=new SPSite(this.txtrl.text) 管理员输入所需网站的相对URL 一个SPWeb对象被创建为SPW
SPListItem
实例的最简单方案是:
- 管理员输入根站点的URL
- 使用给定的URL创建一个
ojbect:SPSite
SPSite oSite=new SPSite(this.txtrl.text)代码>
- 管理员输入所需网站的相对URL
- 一个
对象被创建为SPWeb
SPWeb oWeb=oSite.OpenWeb(this.txtWebUrl.text)代码>
- 下拉框中填写了
oWeb.Lists
- 管理员从列表框中选择一个列表,并输入请求项的ID李>
- 所需的
可作为SPListItem
oWeb.Lists[this.lstallists.selectedValue].GetItemById(this.txtItemId.value)找到代码>
他们想复制listitem显示表单的URL(从web浏览器或某人的电子邮件),将其粘贴到更新工具中,然后单击“查找它!” 我需要关于如何做到这一点的提示 我知道我可能可以用正则表达式解析URL,因为它通常是
http://server/sites/[somesite]/[someweb/somesubweb]/lists/[somelist]/forms/dispform.aspx?ID=[123]
,但也存在一些变化,例如,http://[server]/[DocumentLibrary]/forms/RenamedDispForm.aspx?ID=[1234]
的结构与第一个示例完全不同
所以,问题是-是否有一些简单的方法可以通过它的URL找到SPListItem
?从URL重建SPContext
会很好
编辑:刚刚发现可以通过传递更长的URL来构造有效的SPSite
对象:
Dim oSite as New SPSite("http://server/sites/site/Lists/test/DispForm.aspx?ID=136")
我发现自己在做(尽管是用spaudientry对象)。我提出的解决方案涉及解析URL以找出SPSite和SPWeb
由于SPSite占用较长的URL,因此您也可以打开正确的SPWeb(使用site.OpenWeb()。我决定使用SPSite.AllWebs.Names来准确地找出项目所在的SPWeb(提取URL的一部分,然后对我收集的SPWeb名称进行二进制搜索)。我猜您将不得不使用SPWeb.Lists来确定它在哪个列表或库中。我发现自己正在这样做(尽管使用了Spaudientry对象)。我提出的解决方案涉及解析URL以找出SPSite和SPWeb
由于SPSite占用较长的URL,因此您也可以打开正确的SPWeb(使用site.OpenWeb()。我决定使用SPSite.AllWebs.Names来准确地找出项目所在的SPWeb(提取URL的一部分,然后对我收集的SPWeb名称进行二进制搜索)。我猜你将不得不使用SPWeb.Lists来确定它在哪个列表或库中。我自己找到了一个解决方案,我不知道的诀窍是,如果你在
SPSite
的构造函数中使用长URL,它会给你SPWeb
对象提供与你的URL匹配的“可能最深”地址(这里描述:)
尽管如此,我还是必须遍历所有列表,以找出哪个列表具有所需的URL。一个简单的函数,可以满足我的需要:
更新@2012-08-01:
- 不需要在列表集合中循环,有一个
方法 在GetList
对象中李>SPWeb
- 可以使用
方法HttpUtility.ParseQueryString
函数GetItemByUrl(spul作为字符串)作为SPListItem
'站点对象不关心站点URL后的其他参数
作为新SPSite(spul)的尺寸
“这将返回它所能找到的最深的SPWeb
Dim oWeb作为SPWeb=oSite.OpenWeb()
'这里我们解析出ID参数
Dim oUri作为新Uri(spUrl)
'HttpUtility来自System.Web命名空间
Dim oQueryParams作为System.Collections.Specialized.NameValueCollection
oQueryParams=HttpUtility.ParseQueryString(oUri.Query)
Dim sParamval As String=oQueryParams.Get(“ID”)
如果(sParamval.Length自己找到了解决方案,我不知道的诀窍是,如果您在SPSite
的构造函数中使用长URL,它将为您提供SPWeb
对象,该对象具有与您的URL匹配的“尽可能深”的地址(此处描述:)
尽管如此,我还是必须遍历所有列表,以找出哪个列表具有所需的URL。一个简单的函数可以满足我的需要:
更新@2012-08-01:
- 不需要在列表集合中循环,有一个
GetList
方法
在SPWeb
对象中
- 可以使用
HttpUtility.ParseQueryString
方法
因此,代码现在如下所示:
函数GetItemByUrl(spul作为字符串)作为SPListItem
'站点对象不关心站点URL后的其他参数
作为新SPSite(spul)的尺寸
“这将返回它所能找到的最深的SPWeb
Dim oWeb作为SPWeb=oSite.OpenWeb()
'这里我们解析出ID参数
Dim oUri作为新Uri(spUrl)
'HttpUtility来自System.Web命名空间
Dim oQueryParams作为System.Collections.Specialized.NameValueCollection
oQueryParams=HttpUtility.ParseQueryString(oUri.Query)
Dim sParamval As String=oQueryParams.Get(“ID”)
If(sParamval.Length)谢谢,非常有用!将使用此函数按URL查找列表。要添加到此函数的一件事是确保