execut/odata-1c

用于与 1C 一起使用的 ODATA 协议客户端

维护者

详细信息

github.com/execut/odata-1c

源代码

安装: 530

依赖: 1

建议者: 0

安全: 0

星标: 0

关注者: 3

分支: 28

0.1.1 2020-09-16 08:08 UTC

This package is auto-updated.

Last update: 2024-09-16 16:18:56 UTC


README

1C 的 OData 客户端

安装

推荐通过 Composer 安装

$ composer require kilylabs/odata-1c

使用

代码示例

<?php

use Kily\Tools1C\OData\Client;

require __DIR__.'/vendor/autoload.php';

$client = new Client('http://HOSTNAME/BASE/odata/standard.odata/',[
    'auth' => [
        'YOUR LOGIN', 
        'YOUR PASSWORD'
    ],
    'timeout' => 300,
]);

$product_data = [
    'Артикул'=>'CERTANLY_NONEXISTENT',
    'Description'=>'test test test nonexistent',
];

// Creation
$data = $client->{'Catalog_Номенклатура'}->create($product_data);
echo "CREATED!\n";

// Getting using filter....
$data = $client->{'Catalog_Номенклатура'}->get(null,"Артикул eq 'CERTANLY_NONEXISTENT'");
echo "GOT!\n";
var_dump($data);

// ... or using Ref_Key
$id = $data['value'][0]['Ref_Key'];
$data = $client->{'Catalog_Номенклатура'}->get($id);
echo "GOT BY ID!\n";
var_dump($data);

// Updating
$data = $client->{'Catalog_Номенклатура'}->update($id,[
    'Description'=>'Test description',
]);
echo "UPDATED!\n";

// deletion
$data = $client->{'Catalog_Номенклатура'}->delete($id);
echo "DELETED!\n";

// out metadata
$data = $client->getMetadata();
var_dump($data);

异常处理

当服务器返回错误响应时,组件会抛出 Kily\Tools1C\OData\RequestException 异常。该异常具有 $request 属性,其值是 Kily\Tools1C\OData\Request 类的实例,包含处理错误所需的所有信息。例如,在搜索记录时发生意外错误,需要记录该错误

try {
    $data = $client->{'Catalog_Номенклатура'}->get($id);
    if(!$client->isOk()) {
        var_dump('Something went wrong: ',$client->getErrorCode(),$client->getErrorMessage(),$data);
        die();
    }
} catch (Exception $e) {
    log('Error while requested ' . $e->request->url . ': ' . $e->getMessage());
}

性能分析

为了能够捕获对 oData 服务器的请求以进行性能分析或类似目的,需要实现抽象类 Profiler

use Kily\Tools1C\OData\Profiler;
class CustomProfiler extends Profiler {
    public function begin() {
        echo 'Start request ' . $this->url . ' (' . $this->method . ')';
        if (!empty($this->data)) {
            echo ' with data: ' . var_export($this->data, true) . "\n<br>";
        }
    }

    public function end() {
        echo 'Ending request ' . $this->url . ' (' . $this->method . ')' . "\n<br>"; 
    }
}

并将其实例传递给 oData 客户端构造函数或通过设置器设置

$profiler = new Profiler;
$client = new Client($url, $options, $profiler);
$client->setProfiler($profiler);

待办事项

  • 实现 getLastId() 方法;
  • 支持 XML 吗?