2016-08-12 79 views
1

我正在嘗試讓REST API行爲不順利。是的,代碼是Python,但如果你知道PHP或其他任何東西,我懷疑你可以提供幫助。使用SuiteCRM/SugarCRM REST端點版本4.1

我寫了兩個函數。 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_fieldslink_name_to_fields_array,但這榮譽跳過走。所以,我可以繼續打功能獲取所有記錄。但是,返回的對象只有id,並且缺少所有其他字段。他們是這樣的:

{"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 

這種行爲很奇怪。我只想要所有的領域,我希望它能夠跳過並取得勝利。如果我按照任一順序註釋掉一行而不是另一行,它就不會表現出來。我該如何解決?

回答

0

限制20個結果的原因是因爲它限制了SuiteCRM的列表視圖,並且列表視圖出於性能考慮進行分頁。

通常情況下,您想分頁。你真的應該只是通過你需要的領域,因爲這減少了拉動數據所需的帶寬。此調用的結果包含next_offset鍵以幫助請求接下來的20行。 但是,您可以將限制和偏移量設置爲-1,以便根據查詢獲取所有bean。

'get_entry_list'的實現在service/core/SugarWebServiceImpl.php:162中。它利用data/SugarBean.php中的process_list_query方法:3482。它被SuiteCRM的所有模塊用來獲取SugarBeans(模型)的列表。

process_list_query($query, $row_offset, $limit = -1, $max_per_page = -1, $where = ''

在服務/核心/ SugarWebServiceImpl.php

:201有一個檢查,其確定所述偏移= 0時,在-1

+0

傳遞有一種方法做在20和介於兩者之間「一切」沒有搞亂那個GUI設置? – 010110110101

+0

不是我知道了。這個想法是,你設置每頁的記錄數,然後爲每個頁面請求偏移量。例如20 /頁。偏移量是從例如開始的範圍是1,21,41(它可能是0 20 40,我不記得心臟)。另外,其餘的/ soap不影響SuiteCRM內部的GUI。在每次通話期間,總記錄都會返回。 –