使用SuiteCRM / SugarCRM REST端点版本4.1

时间:2016-08-12 14:53:36

标签: php python sugarcrm suitecrm

我正在努力让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_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

这种行为很奇怪。我只想要所有的领域,我希望它能够荣幸地跳过并接受。如果我按任意顺序注释掉一行而不是另一行,它就不会表现出来。我该如何解决这个问题?

1 个答案:

答案 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