如何基于链接模块优化REST查询?

时间:2016-11-23 09:11:08

标签: sugarcrm suitecrm

我试图获取所有没有相关文档的帐户。

这就是我的想法:

$parameters = array(
            'session' => $this->getSessionId(),
            'module_name' => 'Accounts',
            'query' => "accounts.id NOT IN (SELECT DISTINCT account_id FROM documents_accounts)",
);

但当然它不起作用。我得到一个"访问被拒绝"错误(40)。

理想情况下,我希望通过查询没有给定类型的附加文档的帐户来进一步过滤。例如:

getAccountsWithout('contracts');
getAccountsWithout('quote1');
...

1 个答案:

答案 0 :(得分:0)

可能是您没有使用REST API正确进行身份验证。或者您没有正确提供方法调用所需的内容。

如果那不是问题。一种解决方案是创建service / v4_1的客户版本。这样您就可以添加自己的自定义调用。

这可以通过复制v4_1目录来实现,并为其命名,例如v4_1_1。

重命名以下内容:

  • SugarWebServiceImplv4_1.php到SugarWebServiceImplv4_1_1.php
  • SugarWebServiceUtilv4_1.php到SugarWebServiceImplv4_1_1.php

将班级签名更改为:

SugarWebServiceImplv4_1:

class SugarWebServiceImplv4_1_1 extends SugarWebServiceImplv4_1

SugarWebServiceImplv4_1:

class SugarWebServiceUtilv4_1_1 extends SugarWebServiceUtilv4_1

更改以下内容中的require / include路径:

  • registry.php rest.php
  • soap.php
  • SugarWebServiceImplv4_1_1.php
  • SugarWebServiceImplv4_1_1.php

以便他们现在指向4_1_1目录。

在SugarWebServiceImplv4_1_1.php中实现方法。

function get_without_documents($session, $module_name = 'accounts', $start = 1, $offset = 20) {

        $output_list = array();

        $db = DBManagerFactory::getInstance();

        // just for example
        $sql_query = "SELECT a.id FROM accounts a WHERE a.id NOT IN (SELECT DISTINCT account_id FROM documents_accounts)";

        $result = $db->limitQuery($sql_query, $start, $offset,false);

        while(($row = $db->fetchByAssoc($result)) != null){
          $output_list[] = $row['id'];
        }

        return array(
            'result_count'=> count($output_list),
            'next_offset' => $offset + $start,
            'entry_list' => $output_list,
        );
    }

最后注册方法及其在registry.php中的类型和引用网址,以便它使用v4_1_1。