2

私は SugarCRM を初めて使用します。関連フィールドから連絡先を選択すると、その連絡先の「アカウント名」が自動的にフィールドに追加されるように、ミーティング モジュールに「アカウント名」という名前のカスタム フィールドを作成しました。

これが私のコードです:

$hook_array['after_retrieve'] = Array(); 
$hook_array['after_retrieve'][] = Array(1, 'Add custom account', 
    'custom/modules/Meetings/AddAccount.php','AddAccount', 'addAcc');

ロジックフック:

class AddAccount
{
    public function addAcc(&$bean, $event, $arguments)
    {
        global $current_user;
        global $db;

        echo "<pre>";
        $meeting_id = $_REQUEST['record'];
        $query = "SELECT *  FROM `meetings_contacts` WHERE `meeting_id` LIKE '$meeting_id'";
        $result = $bean->db->query($query, true, " Error filling in additional detail fields: ");

        if ($bean->db->getRowCount($result) > 0) {
            while ($row = $bean->db->fetchByAssoc($result)) {
                $contact_id = $row['contact_id'];
            }
            if (isset($contact_id)) {
                $query1 = "SELECT *  FROM `accounts_contacts` WHERE `contact_id` LIKE '$contact_id'";
                $result1 = $bean->db->query($query1, true, " Error filling in additional detail fields: ");

                while ($row1 = $bean->db->fetchByAssoc($result1)) {
                    $account_id = $row1['account_id'];
                }

                $query2 = "SELECT *  FROM `accounts` WHERE `id` LIKE '$account_id'";
                $result2 = $bean->db->query($query2, true, " Error filling in additional detail fields: ");

                while ($row2 = $bean->db->fetchByAssoc($result2)) {
                    $account_name = $row2['name'];
                }

                $update_custom_account = "UPDATE `meetings_cstm` SET `accountname_c` = '$account_name' WHERE `meetings_cstm`.`id_c` = '$meeting_id';";
                $Change = $bean->db->query($update_custom_account);
            }
        }
    }
}

問題は、フィールドが追加されているが、ListView の「i」が機能しなくなったことです。この長いクエリよりも簡単な方法はありますか?

前もって感謝します。

4

1 に答える 1

3

これは、上記を行うためのより良い方法です。

custom/modules/Meetings/logic_hooks.php

// position, file, function
$hook_array['after_retrieve'] = Array();
$hook_array['after_retrieve'][] = Array(1, 'Add custom account', 'custom/modules/Meetings/AddAccount.php', 'AddAccount', 'getAccountName');
$hook_array['after_save'] = Array();
$hook_array['after_save'][] = Array(1, 'Add custom account', 'custom/modules/Meetings/AddAccount.php', 'AddAccount', 'getAccountName');

カスタム/モジュール/ミーティング/AddAccount.php

class AddAccount {

    public function getAccountName(&$bean, $event, $arguments) {

       if ($bean->parent_type == 'Contacts') {
            $contact = BeanFactory::getBean('Contacts', $bean->parent_id);
            $contact->load_relationship('accounts_contacts');
            
            $account = BeanFactory::getBean('Accounts', $contact->account_id);
            $bean->account_name_c = $account->name;
        }
    }
}

このように、SQL ではなく Bean を使用しています。

編集:

新しいフィールドを追加するには、このファイルを作成できます…</p>

custom/Extension/modules/Meetings/Ext/Vardefs/account_name_c.php

<?php
    $dictionary['Meeting']['fields']['account_name_c'] =
        array (
            'name' => 'account_name_c',
            'vname' => 'LBL_ACCOUNT_NAME_C',
            'type' => 'varchar',
            'len' => '255',
            'unified_search' => true,
            'comment' => 'Account name for meeting',
            'studio' => 'true',
        );

次に、修復/再構築の後、[Studio] > [ミーティング] > [レイアウト] > [ListView] に移動し、新しいフィールドを [非表示] から [デフォルト] にドラッグ アンド ドロップします。[保存して展開] ボタンを選択し、会議記録を保存すると、リスト ビューにアカウント名が表示されます。

于 2013-02-27T20:19:49.497 に答える