拡張機能を使用したエラーの記録
メッセージを同じアプリケーション・ログ・ファイルに記録し、Oracleアプリケーションで使用されるものと同じアプリケーション設定を使用するオーダー管理拡張を作成します。
ログ中のパフォーマンスの低下を回避します。
-
SEVEREロギング・レベルは、読取りエラー条件などの非常に重要な条件にのみ使用します。 SEVEREとしてすべてのイベントをロギングすると、多数のログ・メッセージが生成され、パフォーマンスが低下します。
-
詳細なレポートを取得するには、FINESTロギング・レベルを使用します。 エントリおよび終了ロギングにはFINESTを使用します。 Loggerメソッドは、様々なレベルでログを書き込むことができます。
-
文字列を連結しないようにします。 ログ文で文字列を連結する必要がある場合は、連結する前に、ターゲット・ロギング・レベルのロギングが有効になるようにコードを記述します。
Loggerメソッドを使用して、ロギング・レベルが有効になっていることを確認するコードを記述するときや、ログ文ごとにこのコードを含めるときに発生する可能性があるコード読取り性の問題を回避します。 Logger Methodは、レベルごとにログを記録する別の方法を提供します。 入力として書式文字列およびパラメータを使用できます。 ログに書き込む前に、ロギングがターゲット・レベルで有効になっている場合にのみ、書式文字列のパラメータを置換できます。 このアプローチは、コードでロギングが有効であることが確認されるまで、文字列操作を延期します。
ログ・レベルの設定方法を学習します。 詳細は、Java Platform, Standard Edition API仕様のjava.util.logging.Levelを参照してください。
このトピックではサンプル値を使用します。 ビジネス要件によっては、別の値が必要になる場合があります。
オーダー管理拡張機能の使用時に、エラー・メッセージをログに書き込みます:
-
ログに書き込みます。
コード
説明
def logger = context.getLogger();
コンテキストからロガー・オブジェクトを取得します。 最初の数行は例から省略されています。
def item = getItem(inventoryItemId, orgId);
品目を取得します。 getItemメソッドをコールするときに、品目IDおよび組織IDを使用します。
String hazardous = item.getAttribute("HazardousMaterialFlag");
品目からHazardousMaterialFlag属性を取得します。
if( "Y".equals(hazardous) ) {
品目が危険かどうかを決定します。
logger.logFinest("Found line with hazardous item %s, %s", inventoryItemId, orgId);
最も詳細なレベルでログを記録します。 文字列の書式では最初の引数を指定し、後続の引数ではパラメータを指定します。
def packShipInstruction = line. getOrCreateContextRow("PackShipInstruction");
PackShipInstructionという拡張可能フレックスフィールド・コンテキストの行を取得します。
packShipInstruction.setAttribute("_ShippingInstruction", "Hazardous Handling Required.");
出荷指示のコンテキスト・セグメントを設定します。
-
パブリック・ビュー・オブジェクトを定義します。
コード
説明
Object getItem(Long itemId, Long orgId, def logger) {
logger.logFiner("Entering method getItem");
def itemPVO = context.getViewObject("oracle.apps.scm.productModel.items.publicView.ItemPVO");
Itemという名前のパブリック・ビュー・オブジェクトのインスタンスを作成します。 FINERレベルでログに記録するように指定します。
def vc = itemPVO.createViewCriteria();
ビュー基準オブジェクトを作成します。
def vcrow = vc.createViewCriteriaRow();
ビュー基準行を作成します。
vcrow.setAttribute("InventoryItemId", itemId);
フィルタ条件に含める在庫品目属性と、この属性との比較時に使用する値を設定します。
vcrow.setAttribute("OrganizationId", orgId);
フィルタ条件に含める組織属性と、この属性と比較するときに使用する値を設定します。
def rowset = itemPVO.findByViewCriteria(vc, -1);
行をフィルタし、ビュー・オブジェクトを問い合せるためのビュー基準を指定します。
def item = rowset.first();
条件に一致する最初の品目行を取得します。
logger.logFiner("Exiting method getItem: itemNumber %s", item.getAttribute("ItemNumber"));
FINERレベルでログに記録するように指定します。 ログを終了します。
コードはパラメータを使用します。
-
param itemId
. 品目を識別する在庫品目ID。 -
param orgId
. 品目を所有する組織を識別する在庫組織ID。
-
これはコメントのない同じコードです。
def logger = context.getLogger();
def item = getItem(inventoryItemId, orgId);
String hazardous = item.getAttribute("HazardousMaterialFlag");
if( "Y".equals(hazardous) ) {
logger.logFinest("Found line with hazardous item %s, %s", inventoryItemId, orgId);
def packShipInstruction = line. getOrCreateContextRow("PackShipInstruction");
packShipInstruction.setAttribute("_ShippingInstruction", "Hazardous Handling Required.");
}
Object getItem(Long itemId, Long orgId, def logger) {
logger.logFiner("Entering method getItem");
def itemPVO = context.getViewObject("oracle.apps.scm.productModel.items.publicView.ItemPVO");
def vc = itemPVO.createViewCriteria();
def vcrow = vc.createViewCriteriaRow();
vcrow.setAttribute("InventoryItemId", itemId);
vcrow.setAttribute("OrganizationId", orgId);
def rowset = itemPVO.findByViewCriteria(vc, -1);
def item = rowset.first();
logger.logFiner("Exiting method getItem: itemNumber %s", item.getAttribute("ItemNumber"));
return item;
}