0

したがって、2 つのカスタム モジュールがあります。それらは一対多で関連しています。モジュール A vardef には:`'lm_contacts' =>

array(
  'name' => 'lm_contacts',
  'type' => 'link',
  'relationship' => 'lm_contacts_relation',
  'source' => 'non-db',
  'vname' => 'LBL_LEADS',
),

'relationships' => 
array (
        'lm_contacts_relation' => 
        array (
            'lhs_module' => 'LM_LM_Objektas',
            'lhs_table' => 'lm_lm_objektas',
            'lhs_key' => 'id',
            'rhs_module' => 'LM_LM_contact_person',
            'rhs_table' => 'lm_lm_contact_person',
            'rhs_key' => 'lm_object ',
            'relationship_type' => 'one-to-many',
          ),
      ),

モジュール a には subpaneldef があります。

$layout_defs['LM_LM_Objektas'] = array(
// list of what Subpanels to show in the DetailView
    'subpanel_setup' => 
    array(
        'lm_contacts' => 
        array(
            'order' => 10,
            'module' => 'LM_LM_contact_person',
            'subpanel_name' => 'default',
            'sort_order' => 'asc',
            //'sort_by' => 'id',
            'title_key' => 'LBL_CONTACT_SUBPANEL_TITLE',
            'get_subpanel_data' => 'lm_contacts',
            'add_subpanel_data' => 'lm_contacts_id',
            'top_buttons' => 
            array (
                0 => 
                array (
                    'widget_class' => 'SubPanelTopButtonQuickCreate',
                ),
                1 => 
                array (
                    'widget_class' => 'SubPanelTopSelectButton',
                    'mode' => 'MultiSelect',
                    'popup_module' => 'LM_LM_contact_person',
                ),
            ),
        ),
),
);

モジュール a: lm_objectas はサブパネルを正しく表示しますが、サブパネルのクイック作成ボタンを使用して lm_contacts モジュールに新しい要求を追加しようとすると、レコードは作成されますが、フィールド " 'rhs_key' => 'lm_object' " の実際のデータは作成されません。当然、サブパネルの新しいレコードは表示されません。私は何が欠けていますか?ありがとう!

4

1 に答える 1

0

返信が遅れて申し訳ありませんが、説明できます:

あなたは何も悪いことをしていません、これは私がSugarで発見したバグです...

クイック作成から作成されたレコードが現在のアクティブレコードに関連している理由は、クイック作成ボタンには、サブパネルモジュールがその関係に使用するフィールドにマップされた現在のレコードのIDを持つ非表示のフォームがあるためです。ただし、カスタムモジュールを作成する場合、クイック作成では、関連フィールドが「moduleA_moduleB_id」であると想定します。これは、Sugarのストックモジュール用です。ただし、Sugarでカスタムモジュールを作成すると、25文字を超えないように(Beanおよびデータベース内の)すべてのリレーションシップフィールドが切り捨てられます。

簡単に言うと、クイック作成コードは、2つをリンクするフィールドが、ストックモジュールの関係と同じ規則を持つことを前提としています。これは間違っています。

コードを修正せずに(またはSugarのバグ修正を待たずに)これを回避する唯一の方法は、カスタムモジュールの名前が10文字未満であることを確認することです。これには、前面に配置するキーも含まれます(実際には5〜6文字のトップ)。

自分でインストールしたSugarのコードを更新し、バグを報告しました。次のアップデートで修正される可能性があります。

ストックインスタンスで修正する方法を説明しますが、それは問題をさらに混乱させるだけだと思います。ただし、これを修正する必要がある場合はお知らせください。実際のコードを投稿します。

于 2011-09-09T07:15:27.470 に答える