3

SugarCRM(SugarPro 6.1.2)インスタンスのEditViewのカスタムフィールド(チェックボックス)の動作を変更しようとしています。具体的には、誰かがチェックボックスをクリックするたびにdivを表示したいと思います。このフィールドは期待どおりに編集ビューに表示され、onclickを実行するJavaScriptを追加しました。これも問題なく機能します。問題は、レコードが保存されるときに、チェックボックスの値が保存されないことです。フィールドを追加し、JavaScriptを関連付ける方法の詳細は次のとおりです。

  1. Studioでチェックボックスとしてフィールドを作成しました。それはwire_payment_cと呼ばれます
  2. このフィールドをDetailViewおよびEditViewレイアウトに追加しました。
  3. Quick Repair&Rebuildを実行しました
  4. ./custom/modules/MODULE/metadata/editviewdefs.phpを次のように編集しました。

      1 => 
    array (
      0 => '',
      1 => 
      array (
        'name' => 'wire_payment_c',
        'label' => 'LBL_WIRE_PAYMENT',
     'customCode' => '<input type="hidden" value="0" name="wire_payment_c">    
     <input id="wire_payment_c" type="checkbox" tabindex="107" title="" value="{$fields.wire_payment_c.value}" name="wire_payment_c" onclick="showMe(\'wire_message\', this)"> 
     <div id="wire_message" style="display:none">Please obtain wire payment information.</div>' ,
      ),
    ),
    

また、パネル定義のすぐ下に、以下も追加しました。

'includes'=> array(
     array('file'=>'custom/modules/MODULE/wire_pmt.js' ),
 ),
  1. ./custom/modules/MODULE/wire_pmt.jsにshowMe()を含むJavaScriptを作成しました。
  2. クイックリペア&リビルドを再度実行しました

editviewdefs.phpのcustomCode行を削除した場合、チェックボックスの値が期待どおりにデータベースに保存および保持されていることを確認できました。さらに、onclickディレクティブを削除し、customCodeに割り当てられた値に入力タグを残すだけで問題を再現できることを確認できます。結果として、この問題はjavascriptとは何の関係もないようです。これは、入力タグを再レンダリングする方法に関するものです。しかし、入力タグ用に配置したコードは、customCodeを完全にコメントアウトして、FireBugを介してフォームを表示したときに表示されるものとまったく同じように見えます。

このような状況で、Sugarにカスタムフィールドの値をデータベースに保存させ、保存した値をロード時に詳細ビューと編集ビューに表示させるために、他に何かしなければならないことはありますか?このプロセスに関するドキュメントを読んでうれしいですが、この特定の種類のタスクに当てはまると思われるものを見つけることができませんでした。

どうもありがとうございます!

4

1 に答える 1

2

問題を調査したところ、チェックボックスがオンになっているかどうかを判断する方法に問題があることがわかりました。これは、フォームの送信方法に影響を与えています。

現在使用している:value="{$fields.wire_payment_c.value}"

属性値はデフォルトで1です。チェックボックスが属性で指定されているtrueかどうかの決定要因。falsechecked

属性customCodeは次のようになります。

'customCode' => '<input type="hidden" value="0" name="wire_payment_c">{if $fields.wire_payment_c.value == "1"}{assign var="isChecked" value="CHECKED"}{else}{assign var="isChecked" value=""}{/if}<input type="checkbox" id="wire_payment_c" name="wire_payment_c" value="1" title="" tabindex="107" onclick="showMe(\'wire_message\', this)" {$isChecked}><div id="wire_message" style="display:none">Please obtain wire payment information.</div>',

コア製品でこれをどのように処理するかについては、 をご覧くださいinclude/SugarFields/Fields/Bool/EditView.tpl

敬具、ジェリー・クラーク

開発者サポート エンジニア

于 2012-08-28T16:31:46.853 に答える