2016-08-19 7 views
1

Leadsモジュールの下のレコードを更新するために、vtigerの更新クエリを適切にフォーマットする方法を知っていますか? http://community.vtiger.com/help/vtigercrm/developers/third-party-app-integration.htmlwebservice.php Vtiger updateクエリ文字列php curl投稿

と、クエリにログインし、チャレンジ応答を行うことができたが、私は仕事に更新機能を得ることができなかったと私はないですので、それは次のようになります。

私はこれを、次のされていますクエリがどのように見えるようにするか。これは私がクエリを送信するとき、私は取得エラーです:

stdClass Object ([success] => [error] => stdClass Object ([code] => ACCESS_DENIED [message] => Permission to perform the operation is denied for id)) 

現在のテストコード:

function updatesomeone(){ 
global $createduserleadnum; 
global $url; 
global $sessionID; 
global $createduserid; 


$customdata = array(
'firstname'=> 'TestAPILead2',//Update First name 
'lastname'=> 'TestAPILeadLast2', //Updated Last name 
'leadstatus'=> 'New', 
'leadsource'=> 'Some Lead Source', //Not Real Lead source 
'assigned_user_id'=> 'User-Assigned', //not real user 
'cf_755'=> 'A Custom Field', // A Custom Field 
'lead_no' => $createduserleadnum, Acquired from other function/stored value 
); 

$customdata = json_encode($customdata); 
$field = array(
'operation' => 'update', 
'sessionName'=> $sessionID, 
'element' => $customdata 
); 


$fields_string; 
foreach($field as $key=>$value) { global $fields_string; 
$fields_string .= $key.'='.$value.'&'; } 
$ch = curl_init(); 


curl_setopt($ch,CURLOPT_URL, $url); 
curl_setopt($ch,CURLOPT_POST, count($field)); 
curl_setopt($ch,CURLOPT_POSTFIELDS, $fields_string); 
curl_setopt($ch, CURLOPT_RETURNTRANSFER, TRUE); 

$result = curl_exec($ch); 
$pringjson = json_decode($result); 

print_r($pringjson); 

}

答えて

1

はそれを考え出しました。これは$ fieldstring変数に関連していました。なんらかの理由で、関数に局所的にとどまっていないので、他の変数も含まれていました。最後に数字のついたfieldstring変数を変更しました。最終的なコードでは、変数をify'ingするためのより良いスクリプトを作成します。私は与えられた完全なIDを使用しなければならなかった。どちらの方法でも解決され、コードは必要に応じて動作します。

0

私はあなたのコードの提案があります。あなたは&を取り除かずに、 "foreach"ループの後に生成されます。 foreachの後にrtrimを追加し、$ fields_string変数を空白として定義してください。

$fields_string = ''; 
foreach($field as $key=>$value) { 
    global $fields_string; 
    $fields_string .= $key.'='.$value.'&'; 
} 
rtrim($fields_string, '&'); 
2

APIのドキュメントは、オブジェクトの更新についてそれほど明確ではないので、私は、コードのこの作品は、君たちの一部について関心のかもしれませんが。

基本的には、オブジェクトを更新できるようにするには、あなたがしても、少なくとも

  1. ID
  2. 更新するオブジェクトのすべての「必要」フィールド(オブジェクトタイプに依存)が必要ですあなたはそれらを更新したくありません。たとえば、標準設定のリードの場合、少なくとも「姓」と「割り当てられたユーザーID」が必要です。ここで

必要であれば、私のコードです:

$vt_address = 'URL of Vtiger install'; 
$vt_session = 'Vtiger Session ID'; 

$object_to_update = array('id' => '10x71', 'lastname'=>'Test Lead', 'assigned_user_id' => '19x1'); 

vtlib_update_data($vt_address, $vt_session, $object_to_update); 

function vtlib_update_data($vt_address, $vt_session, $vt_object) { 

    $vt_json = json_encode($vt_object); 
    $vt_url = "$vt_address/webservice.php"; 

    $vt_post_data = array(
     'operation' => 'update', 
     'sessionName' => $vt_session, 
     'element' => $vt_json 
    ); 

    $vt_data = vtlib_curl($vt_url, $vt_post_data); 

    return ($vt_data['success']) ? $vt_data['result'] : false; 

} 

function vtlib_curl($vt_url, $vt_post_data) { 

    $vt = curl_init($vt_url); 
    curl_setopt($vt, CURLOPT_RETURNTRANSFER, true); 
    curl_setopt($vt, CURLOPT_POST, true); 
    curl_setopt($vt, CURLOPT_POSTFIELDS, $vt_post_data); 
    $vt_data = json_decode(curl_exec($vt), true); 
    curl_close($vt); 

    return $vt_data; 
} 
関連する問題