thybag/php-sharepoint-lists-api

一个简单的PHP API,使处理SharePoint列表变得简单。

0.7.3 2023-01-20 09:09 UTC

This package is auto-updated.

Last update: 2024-09-20 12:40:38 UTC


README

PHP SharePoint Lists API 设计用于简化PHP中处理SharePoint列表的开发体验。无需与SOAP和CAML请求纠缠,只需将SharePoint列表API包含到项目中,即可轻松使用。此库免费供任何人使用,并采用MIT许可协议。

使用PHP SharePoint Lists API,您可以轻松创建、读取、编辑和从SharePoint列表中删除数据。API还支持查询列表元数据和列表列表。

已知与以下版本兼容:SharePoint 2007、SharePoint 2013和SharePoint online(实验性)。

使用说明

安装

下载您要交互的SharePoint列表的WSDL文件。通常可以从以下位置获取: sharepoint.url/subsite/_vti_bin/Lists.asmx?WSDL

如果您使用 composer,只需将 thybag/php-sharepoint-lists-api 添加到您的 composer.json 文件中,并运行composer。

{
    "require": {
        "thybag/php-sharepoint-lists-api": "dev-master"
    }
}

如果您不使用composer,您可以手动下载SharePointAPI文件的副本,并将顶部的"SharePointAPI.php"类包含到您的项目中。

创建SharePointAPI对象

为了使用PHP SharePoint Lists API,您需要一个具有访问所需列表权限的有效用户/服务帐户。

对于大多数SharePoint安装,您可以使用以下方式创建API的新实例:

use Thybag\SharePointAPI;
$sp = new SharePointAPI('<username>', '<password>', '<path_to_WSDL>');

如果您的安装需要NTLM身份验证,您可以使用以下方式代替:

use Thybag\SharePointAPI;
$sp = new SharePointAPI('<username>', '<password>', '<path_to_WSDL>', 'NTLM');

SharePoint Online用户必须使用

use Thybag\SharePointAPI;
$sp = new SharePointAPI('<username>', '<password>', '<path_to_WSDL>', 'SPONLINE');

所有方法默认返回一个数组。可以使用 SetReturnType 指定结果应以对象的形式返回。

从列表中读取。

要返回列表中的所有项目,可以使用以下任一方法:
$sp->read('<list_name>'); 

$sp->query('<list_name>')->get();
要返回列表中的前10个项目,可以使用
$sp->read('<list_name>', 10); 

$sp->query('<list_name>')->limit(10)->get();
要返回列表中所有姓为smith的项目,可以使用
$sp->read('<list_name>', NULL, array('surname'=>'smith')); 

$sp->query('<list_name>')->where('surname', '=', 'smith')->get();
要返回姓为smith且年龄为40的前5个项目
$sp->read('<list_name>', 5, array('surname'=>'smith','age'=>40)); 

$sp->query('<list_name>')->where('surname', '=', 'smith')->and_where('age', '=', '40')->limit(5)->get();
要返回姓为"smith"且使用特定视图的前10个项目(视图似乎只能通过其GUID进行引用)
$sp->read('<list_name>', 10, array('surname'=>'smith','age'=>40),'{0FAKE-GUID001-1001001-10001}'); 

 $sp->query('<list_name>')->where('surname', '=', 'smith')->and_where('age', '=', '40')->limit(10)->using('{0FAKE-GUID001-1001001-10001}')->get();
要返回姓为smith且按年龄排序的前10个项目
$sp->read('<list_name>', 10, array('surname'=>'smith'), NULL, array('age' => 'desc')); 

$sp->query('<list_name>')->where('surname', '=', 'smith')->limit(10)->sort('age','DESC')->get();
要返回前5个项目,包括列"favroite_cake"和"favorite animal"
$sp->read('<list_name>', 5, NULL, array("favroite_cake", "favorite_animal")); 

