php-sapb1 Library Documentation v1

A simple and easy to use PHP library for SAP Business One Service Layer API.

Requirements


PHP 7.2+
json
libxml

Installation


Download or clone the php-sapb1 repository from https://github.com/syedhussim/php-sapb1.

git clone https://github.com/syedhussim/php-sapb1.git

Usage


Create an array to store your SAP Business One Service Layer configuration details.

Listing 1

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

Create a new Service Layer session by calling the static createSession() method of the SAPClient class.

Listing 2

include "sapb1.phar";

use SAPb1\SAPClient;

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

The static createSession() method will return a new instance of SAPClient if the connection was successful. For subsequent requests to the Service Layer, you can use the B1 Session data stored in the $sap object. Requests made to the Service Layer using the B1 Session data will be much faster than the initial login request.

Listing 3

...
$session = $sap->getSession();

// For subsequent requests.
$sap = new SAPClient($config, $session);

SAPClient provides a service($name) method which returns a new instance of SAPb1\Service with the specified name. Using this Service object you can perform CRUD actions.

Querying A Service


The queryBuilder() method of the Service class returns a new instance of SAPb1\Query. The Query class allows you to use method chaining to filter the requested service.

The following code sample shows how to filter Sales Orders using the Orders service.

Listing 4

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

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

The findAll() method will return a collection of records that match the search criteria. To return a specific record using an id use the find($id) method.

Listing 5

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

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

Depending on the service, $id may be a numeric value or a string. If you want to know which field is used as the id for a service, call the getMetaData() method on the Service object as shown below.

Listing 6

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

You can filter results based on conditions using Filter classes. The following code sample shows how to return Sales Orders for a particular business partner using the Equal filter class.

Listing 7

use SAPb1\Filters\Equal;
...
$orders = $sap->getService("Orders");

$result = $orders->queryBuilder()
    ->select("DocEntry,DocNum,CardCode")
    ->orderBy("DocNum", "asc")
    ->where(new Equal("CardCode", "BP Card Code"))
    ->limit(5)
    ->findAll(); 

You can use the where() method to add additional filters to further refine the search results.

Listing 8

use SAPb1\Filters\Equal;
use SAPb1\Filters\LessThan;
...
$orders = $sap->getService("Orders");

$result = $orders->queryBuilder()
    ->select("DocEntry,DocNum,CardCode")
    ->orderBy("DocNum", "asc")
    ->where(new Equal("CardCode", "BP Card Code"))
    ->where(new LessThan("DocEntry", 1000))
    ->limit(5)
    ->findAll(); 

Creating A Service


The following code sample shows how to create a new Sales Order using the create() method of the Service object.

Listing 9

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

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

You must provide any User Defined Fields that are required to create a Sales Order. If successful, the newly created Sales Order will be returned as an object.

Updating A Service


The following code sample demonstrates how to update a service using the update() method of the Service object.

Listing 10

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

$result = $orders->update(19925, [
    "Comments"=> "Comment added here"

]);

Note that the first argument to the update() method is the id of the entity to update. In the case of a Sales Order the id is the DocEntry field. If the update is successful a boolean true value is returned.

Adding Headers


You can specify oData headers by calling the headers() method on a Service instance with an array of headers.

Listing 11

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

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

SAP Business One

HANA DB

Rust

Java

Node.js