2016-12-07 1 views
0

J'ai ajouté une action supplémentaire à la vue liste d'enregistrements;SugarCRM: Comment obtenir des données json dans le point de terminaison REST

custom/modules/Opportunities/clients/base/views/recordlist/recordlist.js:

({ 
    extendsFrom: 'RecordlistView', 

    initialize: function(options) { 
     this._super("initialize", [options]); 
     //add listener for custom button 
     this.context.on('list:opportunitiesexport2:fire', this.export2, this); 
    }, 
    export2: function() { 
     //gets an array of ids of all selected opportunities 
     var selected = this.context.get("mass_collection").pluck('id'); 
     if (selected) { 
      return App.api.call('read', 
      App.api.buildURL('Opportunities/Export2'), 
      {'selected_ids':selected}, 
      { 
       success: function(response) { 
        console.log("SUCCESS"); 
        console.log(response); 
       }, 
       error: function(response) { 
        console.log('ERROR'); 
        console.log(response); 
       }, 
       complete: function(response){ 
        console.log("COMPLETE"); 
        console.log(response); 
       }, 
       error: function(response){ 
        console.log("ERROR"); 
        console.log(response); 
       } 
      }); 
     } 
    }, 
}) 

Le tutoriel ici http://support.sugarcrm.com/Documentation/Sugar_Developer/Sugar_Developer_Guide_7.7/Integration/Web_Services/v10/Extending_Endpoints/ explique comment créer un point final.

Cependant, cela n'explique pas comment obtenir les données json (le tableau stringifié des identifiants sélectionnés);

custom/modules/Opportunities/clients/base/api/OpportunitiesApi.php:

class OpportunitiesApi extends SugarApi 
{ 
    public function registerApiRest() 
    { 
     return array(
      //GET 
      'MyGetEndpoint' => array(
       //request type 
       'reqType' => 'GET', 

       //set authentication 
       'noLoginRequired' => false, 

       //endpoint path 
       'path' => array('Opportunities', 'Export2'), 

       //endpoint variables 
       'pathVars' => array('', ''), 

       //method to call 
       'method' => 'Export2', 

       //short help string to be displayed in the help documentation 
       'shortHelp' => 'Export', 

       //long help to be displayed in the help documentation 
       'longHelp' => 'custom/clients/base/api/help/MyEndPoint_MyGetEndPoint_help.html', 
      ), 
     ); 
    } 

    /** 
    * Method to be used for my MyEndpoint/GetExample endpoint 
    */ 
    public function Export2($api, $args) 
    { 
     //how to access $args['selected_ids']? 
    } 
} 

$args contient

Array 
(
    [__sugar_url] => v10/Opportunities/Export2 
) 

Est-il possible d'accéder aux données JSON?

Répondre

0

La solution consistait à changer la méthode d'appel à create et la méthode de point d'extrémité à POST; $args contient maintenant

Array 
(
    [selected_ids] => Array 
     (
      [0] => 0124a524-accc-11e6-96a8-005056897bc3 
     ) 

    [__sugar_url] => v10/Opportunities/Export2 
) 

PUT vs POST in REST - j'utilisais GET parce que je ne prévois pas de changer quoi que ce soit, mais le corps est généralement ignoré dans une requête GET.

0

J'ai fait la même chose mais mon repos api a été codé en Java. J'ai utilisé l'annotation java @Path pour annoter ma méthode get. J'ai ensuite déployé le code api de repos ci-dessus sur un serveur (Tomcat dans mon cas). Démarrage du serveur, puis en appuyant sur l'URL formée par le @Path vous donnera les données JSON sur le navigateur.