此包已被弃用且不再维护。作者建议使用 volldigital/laravel-navision 包代替。

1.1.13 2023-03-31 07:50 UTC

README

一个用于与Microsoft Navision通信的小型包。您可以获取集合和单个记录。

安装

运行以下命令

composer require volldigital/laravel-navision
php artisan vendor:publish --provider="VOLLdigital\LaravelNavision\LaravelNavisionServiceProvider"

编辑您的 "config/ntlm.php" 文件或使用ENV变量。

使用方法

设置好配置后,通过以下方式加载客户端

$client = app(VOLLdigital\LaravelNavision\Client::class);

现在您可以接收Navision的数据了。

示例

$client = app(VOLLdigital\LaravelNavision\Client::class);

$data = $client->fetchCollection("Events");

$event = $client->fetchOne("Events", 'Key', 'Number');

您也可以分块获取数据。数据将写入文本文件,请求完成后,它将被解析并删除。

$client = app(VOLLdigital\LaravelNavision\Client::class);

// file will be stored in /storage/app/temp/curl_uniqueid.temp

$data = $client->fetchCollection("Events", true);

您想检查与UNITOP的连接是否建立?您可以使用ping函数进行检查:)

$client = app(VOLLdigital\LaravelNavision\Client::class);

if ($client->ping() === false) {
    throw new RunTimeException('No connection available');
}

写入数据

使用 $client->writeData(string $url, array $data); 将数据写入Navision。

示例

$client->writeData(
    'Items',
    [
        'Item_Code' => 'VD',
        'Item_Description' => 'Test data'
    ]
);

计算条目数

使用 $client->countCollection("您的集合") 来接收该集合中条目的数量。

示例

dd($client->countCollection('Events')); // Outputs: 100293

示例

查询参数

  • $skip=XXXX - 跳过X个条目
$temp = $this->client->fetchCollection('Events?$skip=10000');
  • $top=XXXX - 接收X个条目
$temp = $this->client->fetchCollection('Events?$top=10');

获取数据

    protected function fetchData(string $uri, $key, bool $chunk = false, ?callable $filter = null)
    {
        $temp = $this->client->fetchCollection($uri, $chunk);
        $data = [];

        foreach($temp as $ts) {
            if (!is_null($filter) && $filter($ts) === false) {
                continue;
            }

            $data[$ts[$key]] = $ts;
        }

        return collect($data);
    }

分页

    protected function fetchAll()
    {
        $number = $this->client->countCollection('Events');
        $pageLimit = 10000;
        $pages = (int)ceil($number / $pageLimit);
        $events = [];

        for ($i = 0; $i < $pages; $i++) {
            $skip = $i * $pageLimit;

            $temp = $this->fetchData('Events?$skip='.$skip, 'Number');

            $events = array_merge($events, $temp->toArray());
        }

        return collect($events);
    }