2016-08-12 4 views
1

REST APIを動作させようとしています。はい、コードはPythonですが、PHPなど何か知っていれば、助けてくれると思っています。SuiteCRM/SugarCRM RESTエンドポイントバージョン4.1の使用

私は2つの機能を書いています。 1はヘルパーです。

def post(self, method, parameters): 
    args = collections.OrderedDict() 
    args['method'] = method 
    args['input_type'] = 'json' 
    args['response_type'] = 'json' 
    args['rest_data'] = json.dumps(parameters) 
    res = requests.post(self.url, data=args, verify=False) 
    if res.ok == False: 
     return None 
    return res.json() 

以下のget_module_entriesの実装では、最初の20個のレコードしか取得できません。私が何をスキップしたり取ったりしても、最初の20レコードしか取得しません。

def get_module_entries(self, module, skip=0, take=1): 
    args = collections.OrderedDict() 
    args['session'] = self.session_id 
    args['module_name'] = module 
    args['query'] = '' 
    args['order_by'] = '' 

    args['select_fields'] = '' 
    args['link_name_to_fields_array'] = '' 

    args['offset'] = str(skip) 
    args['max_results'] = str(take) 
    args['deleted'] = 0 
    args['Favorites'] = 0 
    res = self.post('get_entry_list', args) 
    return res 

私はselect_fieldsをコメントアウトし、link_name_to_fields_array、それは名誉をスキップして取るん。だから、私はすべてのレコードを取得するためにfuctionを打つことができます。ただし、返されるオブジェクトにはIDのみがあり、他のすべてのフィールドが欠落しています。ここで私は、これらの2行をコメントアウトしています

{"module_name": "Accounts", "name_value_list": [], "id": "<snipped out>"}

:彼らはこのようになります。

def get_module_entries(self, module, skip=0, take=1): 
    args = collections.OrderedDict() 
    args['session'] = self.session_id 
    args['module_name'] = module 
    args['query'] = '' 
    args['order_by'] = '' 

    #args['select_fields'] = '' 
    #args['link_name_to_fields_array'] = '' 

    args['offset'] = str(skip) 
    args['max_results'] = str(take) 
    args['deleted'] = 0 
    args['Favorites'] = 0 
    res = self.post('get_entry_list', args) 
    return res 

動作は非常に奇妙です。私はすべてのフィールドがほしいと思うので、スキップして取ることを尊敬したい。私が1つの行をコメントアウトし、いずれかの行をコメントアウトすると動作しません。これをどうやって解決するのですか?

答えて

0

制限の理由は、SuiteCRMのリストビューに制限があり、パフォーマンス上の懸念からリストビューがページ分割されているためです。

通常、改ページしたいと思うでしょう。実際に必要なフィールドだけを引き出す必要があります。これにより、データをプルするのに必要な帯域幅が減少します。この呼び出しからの結果には、次の20行を要求するのに役立つnext_offsetキーが含まれています。 ただし、クエリに基づいてすべてのBeanを取得するには、制限とオフセットを-1に設定できます。

'get_entry_list'の実装はservice/core/SugarWebServiceImpl.php:162にあります。これは、data/SugarBean.php:3482にあるprocess_list_queryメソッドを使用します。これはSuiteCRMのすべてのモジュールがSugarBeans(モデル)のリストを取得するために使用されます。

process_list_query($query, $row_offset, $limit = -1, $max_per_page = -1, $where = '')サービス/コア/ SugarWebServiceImpl.phpで

:201あなたが-1

+0

渡す時に、オフセット= 0を決定し、チェックがあり、20〜に何かをする方法はありますそのGUI設定を邪魔することなく "すべて"? – 010110110101

+0

私は気づいていません。考え方は、1ページあたりのレコード数を設定して、各ページのオフセットを要求することです。例えば20 /ページ。オフセットは、たとえば、1,21,41などの範囲から開始されます(0から20の間でも構いません)。また、残りの/ soapはSuiteCRM内のGUIには影響しません。合計レコードは、各通話中の返品です。 –

関連する問題