Share via


内部検証

インストール パッケージを作成の作成時に、MsiViewModify 関数または View.Modify メソッドを使用すると、入力したデータが構文的に正しいことを確認できます。 詳細については、Modify メソッドに関するページを参照してください。 最下位レベルでは、データベース テーブルの列には整数 (short または long)、文字列、またはバイナリ データを格納できます。 ただし、インストール パッケージの特定のテーブルには、特定の整数または文字列が指定されている必要があります。 これらの仕様は、_Validation テーブルで管理されています。 たとえば、File テーブルの FileName 列は文字列列ですが、具体的にはファイル名が格納されます。 したがって、エントリは文字列であるだけでなく、ファイルの名前付けの要件にも従う必要があります。

MsiViewModify 関数で使用されるさまざまな検証用の列挙型の値を使用すると、さまざまなレベルで即時検証を行うことができます。 MSIMODIFY_VALIDATE_FIELD 列挙型を使用して、レコードの個々のフィールドを検証できます。 外部キーは検証されません。 MSIMODIFY_VALIDATE 列挙型は、行全体を検証し、外部キーの検証を含みます。 テーブルに新しい行を挿入する場合は、MSIMODIFY_VALIDATE_NEW 列挙型を使用して、追加しているデータが有効であることと、一意の主キーを使用していることを確認します。 主キーが一意でない場合、挿入は失敗します。 検証用の列挙型の 1 つを使用した MsiViewModify の呼び出しでエラーが返された場合は、問題を診断するために MsiViewGetError を繰り返し呼び出すことができます。 MsiViewGetError は、エラーが発生した列と、その問題の解決に役立つ列挙型の値を示します。 詳細については、「GetError メソッド」を参照してください。

また、内部検証を使用して、他の作成者がカスタム テーブルにデータを正しく入力しているかどうかを確認することもできます。 カスタム テーブル名と列名を主キーとして使用して、カスタム テーブルの各列を _Validation テーブルに追加します。 _Validation テーブルの Description 列に、各列の説明または目的を指定します。 nullable、MinValue、MaxValue、KeyTable、KeyColumn、Category、Set 列を使用して、各列に該当する要件を入力します。

  • 列が null 許容の場合は、'Y' を入力します。 そうでない場合は、'N' を入力します。
  • 列が整数列で、整数の範囲を含めることができる場合は、MinValue 列と MaxValue 列を使用してその範囲を入力します。
  • 外部キー列は、KeyTable 列と KeyColumn 列を使用して特定します。
  • string 列の場合は、Filename、GUID、Identifier などのカテゴリを指定します。 詳細については、「列のデータ型」を参照してください。
  • データが特定の数の値 (文字列または整数) にしか関連付けられない場合は、Set 列を使用して許容値を一覧表示します。

以下は、_Validation テーブルの列のうち、列が指定された型である場合に記入可能な列 (Table、Column、Description 以外) の一覧です。 (すべての列を入力する必要はありません。)

Type [列]
Integer nullable、MinValue、MaxValue、KeyTable、KeyColumn、Set
String nullable、KeyTable、KeyColumn、Category、Set、MinValue、MaxValue
バイナリ nullable、Category (Category は "Binary" である必要があります)

 

作成環境では、MSIMODIFY_VALIDATE_DELETE を利用できます。 この列挙型は、行を削除することを想定しています。 そのため、フィールドまたは外部キーの検証は実行されません。 この列挙型は、実際には外部キーの検証を逆方向に実行します。 つまり、_Validation テーブルで、"削除済み" の行が属するテーブルの KeyTable 列と KeyColumn 列の参照を確認します。 "削除済み" の行を含むテーブルを外部キーの候補として挙げている列がある場合、その列を循環して、"削除済み" の行の値が参照されているかどうかを確認します。 エラーが返された場合、行を削除するとデータベースの関係整合性が破られることを意味します。