2

我想通过 vTiger webservice 添加 SalesOrder。我正在使用这个 vtwsclib。这是代码:

<?php
include_once('vtwsclib/Vtiger/WSClient.php');
$url = 'http://localhost:8888';
$client = new Vtiger_WSClient($url);
$login = $client->doLogin('admin', 'zzzzzzzz');
if(!$login) echo 'Login Failed';
else {

    $data = array(
        'subject' => 'Test SalesOrder',
        'sostatus' => 'Created',
        'invoicestatus'=>'AutoCreated',
        'account_id'=> '46', // Existing account id
        'bill_street' => 'Bill Street',
        'ship_street' => 'Ship Street',
    );
    $record = $client->doCreate('SalesOrder', $data);

$error = $client->lasterror();
    if($error) {
    echo $error['code'] . ' : ' . $error['message'];
}

if($record) {
    $salesorderid = $client->getRecordId($record['id']);
}

}
?>

我只得到:“ACCESS_DENIED:id 拒绝执行操作的权限”。

Account_id 存在于数据库中。其他 SalesOrder 使用相同的 account_id 但通过网页添加。我还尝试了 accout_id = "6x46" 的变体,其中 6 是 module_id。它也没有工作。任何想法如何解决这个问题?

4

3 回答 3

2

我认为您应该尝试 11x46 的帐户 ID。Vtiger Web 服务实体 ID 与 tabid 不同。

要获得所有实体 ID 的正确列表,请在您的 MySQL 中为 CRM 执行此操作:

select id, name from vtiger_ws_entity;
于 2013-08-03T12:00:44.770 回答
0

问题在于 vtiger 文档。在 GET 请求中添加entityName参数。

var q = "select * from Users;";
"http://vtigercrm/webservice.php?operation=query&sessionName=ABC&entityName=XYZ&query="+q

This worked well for me. Although still couldn't understand that by giving any entityName or garbage string, program works !!! Please comment if you know more about this.

于 2015-08-27T17:14:23.770 回答
-1

这是一种可以帮助您生成查询的方法q

"http://vtigercrm/webservice.php?operation=query&sessionName=ABC&query="+q

例如,您期望:

SELECT * FROM INVOICE WEHRE id='72xxx';

你可以做

buildVtigerQuery('INVOICE', ['id' => '72xx']);

这是功能:

    protected function buildQuery(
    string $moduleName,
    array $filterData = [],
    string $attributes = '*',
    int $start = 0,
    int $limit = null
): string {
    $query = 'SELECT ' . $attributes . ' FROM ' . $moduleName . ' ';
    if (!empty($filterData)) {
        $query .= 'WHERE ';
        foreach ($filterData as $key => $value) {
            $whereOperator = (is_numeric($value) === true) ? ' = ' : ' like ';
            $value = (is_numeric($value) === true) ? $value : '%' . $value . '%';
            $query .= $key . $whereOperator . '\'' . $value . '\'' . ' AND WHERE ';
        }
    }

    if (substr($query, -11) === ' AND WHERE ') {
        $query = substr_replace($query, "", -11);
    }

    if ((!is_null($limit)) && (0 < $start)) {
        $query .= ' ORDER BY id LIMIT ' . $start . ',' . $limit;
    }


    if (!is_null($limit) && (0 >= $start)) {
        $query .= ' ORDER BY id LIMIT ' . $limit;
    }


    return $query . ';';
}

我没有考虑 XSS 注入,因为我的预期查询q将写入 url

于 2018-04-27T09:50:24.913 回答