首页 > 解决方案 > suiteCRM 错误 40 中的 JOIN 子查询,("name":"Access Denied","number":40,"description":"You do not have access")

问题描述

使用与sugarCRM 连接的suiteCRM 查询,我需要检索具有特定用户和客户ID 的所有机会,因为客户ID (account_id) 不可查询(至少直接)。

所以这意味着我不能使用这样的语法:

 session: await CRMAuth.getSession(),
  modules: CRM_MODULES.OPPORTUNITY,
  query: `assigned_user_id = '${uid}' AND account_id = '${client_id}'`,
  order_by: 'date_modified DESC',
  offset: 0,
  select_fields: [
    'id',
    'name',
  ],
  link_name_to_fields_array: [],
  max_results: 100,
  deleted: false,

但相反,我应该有这样的查询:

  session: await CRMAuth.getSession(),
  modules: CRM_MODULES.OPPORTUNITY,
  query: `opportunities.assigned_user_id = '${uid}' AND opportunities.id IN (
          SELECT opportunity_id FROM accounts_opportunities r
          JOIN accounts a ON (r.account_id = a.id)
          WHERE a.id = '${account_id}'
          AND r.deleted=0 and a.deleted=0)`,
  order_by: 'date_modified DESC',
  offset: 0,
  select_fields: [
     'id',
     'name',
  ],
  link_name_to_fields_array: [],

max_results:100,删除:假,

我尝试了不同的变体,比如模块/表名称中的大写,并在“r”、“a”之前添加 AS(甚至我用全名替换了它们)。我也尝试过更简单的查询,但我仍然遇到同样的错误。

还要查看类似的问题,我可以保证这不是会话问题,而是语法问题。

标签: javascriptsugarcrmsuitecrm

解决方案


我的两个错误是:

  • 将模块倒置
  • 使用 get_entry_list 方法而不是 get_relationships(此方法要求不同的参数)

获取关系

所以我最终得到了这个结构

let response = await CRM(CRM_METHODS.GET_RELATIONSHIPS, {
  session: await CRMAuth.getSession(),
  module_name: CRM_MODULES.ACCOUNTS,
  module_id: '${client_id}',
  link_field_name: `opportunities`,
  related_module_query:`opportunities.assigned_user_id = '${uid}'`,
  related_fields: [*the fields i want*],
  related_module_link_name_to_fields_array:[],
  deleted: 0,
});

请注意:模块(机会、帐户等)没有 id,“module_id”字段是您正在使用的 RECORD 的 id,在我的情况下是我的客户的 id。

这给我带来了特定用户为特定客户创造的所有机会


推荐阅读