Oracle Advanced Pricingインプリメンテーション・マニュアル リリース12 E05612-01 | ![]() 目次 | ![]() 前へ | ![]() 次へ |
この章では次のトピックについて説明します。
価格設定データ・バルク・ローダーは、Basic PricingおよびAdvanced Pricingで使用できるアプリケーション・プログラミング・インタフェース(API)で、次のタスクを実行できます。
新規価格表のインポート
価格表データの更新および削除
価格設定データ・バルク・ローダーAPIは、インタフェース表のセットとコンカレント・プログラムで構成されます。すべての検証およびデフォルト設定は、データの挿入または更新が行われる前に実行されます。価格設定データ・バルク・ローダーは、従来のシステムなどから大量の価格表データをインポートする場合に、価格表ユーザー・インタフェース(UI)および価格表のビジネス・オブジェクト用APIのかわりに使用できます。
価格設定データ・バルク・ローダーでは、次の価格表はインポートされません。
価格設定基本契約固有の価格表(「リスト・タイプ・コード」が「AGR」)
営業基本契約から作成された価格表(「ソース・コードのリスト」が「BSO」)
サービス契約から作成された価格表(「ソース・コードのリスト」が「OKS」)
価格設定データ・バルク・ローダーAPIで使用されるプロファイル・オプションは、次のとおりです。
QP: 価格設定取引エンティティ: 価格設定データ・バルク・ローダーAPIが呼び出された場合、「価格設定取引エンティティ」の属性(列)が次のいずれかであるとき、インタフェース表から価格表データが選択されます。
NULL
プロファイル値と同じ
QP: ソース・システム・コード: 価格設定データ・バルク・ローダーAPIが呼び出された場合、「ソース・システム・コード」の属性(列)が次のいずれかであるとき、インタフェース表から価格表データが選択されます。
NULL
プロファイル値と同じ
QP: 一括インポートのバッチ・サイズ: 処理を行うためにメモリーにロードするレコード数を決定するプロファイル値です。パフォーマンスを改善するには、ハードウェア構成に基づく適切な値をこのプロファイルに設定します。設定したプロファイル値が大きすぎると、システムが中断する可能性があります。デフォルト値は1000です。
注意: Basic Pricingのインストールでは、Basic Pricingデータのみがシステムにインポートされます。
関連トピック
最初のステップで、価格設定データ・バルク・ローダーによって次のインタフェース表からデータがインポートされます。
QP_INTERFACE_LIST_HEADERS: この表は、価格表ヘッダーのデータを取得します。
重要: 「START_DATE_ACTIVE」および「END_DATE_ACTIVE」: インタフェース表のデータを移入するときに、開始日と終了日が「YYYY/MM/DD」(たとえば、「2006/06/24」)の形式になっていることを確認してください。
データ型 | 形式 |
Date | YYYY/MM/DD |
DateTime | YYYY/MM/DD HH:MM:SS |
QP_INTERFACE_LIST_LINES: 価格表明細データが、このインタフェース表に取得されます。
QP_INTERFACE_QUALIFIERS: この表には、インポート対象の価格表に関連付けられたヘッダー・クオリファイアが含まれています。
QP_INTERFACE_PRICING_ATTRIBS: 製品属性データと価格設定属性データが、この表に取得されます。価格表明細の製品値を更新するときに、qp_interface_pricing_attribs表のproduct_attr_value列とProduct_attr_val_Disp列を使用できます。
価格表データのインポートは、インタフェース表の次のキー属性によって管理されます。
ORIG_SYS_HEADER_REF: この属性は、4つのすべてのインタフェース表で使用されます。QP_INTERFACE_LIST_HEADERS表では、この属性の値が価格表ヘッダーを一意に識別し、外部システムまたは従来のシステムの価格表ヘッダー・レコードの主キーを参照します。
残りの3つのインタフェース表では、この属性値によって各エンティティと価格表ヘッダーとの関連が決まります。この属性は、価格表データとインタフェース表内のデータ間のマップとして、価格表のコア表に格納されます。この属性は、インタフェース表レコードの更新および削除処理で使用されます。そのため、挿入時に価格表データ内のこの属性が一意であるかチェックされます。
ORIG_SYS_LINE_REF: この属性は、QP_INTERFACE_LIST_LINES表およびQP_INTERFACE_PRICING_ATTRIBS表で使用されます。ORIG_SYS_HEADER_REFと同様に、このフィールドは価格表明細を一意に識別します。価格表明細の更新および削除では、この属性値は価格表明細を識別します。挿入時に、このフィールドが一意かどうかもチェックされます。
ORG_SYS_QUALIFIER_REF: この属性は、QP_INTERFACE_QUALIFIERS表で使用されます。ORIG_SYS_HEADER_REFと同様に、このフィールドは価格表クオリファイアを一意に識別します。クオリファイアの更新および削除では、この属性値を使用してクオリファイアを識別します。挿入時に、このフィールドが一意かどうかもチェックされます。
ORG_SYS_PRICING_ATTR_REF: この属性は、QP_INTERFACE_PRICING_ATTRIBS表で使用されます。ORIG_SYS_HEADER_REFと同様に、このフィールドは製品属性/価格設定属性を一意に識別します。
更新時および削除時に、この属性値は製品属性/価格設定属性を識別します。挿入時に、このフィールドが一意かどうかも検証されます。
PROCESS_STATUS_FLAG: この属性は、4つのすべてのインタフェース表で使用され、インポート処理中のレコードのステータスを示します。APIは、属性値が「P」の場合のみレコードを処理します。エラーのあるレコードの場合、このフィールドに「NULL」が表示されます。正常に処理されたレコードの場合、このフィールドに「I」が表示されます。ただし、これらのレコードは、処理終了時に削除されるため、この属性値が「I」のレコードは存在しません。
INTERFACE_ACTION_CODE: この属性は、4つのすべてのインタフェース表で使用されます。この属性は、レコードに対して実行する処理を示します。
INSERT: エンティティを価格表に挿入する必要があることを示します。
UPDATE: エンティティを更新する必要があることを示します。
DELETE: エンティティを削除する必要があることを示します。
価格表を更新または削除するには、元システム参照列がインタフェース表に移入され、更新対象のレコードが識別できる状態になっている必要があります。たとえば、ヘッダー・レコードを削除または更新する場合はorig_sys_header_refを指定します。明細レコードの場合は、orig_sys_header_refとorig_sys_line_refを指定します。
内部価格表または価格設定API
価格設定ユーザー・インタフェースまたは価格設定APIを使用して作成した内部価格表は、ユーザーによって元システム参照列が入力されないため、システムによってこれらの列のデフォルトが設定されます。R12リリースより前に作成されたデータの元システム参照列を移入するには、コンカレント・プログラム「QP: Bulk Loaderの価格設定データのアップグレード」を実行する必要があります。これらの内部価格表上の更新対象または削除対象のデータについては、これらのデフォルト値がインタフェース表の元システム参照列に移入される必要があります。
すべてのエントリのOrig_sys_header_ref列(価格表ヘッダー、価格表明細、価格設定属性、クオリファイア)のデフォルト値として、プリフィクス「INT」(内部用)が付加されたlist_header_idが設定されます。
重要: プリフィクス「INT」は、11.5.10以前のリリースの更新された価格表ヘッダーに使用されます。12.0以降のリリースで作成された価格表については、プリフィクス「INT」は付加されません。たとえば、header_idが12345の場合、その価格表のすべてのエントリのorig_sys_header_refのデフォルト値として「INT12345」が設定されます。
価格表明細、価格設定属性およびクオリファイアのエンティティのその他の元システム参照列には、デフォルト値として主キーID値が設定されます。たとえば、orig_sys_line_refはlist_line_idがデフォルト値になります。orig_sys_header_refが重複して存在する場合、プリフィクス「INT-D-」がlist_header_idに付加されます。
命名規則がどのように適用されるかについて、例を示します。
価格表ヘッダー名 | List_header_id | Orig_sys_hdr_ref(命名規則の適用後) |
---|---|---|
PL_11510 | 12345 | INT12345 |
PL_120 | 67890 | 67890 |
PL_120 | 67890 | INT-D-67890 注意: Orig_sys_hdr_ref = 67890が別の価格表にすでに存在する場合は、プリフィクス「INT-D-」が付加されます。 |
注意: バルク・ローダー処理を使用して、価格分岐子明細の更新と価格分岐の削除を同時に行うと(この使用方法はお薦めしません)、価格分岐と価格分岐子明細の両方が削除されます。また、価格分岐子明細には価格設定属性が必要なため、価格分岐子明細の更新と価格設定属性の削除も同時に実行することはできません。明細と価格設定属性の両方を削除(「削除」操作を使用)する正しい方法を使用すると、エラー・メッセージは表示されません。
特定の列の更新
特定の列を更新するには、インタフェース表で更新する列の値のみを入力する必要があります。たとえば、価格表明細のオペランド列のみを更新する場合は、元システム参照列を指定して、レコードとオペランド列の新しい値を価格表明細インタフェース表上で特定する必要があります。
列をNULL値に更新する場合は、インタフェース表のその列に次のいずれかの定数を移入します。
QP_BULK_LOADER_PUB.Get_Null_Date: 列のデータ型がDateの場合
QP_BULK_LOADER_PUB.Get_Null_Char: 列のデータ型がVarchar2の場合
QP_BULK_LOADER_PUB.Get_Null_Number: 列のデータ型がNumberの場合
注意: 検証を行うため、価格設定データ・バルク・ローダーによって、インタフェース表の空の列にデータベース内の現在の値が移入されます。前述の例では、オペランド列以外のすべての列がバルク・ローダーによって更新されます。エラーが発生した場合は、ユーザーが移入したデータがオペランド列のみの場合でも、バルク・ローダー実行後に移入されたすべての列を確認してください。
子レコードを作成、更新または削除する場合は、親レコード(および該当する場合は、その上位の親レコード)もインタフェース表に存在している必要があります。親(および、その上位の親)レコードを処理(挿入、更新または削除)する必要がないとしても、それらのレコードがprocess_status_flag = Iの状態で存在し、元システム列が移入された状態になっている必要があります。ヘッダー・レコードが存在しない場合、子エンティティのレコードはバルク・ローダーによって処理されません。
表名 | 選択 | 挿入 | 更新 | 削除 |
---|---|---|---|---|
QP_INTERFACE_LIST_HEADER | X | NA | X | X |
QP_INTERFACE_LIST_LINES | X | NA | X | X |
QP_INTERFACE_QUALIFIERS | X | NA | X | X |
QP_INTERFACE_PRICING_ATTRIBS | X | NA | X | X |
QP_INTERFACE_ERRORS | NA | X | NA | NA |
QP_LIST_HEADERS_B | NA | X | X | X |
QP_LIST_HEADERS_TL | NA | X | X | X |
QP_LIST_LINES | NA | X | X | X |
QP_QUALIFIERS | NA | X | X | X |
QP_PRICING_ATTRIBUTES | NA | X | X | X |
QP_RLTD_MODIFIERS | NA | X | X | X |
注意: 「NA」は「該当しない」の意味です。
次のサンプル・スクリプトを見ると、価格設定データ・バルク・ローダー機能に使用するインタフェース表の設定方法がわかります。このスクリプトは$QP_TOP/patch/115/sqlディレクトリにあります。
QPBLKEX1.sql: 価格表ヘッダーと価格表明細を挿入するスクリプト
QPBLKEX2.sql: 価格表ヘッダー、価格表明細および価格設定属性を挿入するスクリプト
QPBLKEX3.sql: 価格表ヘッダーと価格分岐明細を挿入するスクリプト
QPBLKEX4.sql: 価格表ヘッダーをクオリファイアとともに更新するスクリプト
QPBLKEX5.sql: 第2価格表を主要価格表に添付するスクリプト
価格設定データ・バルク・ローダーAPIは、コンカレント・プログラム「QP: 価格表の一括インポート」として実装されます。このコンカレント・プログラムを使用して、インポート(一括ロード)する価格設定データを定義し、インタフェース表の価格表データをOracle Advanced Pricing表にインポートします。処理を効率的に行うには、システムにアクティブ・ユーザーが存在しない時間帯など、最適な時間にコンカレント・プログラムが実行されるようにスケジュール設定します。
「QP: 価格表の一括インポート」プログラムを使用すると、次のタスクを実行できます。
一括検証および一括ロードを実行します。
アップロードされなかったレコードについて、エラーを1つずつ戻すのではなく、1度の実行において発生した検証エラー・メッセージすべてを提供します。
同じ価格表内でマルチスレッド化が可能な受注インポートに類似した、インタフェース・ローダーをマルチスレッド化する機能を提供します。
プロファイル・オプション「QP: 一括インポートのバッチ・サイズ」(QP_BATCH_SIZE_FOR_BULK_UPLOAD)を設定し、PL/SQL表に読み込むレコード数を制限できます。これにより、一括インポートのパフォーマンスを向上できます。このプロファイルのデフォルト値は1,000ですが、ハードウェアの構成に応じてこの値は変更できます。詳細は、このマニュアルのプロファイル・オプションに関する項を参照してください。
「QP: 価格表の一括インポート」プログラムの使用例
次のように、業務の慣習上、価格表データの定期的なアップロードが必要になることがあります。
価格変更ファイルをアップロードして新しい価格表を作成する必要がある場合
新しい製品明細の作成、新規チャネルへの新製品の提供、製品種目または企業の買収、新製品の展開、および新しい価格表の作成を行うとき
新しい販売テリトリの導入時に、既存の価格表を一括ロードするため、または、価格設定をスプレッドシートで管理している地域の価格設定をアップロードするため
「QP: 価格表の一括インポート」プログラムの処理
「QP: 価格表の一括インポート」プログラムでは、次の処理が行われます。
インタフェース表を使用した、価格表ヘッダー、価格表明細、価格設定属性、クオリファイアおよび分岐の作成と更新。
インタフェース表を使用した、価格表明細、価格設定属性、クオリファイアおよび分岐の削除。
(オプション)価格設定属性の検証に失敗した場合の、コンカレント・プログラムによる「親処理」パラメータを使用した価格表明細のロード。このオプションを無効に設定していて、価格設定属性の検証に失敗した場合、親と子の明細が両方ともアップロードされません。
レコードの更新に使用されたバッチIDを識別できるように、主価格設定表にインタフェース・プログラムIDを格納します。
このプログラムでは、インタフェース表に戻された「値:至」ID変換から派生したIDのみが更新されます。エラーが発生したレコードはインタフェース表に残るため、この表でIDを確認できます。
同じレコードが複数のプロセスで収集されて処理されるのを防止します。
アップロードに成功した行をインタフェース表から自動的に削除します。
有効なデータ全体ではなく、特定のセットを処理します。
注意: バルク・ローダーで使用するインタフェース表へのデータ移入の詳細は、『Oracle Advanced Pricingインプリメンテーション・マニュアル』を参照してください。
「QP: 価格表の一括インポート」プログラムの実行に関する考慮事項
「QP: 価格表の一括インポート」プログラムを実行する前に、次の点を確認してください。
ソース・システム/価格設定取引エンティティ(PTE): コンカレント・プログラムでレコードが取得されるのは、ソース・システム・コードとPTEコードが同じプロファイル値で一致しているかNULLの場合のみです。
次のエンティティに添付されている価格表はバルク・ローダー処理で取得されません。
営業基本契約(ソース・コードのリスト: BSO)
サービス契約(ソース・コードのリスト: OKS)
価格設定基本契約(リスト・タイプ・コード: AGR)
ログと出力ファイルの重要性: 要求出力には次の情報が格納されます。
処理されたレコード数
正常に処理されたレコード数
エラー・メッセージ(該当する場合)
コンカレント要求ログ・ファイルには、処理に関する詳細が記録されます。デバッグをオンにするパラメータが「Yes」に設定されている場合は、デバッグ・メッセージも記録されます。入力したエンティティ名が有効なレコードを一意に識別しない場合、処理するレコードが選択されません。
レコードを挿入、更新または削除するには、子明細、親およびその上位の親のレコードが必要です。レコードを挿入、更新または削除する場合は、コンカレント・プログラムでレコードが取得されるよう、対応する親レコードおよびその上位の親レコード(該当する場合)もインタフェース表にあることを確認してください。
再発行前のエラー: エラーが発生したインタフェース表のレコードについては、request_idと処理ステータス・フラグ列をNULLに設定し、次のプログラム実行でレコードが選択されるようにします。エンティティ名が「レポート・パラメータ」として指定されている場合は、これらの値をリセットする必要はありません。
エラー・メッセージが発生したQPインタフェース表内のデータ: 表QP_INTERFACE_ERRORSには、処理エラー・メッセージが格納されます。この内容がコンカレント要求の出力ファイルに書き込まれます。この表のデータは時折消去してください。
レポート発行
「要求の発行」ウィンドウの「名称」フィールドで、「QP: 価格表の一括インポート」を選択します。
レポート・パラメータ
「QP: 価格表の一括インポート」のパラメータ
エンティティ: 処理する価格設定エンティティ。デフォルト値は「PRL」(価格表)です。
エンティティ名: オプションのパラメータです。処理する価格表の名前を入力します。このフィールドを空白にすると、選択したエンティティ・タイプのすべてのエンティティ(インタフェース表に存在する処理可能エンティティ)が処理されます。
価格表名を入力すると、インポートに失敗したことがある価格表であっても、インポート対象とみなされます。また、PROCESS_ STATUS_FLAG='P'、PROCESS_FLAG='Y'、またはQP_INTERFACE_LIST_HEADERレコードでREQUEST_ ID = NULLの条件を満たしていない場合などでも、他のフラグとは無関係にインポート対象とみなされます。
処理ID: この値はインタフェース表のprocess_idに対応します。処理IDはインタフェース表内のデータをグループ化します。条件を選択して処理するレコードを指定できます。
このフィールドを空白にすると、処理可能なレコードすべてが、「エンティティ名」フィールドに入力された制限に従うものとみなされます。
処理タイプ: このフィールドは、「XML」など、インタフェース表に一覧される処理タイプに一致します。この値を指定した場合、入力した値に一致するPROCESS_TYPE列のレコードだけがバルク・ローダーによって処理されます。
親処理: 子の価格設定属性の検証に失敗した場合にバルク・ローダーで価格表明細を処理するかどうかを、「Yes」(デフォルト)または「No」で選択します。有効は値は、「Yes」(デフォルト)または「No」です。
スレッド数: リスト明細およびその子レコードのマルチスレッド化を実現するための、子プロセスまたはスレッドの合計数を入力します。デフォルト値は1です。
マルチスレッド化は、ユーザーによる親処理要求の発行後、子のコンカレント・プロセスが開始されたときに発生します。親処理が価格表ヘッダー・レコードを処理し、次にクオリファイア・レコードを処理すると、子プロセスに切り替わります。子プロセスは価格表明細と属性をアップロードします。
注意: マルチスレッド化は処理時間に影響を与えるため、プログラムの実行時に利用できるCPUの数を超えないようにしてください。この処理は、システムを使用しているユーザーが少ない時間帯または処理量の少ない時間帯に実行することをお薦めします。
デバッグをONにする: 「Yes」または「No」(デフォルト)
「No」を選択するとロードのパフォーマンスは向上しますが、エラー・メッセージがデバッグ・ログに送信されません。
「Yes」を選択すると、すべてのエラー・メッセージがデバッグ・ログに送信されます。
デバッグをオンにするパラメータはログ・ファイルのみを制御します。しかし、このパラメータに設定した値に関係なく、エラー・メッセージや処理したレコード数などの関連情報は出力ファイルに記録されます。
重複明細チェックの有効化: バルク・ローダーでは、何千件もの明細を価格設定(QP)明細表にアップロードできます。「重複明細チェックの有効化」を「Yes」に設定すると、「QP: 価格表の一括インポート」で明細の重複がチェックされ、重複する明細が検出されるとエラー・メッセージが表示されます。「No」に設定した場合、重複チェック行われません。デフォルト値は「Yes」です。