trim07/service-layer-sap

1.2.1 2024-03-20 11:32 UTC

This package is auto-updated.

Last update: 2024-09-20 12:39:49 UTC


README

一个简单易用的PHP库,用于SAP Business One服务层API。

用法

创建一个数组来存储您的SAP Business One服务层配置详细信息。

$config = [
    'https' => true,
    'host' => 'IP or Hostname',
    'port' => 50000,
    'sslOptions' => [
        "cafile" => "path/to/certificate.crt",
        "verify_peer" => true,
        "verify_peer_name" => true,
    ],
    'version' => 2
];

创建一个新的服务层会话。

$sap = SAPClient::createSession($config, 'SAP UserName', 'SAP Password', 'Company', 'Language');

您可以通过访问语言代码文档来查看语言代码。

静态的createSession()方法将返回一个新的SAPClient实例。SAPClient对象提供了一个service($name)方法,该方法返回具有指定名称的新Service实例。使用此Service对象,您可以执行CRUD操作。

执行查询

要执行查询,我们使用'crossjoin(array)'方法,传递一个包含将在关系中使用的数据表的数组。然后我们调用'expand(array)'方法来选择我们想要的列,最后我们调用'where(filter)'方法来进行表之间的关系。

以下代码示例展示了如何将物品和仓库进行relationship

use Trim07\ServiceLayerSap\Filters\Equal;


$sap = SAPClient::createSession($config, 'SAP UserName', 'SAP Password', 'Company', 'Language');
$items = $sap->crossJoin(['Items', 'Items/ItemWarehouseInfoCollection', 'Warehouses'])
            ->expand([
                'Items' => ['ItemCode', 'ItemName'],
                'Warehouses' => ['WarehouseCode', 'WarehouseName']])
            ->where(new Equal('Items/ItemCode', 'Items/ItemWarehouseInfoCollection/ItemCode'))
            ->where(new Equal('Items/ItemWarehouseInfoCollection/WarehouseCode', 'Warehouses/WarehouseCode'))
            ->findAll()

查询服务

Service类的queryBuilder()方法返回一个新的Query实例。Query类允许您使用链式方法来过滤请求的服务。

以下代码示例展示了如何使用Orders服务过滤销售订单。

$sap = SAPClient::createSession($config, 'SAP UserName', 'SAP Password', 'Company', 'Language');
$orders = $sap->getService('Orders');

$result = $orders->queryBuilder()
    ->select('DocEntry,DocNum')
    ->orderBy('DocNum', 'asc')
    ->limit(5)
    ->findAll(); 

findAll()方法将返回一个与搜索条件匹配的记录集合。要使用id返回特定记录,请使用find($id)方法。

...
$orders = $sap->getService('Orders');

$result = $orders->queryBuilder()
    ->select('DocEntry,DocNum')
    ->find(123456); // DocEntry value

根据服务,$id可能是一个数值或字符串。如果您想了解用于服务id的字段是哪个,可以像下面这样在Service对象上调用getMetaData()方法。

...
$meta = $orders->getMetaData();

创建服务

以下代码示例展示了如何使用Service对象的create()方法创建一个新的销售订单。

...
$orders = $sap->getService('Orders');

$result = $orders->create([
    'CardCode' => 'BP Card Code',
    'DocDueDate' => 'Doc due date',
    'DocumentLines' => [
        [
            "ItemCode" => "Item Code",
            "Quantity" => 100,
        ]
    ]
]);

您必须提供创建销售订单所需的任何用户定义字段。如果成功,新创建的销售订单将作为一个对象返回。

更新服务

以下代码示例演示了如何使用Service对象的update()方法更新服务。

...
$orders = $sap->getService('Orders');

$result = $orders->update(19925, [
    'Comments' => 'Comment added here'
]);

注意,update()方法的第一个参数是要更新的实体的id。在销售订单的情况下,id是DocEntry字段。如果更新成功,则返回布尔值true。

取消文档

以下代码示例演示了如何使用Service的action()方法取消文档。

...
$orders = $sap->getService('Orders');

$result = $orders->action(19925, 'Cancel');

如果取消成功,则返回布尔值true。

关闭文档

以下代码示例演示了如何使用Service的action()方法关闭文档。

...
$orders = $sap->getService('Orders');

$result = $orders->action(19925, 'Close');

如果关闭请求成功,则返回布尔值true。

添加头信息

您可以通过在Service实例上调用headers()方法并传递一个包含头信息的数组来指定oData头信息。

...
$orders = $sap->getService('Orders');
$orders->headers(['Prefer' => 'odata.maxpagesize=0']);

$result = $orders->queryBuilder()
    ->select('DocEntry,DocNum')
    ->find(123456); // DocEntry value

您可以在https://syedhussim.com/sap-b1/php-sapb1-library-documentation-v1.html找到更多示例和完整文档。