0
1

Delete article

Deleted articles cannot be recovered.

Draft of this article would be also deleted.

Are you sure you want to delete this article?

More than 3 years have passed since last update.

SuiteCRMにカスタムバリデーションを入れる

Posted at

SuiteCRMは日本ではあまり使われていないんですかね。
情報が少なくて英語で頑張って調べています。

SuiteCRMとは

SugarCRMをベースにしたOSSのSFA/CRMシステムなのですが、とても多機能でWebデータベースとして使えそうだと感じています。
SugarCRMがOSS提供を辞めたためにSuiteCRMに引き継がれたようです。

一般的なデータベースにおけるテーブルに当たるのが"モジュール"です。
自身で数値やテキストフィールドをぽちぽち追加していくことでモジュールを作成できます。
モジュールが完成すると、半自動でモジュールに対するCRUDの画面を作成してくれるので便利です。

モジュールにはREST APIでアクセスも可能なので、参照画面を別に作成すればある程度のことはできるのではと思っています。

カスタムバリデーションを入れる

自動でCRUD画面を作ってくれるのは嬉しいんですが、登録時にカスタムでバリデーションをかけたいことがあります。
例えば、氏名登録欄で姓名の間にスペースを入れて欲しいとか。
jQueryでのチェックロジックを独自に作成して対応したのでその方法を備忘録として残しておきます。

editviewdefs.phpの編集

modules/[モジュール名]/metadata/editviewdefs.phpを編集します。
バリデーションロジックを記述するjavascriptファイルの場所を指定します。

editviewdef.php
array (
  'EditView' =>
  array (
    'templateMeta' =>
    array (
      'includes'=>array(
        array(
          'file'=>'modules/[モジュール名]/validate.js'
        )
      ),
・・・

'includes'の部分を追加してください。

validate.jsの編集

editviewdef.phpに記述した場所にバリデーションファイルを作成します。
今回はmodules/[モジュール名]にvalidate.jsというファイル名で作成しました。

validate.js
$(document).ready(function(){
  $('input[name="name"]').blur(all_check);
});
function all_check(){
    result = true;

    // 氏名
    var student_name = $('input[name="name"]').val().trim();
    $('input[name="name"]').val(student_name);
    if(student_name.length > 0 && student_name.indexOf(' ') < 0){
      alert('氏名は、姓と名の間にスペースを入れてください');
      all_check =false;
    }

    $('input[id="SAVE"]')[0].disabled = !result;
    $('input[id="SAVE"]')[1].disabled = !result;
}

nameフィールドの入力を終えた際にall_check()に記述したチェックが走るようにしています。
チェックが通らない場合はSAVEボタンをクリックできないようにします。

このjsファイルは画面読み込み途中でincludeされるので、イベントへの設定はdocument.ready内で呼び出しています。

まとめ

色々調べるとバリデーションの方法は色々あるようです。
例えば

  • SAVEボタンをクリックした時に呼び出す関数を上書きする
  • addToValidateまたはaddToValidateCallback関数を読み込む
  • customViewEditクラスを作成する

どれもちょっと上手くいかなかった&修正が複雑だったので、上記に記載した方法で対応しました。

あと、モジュールをビルドし直すとmetadataなどが上書きされる可能性もあるのでバックアップは取っておいた方がいいです。
私はSuiteCRM全体をGitHubで管理しています。

0
1
0

Register as a new user and use Qiita more conveniently

  1. You get articles that match your needs
  2. You can efficiently read back useful information
  3. You can use dark theme
What you can do with signing up
0
1

Delete article

Deleted articles cannot be recovered.

Draft of this article would be also deleted.

Are you sure you want to delete this article?