【问题标题】:Using the SuiteCRM/SugarCRM REST endpoint version 4.1使用 SuiteCRM/SugarCRM REST 端点版本 4.1
【发布时间】:2016-08-12 14:53:35
【问题描述】:

我在尝试让 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

行为很奇怪。我只想要所有的领域,我希望它尊重跳过和采取。如果我以任一顺序注释掉一行而不是另一行,它就不会起作用。我该如何解决这个问题?

【问题讨论】:

    标签: php python sugarcrm suitecrm


    【解决方案1】:

    限制 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 时偏移 = 0

    【讨论】:

    • 有没有办法在 20 到“一切”之间做一些事情而不会弄乱那个 GUI 设置?
    • 我不知道。这个想法是您设置每页的记录数,然后请求每页的偏移量。例如 20 个/页。偏移量是范围的起点,例如 1、21、41(可能是 0 20 40,我记不得了)。此外,rest/soap 不会影响 SuiteCRM 内部的 GUI。每次调用都会返回总记录。
    猜你喜欢
    • 2017-03-26
    • 1970-01-01
    • 2023-03-07
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2018-11-17
    相关资源
    最近更新 更多