製品ファミリ、製品、およびバンドルを作成および管理する
公開日: 2016年11月
対象: Dynamics CRM 2015
製品ファミリで製品およびバンドルを作成、関連製品の一覧を定義、親製品ファミリにプロパティ(属性)を追加することで、階層構造に製品を組織して、製品カタログを定義します。それにより、製品ファミリの子製品とバンドルはプロパティを自動的に継承するようになります。
既定では、製品ファミリ、製品またはバンドルのレコードを作成する場合は、その状態が下書きになります。 親製品ファミリ レコードに製品を作成、関連製品を定義、属性を構成した後に、その製品ファミリ、製品、またはバンドル レコードを公開して、販売代理店が営業用にシステム内で利用できるようにする必要があります。詳細:製品ファミリ、製品、バンドルの公開
注意
製品ファミリに関連付けられていない製品、つまり製品ファミリに割り当てられた親製品ファミリ レコードを持たない製品の場合は、Organization.CreateProductsWithoutParentInActiveState 属性を1 (true) に設定することで、直接アクティブ 状態の製品を作成することもできます。 既定では、この属性は、Microsoft Dynamics 365 の新しいインストールでは 0 (false) に設定されており、以前のバージョンの Dynamics 365 からアップグレードの場合1 (True)に設定されています。これにより、以前のバージョンのDynamics 365(製品レコードがアクティブの状態で作成されている)で動作するアプリケーションとの互換性が保たれます。
Microsoft Dynamics 365またはOutlook 用 Microsoft Dynamics CRMのシステムの設定領域の営業 タブを使用して、製品をアクティブ状態で作成するかどうかを指定できます。詳細:TechNet: 製品カタログの構成の管理
このトピックの内容
製品、製品ファミリ、およびバンドルを定義する
バンドルおよびキット
製品販売中の提案を向上するために製品の関連付けを定義する
製品のプロパティを定義する(SDKでサポートされない)
製品ファミリ、製品、バンドルを複製する
製品、製品ファミリ、およびバンドルを定義する
Product.ProductStructure属性を使用して、アイテムを、製品ファミリ、製品またはバンドルにするかを定義します。 この属性の値を次のように設定します。
1: 製品の作成
2: 製品ファミリの作成
3: バンドルの作成
注意
バンドルが Dynamics 365に新しく追加されました。 詳細については、このトピックの後半の「バンドルおよびキット」を参照してください。
製品のキット製品を作成するには、引き続きProduct.IsKi属性を使用します。
製品ファミリ、製品、およびバンドルを定義する際に考慮する必要がある重要な点がいくつかあります。
製品ファミリは、階層構造に複数の子製品ファミリ、製品、バンドルのインスタンスを含めることができます。 子製品ファミリ、子製品、または子製品バンドル インスタンスには、Product.ParentProductId属性を使用して、親製品ファミリ インスタンスを定義します。 設定したら、親レコードを変更することはできません。
製品またはバンドルは、親として設定することはできません。つまり、製品またはバンドル レコードは子レコード持てないことを意味しています。
製品ファミリ、製品、またはバンドル インスタンスは、1 件のみの製品ファミリ インスタンスの一部です。
製品ファミリの入れ子レベルに制限はありません。
Product.ValidFromDate と Product.ValidToDate 属性には、それに関連する標準装備のビジネス ロジックがありませんが、Product.ValidToDate の日付がProduct.ValidFromDateの日付以降であることは確認されます。 必要に応じて、この属性に基づく独自のビジネス ロジックを作成することができます。 たとえば、スケジュールされたジョブを実行して、Product.ValidToDate属性の日付値を使用して昨シーズンの製品を自動的に廃止します。
次のコード サンプルでは、製品ファミリと子製品レコードの作成方法が表されています。
// Create a product family
Product newProductFamily = new Product
{
Name = "Example Product Family",
ProductNumber = "PF001",
ProductStructure = new OptionSetValue(2)
};
_productFamilyId = _serviceProxy.Create(newProductFamily);
Console.WriteLine("\nCreated {0}", newProductFamily.Name);
// Create a product record under the product family
Product newProduct1 = new Product
{
Name = "Example Product 1",
ProductNumber = "P001",
ProductStructure = new OptionSetValue(1),
ParentProductId = new EntityReference(Product.EntityLogicalName, _productFamilyId),
QuantityDecimal = 2,
DefaultUoMScheduleId = new EntityReference(UoMSchedule.EntityLogicalName, _unitGroupId),
DefaultUoMId = new EntityReference(UoM.EntityLogicalName, _unit.Id)
};
_product1Id = _serviceProxy.Create(newProduct1);
Console.WriteLine("Created {0} under the product family", newProduct1.Name);
バンドルおよびキット
バンドルは、Dynamics 365 に導入されて、以前のキット機能と置き換えられました。 キットに似て、バンドルは、単一ユニットとして販売される製品のコレクションです。 製品をバンドルにすると、製品をグループ化して単一の出荷単位として販売することで、製品のフルラインを提供したりバンドル化された製品で割引できるので、顧客はメリットを得ることができます。
製品のみバンドルに追加できます。バンドルに製品ファミリ、バンドルまたはキット レコードを追加することはできません。 バンドルまたはキットに製品を追加するには、ProductAssociation エンティティを使用して製品関連付けレコードを作成します。ProductAssociation.ProductId レコードは、製品を追加するバンドルまたはキットを指定し、ProductAssociation.AssociatedProduct は追加される製品を指定します。 バンドルに追加可能な最大製品数は、次の組織設定によって決まります: Organization.MaxProductsinBundle。
Dynamics CRMまたは Outlook 用 Dynamics CRM のシステム設定領域の営業タブを使用して、バンドルに追加できるの最大製品数を指定します。詳細:TechNet: 製品カタログの構成の管理
次のコード サンプルは、製品をバンドルに追加する方法を示しています。
// Add a product to a bundle
ProductAssociation newAssociation1 = new ProductAssociation
{
AssociatedProduct = new EntityReference(Product.EntityLogicalName, _product1Id),
ProductId = new EntityReference(Product.EntityLogicalName, _bundleId),
Quantity = new decimal(15),
ProductIsRequired = new OptionSetValue(0),
UoMId = new EntityReference(UoM.EntityLogicalName, unit.Id)
};
_product1AssociationId = _serviceProxy.Create(newAssociation1);
// Add another product to the bundle
ProductAssociation newAssociation2 = new ProductAssociation
{
AssociatedProduct = new EntityReference(Product.EntityLogicalName, _product2Id),
ProductId = new EntityReference(Product.EntityLogicalName, _bundleId),
Quantity = new decimal(20),
ProductIsRequired = new OptionSetValue(1),
UoMId = new EntityReference(UoM.EntityLogicalName, unit.Id),
};
_product2AssociationId = _serviceProxy.Create(newAssociation2);
if ((_product1AssociationId != null) && (_product1AssociationId != null))
Console.WriteLine("\nAdded both the products to the bundle");
完全なサンプルについては、「サンプル: バンドルへの製品の追加」を参照してください。
キットとバンドルの違い
キットおよびバンドルの両方は、単体ユニットに製品をグループ化できますが、これら 2 つには違いがあります。
キット |
バンドル |
---|---|
キットの全製品は必須です。 |
バンドルの一部の製品は任意です。 |
キットは入れ子構造をサポートしています。キットを別のキットに追加できます。 |
バンドルに別のバンドルを追加することはできません。 バンドルには、製品のみを追加できます。 |
キットを営業案件、見積もり、受注、または請求書に追加する際、キットレベル詳細のみ表示できます。キットの個々の製品は表示できません。 |
バンドルを営業案件、見積もり、受注、または請求書に追加する際、バンドルレベル詳細とバンドルの個々の製品を表示できます。 |
注意
キットは、現在のリリースの Dynamics CRMでは削除されました。その代わりにバンドルを使用する必要があります。
製品販売中の提案を向上するために製品の関連付けを定義する
製品の関連製品の一覧を定義して、営業案件や受注管理中に販売代理店への提案として表示できます。 製品の製品提案により、販売代理店が顧客に関連製品やバンドル/キットを勧めることができるので、製品の販売が大幅に向上します。 製品の以下の関連付けを定義できます: 付属品、抱き合わせ販売、代替製品、およびアップセル。 たとえば、Surface Pro は Surface RT のアップセルとして追加します。ある代理店が、営業案件、見積もり、受注、または請求書に Surface RT を追加する際に、Surface Pro をアップセルとしてお勧めできます。
ProductSubstitute.SalesRelationshipType 属性を使用して、製品の関連付けを定義します。 この属性の値を次のように設定します。
0: アップセル
1: 抱き合わせ販売
2: 付属品
3: 代用製品
製品の関連付けを定義するときに、データの重複を防ぐには関連付けの方向を定義する必要があります。 製品の関連付けにサポートされている方向は次のとおりです。
製品の関連付け |
通信方向 |
---|---|
付属品 |
一方向 |
相互販売 |
一方向または二方向 |
代用製品 |
一方向または二方向 |
アップセル |
一方向 |
ProductSubstitute.Direction属性を使用して、製品の関連付けに説明を指定します。 この属性の値を次のように設定します。
0: 一方向
1: 二方向
次のコード サンプルは、製品を関連付けを定義する方法を示しています。
// Set product relationship
// Set product1 and product2 as substitute of each other (bi-directional)
ProductSubstitute newProductRelation = new ProductSubstitute
{
SalesRelationshipType = new OptionSetValue(3),
Direction = new OptionSetValue(1),
ProductId = new EntityReference(Product.EntityLogicalName, _product1Id),
SubstitutedProductId = new EntityReference(Product.EntityLogicalName, _product2Id)
};
_productRelationId = _serviceProxy.Create(newProductRelation);
製品のプロパティを定義する(SDKでサポートされない)
Outlook 用 Dynamics CRM または Dynamics CRM のみを使用して製品プロパティ(属性)を作成または管理できます。これはプログラムによってはできません。 このセクションでは、新しい製品カタログ機能の理解に不可欠な製品のプロパティの説明が提供されます。 製品プロパティの作成および管理に関する詳細については、「ヘルプとトレーニング: プロパティを使用して製品を説明する」を参照してください。
製品プロパティは、製品またはバンドル レコードではなく、製品ファミリ インスタンスに関連付けることができます。 親製品ファミリのすべての子製品ファミリ、製品、およびバンドル インスタンスは、親製品ファミリに関連づけられたプロパティを継承します。 子製品ファミリ、製品、およびバンドル レコードは、Dynamics CRM またはOutlook 用 Dynamics CRM でのみ継承したプロパティを上書きできます。
製品のプロパティを定義する方法によって、実行時(営業案件、見積もり、受注、または請求書に関連製品を追加する時)に販売代理店によって使用される方法が決まります。
更新できる製品プロパティ値は、実行時に変更できますが、読み取り専用製品プロパティの値を変更することはできません。
必須として設定された製品のプロパティは、実行時にプロパティの値を指定する必要があります。 そうしないと、プロパティは未解決として表示されます。
非表示プロパティは、実行時に販売代理店に表示されません。
注意
製品プロパティは、製品の価格に影響を与えません。 つまり、Dynamics CRM 価格設定エンジンでは、製品プロパティ属性値の変更に基づく製品価格の変更はサポートされていないことを意味します。
製品を改訂し、プロパティを変更すると、Dynamics CRM では、新しいバージョンの製品が作成され、既存製品から新しいバージョンに製品詳細がコピーされます。 製品の新バージョンには、価格表、製品関係およびプロパティなどの詳細が含まれます。 製品の古いバージョンですでに作成された営業案件は、製品の古いバージョンを引き続き参照することができます。 製品が改訂されたか、廃止された後に作成された営業案件は、現在(最新)の製品バージョンを参照します。 製品の状態の遷移の詳細については、「製品の公開、改訂、戻し、廃止、アクティブ化(製品のライフサイクル)」を参照してください。
次の新しいエンティティは、製品プロパティ構成を格納するために導入されました。これらのエンティティに対して、プログラムによるアクセスと管理はサポートされていません。
DynamicProperty エンティティは、製品プロパティに関する情報を格納します。
DynamicPropertyAssociation エンティティには、製品プロパティが関連付けられている製品ファミリに関する情報が格納されます。
DynamicPropertyOptionSet エンティティは、オプション セット データ型の製品プロパティのオプション セット値に関する情報が格納されます。
注意
製品ファミリに添付可能な最大製品プロパティ数は、次の組織設定によって決まります: Organization.MaximumDynamicPropertiesAllowed。 値は、プロパティがアタッチされた製品ファミリの子製品レコードまたはバンドルを公開したときだけ有効になります。下書きの製品ファミリ レコードにプロパティをアタッチした時点では有効にはなっていません。
Dynamics CRMまたは Outlook 用 Dynamics CRM のシステム設定領域の営業タブを使用して、最大製品プロパティ数を構成します。詳細:TechNet: 製品カタログの構成の管理。
製品ファミリ、製品、バンドルを複製する
CloneProductRequestメッセージを使用して、製品ファミリ、製品、またはバンドル レコードを複製し、同じ親ノードにレコードのコピーを作成します。 複製するレコードの ID を設定してください。 製品レコードを複製すると、製品のプロパティもコピーされます。 複製されたレコードは、Product.Name および Product.ProductNumber 属性の元の値に日付と時刻のスタンプが付加されて作成されます。日付と時刻スタンプはレコードが複製された時間を示します。 次のコード サンプルは、その製品を複製する方法を示しています。
CloneProductRequest cloneReq = new CloneProductRequest
{
Source = new EntityReference(Product.EntityLogicalName, _productId)
};
CloneProductResponse cloned = (CloneProductResponse)_serviceProxy.Execute(cloneReq);
_productCloneId = cloned.ClonedProduct.Id;
// Retrieve the cloned product record
Product retrievedProduct = (Product)_serviceProxy.Retrieve(Product.EntityLogicalName, _productCloneId, new ColumnSet(true));
Console.WriteLine("\nCreated clone product: {0}", retrievedProduct.Name);
次の手順
製品レコードを公開して、販売代理店が製品を販売できるようにします。詳細:製品ファミリ、製品、バンドルの公開
関連項目
製品の公開、改訂、戻し、廃止、アクティブ化(製品のライフサイクル)
サンプル: 製品を作成して公開する
サンプル: 製品レコードを複製する
サンプル: バンドルへの製品の追加
製品カタログ エンティティ
© 2017 Microsoft. All rights reserved. 著作権