$sp->query('<list_name>')->fields(array("favroite_cake", "favorite_animal")->limit(5)->get();

默认情况下,列表项作为具有小写索引的数组返回。如果您希望结果作为对象返回,请在调用任何读取操作之前使用

$sp->setReturnType('object'); 

自动将属性名称转换为小写也可以通过使用

$sp->lowercaseIndexs(FALSE);

查询列表

当您需要指定一个复杂的查询,而无法使用读取方法轻松定义时,可以使用查询方法。查询是通过一系列(希望是表达性的)伪SQL方法构建的。

例如,如果您想查询宠物列表并返回所有年龄低于5岁的狗(按年龄排序),可以使用以下方法:

$sp->query('list of pets')->where('type','=','dog')->and_where('age','<','5')->sort('age','ASC')->get();

如果您想获取前10只猫或仓鼠,可以使用以下方法

$sp->query('list of pets')->where('type','=','cat')->or_where('type','=','hamster')->limit(10)->get();

如果您需要返回5个项目,但包括列表中包含的所有字段,可以使用。将false传递给all_fields以包括隐藏字段。

$sp->query('list of pets')->all_fields()->get();

如果您有一组用于特定高级查询的CAML,可以将它传递给查询对象使用

$sp->query('list of pets')->raw_where('<Eq><FieldRef Name="Title" /><Value Type="Text">Hello World</Value></Eq>')->limit(10)->get();

添加到列表

要向列表中添加新项目,您可以使用“write”、“add”或“insert”方法(它们的功能相同)。在列表中创建包含名字、姓氏、年龄和电话列的新记录可能如下所示

$sp->write('<list_name>', array('forename'=>'Bob','surname' =>'Smith', 'age'=>40, 'phone'=>'(00000) 000000' ));

您也可以通过以下方式一起运行多个写入操作

$sp->writeMultiple('<list_name>', array(
	array('forename' => 'James'),
	array('forename' => 'Steve')
));

编辑行

要编辑行,您需要其ID。假设上述行的ID为5,我们可以将Bob的名字更改为James,如下所示

$sp->update('<list_name>','5', array('forename'=>'James'));

与写入方法一样,您也可以通过以下方式一起运行多个更新操作

$sp->updateMultiple('<list_name>', array(
	array('ID'=>5,'job'=>'Intern'),
	array('ID'=>6,'job'=>'Intern')
));

当使用updateMultiple时,每个项目都必须有一个ID。

❗此方法返回已更新的行。由于SharePoint更新可能比此方法运行时间更长,因此它不总是返回更新的数据。因此,不建议将其用作确保更新成功的检查。

删除行

为了删除行,需要其ID以及列表名称。要删除ID为5的James的记录,您可以使用以下方法

$sp->delete('<list_name>', '5');

如果您希望一次性删除多个记录,也可以将ID数组传递给删除多个方法

$sp->deleteMultiple('<list_name>', array('6','7','8'));

CRUD - 创建、读取、更新和删除

您也可以使用列表上的CRUD包装器执行上述操作。这可能当您想要在同一个列表上执行多个操作时很有用。CRUD方法不需要传递列表名称。

$list = $sp->CRUD('<list_name>');
$list->read(10);
$list->create(array( 'id'=>1, 'name'=>'Fred' ));

列出所有列表。

您可以通过调用以下方法来获取连接的SharePoint子站点内所有可用列表的完整列表

$sp->getLists();

列表元数据。

您可以通过调用以下方法来访问列表的元数据(例如列配置)

$sp->readListMeta('My List');

默认情况下,该方法将尝试从结果中删除非有用的列,但保留“隐藏”。如果您希望返回完整的结果,请调用

$sp->readListMeta('My List',FALSE);

您现在也可以忽略“隐藏”列

$sp->readListMeta('My List', FALSE, TRUE);

字段历史/版本。

如果您的列表在SharePoint中进行了版本控制,您可以使用以下方法读取特定字段的版本

$sp->getVersions('<list>', '<id>', '<field_name>');

将文件附加到SharePoint列表项

可以使用以下方法将文件附加到SharePoint列表项

$sp->addAttachment('<list>', '<id>', '<path_to_file>');

辅助方法

PHP SharePoint API包含一些辅助方法,以便更容易确保某些值适用于SharePoint的特殊数据类型。

dateTime

dateTime方法可以传递基于文本的日期

 $date = \Thybag\SharepointApi::dateTime("2012-12-21");

或者Unix时间戳

$date = \Thybag\SharepointApi::dateTime(time(), true);

并将返回一个可以存储到SharePoint的DateTime字段而不会出现问题的值。

查找

SharePoint中的查找数据类型用于引用另一个列表中的行的字段。为了正确填充这些值,您需要知道需要引用的行的ID。

$value = \Thybag\SharepointApi::lookup('3','Pepperoni Pizza');

如果您不知道要存储的值的名/标题,该方法仅使用ID(SharePoint也会直接接受ID)就可以正常工作。

$value = \Thybag\SharepointApi::lookup('3');
魔法查找

如果您尝试在“查找”数据类型中存储值,但出于某种原因只知道项的标题/名称而不是其ID,您可以使用MagicLookup方法快速查找此值并为您返回。此方法需要传递项目的标题及其包含的列表。

$sp->magicLookup("Pepperoni Pizza", "Pizza List");

故障排除

  • 找不到包装器"https"

如果您遇到此错误,通常意味着php_openssl(用于curl https url的必需)在您的web服务器上未启用。在许多本地web服务器(如XAMPP)中,您只需打开php.ini文件,取消注释php_openssl行(即,删除其前面的;)即可。

注意:如果您正在使用SharePoint Online且遇到SSL错误,请拉取最新版本,该版本已将SharePoint Online连接从SSL v3更改为TLS -

将以下行添加到您的composer.json文件中。

 "thybag/php-sharepoint-lists-api": "dev-develop"