我想通过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。它也没有起作用。有什么办法解决这个问题吗?
我认为你应该尝试11x46帐户id。Vtiger web服务实体id不同于tabid。
要获得所有实体id的正确列表,请在CRM的MySQL中执行以下命令:
select id, name from vtiger_ws_entity;
问题出在vtiger文档中。添加entityName GET请求参数。
var q = "select * from Users;";
"http://vtigercrm/webservice.php?operation=query&sessionName=ABC&entityName=XYZ&query="+q
这对我来说很有效。虽然仍然不能理解,通过给任何entityName或垃圾字符串,程序工作!!
我认为这是@Vtiger的web服务中的一个bug。您可以修改名为Create.php
的文件,如下所示:(在*之间添加代码)
foreach ($referenceFields as $fieldName => $details) {
if (isset($element[$fieldName]) && strlen($element[$fieldName]) > 0) {
*if($fieldName == 'roleid' || $fieldName == 'currency_id'){
continue;
}*
$ids = vtws_getIdComponents($element[$fieldName]);
$elemTypeId = $ids[0];
$elemId = $ids[1];
$referenceObject = VtigerWebserviceObject::fromId($adb, $elemTypeId);
if (!in_array($referenceObject->getEntityName(), $details)) {
throw new WebServiceException(WebServiceErrorCode::$REFERENCEINVALID,
"Invalid reference specified for $fieldName");
}
if ($referenceObject->getEntityName() == 'Users') {
if(!$meta->hasAssignPrivilege($element[$fieldName])) {
throw new WebServiceException(WebServiceErrorCode::$ACCESSDENIED, "Cannot assign record to the given user");
}
}
if (!in_array($referenceObject->getEntityName(), $types['types']) && $referenceObject->getEntityName() != 'Users') {
throw new WebServiceException(WebServiceErrorCode::$ACCESSDENIED,
"Permission to access reference type is denied" . $referenceObject->getEntityName());
}
} else if ($element[$fieldName] !== NULL) {
unset($element[$fieldName]);
}
}