Cybozu developer networkのTipsのURL:https://developer.cybozu.io/hc/ja/articles/202341954
ドロップダウンフィールドの選択によって、別のフィールドの値を変更したり、編集不可にしたい場合ってありますよね!Customineなら簡単に実現できます!
今回はそれに加えて、自動採番や期間チェック等様々な機能で旅費精算申請アプリをはるかに便利にするカスタマイズをご紹介します。
Customineの基本的な事柄は、こちらの「はじめてのカスタマイズ」をご参照ください。
今回のカスタマイズで出来ること
- ドロップダウンフィールドの選択を変更すると別フィールドに値を入力する。
- ドロップダウンフィールドの選択を変更すると別フィールドを編集不可にする。
- 終了日が入力されていて、開始日が入力されていないとエラーが表示される。
- 終了日が開始日より前だとエラーが表示される。
- 明細の日付が開始日と終了日の間にないと保存するときにエラーが表示される。
- 新規レコード作成時に自動採番する。
- レコード編集画面でスペースに文字を配置する。(リンク付き)
- レコード詳細画面でフィールドの文字を拡大する。
- レコード詳細画面のメニュー部分にボタンを設置する。
これだけやります!
アプリのフォーム
アプリはkintone アプリストア の「旅費精算申請」を使います。ただし、機能実現のために2つだけフィールドを増やします!
アプリの一番下に以下の2つのフィールドを追加します。
旅費行数:数値
経費行数:数値
1. ドロップダウンフィールドの選択によって別のフィールドに値を入れる・別のフィールドを編集不可にする。
目標とする動き
ドロップダウンフィールド「地域」の選択を変更した時、
「地域」フィールドが…
- 「首都圏」なら、「日当」フィールドを0にして編集不可にする。
- 「海外」なら、「日当」フィールドを3000にして編集不可にする。
- 「その他」なら、「日当」フィールドをクリアして編集可にする。
- それ以外なら、「日当」フィールドを1000にして、編集不可にする。
レコード追加画面・編集画面を表示した時、
「地域」フィールドが「その他」以外なら編集不可にする。
Customineの設定
まずは、
- 「地域」フィールドを「首都圏」に変更した時、「日当」フィールドを0にして編集不可にする。
この部分を設定してみましょう!
条件の設定
「フィールドの値を編集して値が変わった時」を使います。さらに、「フィールド値が特定の値ならば」で「首都圏」に限定しましょう。連続で行いたい処理がある場合は「他のアクションの実行が完了した時」と使います。
やることの設定
「フィールドを無効化する」で「日当」フィールドを編集不可にし、「フィールドに値をセットする」で「日当」フィールドに値を入力します。この二つはどちらが先でも大丈夫です!
この調子で「地域」が他の値になったときの処理も設定してみましょう!
編集不可になっているフィールドを編集可にするには、「フィールドを有効化する」を使います。フィールドを空にするには「フィールド値をクリアする」を使います。
できましたか?
ただし、これだけでは、レコード追加・編集画面を表示してから「地域」の値を変更するまで、「日当」の編集不可が反映されません。そこで、条件「追加画面・編集画面を表示した時」を使って解決しましょう。
設定が完了したら、「kintoneアプリへ登録」し、動作を確認してみましょう!
2. 終了日が入力されていて、開始日が入力されていない場合や、終了日が開始日より前の場合、エラーが表示される。
目標とする動き
日付フィールド「期間(出発)」「期間(帰着)」が変更された時、
- 「期間(出発)」が空で「期間(帰着)」が空でない時、「期間(出発)」にフィールドエラー「出発日を入力してください。」を表示する。
- 「期間(出発)」が空でない時、「期間(出発)」のフィールドエラーを消す。
- 「期間(出発)」も「期間(帰着)」も空の時、「期間(出発)」のフィールドエラーを消す。
- 「期間(帰着)」が「期間(出発)」より前の時、「期間(帰着)」にフィールドエラー「出発日より後に入力してください」を表示する。
- 「期間(帰着)」が「期間(出発)」より後、もしくは同じ時、「期間(帰着)」のフィールドエラーを消す。
Customineの設定
これもまず、
- 「期間(出発)」が空で「期間(帰着)」が空でないとき、「期間(出発)」にフィールドエラー「出発日を入力してください。」を表示する。
この部分だけを設定してみましょう。
条件の設定
これは先ほどと同様ですね!「フィールドの値を編集して値が変わった時」の対象となるフィールドを複数設定すると、その中のどれかの値が変わった時、になります。
やることの設定
「フィールドエラーを表示する」を使用します。
さて、エラーが表示されるようになりました。でもそれだけでなく、ちゃんと正しい値に直したらエラー表示は消してほしいですよね?
そこで、正しい値に直ったらフィールドエラーを消す処理を加えましょう。
条件の設定
「 『期間(出発)』が空で『期間(帰着)』が空でないとき」を満たさなくなるのは、
- 「期間(出発)」が空でない時
- 「期間(出発)」も「期間(帰着)」も空の時
なので、その二つにします。
やることの設定
「フィールドのエラーをクリアする」を使用します。
同様に、
- 「期間(帰着)」が「期間(出発)」より前の時、「期間(帰着)」にフィールドエラー「出発日より後に入力してください」を表示する。
- 「期間(帰着)」が「期間(出発)」より後、もしくは同じ時、「期間(帰着)」のフィールドエラーを消す。
この部分も設定してみてください。
設定が完了したら、「kintoneアプリへ登録」し、動作を確認してみましょう!
3. 明細の日付が開始日と終了日の間にないと保存するときにエラーが表示される。
目標とする動き
レコードを保存する時、
- 「旅費」テーブル内の「日付」フィールドに、「期間(出発)」と「期間(帰着)」の間でないものがあれば、エラーメッセージ「旅費日付が申請期間の範囲外です。」を表示し、レコードの保存をキャンセルする。
- 「経費」テーブル内の「日付」フィールドに、「期間(出発)」と「期間(帰着)」の間でないものがあれば、エラーメッセージ「経費日付が申請期間の範囲外です。」を表示し、レコードの保存をキャンセルする。
Customineの設定
「『日付』が『期間(出発)』と『期間(帰着)』の間でない」とは、つまり「日付」が「期間(出発)」より前、もしくは「期間(帰着)」より後のどちらかなので、その2パターンの時にエラーメッセージを出すようにしましょう。
まずは「日付」が「期間(出発)」より前の時のエラーメッセージです。
条件の設定
「フィールドが特定の値ならば」の対象をテーブルの中のフィールドに設定すると、テーブル内の条件を満たした行にのみ、やることを実行します。ここでは「旅費」テーブル内の「期間(出発)」より前の「日付」にのみ、フィールドエラーを表示します。
やることの設定
「フィールドエラーを表示する」に加えて「レコードにエラーをセットする」も実行します。「レコードにエラーをセットする」は保存する直前に実行すると画面上部にエラーメッセージを表示し、保存をキャンセルします。
「旅費」テーブルの「日付」と「経費」テーブルの「日付」を間違えないように設定しましょう!
次は「期間(帰着)」より後の時のエラーメッセージです。
「期間(帰着)」は空の場合もあり、その場合はエラーメッセージを出したくないので、条件を追加しています。
「経費」テーブルも同様に設定します。
設定が完了したら、「kintoneアプリへ登録」し、動作を確認してみましょう!
4. 新規レコード作成時に自動採番する。
目標とする動き
次の条件が全て満たされるときに「No」フィールドに自動で採番した値を入力する。
- レコードを新規作成し、保存するとき
- 「旅費」「経費」テーブルの日付が申請期間の範囲外のものがない
Customineの設定
2018/12/07現在では、「テーブル内の一列全てが条件を満たすとき」という条件が存在しないので少し特殊なやり方で判定します。
やること「テーブル行数をカウントする」と「テーブル中の条件に合う行数をカウントする」を使用します。
テーブル内の「日付」>=「期間(出発)」の行数と「日付」<=「期間(帰着)」の行数を数え、その二つがどちらもテーブルの行数と同じ場合のみ自動採番します。
それでは設定していきましょう。
まず、「旅費」テーブルの行数と条件に合う行数を数えます。
これらの計算結果を後で条件「フィールドが特定の値ならば」で比較したいので、比べる片方はどこかのフィールドに置いておく必要があります。
そこで、最初に追加しておいたフィールド「旅費行数」に「旅費」テーブルの行数を入力しておきます。
「経費」テーブルも同様です。
条件を判定する準備が整ったので、自動採番の設定に進みましょう!
自動採番の設定についてはこちらのTipsもご覧ください。
今回の採番の形式
2018年12月10日の場合
T181210-1、T181210-2、T181210-3、…
ただし、ハイフンの後の連番は通し番号で、日ごとにリセットされるわけではありません。
では設定してみましょう。今回はちょっと条件が多いですよ!
条件
今回も自動採番は最初にレコードを作成するときだけでいいので、「No」フィールドが空の時のみ実行されるようにしておきます。(「No」フィールドは後で編集不可の設定をします。)
さらに、「旅費」テーブルと「経費」テーブル両方で「日付」>=「期間(出発)」かつ「日付」<=「期間(帰着)」の条件を加えます。
やること
「自動採番を行う」を使用します。
前につける文字列は「=”T” & format(now(),"YYMMDD") & "-"」と入力します。format(now(),"YYMMDD")で現在の日付を指定の形式に変換しています。
今回は「情報ダイアログを表示する」を使用して、保存直前に採番された番号をダイアログに表示するようにしてみましょう。メッセージは「番号${$34}を登録します。」と入力します。${$34}はアクション番号34、つまり自動採番された番号を参照します。
これで「日付」>=「期間(出発)」かつ「日付」<=「期間(帰着)」の場合、自動採番されるようになりました。しかし、これだけでは、「期間(帰着)」が空の時は常に自動採番されなくなってしまいます。
そこで、「期間(帰着)」が空の時は「日付」<=「期間(帰着)」の判定無しに自動採番されるようにもう一つ自動採番アクションを作成しておきます。
これで自動採番アクションが2つになりました。その二つが連番を別々にカウントしてしまうんじゃないか?と思うかもしれませんが、ご心配なく!
入力する対象のフィールドが同じだと、同じカウントになります。
追加の設定
- ・「No」フィールドを編集不可にする。
- ・レコード再利用時に「No」フィールドを空にする。
- ・「旅費行数」「経費行数」フィールドは見せる必要がないので非表示にする。
その他の機能
スペースにリンクを表示する。
「スペースに文字を表示する」を使用します。表示するテキストは文字を装飾することができるほか、式やリンクを埋め込むことができます。
ボタンを配置する。
「ボタンをメニュー位置に配置する」は、アプリアクションボタンや、プロセス管理のアクションボタンの上にボタンを配置します。
設置したボタンは、条件「ボタンを押した時」を使って、押すと何が起こるかを設定することができます。
フィールドの文字を拡大縮小する。
「フィールドの文字を拡大縮小する」を使用します。
フィールドの文字を拡大することで強調したりすることができます。
「フィールド値が特定の値ならば」と組み合わせることで、一定の範囲を超えた値の場合のみ強調することもできます。
まとめ
これで「旅費精算申請」アプリがかなり便利になったのではないでしょうか!
これだけのことがすべてCustomineで出来てしまいます。
発想次第で使い方の幅はさらに広がります。
ぜひいろいろ試して新しい使い方を見つけてください!
もし分からないことがありましたら、フォーラムの方でご質問ください。