thybag / php-sharepoint-lists-api
一个简单的PHP API,使处理SharePoint列表变得简单。
Requires
- php: ^7.1 || ^8.0
- ext-soap: *
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"