ユースケース:Salesforce VisualForce ページへの CPQ UI の埋め込み

  • リリースバージョン: Australia
  • 更新日 2026年03月12日
  • 所要時間:6分
  • Salesforce VisualForce ページに CPQ ユーザーインターフェイスを埋め込む方法について説明します。

    この記事では、Salesforce B2B Commerce などの Salesforce VisualForce ページに CPQ ユーザーインターフェイスを表示する方法について説明します。

    必須条件

    この例では、easyXDM ライブラリを Salesforce [SFDC] にロードする必要があります。ナビゲーション:SFDC →セットアップ→静的リソース→新規。https://drive.google.com/file/d/1T0TqffMjlZcEjFke__Re23NdZ_1gWkaJ/viewファイルをアップロードします。この例では、リソース名を「XDMFile1」に設定します。

    また、Salesforce ドメインと環境のカスタム CPQ URL の両方のオリジンを持つように、Logik アドミンでランタイムクライアントを設定する必要があります

    構成初期化データ形式

    構成を初期化するには、基本的なフィールドデータをページに渡す必要があります。渡すことができるパラメーターは、きれいな JSON 形式で表されます。

    {
    	"runtimeToken": "...",
    	"quote": {
    		"SBQQ__PricebookId__c": "...",
    		"LGK__QueriedEditAccess__c": "Active",
    		"LGK__FlightPath__c": "None"
    	},
    	"product": {
    		"configuredProductId": "...",
    		"configurationAttributes": {
    			"LGK__Logik_Id__c": null
    		},
    		"optionConfigurations": {
    			"Dynamic": []
    		}
    	},
    	"layoutVarName": "someLayoutVarName"
    }

    上記の JSON の省略記号を、 CPQ 環境、価格ブック、productID の適切な値に置き換えます。

    注:
    スクリプトでは大文字と小文字が区別されます。大文字と小文字の区別がスクリプトと完全に一致していることを確認してください。たとえば、スクリプトに "LGK__Logik_Id__c": null ではなく "LGK__Logik_Id__c": Null (大文字の N) が含まれている場合、「403 Forbidden—You don't have permission to access this resource」というエラーが発生する可能性があります。

    デフォルトのレイアウトを表示

    場合によっては、ブループリント レイアウト リストの最初に順序付けされていない特定のデフォルト レイアウトを表示したい場合があります。設定ページがロードされる CPQ で特定の開始レイアウトを指定するには、上記の JSON の最上位レベルで「layoutVarName」:「<デフォルトで表示するレイアウトの変数名>」を渡します。

    ホスト VisualForce ページ

    次のサンプル VisualForce コードは、Logik UI を埋め込むホストページのプロキシです。主要コンポーネント:

    • このページは、Logik UI との通信を容易にする easyXDM Javascript ライブラリをインポートします。
    • easyXDM は JSON 入力を解析して転置し、リモートプロシージャコールとしてデータを Logik ページに渡します。

    サンプル VisualForce ページ:

    <apex:page>
    	<head>
    		<apex:includeScript value=”{!$Resource.XDMFile1}”/>
    		<meta charset="utf-8" />
    		<meta name="viewport" content="width=device-width, initial-scale=1" />
    		<meta name="theme-color" content="#000000" />
    		<meta    name="description"    content="Logik Configuration Wrapper"   />
    		<title>Logik Wrapper</title>
    		<style>
    			iframe {
    				width:100%;
    				height:92vh;
    			}
    		</style>
    		<script type="text/javascript" src="{!$Resource.XDMFile1}" crossorigin="anonymous">
    		</script>
    		<!-- easyXDM and Lightning for VF for passing config data to/from Salesforce CPQ -->
    		<script type="text/javascript">
    			var rpc = new easyXDM.Rpc({
    				remote: "<BASE_LOGIK_URL>/ui/configure",
    				container: "root"
    			}, {
    			// method defined in Logik
    			remote: {
    				postMessage: {}
    			},
    
    			local: {
    				postMessage: function (message) {
    					console.log("External Config JSON Received from iframe");
    					configObj = JSON.parse(message);
    					console.log(configObj);
    		
    					}
    				}
    		});
    
    		var cfgData = {"runtimeToken":"<PLACEHOLDER>","quote":{"SBQQ__PricebookId__c":"
    <PLACEHOLDER>","LGK__QueriedEditAccess__c":"<PLACEHOLDER>","LGK__FlightPath__c":"
    <PLACEHOLDER>"},
    "product":{"configuredProductId":"<PLACEHOLDER>","configurationAttributes":
    {"LGK__LOGIK_Id__c":""},
    "optionConfigurations":{"Dynamic":[]}},"layoutVarName":"<PLACEHOLDER>"};
    
    			console.log(JSON.stringify(cfgData));
    			rpc.postMessage(JSON.stringify(cfgData));
    		</script>
    	</head>
    	<body>
    		<div id="root"></div>
    	</body>
    </apex:page>

    上記の VisualForce で強調表示された<BASE_LOGIK_URL>プレースホルダを、 CPQ 環境のベース URL に置き換えます。

    注:
    easyXDM ライブラリーに XDMFile1 以外の名前を付けた場合は、上記の XDMFile1 の 2 つの出現箇所を easyXDM 静的リソースに使用した名前で更新します。

    実行する内容に応じて、[見積もり] ボタンのアクションも関連付ける必要があります。console.log(configObj) 行の後にアクションを挿入します。

    例:

    window.close(); ブラウザページ全体を閉じる場合

    window.location = 'whereeveryouwanttoredirectto'; 別のページにリダイレクトする場合

    EasyXDM ライブラリ

    このトピックで使用される easyXDM ライブラリーの詳細については、「 簡単な XDM.net」を参照してください。