报价,合同,发票和事件模块不存在安全组子面板

时间:2016-10-12 09:10:26

标签: sugarcrm suitecrm

我使用的是suiteCRM 7.7.4(Sugar Version 6.5.24),我需要在引号,合同,发票和事件模块中使用安全组子面板,但由于某些原因我找不到它!我做了一些研究,我发现默认情况下这个子面板不会出现在自定义模块中。一些开发人员建议不要使用工作室来构建这种关系,因为它只是不起作用!对于付费版本的sugarCRM,他们说有一个叫做“连接工具”的工具可以为你创建关系......但是当我使用的是免费版本时,我无法使用它!

你有什么想法吗?

非常感谢!

2 个答案:

答案 0 :(得分:3)

我最终找到了解决方案:

将这几行添加到" modules / AOS_Contracts / metadata / subpaneldefs.php" :

'securitygroups' => array(
        'top_buttons' => array(array('widget_class' => 'SubPanelTopSelectButton', 'popup_module' => 'SecurityGroups', 'mode' => 'MultiSelect'),),
        'order' => 900,
        'sort_by' => 'name',
        'sort_order' => 'asc',
        'module' => 'SecurityGroups',
        'refresh_page' => 1,
        'subpanel_name' => 'default',
        'get_subpanel_data' => 'SecurityGroups',
        'add_subpanel_data' => 'securitygroup_id',
        'title_key' => 'LBL_SECURITYGROUPS_SUBPANEL_TITLE',
    ),
  • QRR
  • 验证权限。

答案 1 :(得分:0)

遵循以下步骤:

1。转到Admin
2。转到studio
3。选择您想要subpanel "invoices"的{​​{1}}的模块 4。转到relationship
5. Security group模块添加1对多的关系。
6。现在修复重建,您会在invoice模块中找到子地址。

当您与任何模块建立1对多的关系时,它将创建子面板。

如果它无效,请转到自定义子面板。

Refer this linnk I put code from same link it worked for me

本教程应该有助于您使用自定义链接类在Sugar中的Contacts模块下创建一个新的子面板,并由SugarCRM 7的新SugarQuery API驱动。

  1. 创建新的链接类
  2. 这应该进入custom/modules/<YourModule>/YourNewLink.php,这个类将充当自定义功能,将在两个记录之间建立链接。

    <?php
    
    /**
     * Custom filtered link
     */
    class YourNewLink extends Link2
    {
        /**
         * DB
         *
         * @var DBManager
         */
        protected $db;
    
        public function __construct($linkName, $bean, $linkDef = false)
        {
            $this->focus = $bean;
            $this->name = $linkName;
            $this->db = DBManagerFactory::getInstance();
            if (empty($linkDef)) {
                $this->def = $bean->field_defs[$linkName];
            } else {
                $this->def = $linkDef;
            }
        }
    
        /**
         * Returns false if no relationship was found for this link
         *
         * @return bool
         */
        public function loadedSuccesfully()
        {
            // this link always loads successfully
            return true;
        }
    
        /**
         * @see Link2::getRelatedModuleName()
         */
        public function getRelatedModuleName()
        {
            return '<Your_Module>';
        }
    
        /**
         *
         * @see Link2::buildJoinSugarQuery()
         */
        public function buildJoinSugarQuery($sugar_query, $options = array())
        {
            $joinParams = array('joinType' => isset($options['joinType']) ? $options['joinType'] : 'INNER');
            $jta = 'active_other_invites';
            if (!empty($options['joinTableAlias'])) {
                $jta = $joinParams['alias'] = $options['joinTableAlias'];
            }
    
            $sugar_query->joinRaw($this->getCustomJoin($options), $joinParams);
            return $sugar_query->join[$jta];
        }
    
        /**
         * Builds main join subpanel
         * @param string $params
         * @return string JOIN clause
         */
        protected function getCustomJoin($params = array())
        {
            $bean_id = $this->db->quoted($this->focus->id);
            $sql = " INNER JOIN(";
            $sql .= "SELECT id FROM accounts WHERE id={$bean_id}"; // This is essentially a select statement that will return a set of ids that you can match with the existing sugar_query
            $sql .= ") accounts_result ON accounts_result.id = sugar_query_table.id";
            return $sql;
        }
    }
    

    参数$sugar_query是一个新的SugarQuery object,其详细信息请在此处记录。您基本上需要做的是使用您要添加的任何连接/过滤器扩展此查询。这是在我指定的内部联接中完成的。

    注意:内部联接可能变得非常复杂,因此如果您想要一个真实的工作示例,请检查modules/Emails/ArchivedEmailsLink.php以及核心糖团队如何使用它。但我可以确认这适用于自定义连接。

    以下是getEmailsJoin,可帮助您了解通过此自定义联接实际生成的内容。

     /**
       * Builds main join for archived emails
       * @param string $params
       * @return string JOIN clause
       */
      protected function getEmailsJoin($params = array())
      {
          $bean_id = $this->db->quoted($this->focus->id);
          if (!empty($params['join_table_alias'])) {
              $table_name = $params['join_table_alias'];
          } else {
              $table_name = 'emails';
          }
    
          return "INNER JOIN (\n".
                  // directly assigned emails
              "select eb.email_id, 'direct' source FROM emails_beans eb where eb.bean_module = '{$this->focus->module_dir}'
                  AND eb.bean_id = $bean_id AND eb.deleted=0\n" .
    " UNION ".
          // Related by directly by email
              "select DISTINCT eear.email_id, 'relate' source  from emails_email_addr_rel eear INNER JOIN email_addr_bean_rel eabr
              ON eabr.bean_id = $bean_id AND eabr.bean_module = '{$this->focus->module_dir}' AND
              eabr.email_address_id = eear.email_address_id and eabr.deleted=0 where eear.deleted=0\n" .
               ") email_ids ON $table_name.id=email_ids.email_id ";
      }
    
    1. 为链接字段添加新的vardef条目。
    2. 对于此示例,我将在联系人模块上创建自定义链接。因此,此代码位于custom/Extension/modules/Contacts/Ext/Vardefs/your_field_name.php

      <?php
      $dictionary["Contact"]["fields"]["your_field_name"] = array(
          'name' => 'active_other_invites',
          'type' => 'link',
          'link_file' => 'custom/modules/<YourModule>/YourNewLink.php',
          'link_class' => 'YourNewLink',
          'source' => 'non-db',
          'vname' => 'LBL_NEW_LINK',
          'module' => '<YourModule>',
          'link_type' => 'many',
          'relationship' => '',
      );
      
      1. 将新链接添加为子面板
      2. 这属于custom/Extension/modules/Contacts/Ext/clients/base/layouts/subpanels/your_subpanel_name.php

        <?php
        $viewdefs['Contacts']['base']['layout']['subpanels']['components'][] = array (
          'layout' => 'subpanel',
          'label' => 'LBL_NEW_LINK',
          'context' =>
          array (
            'link' => 'your_field_name',
          ),
        );
        
        1. 添加标签
        2. custom/Extension/modules/Contacts/Ext/Language/en_us.new_link.php
          
          <?php
          $mod_strings['LBL_ACTIVE_OTHER_INVITES'] = 'Your New Link';
          
          1. 快速修复和重建
          2. 这应该有希望让你开始。在调试查询时,请密切关注糖测量。我还发现使用xdebug和SugarQueries compileSql函数非常有价值,可以搞清楚我需要做些什么来获得有效的INNER JOIN语句。

            我发现这是一个非常强大的解决方案,这意味着如果您需要显示与可能有几个连接的模块相关的信息,这可以让您手动创建链接而无需创建两者之间毫无意义的相关领域。