2017-02-20 62 views
0

我是新進suitecrm,我想補充CampaignsProducts添加子面板one2many場suitecrm

subpanel形式之間的關係one2many,據我知道,我應該修改

suitecrm/modules/Campaigns/metadata/subpaneldefs.php 

文件,但我不明白這些關係,我應該以一個例子。

有人可以讓我在這個正確的方向嗎?

+1

我相信你可以在Studio>廣告系列>關係通過增加一對多產品做到這一點相當容易 - > Campaings。您可能需要編輯一些屏幕來定義哪些產品屬於競選活動,或者在創建/編輯活動時選擇產品。不過,應該是可行的。聽起來你可能正在尋找多對多的關係(許多產品屬於許多廣告系列) - 否則一個廣告系列只能有一個產品,但也許你打算這麼做。 –

+0

嗨雅各布,如果我嘗試從廣告系列 - >產品,我只能添加一對一,我不知道周圍的其他方式,必須嘗試 – NeoVe

+0

是的,但它不能解決我的問題,我需要這從廣告系列到 - >產品和廣告系列 - >活動 – NeoVe

回答

1

你好,我根據SugarCRM的回答這個問題,你必須在同一suitcrm做到這一點。

我檢查有在運動模塊僅一對一的關係。

所以,儘量創建自定義子面板枝條一對多關係

1.創建一個新的連接類

這應該進入自定義/模塊// 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對象,其詳細信息記錄在這裏。你基本上需要做的是擴展這個查詢與你想添加的任何連接/過濾器。這是在我指定的內部連接中完成的。

注:內部聯接可以變得很複雜,所以如果你想有一個真正的工作示例,結賬模塊/電子郵件/ 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 "; 
    } 

2.爲link字段添加一個新的vardef條目。

在這個例子中,我要創建聯繫人模塊上的自定義鏈接。所以這個代碼放在定製/擴展/模塊/聯繫人/分機/ 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' => '', 
); 

3.添加新的鏈接作爲子面板

This goes under 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', 
), 
); 

4.添加標籤

Under custom/Extension/modules/Contacts/Ext/Language/en_us.new_link.php 

<?php 
$mod_strings['LBL_ACTIVE_OTHER_INVITES'] = 'Your New Link'; 

5.快速修復和重建

這應該有希望讓你開始。在你調試你的查詢的同時,留意Sugarlogs。我還發現使用xdebug和SugarQueries的compileSql函數在計算我需要做的INNER JOIN語句時非常寶貴。

This is the refrence Link

+0

嗨,非常感謝,是的,我會從現在開始尋找sugarcrm文檔! – NeoVe