カスタマイズ分析のレポート (CAR)
- [アーティクル]
-
-
この記事では、モデルのカスタマイズ分析レポートを生成する方法について説明します。 また、レポートに含まれているベスト プラクティス ルールについて説明し、これらのルールに関連付けられているエラーおよび警告を解決するための推奨事項を示します。
カスタマイズ分析レポートとは
カスタマイズ分析レポートは、カスタマイズおよび拡張モデルを分析し、事前定義されたベスト プラクティスのルールを実行するツールです。 このレポートは、ソリューション認証プロセスの要件の 1 つです。 レポートは、Microsoft Excel のブック形式です。
レポートを生成する方法
xppbp.exe ツール、c:\packages\bin または I:\AosService\PackagesLocalDirectory\bin にあります。
カスタマイズ分析レポートを生成するには、開発環境で次のコマンドを実行します。
xppbp.exe -metadata=<local packages folder> -all -model=<ModelName> -xmlLog=C:\BPCheckLogcd.xml -module=<PackageName> -car=<reportlocation>
カスタム モデルが ISV モデルを参照する場合は、次のような -PackagesRoot
パラメータを含める必要があります。
-packagesroot=K:\AosService\PackagesLocalDirectory
例
xppbp.exe -metadata=C:\Packages -all -model="MyAppSuiteCustomizations" -xmlLog=C:\temp\BPCheckLogcd.xml -module="ApplicationSuite" -car=c:\temp\CAReport.xlsx
問題リスト
このセクションでは、レポートの問題リストページに表示されるベスト プラクティスのルール (エラー、警告、または情報メッセージ) をすべて説明し、問題を解決するための提案を示します。 メタデータまたはコードの型の問題です。 すべてのコード問題に関しては、重ねたメソッドで警告またはエラーが発生する場合、ルールに違反しているコードの明細行は下位レイヤーのモデルに属していることに留意してください。 その場合、自分のものではないコードの警告やエラーを修正する責任はありません。
BPCheckPackReturnsConnull
説明 |
このルールは、SysPackable インターフェイスを実装するすべてのクラスに適用されます。 これは、Pack メソッドが Connull() を返さないことを確認します。 |
エラー メッセージ |
コンテナー パック メソッドは、Runbase 派生クラスで connull を返します |
出庫タイプ/重要度 |
コード/警告 |
修正する方法 |
該当する場合、Pack メソッドの戻り値を更新するか、Super() を返します。 |
BPCheckParametersModified
説明 |
メソッドのパラメーターがメソッド内で変更された場合、このルールは失敗します。 |
エラー メッセージ |
メソッド %1 のパラメーター 1% がメソッド内で変更されています |
出庫タイプ/重要度 |
コード/警告 |
修正する方法 |
コードをリファクターします。 呼び出されたメソッド内ではなく、呼び出し元によりパラメーターを変更する必要があります。 |
BPCheckSQLCode
説明 |
このルールは、X++ コードに直接 SQL コードが含まれていると失敗します。 |
エラー メッセージ |
メソッド %1 に SQL コードが見つかりました |
出庫タイプ/重要度 |
コード/警告 |
修正する方法 |
X++ を使用してデータベースにアクセスするコードをリファクタリングします。 |
BPCheckNestedLoopInCode
説明 |
このルールは、select ループがループ内にネストされていることを検出すると失敗します。 |
エラー メッセージ |
%1 メソッドに入れ子になったデータ アクセス ループが見つかりました |
出庫タイプ/重要度 |
コード/警告 |
修正する方法 |
入れ子になったデータ アクセス ループの代わりに結合を使うコードをリファクタリングします。 メソッドのビジネス ロジックを変更せずにコードをリファクターできない場合は、Microsoft にカスタマイズ分析レポートを提出するときに例外を文書化します。 |
BPCheckInsertMethodInLoop
説明 |
このルールは、ループの中に入れ子されたメソッド insert への呼び出しを検出すると失敗します。 InsertRecordList を使用することをお勧めします。 このルールは、InMemory テーブルには適用されません。 |
エラー メッセージ |
メソッド %1 で、Insert メソッドを RecordInsertList に置き換えることができます。 |
出庫タイプ/重要度 |
コード/警告 |
修正する方法 |
InsertRecordList など、設定に基づく操作を使用するコードをリファクターします。 |
BPCheckSelectwithJoin
説明 |
結合されていない入れ子になった select ステートメントが見つかった場合、このルールは失敗します。 |
エラー メッセージ |
%1 メソッドの入れ子になった select ステートメントは結合できます。 |
出庫タイプ/重要度 |
コード/警告 |
修正する方法 |
入れ子になった select ステートメントの代わりに結合を使うコードをリファクタリングします。 メソッドのビジネス ロジックを変更せずにコードをリファクターできない場合は、Microsoft にカスタマイズ分析レポートを提出するときに例外を文書化します。 |
BPFunctionCallwithSelect
説明 |
このルールは、select ステートメント内で関数呼び出しが見つかった場合に失敗します。 |
エラー メッセージ |
メソッド %1 の select ステートメントに、関数呼び出しが見つかりました |
出庫タイプ/重要度 |
コード/警告 |
修正する方法 |
選択ステートメントを呼び出す前に、関数の戻り値をローカル変数へと割り当て、選択ステートメントでローカル変数を使用します。 |
BPCheckinvalidExecuteQuery
説明 |
このルールは、ExecuteQuery メソッドで super() を呼び出した後に addRange への呼び出しが見つかった場合に失敗します。 |
エラー メッセージ |
フォーム %1 の ExecuteQuery メソッドに、super() の後に add range を追加しないでください。 |
出庫タイプ/重要度 |
コード/警告 |
修正する方法 |
このパターンを回避するために、コードをリファクタリングします。 |
説明 |
このルールは、super() を呼び出す前にフォームのinit メソッドでフォーム コントロールとデータソースを初期化しないようにします。 element または this を super() に対する呼び出し (this.aMethod() または element.aMethod()) の前に使用するステートメントが検出された場合に失敗します。 情報メッセージは番号順序の初期化など許可されたいくつかのパターンのみを表示します (numberSeqPreInit) 。 |
エラー メッセージ |
フォーム要素ステートメントは、フォーム %1 の init メソッドで、super() の前に使用しないでください。 |
出庫タイプ/重要度 |
コード/情報または警告 |
修正する方法 |
super() の呼び出し後、コードをリファクターしてフォーム コントロールおよびデータにアクセスします。 コードが任意のフォーム コントロールを初期化せず、super() の前にどのフォーム データ ソースにもアクセスしない場合、Microsoft にカスタマイズ分析のレポートを送信するときに例外をまとめます。 |
BPCheckEmptyLoop
説明 |
このルールは、ステートメントがないループを検出すると失敗します。 |
エラー メッセージ |
クラス %2 の メソッド %1 で空のループが見つかりました |
出庫タイプ/重要度 |
コード/警告 |
修正する方法 |
ループをコードから削除します。 |
BPCheckLockQueryRange
説明 |
フォームの init メソッドでコードが AddRange を呼び出し、その範囲をロックまたは非表示として設定しないと、このルールは失敗します。 |
エラー メッセージ |
フォーム %1で、範囲はロックするか、非表示にする必要があります |
出庫タイプ/重要度 |
コード/警告 |
修正する方法 |
AddRange の呼び出しの後に、QueryBuildRange.status(RangeStatus::Locked) または QueryBuildRange.status(RangeStatus::Hidden) を追加します。 |
BPCheckSkipStatementValidation
説明 |
このルールは、Skip ステートメントを持たないセットベースの操作を検出した場合に通知メッセージを報告します。
- update_recordset が見つかると、ルールによって skipDataMethods(true) がチェックされます。 テーブルの update メソッドが上書きされる場合にのみルールが適用されます。
- insert_recordset が見つかると、ルールによって skipDataMethods(true) がチェックされます。 テーブルの insert メソッドが上書きされる場合にのみルールが適用されます。
- delete_from が見つかると、ルールによって skipDeleteActions(true) がチェックされます。 テーブルの insert メソッドが上書きされる場合にのみルールが適用されます。
これは、セットベースの操作のパフォーマンス向上を最大限に活用するために、スキップメソッドを呼び出す必要があることを示す情報メッセージです。 スキップ メソッドが使用されていない場合は、実行は行ごとの操作に戻ります。 |
エラー メッセージ |
セット ベースの操作はクラス %2 のメソッド %1 で Skip ステートメントを呼び出す必要があります。それ以外の場合、行ごとの操作にフォールバックされます。 |
出庫タイプ/重要度 |
コード/情報 |
修正する方法 |
該当する場合は、skipDataMethods(true) または skipDeleteActions(true) を使用します。 |
BPCheckNoTTSTryBlock
説明 |
このルールは、正しく処理されない tts ブロック内の try ステートメントを検出すると失敗します。 |
エラー メッセージ |
try 文の tts ブロックは、メソッド %1 の例外を明示的にキャッチしません。 |
出庫タイプ/重要度 |
コード/警告 |
修正する方法 |
この表に続くコードの例を使用します。 |
次の例では、ルールが失敗するか、合格するかを示しています。 次の例を参考にして、コードをリファクタリングします。
ttsbegin;
try {
}
// fail
catch {
}
try {
}
// pass
catch(Exception::UpdateConflict) {
}
try {
}
// pass
catch(Exception::UpdateConflictNotRecovered) {}
BPCheckEmptyTableMethod
説明 |
このルールは、ソース コードのないテーブル メソッドをチェックします。 空テーブルのメソッドは、テーブルのレコードセット オペレーションを行単位の操作に戻す原因となります。 |
エラー メッセージ |
%1 テーブルに空の %2 メソッドがあります |
出庫タイプ/重要度 |
コード/警告 |
修正する方法 |
このメソッドをコードから削除します。 |
BPCheckBatchJobsEnabled
説明 |
このルールは、RunBaseBatch を拡張するすべてのクラスが true を返す canGoBatch メソッドを持つことを保証します。 |
エラー メッセージ |
カスタム ジョブがクラス %1 でバッチ対応でありません |
出庫タイプ/重要度 |
コード/警告 |
修正する方法 |
canGoBatch メソッドは、すべてのバッチ クラスに true を返します。 |
BPCheckDisplayMethodCached
説明 |
データ メソッドにバインドされている各コントロールについては、これらの条件のいずれかが満たされている場合、このルールは失敗します。
- データのキャッシュ方法プロパティが自動に設定され、対応するテーブルの display/edit メソッドには SysClientCacheDataMethodAttribute がなく、データ ソースの init メソッドは CacheAddMethod を使用しません。
- データのキャッシュ方法プロパティはいいえに設定され、データ ソースの init メソッドは CacheAddMethod を使用しません。
|
エラー メッセージ |
フォーム %2 の 表示メソッド %1 がキャッシュされていません |
出庫タイプ/重要度 |
コード/警告 |
修正する方法 |
この表に続くメモを使用します。 |
この警告は、次のいずれかのパターンを使用して修正することができます。
キャッシュ データ メソッド プロパティを はい に設定します。
キャッシュ データ メソッド プロパティを 自動 に設定し、SysClientCacheDataMethodAttribute 属性を使用してテーブルのデータ メソッドをマークします。 次に例を示します。
[SysClientCacheDataMethodAttribute(true)]
Display TransDate myDateMethod()
{
//...
}
フォームの init メソッドで CacheAddMethod を使用すると、そのメソッドをキャッシュ済みとしてマークします。
BPCheckSQLQueryInInit
説明 |
このルールは、フォームの init メソッドで while ループを持つデータ アクセス クエリが見つかった場合に失敗します。 このパターンは、フォームの初期化時にパフォーマンスの問題を引き起こす場合があります。 |
エラー メッセージ |
フォーム %1 の init メソッドで、while ループを持つ SQL クエリが見つかりました |
出庫タイプ/重要度 |
コード/警告 |
修正する方法 |
このパターンを回避するために、コードをリファクタリングします。 |
説明 |
このルールは、フォームの init または executeQuery メソッドで new Query() ステートメントを検出すると失敗します。 |
エラー メッセージ |
フォーム メソッド %1 で、データ ソース クエリが上書きされます |
出庫タイプ/重要度 |
コード/警告 |
修正する方法 |
このパターンを回避するために、コードをリファクタリングします。 |
BPCheckSelectForUpdateAbsent
説明 |
Select ForUpdate を使用してレコードを選択したが、更新が実行されていない場合、このルールは失敗します。 このルールは、オプティミスティック同時実行制御 (OCC) が有効になっているテーブルには適用されません。 |
エラー メッセージ |
メソッド %1 に Select ForUpdate が実装されていません |
出庫タイプ/重要度 |
コード/警告 |
修正する方法 |
ForUpdate を選択 の代わりに 選択 を使用するか、OCC を有効 プロパティを はい に設定します。 |
BPCheckTablePropertyMismatch
説明 |
このルールは、テーブルがテーブル グループに属しているが、適切なキャッシュ ルックアップ値を持たない場合に失敗します。 次の条件がすべて満たされていると、ルールは失敗します。
- テーブル グループ プロパティは メイン に設定され、キャッシュ ルックアップ プロパティは NotinTTS または EntireTable に設定されます。
- テーブル グループ プロパティは グループ または パラメーター に設定され、キャッシュ ルックアップ プロパティは NotinTTS に設定されます。
- テーブル グループ プロパティは WorksheetHeader、WorksheetLine、または Transaction に設定され、キャッシュ ルックアップ プロパティは Found、FoundAndEmpty、または EntireTable に設定されます。
|
エラー メッセージ |
%1 テーブルにテーブル グループとキャッシュ ルックアップの無効な組み合わせがあります |
出庫タイプ/重要度 |
メタデータ/警告 |
修正する方法 |
テーブルで適切な キャッシュ ルックアップ 値を設定します。 |
BPCheckMissingDeleteActions
説明 |
このルールは、テーブル関係の削除アクションまたは削除時プロパティの値がなしと等しくないことを検証します。 関連するテーブルまたは現在のテーブルが tempDB、メモリ テーブル、参照テーブル、ステージング テーブル、パラメーター テーブルの場合、ルールはトリガーされません。 |
エラー メッセージ |
リレーション名 %3 でテーブル %2 に関連付けられているテーブル %1 に欠けているアクションを削除します |
出庫タイプ/重要度 |
メタデータ/警告 |
修正する方法 |
None と等しくない delete アクションを設定します。 |
BPCheckAddressModel
説明 |
テーブル フィールドが AddressZipCodeId または AddressStateId タイプの場合、このルールは失敗します。 これらのタイプは、コードが新しいアドレス フレームワークを受け入れなかったことを示します。 |
エラー メッセージ |
テーブル %2 のフィールド %1 は、アドレスの場所モデルの一部ではありません |
出庫タイプ/重要度 |
メタデータ/警告 |
修正する方法 |
これらのタイプをディレクトリ モデルのその他の適切な EDT タイプに置き換えます。 |
BPCheckDimensionModel
説明 |
テーブル フィールドが、分析コードまたは LedgerAccount タイプの場合、このルールは失敗します。 これらのタイプは、コードが新しい財務分析コード フレームワークを受け入れなかったことを示します。 |
エラー メッセージ |
テーブル %2 のフィールド %1 は、財務分析コード フレームワークの一部ではありません |
出庫タイプ/重要度 |
メタデータ/警告 |
修正する方法 |
これらのタイプを分析コード モデルのその他の適切な EDT タイプに置き換えます。 |
BPCheckNumberofNewFields
説明 |
このルールは、そのテーブルのカスタマイズまたは拡張のプロセスで、テーブルに 10 個以下のフィールドが追加されたことを確認します。 このルールは、ステージング テーブルには適用されません。 |
エラー メッセージ |
次の値より大きいテーブル %1 の新しいフィールドの数 |
出庫タイプ/重要度 |
メタデータ/警告 |
修正する方法 |
スキーマをリファクタリングし、既存のテーブルに多数のフィールドを追加する代わりに関連するテーブルを作成します。 |
BPCheckEnumUpgradeIssue
説明 |
このルールは、次の条件が満たされた場合に失敗します。列挙型 (オーバーレイ) をカスタマイズすると、新しい列挙型の値は既存の最大値 + 10 未満になります。 このルールは、拡張可能な列挙型には適用されません。 |
エラー メッセージ |
列挙 %1 で、アップグレード問題があります。 |
出庫タイプ/重要度 |
メタデータ/警告 |
修正する方法 |
大きな列挙値を使用するか、列挙型を拡張します。 |
BPCheckPassiveJoinUse
説明 |
このルールは、フォームがデータのプリロードを許可する場合、タブ ページ データソースのリンク タイプがパッシブであることを検証します。 次の条件がすべて満たされていると、ルールは失敗します。
- Yes に設定された AllowPreLoading プロパティのフォームがあります。
- フォームのタブ ページは、最上位レベルのデータ ソースにバインドされています。
- データ ソースの結合ソースプロパティが設定されます。
- データ ソースのリンク タイプ プロパティがパッシブに設定されていません。
|
エラー メッセージ |
新しいメッセージは、「フォームの %2 タブ ページ コントロールにバインドされたデータソース %1 でパッシブ結合を使用する」 ことを提案しています |
出庫タイプ/重要度 |
メタデータ/警告 |
修正する方法 |
フォームで AllowPreLoading プロパティを いいえ に設定するか、データ ソースでパッシブ結合を使用します。 パッシブ結合では、タブ ページのクエリの実行時に明示的にプログラミングする必要があります。 |
BPCheckAlternateKeyAbsent
説明 |
このルールは、一意のインデックスを持つテーブルに少なくとも 1 つの代替キーがあることを確認します。 |
エラー メッセージ |
テーブル %1 には、代替キーがありません |
出庫タイプ/重要度 |
メタデータ/警告 |
修正する方法 |
テーブルの一意のインデックスで 代替キー プロパティを はい に設定します。 |
BPCheckBaseTableModified
説明 |
このルールは、Microsoft によって出荷される特定のベース テーブルの一覧のカスタマイズ (オーバーレイ化) を推奨しません。 例では、SourceDocumentHeader および SourceDocumentLine テーブルがあります。 |
エラー メッセージ |
%1 はベース テーブルであり、変更することはできません。 |
出庫タイプ/重要度 |
メタデータ/警告 |
修正する方法 |
テーブルをカスタマイズしないでください。 |