﻿id	summary	reporter	owner	description	type	status	priority	milestone	component	version	resolution	keywords	cc
606	[DocFlow] 入力に対するバリデーション・ルールの設定	yasunaka		"入力値が想定された値かどうかを検証（バリデーション）ルールをJavaScriptで記述出来るようになりました。JavaScript内では属性キーワードの値や、他の入力データの値などを参照して検証することができます。

== 仕様
* 更新前にバリデーションを実行出来るようにし、バリデーションでエラーがある場合には更新しない。
* バリデーション結果はログとして出力するのと同時に、ソースのドキュメントにコメントを埋め込む形でテンポラリファイルを生成して、どの項目で発生しているのかが分かるようにする。(⇒フィードバックファイル)
== バリデーションルール
* バリデーションルールはJavaScriptで記述する。
* 入力の各項目はitem('項目名')でアクセスする。
 * なお _$source$_.item('項目名') でも結果は同じ。
* ルールの表記方式
{{{
  validateEquals('ソースの項目名', 'コメント', オブジェクト);
  validateNotEquals('ソースの項目名', 'コメント', オブジェクト);
  validateNotNull('ソースの項目名', 'コメント');
  validateNotNull('ソースの項目名', 'コメント', オブジェクト);
  validateNull('ソースの項目名', 'コメント');
  validateNull('ソースの項目名', 'コメント', オブジェクト);
  validateTrue('ソースの項目名"", 'コメント');
  validateTrue('ソースの項目名"", 'コメント', boolean);
  validateFalse('ソースの項目名', 'コメント');
  validateFalse('ソースの項目名', 'コメント', boolean);
  validateEmpty('ソースの項目名', 'コメント');
  validateEmpty('ソースの項目名', 'コメント', String);
  validateNotEmpty('ソースの項目名', 'コメント');
  validateNotEmpty('ソースの項目名', 'コメント', String);
  ...
}}}
 例)
{{{
  validateNotNull('顧客名', '顧客名が入力されていません。');
}}}
* 他の表形式の入力の項目を参照する場合、lookup()関数を利用する。
 * lookup()の結果は入力をキー項目の値で限定した1レコードが返る。
 * 返ってきたレコードから項目の値を参照するには item('項目名') を用いる。
{{{
  let rec1 = lookup('入力名', 'キー項目', 'キー項目の値');
  console.log(rec1.item('項目名'));
  ...
}}}
* 他のテキスト形式の入力の項目を参照する場合、source()関数を利用する。
 * source()の結果はドキュメント全体を1つの変数に入れて返す。
 * 返ってきた変数から特定の部品のテキストを参照するには item('部品名') を用いる。
{{{
  let doc1 = source('入力名');
  console.log(doc1.item('部品名'));
  ...
}}}
* 属性キーワードはグローバル変数として参照する。
 * 属性キーワードはJavaScriptの変数名として利用できるように正規化(normalize)される。正規化(normalize)のルールは以下の通り。
  * 禁足文字を_に置き換える。
{{{
  ( ) （ ）
}}}
  * 先頭が数字の場合、その前に_を付ける。
  * 予約語と被る場合、その前に_を付ける。"	enhancement	new	major	ver 2.1.2	crossnote	ver 2.1.2			
