在 SharePoint 中以编程方式向列表添加“地理位置”列
了解如何以编程方式将"地理位置"列添加到 SharePoint 中的列表。 使用新的"地理位置"字段创建您自己的基于"地理位置"的字段类型以在 SharePoint 列表和基于位置的网站中集成位置信息和地图。
SharePoint 引入了一个名为 地理位置 的新字段类型,使您能够用位置信息注释 SharePoint 列表。 在"地理位置"类型的列中,您可以将一对十进制的纬度和经度坐标作为位置信息输入,您也可以从浏览器中检索用户当前位置的坐标(如果浏览器实施了 W3C 地理位置 API)。 有关地理位置列的详细信息,请参阅 集成 SharePoint 中的位置和映射功能。 默认情况下,“地理位置”列在 SharePoint 列表中不可用。 若要将该列添加到 SharePoint 列表中,您必须编写代码。 请在本文中了解如何使用 SharePoint 客户端对象模型将"地理位置"字段以编程方式添加到列表中。
必须在每个 SharePoint 前端 Web 服务器上安装名为 SQLSysClrTypes.msi 的 MSI 包,才能查看列表中的“地理位置”字段值或数据。 此包安装在 SQL Server 2008 中实现新几何图形、地理位置和层次结构 ID 类型的组件。 默认为 SharePoint Online 安装此文件。 但是,它不适用于 SharePoint 的本地部署。 必须是场管理员组的成员,才能执行此操作。 若要下载SQLSysClrTypes.msi,请参阅 Microsoft 下载中心的 Microsoft SQL Server 2008 R2 SP1 功能包 for SQL Server 2008 或 Microsoft SQL Server2012 功能包 for SQL Server 2012。
添加“地理位置”列的先决条件
使用具有添加列的足够权限访问 SharePoint 列表。
在服务器场或 Web 级别设置的有效必应地图密钥,可从 必应地图 帐户中心获取。
重要
请注意您必须遵守使用 Bing 地图密钥的条款和条件,以及将任何与传递到 Bing 地图服务的数据有关的信息透露给应用程序用户的相关条款和条件。
Visual Studio 2010
SharePoint Online 命令行管理程序: https://www.microsoft.com/download/details.aspx?id=35588
SharePoint PnP-PowerShell (旧版) : https://github.com/SharePoint/PnP-PowerShell/
SharePoint PnP.PowerShell (最新) : https://github.com/pnp/powershell
注意
PnP PowerShell 是一种开放源代码解决方案,其中包含为其提供支持的活动社区。 没有用于 Microsoft 开放源代码工具支持的 SLA。
代码示例:以编程方式将“地理位置”列添加到现有列表
请按照以下步骤将“地理位置”列添加到列表中。 必须通过 CSOM 或 PowerShell 以编程方式执行此操作。
要使用 PnP PowerShell 将“地理位置”列添加到列表
打开 PowerShell
连接到要将列添加到的网站
Connect-PnPOnline -url "https://TENANT.sharepoint.com/sites/SITEURL"
打开要将列添加到的列表
$list = Get-PnPList -Identity "LISTNAME"
#Add“地理位置”字段 - 根据需要更改参数
Add-PnPField -List $list -Type GeoLocation -DisplayName "GeoLocationField" -InternalName "GeoLocationField" -AddToDefaultView -Required
要使用 Visual Studio 中的客户端对象模型将“地理位置”列添加到列表中
启动 Visual Studio。
在菜单栏中,选择"文件"和"新建项目"。 将打开"新建项目"对话框。
在"新建项目"对话框中,在"已安装的模板"框中选择"C#",然后选择"控制台应用程序"模板。
给项目命名,然后选择"确定"按钮。
Visual Studio 创建此项目。 向以下程序集添加引用,并选择"确定"。
- Microsoft.SharePoint.Client.dll
- Microsoft.SharePoint.Client.Runtime.dll
在默认的 .cs 文件中,按下列方式添加 using 指令。
using Microsoft.SharePoint.Client;
将下面的代码添加到 .cs 文件的 Main 方法中。
class Program { static void Main(string[] args) { AddGeolocationField(); Console.WriteLine("Location field added successfully"); } private static void AddGeolocationField() { // Replace site URL and List Title with Valid values. ClientContext context = new ClientContext("<Site Url>"); List oList = context.Web.Lists.GetByTitle("<List Title>"); oList.Fields.AddFieldAsXml("<Field Type='Geolocation' DisplayName='Location'/>",true, AddFieldOptions.AddToAllContentTypes); oList.Update(); context.ExecuteQuery(); } }
将
<Site Url>
和<List Title>
替换为有效值。在“项目属性”中,将目标框架设置为 .NET Framework 4.0 或 3.5,并运行示例。
导航至列表。 您应该能够看到列表中名为“位置”的地理位置类型列。 现在您可以输入一些值,并在操作中看到它。 图 1 所示为您可以在列表中看到的默认位置和地图功能。
图 1. 默认位置和地图功能的摘要视图
以编程方式将带有"地理位置"字段值的列表项添加到 SharePoint 列表
将“地理位置”字段添加到 SharePoint 列表后,开发人员可以用编程方式将列表项添加至列表中。 以编程方式添加列表项有两种方法:将“FieldGeolocationValue”对象传递到“地理位置”字段;将“原始值”传递到“地理位置”字段。
方法 A:将FieldGeolocationValue 对象传递到地理位置字段
以下方法通过将"地理位置"值作为对象传递来添加列表项。
private void AddListItem() { // Replace site URL and List Title with Valid values. ClientContext context = new ClientContext("<Site Url>"); List oList = context.Web.Lists.GetByTitle("<List Name>"); ListItemCreationInformation itemCreationInfo = new ListItemCreationInformation(); ListItem oListItem = oList.AddItem(itemCreationInfo); oListItem["Title"] = "New Title"; FieldGeolocationValue oGeolocationValue = new FieldGeolocationValue(); oGeolocationValue.Latitude = (double)17.4; oGeolocationValue.Longitude = (double)78.4; oListItem["location"] = oGeolocationValue; oListItem.Update(); context.ExecuteQuery(); }
方法 B:传递至原始值地理位置字段
以下方法通过将原始值传递到"地理位置"字段将列表项添加到 SharePoint 列表中。
private void AddListItem() { // Replace site URL and List Title with Valid values. ClientContext context = new ClientContext("<Site Url>"); List oList = context.Web.Lists.GetByTitle("<List Name>"); ListItemCreationInformation itemCreationInfo = new ListItemCreationInformation(); ListItem oListItem = oList.AddItem(itemCreationInfo); oListItem["Title"] = "New Title"; // Data in WKT (World Known Text) format. oListItem["location"] = "POINT (78.4 17.4)" ; oListItem.Update(); context.ExecuteQuery(); }