labunix's blog

labunixのラボUnix

Salesforce 商品(Product2)、価格表(Pricebook2)、価格表エントリ(PricebookEntry)、商談(Opportunity)

■Salesforce 商品(Product2)、価格表(Pricebook2)、価格表エントリ(PricebookEntry)、商談(Opportunity)
 リレーションが見えると、設定順も見えてくる例。

 ざっくり、価格表エントリを除いてアプリケーションメニューから選べる項目。
 価格表エントリは、商品と価格表をつなぐオブジェクトマネージャから見えるオブジェクト。

■Apexで取得するオブジェクトをそれぞれ入れてリレーションを確認する。
 ※「Product2」の例

Map<String, Schema.SObjectField> fields = Schema.getGlobalDescribe().get('Product2').getDescribe().fields.getMap();

for (Schema.SObjectField field : fields.values()) {
    Schema.DescribeFieldResult dfr = field.getDescribe();
    if (!dfr.getReferenceTo().isEmpty() ||  dfr.getRelationshipName() != null){ // if (dfr.getName().contains('UserPermissions')){
        System.debug(dfr.getName() + ',' + dfr.getLabel() + ',' + dfr.getRelationshipName() + ',' + dfr.getReferenceTo() );
    }
}

■商品(product2)

22:52:44:121 USER_DEBUG [6]|DEBUG|CreatedById,作成者 ID,CreatedBy,(User)
22:52:44:122 USER_DEBUG [6]|DEBUG|LastModifiedById,最終更新者 ID,LastModifiedBy,(User)
22:52:44:125 USER_DEBUG [6]|DEBUG|ExternalDataSourceId,外部データソース ID,null,(ExternalDataSource)

■価格表(Pricebook2)

22:55:13:131 USER_DEBUG [6]|DEBUG|CreatedById,作成者 ID,CreatedBy,(User)
22:55:13:132 USER_DEBUG [6]|DEBUG|LastModifiedById,最終更新者 ID,LastModifiedBy,(User)

■価格表エントリ(PricebookEntry)

23:08:15:114 USER_DEBUG [6]|DEBUG|Pricebook2Id,Price Book ID,Pricebook2,(Pricebook2)
23:08:15:115 USER_DEBUG [6]|DEBUG|Product2Id,商品 ID,Product2,(Product2)
23:08:15:117 USER_DEBUG [6]|DEBUG|CreatedById,作成者 ID,CreatedBy,(User)
23:08:15:118 USER_DEBUG [6]|DEBUG|LastModifiedById,最終更新者 ID,LastModifiedBy,(User)

■商談(Opportunity)
 多いので一部だけ
...
22:59:50:172 USER_DEBUG [6]|DEBUG|Pricebook2Id,Price Book ID,Pricebook2,(Pricebook2)
22:59:50:173 USER_DEBUG [6]|DEBUG|Territory2Id,テリトリー ID,Territory2,(Territory2)
22:59:50:172 USER_DEBUG [6]|DEBUG|OwnerId,所有者 ID,Owner,(User)
22:59:50:176 USER_DEBUG [6]|DEBUG|CreatedById,作成者 ID,CreatedBy,(User)
22:59:50:177 USER_DEBUG [6]|DEBUG|LastModifiedById,最終更新者 ID,LastModifiedBy,(User)
...

■とりあえずほかの制限は置いといて関係性を整理すると、
 価格表エントリからは商品と価格表が見えていて、
 商談からは価格表は見えるけど、商談からは商品は価格表を介して価格表エントリ越しに見える。
 商談ではなく、注文(Order)オブジェクトを使う場合でも、有効化してあれば見積(Quotes)でも同様の関係性。

$ echo "[PricebookEntry] -- [Pricebook2],[Product2] -- [Opportunity]" | graph-easy --dot | sed -e '/Product2" -> Opportunity/d' | dot -Tpng -o Product.png

■Trailhead
 依存関係の逆順になるように、(価格表エントリを通してリレーションする)商品を作って、価格表を作って、
 商談や注文あるいは見積に紐づける順序でよい。

 プロジェクト:商品、価格、見積、注文の管理
 https://trailhead.salesforce.com/ja/content/learn/projects/manage-products-prices-quotes-orders