通过其显示形式查找SharePoint列表项';s网址

通过其显示形式查找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

有时用户需要更改SharePoint列表项中不可编辑的信息,例如,在编辑表单中隐藏的字段(在我的示例中是记录编号)

我决定创建一个小的Windows GUI应用程序,管理员将在服务器上运行该应用程序并进行请求的更改。但是,获取我找到的
SPListItem
实例的最简单方案是:

  • 管理员输入根站点的URL
  • 使用给定的URL创建一个
    SPSite
    ojbect:
    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查找列表。要添加到此函数的一件事是确保