我想通过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。它也没用。任何想法如何解决这个问题?
答案 0 :(得分:1)
我认为您应该尝试11x46帐户ID。 Vtiger Web服务实体ID与tabid不同。
要获得所有实体ID的正确列表,请在MySQL中为CRM执行此操作:
select id, name from vtiger_ws_entity;
答案 1 :(得分:-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
将写在网址