2016-12-08 1 views
0

J'ai créé un module personnalisé dans SugarCRM (V7.8 je pense, a accueilli, non sur site)SugarCRM Utilisation REST API Avec personnalisée Module

Le module est nommé « Clients », et à des fins de test - je fait la structure est la même que "Comptes".

J'utilise l'exemple sur cette page: http://support.sugarcrm.com/Documentation/Sugar_Developer/Sugar_Developer_Guide_7.6/API/Web_Services/Examples/v10/module_POST/

Quand je lance le code pour le module Comptes cela fonctionne. Lorsque je tente de déposer un dossier au module clients je reçois:

[error] => no_method 
[error_message] => Could not find a route with 1 elements 

Ma compréhension est que les API sont censés travailler pour des modules personnalisés, est-ce incorrect? Mon but ultime est de créer 5 ou 6 modules personnalisés et d'y insérer des données depuis notre système ERP en temps réel via les API REST.

Voici l'exemple de code:

<?php 
$base_url = "https://my.domain/rest/v10"; 
$username = "admin"; 
$password = "*********"; 
function call($url,$oauthtoken='',$type='GET',$arguments=array(),$encodeData=true,$returnHeaders=false){ 
    $type = strtoupper($type); 
    if ($type == 'GET') 
    { 
     $url .= "?" . http_build_query($arguments); 
    } 
    $curl_request = curl_init($url); 
    if ($type == 'POST') 
    { 
     curl_setopt($curl_request, CURLOPT_POST, 1); 
    } 
    elseif ($type == 'PUT') 
    { 
     curl_setopt($curl_request, CURLOPT_CUSTOMREQUEST, "PUT"); 
    } 
    elseif ($type == 'DELETE') 
    { 
     curl_setopt($curl_request, CURLOPT_CUSTOMREQUEST, "DELETE"); 
    } 
    curl_setopt($curl_request, CURLOPT_HTTP_VERSION, CURL_HTTP_VERSION_1_0); 
    curl_setopt($curl_request, CURLOPT_HEADER, $returnHeaders); 
    curl_setopt($curl_request, CURLOPT_SSL_VERIFYPEER, 0); 
    curl_setopt($curl_request, CURLOPT_RETURNTRANSFER, 1); 
    curl_setopt($curl_request, CURLOPT_FOLLOWLOCATION, 0); 
    if (!empty($oauthtoken)) 
    { 
     $token = array("oauth-token: {$oauthtoken}","Content-Type: application/json"); 
     curl_setopt($curl_request, CURLOPT_HTTPHEADER, $token); 
    } 
    if (!empty($arguments) && $type !== 'GET') 
    { 
     if ($encodeData) 
     { 
      //encode the arguments as JSON 
      $arguments = json_encode($arguments); 
     } 
     curl_setopt($curl_request, CURLOPT_POSTFIELDS, $arguments); 
    } 
    $result = curl_exec($curl_request); 
    if ($returnHeaders) 
    { 
     //set headers from response 
     list($headers, $content) = explode("\r\n\r\n", $result ,2); 
     foreach (explode("\r\n",$headers) as $header) 
     { 
      header($header); 
     } 
     //return the nonheader data 
     return trim($content); 
    } 
    curl_close($curl_request); 
    //decode the response from JSON 
    $response = json_decode($result); 
    return $response; 
} 

//Login - POST /oauth2/token 
$url = $base_url . "/oauth2/token"; 
$oauth2_token_arguments = array(
    "grant_type" => "password", 
    //client id/secret you created in Admin > OAuth Keys 
    "client_id" => "sugar", 
    "client_secret" => "", 
    "username" => $username, 
    "password" => $password, 
    "platform" => "base" 
); 
$oauth2_token_response = call($url, '', 'POST', $oauth2_token_arguments); 
//Create record - POST /<module>/ 
$url = $base_url . "/Customers"; //works id this is "Accounts" 
$record_arguments = array(
    "name" => "ACME Inc.", 
    "description" => "Not for Coyotes" 
); 
$record_response = call($url, $oauth2_token_response->access_token, 'POST', $record_arguments); 
echo "<pre>"; 
print_r($record_response); 
echo "</pre>"; 

Répondre

1

modules personnalisés auront une touche préfixe pour éviter les conflits, donc plutôt que $url = $base_url . "/Customers"; ce sera quelque chose comme $base_url . "/xxx_Customers";.
Si vous avez développé le module, vous devez connaître la clé de préfixe utilisée, sinon cocher le schéma DB ou Studio/Module Builder

+0

Je suis revenu sur la documentation et j'ai trouvé ceci: "Clé: La clé est un texte alphanumérique Pour distinguer les modules avec des noms similaires, le système préfixera tous les noms de classe, les répertoires et les noms de table avec cette clé. " Cela s'est avéré être le préfixe que vous avez indiqué. Je pense que la documentation pourrait probablement être un peu plus claire. Merci pour la réponse rapide. –