概要
SAP CPQ のデフォルトの Quote List には、Involved Parties で設定した Sold-To Party (受注先) の Business Partner 名が列として表示されません。 本記事では、Quote カスタムフィールドと Global Script を組み合わせることで、この情報を Quote List 上に表示する手順を解説します。
対象バージョン: SAP CPQ Quote 2.0 エンジン (CPQ 2605 以降で動作確認)
アーキテクチャ概要
実現方法の全体像は以下の通りです。
コンポーネント 役割
Quote カスタムフィールド SoldToPartyName |
Sold-To Party 名を格納する FreeForm フィールド |
| Quote List Settings | 上記フィールドを列として Quote List に表示する設定 |
Global Script SoldToPartyName |
Involved Parties 変更時に Sold-To Party 名を読み取りカスタムフィールドへ書き込む IronPython スクリプト |
図 1: 完成形 — Quote List の “Sold-To Party” 列に Business Partner 名 “Alpha Center” が表示されている
手順
Step 1: Quote カスタムフィールドを作成する
Setup > Quotes > Quote Fields を開き、「Custom Fields」タブで新規フィールドを作成します。
設定項目 値
| Name | SoldToPartyName |
| Type | FreeForm |
| Default Label | Sold-To Party |
| Calculations are run | 「On Involved Parties Changed」にチェックを入れる |
| Formula (Implementation) | 空欄のまま ※後述の Global Script で値を設定するため |
図 2: カスタムフィールド設定画面 — Type: FreeForm、”On Involved Parties Changed” にチェック、Formula は空欄
Step 2: Quote List Settings に列を追加する
Setup > Quotes > Quote List Settings を開き、「Columns Layout」セクションで手順 1 で作成した SoldToPartyName フィールドを選択して追加します。
図 3: Quote List Settings の Columns Layout に “Sold-To Party” を追加した状態
ポイント: 列ラベルはフィールドの「Default Label」で設定した文字列 (Sold-To Party) が使われます。ユーザータイプ別にラベルを変えたい場合は「User Types By Labels」で設定してください。
Step 3: Global Script を作成する
Setup > Develop > Global Scripts を開き、「Add Script」で新規スクリプトを作成します。
設定項目 値
| Name | SoldToPartyName(任意) |
| System ID | 一意な ID(例: SoldToPartyName_cpq)※自動設定 |
| Active | チェックを入れる |
「Script Code」欄に以下のコードを入力し、Save してください。
# Sold-To Party の Business Partner 名を取得し、カスタムフィールドに書き込む
soldToName = ""
for party in context.Quote.GetInvolvedParties():
if party.PartnerFunctionName == "Sold-to party":
soldToName = party.Name or ""
break
context.Quote["SoldToPartyName"] = soldToName
図 4: Global Script のコード入力画面 — Quote 2.0 API を使用したスクリプト
スクリプトの解説
コード 説明
context.Quote.GetInvolvedParties() |
Quote 2.0 API。Involved Parties に登録された全パーティを返す |
party.PartnerFunctionName |
パートナー機能名(例: "Sold-to party") |
party.Name |
Business Partner の名称(例: "Alpha Center") |
context.Quote["SoldToPartyName"] |
Quote 2.0 でカスタムフィールドに値をセットする記法 |
Save 後、ページをリロードして Events タブを開きます。
図 5: Global Script の Events タブ — “On Involved Parties Changed” イベントにチェックを入れる
「On Involved Parties Changed」にチェックを入れ、Save してください。これにより Involved Parties が変更されるたびにこのスクリプトが自動実行されます。
Step 4: 動作確認
- 任意の Quote を開き、「Involved parties」タブに遷移します。
- Sold-to party として任意の Business Partner を設定し、Save します。
- Quote List に戻ると、「Sold-To Party」列に Business Partner 名が表示されます。
図 6: Quote の Involved Parties タブ — ここで Sold-to party を設定することでスクリプトがトリガーされる
図 7: Quote List での確認結果 — Quote 02080027 の “Sold-To Party” 列に “Alpha Center” が表示されている
まとめ
本記事では、SAP CPQ Quote 2.0 環境において Involved Parties の Sold-To Party 名を Quote List に表示する方法を解説しました。要点は以下の 3 点です。
- FreeForm カスタムフィールドを作成し、Quote List の列に追加する
- Global Script に Quote 2.0 API (
context.Quote.GetInvolvedParties()) を使ったスクリプトを記述する - Global Script の Events タブで「On Involved Parties Changed」を有効化する
ポイント: 同じ手法を応用すれば、Ship-To Party や Bill-To Party など他のパートナー機能名を Quote List に表示することも可能です。party.PartnerFunctionName の比較文字列を変更するだけで対応できます。



