我正在努力让REST API运行起来。是的,代码是Python,但如果您了解PHP或其他任何内容,我怀疑您将能够提供帮助。
我写了两个函数。 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
时,它确实会跳过并接受。所以,我可以继续使用功能来获取所有记录。但是,返回的对象只有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 :(得分:0)
限制20个结果的原因是因为它限制了SuiteCRM的列表视图,并且列表视图针对性能问题进行了分页。
通常,您需要分页。你真的应该只浏览你需要的字段,因为这会减少拉动数据所需的带宽。此调用返回的结果包含next_offset键,以帮助请求接下来的20行。 但是,您可以将限制和偏移设置为-1,以便根据您的查询获取所有bean。
'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 = ''
)
在service / core / SugarWebServiceImpl.php:201中有一个检查,当你传入-1时确定offset = 0