Ошибка запроса: разрешение на выполнение операции отклонено для имени в запросе веб-службы vtiger, с помощью которого я хочу перечислить одну из записей модуля.

У меня возникает проблема в веб-сервисе vtiger. Может ли кто-нибудь помочь мне разобраться в этом. Я получаю эту ошибку «Ошибка запроса: разрешение на выполнение операции запрещено для имени» в запросе веб-службы vtiger, с помощью которого я хочу перечислить одну из записей модуля.

Мой код:

<?php
 require_once("../vtlib/Vtiger/Net/Client.php");
 require_once("../include/Zend/Json.php");

 class CRMwebrequests {
  var $endpointUrl;
  var $userName;
  var $userKey;
  var $token;

function __construct($url, $name, $key) {
    $this->endpointUrl=$url;
    $this->userName=$name;
    $this->userKey=$key;
    $this->token=0;
}

function getChallenge() {
    $httpc = new Vtiger_Net_Client($this->endpointUrl);
    $params["operation"]="getchallenge";
    $params["username"]=$this->userName;
    $response = $httpc->doGet($params);
    $httpc->disconnect();
    $jsonResponse = Zend_JSON::decode($response);
    if($jsonResponse["success"]==false)
    die("getChallenge failed:".$jsonResponse["error"]["message"]."<br>");

    $challengeToken = $jsonResponse["result"]["token"];

    return $challengeToken;
}

function Login() {
    $token = $this->getChallenge();
    $generatedKey = md5($token.$this->userKey);
    $httpc = new Vtiger_Net_Client($this->endpointUrl);
    //POST containing array
    $response = $httpc->doPost(
            array("operation"=>"login", "username"=>$this->userName,
            "accessKey"=>$generatedKey));
    $httpc->disconnect();
    $jsonResponse = Zend_JSON::decode($response);
    if($jsonResponse["success"]==false) {       
        die("Login failed:".$jsonResponse["error"]["message"]."<br>Token:".$token."<br>");
    }
    $sessionId = $jsonResponse["result"]["sessionName"];
    //save session id
    $this->token=$sessionId;
    //25765819bac6eb068
    return true;
}

function Query($query) {
    //handle "special" characters
    $queryParam = ($query);
    $params = array("sessionName"=>$this->token,"operation"=>"query", "query"=>$queryParam);

    $httpc = new Vtiger_Net_Client($this->endpointUrl);
    $response = $httpc->doGet($params);

    $jsonResponse = Zend_JSON::decode($response);
    echo "<pre>";
    print_r($jsonResponse);
    if($jsonResponse["success"]==false) {
        die("Query failed:".$jsonResponse["error"]["message"]);
    }
    //Array of retrieved objects
    $retrievedObjects = $jsonResponse["result"];
    return $retrievedObjects;
}


function delete($id){
    $params = array("sessionName"=>$sessionId, "operation"=>'delete', "id"=>$id);
    //delete operation request must be POST request.
    $httpc = new Vtiger_Net_Client($this->endpointUrl);
    $response = $httpc->doPost($params);
    $jsonResponse = Zend_JSON::decode($response);
    if($jsonResponse['success']==false){
        die('delete failed:'.$jsonResponse['error']['errorMsg']);
    }
    //Array of retrieved objects
    $retrievedObjects = $jsonResponse["result"];
    return $retrievedObjects;
}

function LogOut() {
    $params = array("operation"=>"logout","sessionName"=>$this->token);
    $httpc = new Vtiger_Net_Client($this->endpointUrl);
    $response = $httpc->doGet($params);
    $jsonResponse = Zend_JSON::decode($response);
    if($jsonResponse["success"]==false) {
        //handle the failure case.
        die("Logout failed:".$jsonResponse["error"]["message"]);
    }
    return true;
 }
}

  $CRMurl = 'http://localhost/vtigercrm';

  $APPkey = 'R6JNLCLkjCFTm44b';

  $crmobject = new CRMwebrequests($CRMurl."/webservice.php", "admin", $APPkey);

 if ($crmobject->Login()) {

 $wsquery = "SELECT * FROM vtiger_account";
 $Details = $crmobject->Query($wsquery);


echo "<b>Accounts</b><br>";
    echo "<table border='1'>";
        echo "<tr>";
            echo "<th>Account No</th>";
            echo "<th>Accoun Name</th>";
            echo "<th>Account Type</th>";
            echo "<th>Industry</th>";
            echo "<th>Ownership</th>";
        echo "</tr>";
    foreach ($Details as $value){
        echo "<tr>";
            echo "<td>".$value["account_no"]."</td>";
            echo "<td>".$value["accountname"]."</td>";
            echo "<td>".$value["account_type"]."</td>";
            echo "<td>".$value["industry"]."</td>";
            echo "<td>".$value["ownership"]."</td>";
        echo "</tr>";
    }
    echo "</table></br>";

 }
 else {
echo "Error!";
 }
?>

person Muzafar    schedule 02.11.2016    source источник


Ответы (1)


Вы не должны использовать реальное имя таблицы БД для своего «SQL»-запроса, а только имя модуля, подобное этому:

$query = "SELECT * FROM accounts;";
or
$query = "SELECT * FROM Contacts WHERE lastname='Valiant';";
person Jérémy    schedule 03.11.2016
comment
хорошо @Jérémy, но как тогда использовать для двух разных таблиц? Я имею в виду, что я хочу получить такие записи из запроса, как тогда я буду использовать тот же запрос? ВЫБЕРИТЕ vtiger_surveycf.*, vtiger_survey.name ИЗ vtiger_surveycf ВНУТРЕННЕЕ СОЕДИНЕНИЕ vtiger_survey ON vtiger_surveycf.surveyid=vtiger_survey.surveyid ГДЕ vtiger_surveycf.surveyid LIMIT 100; - person Muzafar; 03.11.2016
comment
В настоящее время запросы ограничены одним объектом, поэтому соединения не поддерживаются. - person Jérémy; 03.11.2016
comment
Но может этот запрос SELECT * FROM Survey - person Jérémy; 03.11.2016
comment
получить фиксированное и настраиваемое поле... Я никогда не пытался использовать запрос для настраиваемого поля - person Jérémy; 03.11.2016
comment
Это означает, что я не могу получить связанные записи, когда это необходимо? - person Muzafar; 04.11.2016
comment
Вы должны запустить 2 отдельных запроса и сделать соединения на стороне PHP. - person Jérémy; 04.11.2016
comment
не могли бы вы привести мне пример, я буду рад, пожалуйста - person Muzafar; 05.11.2016