제품군, 제품, 번들 및 제품 속성 만들기 및 관리
게시 날짜: 2017년 1월
적용 대상: Dynamics 365 (online), Dynamics 365 (on-premises), Dynamics CRM 2016, Dynamics CRM Online
제품군 아래의 모든 하위 제품과 번들이 속성을 자동으로 상속하도록 제품군 아래 제품과 번들을 만들고 관련 제품을 정의하고 속성(특성)을 상위 제품군에 추가하여 계층 구조에서 제품을 구성함으로써 제품 카탈로그를 정의합니다.
기본적으로 제품군, 제품 또는 번들 레코드를 만들면 초안 상태에 있게 됩니다. 제품을 만들고, 관련 제품을 정의하고 상위 제품군 레코드에 대해 특성을 구성한 후에 영업 상담원이 판매하도록 시스템에 사용할 수 있도록 제품군, 제품 또는 번들 레코드를 게시해야 합니다.추가 정보:제품군, 제품 또는 번들을 게시합니다.
참고
제품군과 관련이 없는 제품의 경우, 즉 할당된 상위 제품군 레코드가 없는 제품의 경우 Organization.CreateProductsWithoutParentInActiveState 특성을 1(true)로 설정하여 활성 상태에서 직접 레코드를 만들 수 있습니다. 기본적으로 이 특성은 Microsoft Dynamics 365을 새로 설치하는 경우 0(false)로 설정되고 Dynamics 365의 이전 버전에서 업그레이드하는 경우 1(true)로 설정되어 제품 레코드가 활성 상태에서 만들어진 Dynamics 365의 이전 버전과 사용자 응용 프로그램이 작동하도록 호환성을 보장합니다.
Microsoft Dynamics 365 또는 Outlook용 Microsoft Dynamics 365에 있는 시스템 설정 영역의 영업 탭을 사용하여 제품을 활성 상태에서 만드는지 여부를 지정할 수도 있습니다.추가 정보:TechNet: 제품 카탈로그 구성 관리
이 항목의 내용
제품, 제품군 및 번들 정의
제품 속성 정의
번들 및 키트
제품 판매 중 향상된 제안을 위한 제품 관계를 정의합니다.
제품군, 제품 또는 번들을 복제합니다.
제품, 제품군 및 번들 정의
Product.ProductStructure 특성을 사용하여 항목이 제품군, 제품 또는 번들인지 여부를 정의합니다. 이 특성의 값을 다음으로 설정합니다.
1 제품 만들기
2 제품군 만들기
3 번들 만들기
다음은 제품군, 제품 및 번들을 정의하는 동안 고려할 몇 가지 중요한 사항입니다.
제품군 레코드는 계층 구조에서 여러 하위 제품군, 제품 및 번들 인스턴스를 포함할 수 있습니다. 하위 제품군, 하위 제품 또는 하위 번들 인스턴스의 경우 Product.ParentProductId 특성을 사용하여 상위 제품군 인스턴스를 정의합니다. 일단 설정되면 상위 레코드를 변경할 수 없습니다.
제품 또는 번들은 상위로 설정할 수 없으며, 제품 또는 번들 레코드가 하위 레코드를 가질 수 없음을 의미합니다.
제품군, 제품 또는 번들 인스턴스는 하나의 제품군 인스턴스의 일부만 될 수 있습니다.
제품군의 중첩 수준에 대한 제한은 없습니다.
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);
제품 속성 정의
제품 속성은 크기, 색 또는 구성 요소 등 제품의 특성을 정의하는 데 도움이 됩니다. 제품 속성은 DynamicProperty 엔터티를 사용하여 정의됩니다. 제품 속성을 정의하는 동안 Draft 상태의 제품군 레코드에만 연결할 수 있으며 제품 또는 번들 레코드에는 기록에는 연결할 수 없습니다. 임시 제품군 레코드에 연결할 수 있는 최대 제품 속성 수는 Organization.MaximumDynamicPropertiesAllowed의 조직 설정에 따라 결정됩니다. 숫자는 속성이 추가되는 제품군 아래에 하위 제품 레코드나 번들을 게시할 때 적용되며 초안 제품군 레코드에 속성을 추가할 때는 적용되지 않습니다.
팁
Dynamics 365 또는 Outlook용 Dynamics 365의 시스템 설정 영역에 있는 영업 탭을 사용하여 최대 제품 속성 수를 구성할 수도 있습니다.추가 정보:TechNet: 제품 카탈로그 구성 관리.
속성을 만드는 동안 이름, 연결된 Draft 상태의 제품군 레코드, 숨김, 필수 또는 읽기 전용 같은 속성의 특성, 속성의 데이터 유형을 지정합니다. 제품 속성은 다음 데이터 유형 중 하나가 될 수 있습니다.
값 |
데이터 형식 |
---|---|
0 |
옵션 집합 |
1 |
소수 |
2 |
부동 소수점 수 |
3 |
한 줄 텍스트 |
4 |
정수 |
제품 속성의 데이터 유형을 만든 후 변경할 수 없습니다. 제품 속성을 만들 때 Draft 상태로 만들어집니다.
다음 샘플 코드는 제품 속성을 만드는 방법을 보여줍니다.
DynamicProperty newProperty = new DynamicProperty
{
Name = "Example Property",
RegardingObjectId = new EntityReference(Product.EntityLogicalName,
_productFamilyId),
IsReadOnly = true,
IsRequired = true,
IsHidden = false,
DataType = new OptionSetValue(3), //Single line of text
DefaultValueString = "Default Value"
};
_productPropertyId = _serviceProxy.Create(newProperty);
전체 샘플을 보려면 샘플: 제품 만들기 및 게시 참조
참고
Option Set 데이터 유형의 제품 속성을 만들 때 DynamicPropertyOptionSetItem 엔터티 레코드를 만들어 제품 속성에 대한 개별 옵션을 정의해야 합니다. 각 엔터티 레코드는 개별 옵션에 대한 정보를 저장합니다. 여기에서 DynamicPropertyOptionSetItem.DynamicPropertyOptionName 및 DynamicPropertyOptionSetItem.DynamicPropertyOptionValue 특성은 옵션 이름 및 값을 각각 정의합니다. DynamicPropertyOptionSetItem.DynamicPropertyId 특성을 사용하여 각 개별 옵션 레코드를 상위 제품 속성 인스턴스에 연결할 수 있습니다.
웹 클라이언트를 사용하여 제품 속성을 만들고 관리하는 방법에 대한 자세한 내용은 도움말 및 교육: 속성을 사용하여 제품 설명을 참조하십시오.
참고
제품군을 정의하는 방식은 런타임, 즉 영업 기회, 견적, 주문 또는 송장에 관련 제품을 추가하는 동안에 영업 상담원이 사용하는 방법을 결정합니다.업데이트할 수 있는 제품 속성의 값은 런타임에 변경할 수 있는 반면, 읽기 전용 제품 속성의 값은 변경할 수 없습니다.필수로 설정된 제품 속성의 경우 속성 값은 런타임에 지정해야 합니다. 그렇지 않으면 속성이 해결되지 않음으로 표시됩니다.숨겨진 속성은 런타임에 영업 상담원에게 표시되지 않습니다.
또한 제품 속성은 제품의 가격 산정에 영향을 미치지 않습니다. 이는 Dynamics 365 가격 산정 엔진이 제품 속성 값의 변경 내용을 기반으로 제품의 가격 변경을 지원하지 않는다는 의미입니다.
제품 속성 변경
제품 속성을 변경하는 방법 및 시기를 이해하기 위해 제품 속성의 다양한 상태를 알고 있어야 합니다. 제품 속성 상태는 임시, 활성, 또는 사용 중지됨 중 하나입니다. 제품을 만들 때 상태는 임시이며 제품과 연결된 제품군이 게시되면 상태는 활성으로 변경됩니다. 연결된 제품군 레코드가 사용 중지 상태인 경우 제품 속성의 상태도 Retired으로 변경됩니다.
제품 속성은 두 수준에서 변경될 수 있습니다. 첫 번째 는 제품 속성이 연결된 제품군의 수준이며 두 번째는 제품 속성이 상속되는 하위 제품군, 제품 또는 번들 수준입니다.
연결된 제품군에 대한 제품 속성 변경
Draft 제품군 레코드의 경우 이에 관련된 제품 속성을 변경할 수 있습니다. 제품군 레코드를 게시한 후에는(Active 상태로 변경됨) 제품군 레코드를 수정해야 제품 속성을 변경할 수 있습니다. 제품군 레코드를 수정한 후(Under Revision 상태로 변경됨) 속성의 게시된(활성) 버전을 덮어써 변경합니다. 제품 수명 주기에 대한 정보는 제품 게시, 수정, 되돌리기, 폐기 및 활성화(제품 수명 주기)를 참조하십시오.
하위 제품군, 제품 또는 번들에 대해 상속된 제품 속성 변경
Draft 상태의 제품 속성의 경우, 하위 제품군, 제품 및 번들 레코드는 상속된 속성을 재정의하여 속성의 고유 버전을 정의할 수 있습니다. 예를 들어, 선택 사항 또는 읽기 전용을 업데이트할 수 있도록 하기 위해 상속된 속성을 재정의하여 이름을 변경하거나 속성을 숨김에서 표시로 변경해야 합니다. 상속된 속성의 데이터 유형은 변경하거나 재정의할 수 없습니다.
제품 속성을 재정의하려면, 제품 속성의 인스턴스를 만들고 BaseDynamicPropertyId 속성을 재정의하는 속성의 GUID로 설정합니다. 또한 새 속성 인스턴스를 재정의되는 하위 제품군, 제품 또는 번들 레코드에 연결할 수 있습니다.
다음 샘플 코드에서는 기존 제품 속성 레코드를 예를 들어 GUID _productPropertyId로 재정의하고 재정의한 속성을 예를 들어 GUID _product1Id로 제품 레코드에 연결하는 방법을 설명합니다. 이 이후에는 새 속성의 특성을 업데이트하여 재정의를 완료하는 고유 값을 지정할 수 있습니다.
// Override a product property
DynamicProperty newOverrideProperty = new DynamicProperty();
newOverrideProperty.BaseDynamicPropertyId = new EntityReference(DynamicProperty.EntityLogicalName,
_productPropertyId);
newOverrideProperty.RegardingObjectId = new EntityReference(Product.EntityLogicalName, _product1Id);
_productOverridenPropertyId = _serviceProxy.Create(newOverrideProperty);
// Retrieve the attributes of the cloned property you want to update
ColumnSet columns = new ColumnSet();
columns.AddColumns("name", "isreadonly", "isrequired");
DynamicProperty retrievedOverridenProperty = (DynamicProperty)_serviceProxy.Retrieve(
DynamicProperty.EntityLogicalName, _productOverridenPropertyId,
columns);
// Update the attributes
retrievedOverridenProperty.Name = "Overridden Example Property";
retrievedOverridenProperty.IsReadOnly = true;
retrievedOverridenProperty.IsRequired = false;
_serviceProxy.Update(retrievedOverridenProperty);
전체 샘플을 보려면 샘플: 제품 만들기 및 게시 참조
Active 상태의 제품 속성의 경우, 다음 절이 모두 true일 때 하위 제품군, 제품 또는 번들 레코드에 대해 상속된 속성을 덮어쓸 수 있습니다.
하위 제품군, 제품, 또는 번들 레코드 상태는 수정 중입니다.
상속된 활성 제품 속성이 이미 재정의되었습니다.
제품 속성을 덮어쓰려면, 제품 속성의 인스턴스를 만들고 BaseDynamicPropertyId 속성을 이미 재정의된 속성의 GUID로 설정합니다. 또한 새 속성 인스턴스를 Under Revision 상태의 하위 제품군, 제품 또는 번들 레코드에 연결할 수 있습니다.
다음 샘플 코드에서는 이미 재정의된 활성 상태의 제품 속성 레코드를 예를 들어 GUID _productOverridenPropertyId로 재정의하고 Under Revision 상태의 새 속성을 제품 레코드, 예를 들어 GUID _product1Id에 연결하는 방법을 설명합니다. 이 이후에는 새 속성의 특성을 업데이트하여 고유 값을 지정하고 덮어쓰기를 완료할 수 있습니다.
// Overwrite a product property
DynamicProperty newOverwriteProperty = new DynamicProperty();
newOverwriteProperty.BaseDynamicPropertyId = new EntityReference(DynamicProperty.EntityLogicalName,
_productOverridenPropertyId);
newOverwriteProperty.RegardingObjectId = new EntityReference(Product.EntityLogicalName,
_product1Id);
_productOverwrittenPropertyId = _serviceProxy.Create(newOverwriteProperty);
// Retrieve the attributes of the cloned property you want to update
ColumnSet myCols = new ColumnSet();
myCols.AddColumns("name", "isreadonly", "isrequired");
DynamicProperty retrievedOverwrittenProperty = (DynamicProperty)_serviceProxy.Retrieve(
DynamicProperty.EntityLogicalName, _productOverwrittenPropertyId,
myCols);
// Update the attributes of the cloned property to complete the overwrite
retrievedOverwrittenProperty.Name = "Overwritten Example Property";
retrievedOverwrittenProperty.IsReadOnly = true;
retrievedOverridenProperty.IsRequired = false;
_serviceProxy.Update(retrievedOverwrittenProperty);
전체 샘플을 보려면 샘플: 제품 만들기 및 게시 참조
번들 및 키트
번들은 기존 키트 기능을 대체하기 위해 Dynamics 365에서 도입된 기능입니다. 키트와 마찬가지로 번들은 하나의 단위로 판매되는 제품의 컬렉션입니다. 제품 번들은 고객이 전체 제품군으로부터 더 많은 혜택을 얻거나 제품을 그룹화하고 하나의 단위로 판매할 수 있는 번들 제품에 대한 할인을 제공하는 방식으로 제품을 그룹화하는 데 유용합니다.
제품만 번들에 제품을 추가할 수 있습니다. 제품군, 번들 또는 키트 레코드는 번들에 추가할 수 없습니다.ProductAssociation 엔터티를 사용하여 제품 연결 레코드를 만들어 번들 또는 키트에 제품을 추가할 수 있습니다.ProductAssociation.ProductId 레코드는 제품을 추가하려는 번들 또는 키트를 지정하고 ProductAssociation.AssociatedProduct는 추가할 제품을 지정합니다. 번들에 추가할 수 있는 최대 제품 수는 Organization.MaxProductsinBundle의 조직 설정에 따라 결정됩니다.
또한 시스템 설정 영역 Dynamics 365 또는 Outlook용 Dynamics 365의 영업 탭을 사용하여 번들에 추가할 수 있는 최대 제품 수를 지정할 수도 있습니다.추가 정보: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");
전체 샘플을 보려면 샘플: 먼들에 제품 추가을 참조하십시오.
키트와 번들 간 차이점
키트와 번들 모두 제품을 하나의 단위로 그룹화할 수 있지만 둘 사이에는 몇 가지 차이점이 있습니다.
키트 |
번들 |
---|---|
키트의 모든 제품은 필수입니다. |
번들의 일부 제품은 옵션이 될 수 있습니다. |
키트 지원 중첩; 키트를 다른 키트에 추가할 수 있습니다. |
번들에 다른 번들을 추가할 수 없습니다. 번들에만 제품을 추가할 수 있습니다. |
키트를 영업 기회, 견적, 주문 또는 송장에 추가하는 동안 키트 수준 세부 사항만 볼 수 있습니다. 키트에서는 개별 제품은 볼 수 없습니다. |
번들을 영업 기회, 견적, 주문 또는 송장에 추가하는 동안 번들 수준 세부 사항은 물론 번들에 있는 개별 제품을 볼 수 있습니다. |
참고
키트는 Dynamics 365에서는 더 이상 사용되지 않으며 대신 번들을 사용해야 합니다.
제품 판매 중 향상된 제안을 위한 제품 관계를 정의합니다.
영업 기회 또는 주문 관리 동안 영업 상담원에게 제안으로 표시되는 제품에 대한 관련 제품을 정의할 수 있습니다. 제품에 대한 제품 제안을 사용하면 영업 사원이 관련 제품 및 번들/키트를 고객에게 추천하고 제품 판매를 증가시킬 수 있습니다. 제품에 대한 보조 제품, 교차 판매, 대체 제품 및 상향 판매 관계를 정의할 수 있습니다. 예를 들어, 영업 사원이 Surface RT를 모든 영업 기회, 견적, 주문 또는 송장에 추가할 때 Surface Pro는 상향 판매 옵션으로 제안되도록Surface Pro를 Surface RT에 대한 상향 판매 제품으로 추가할 수 있습니다.
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);
제품군, 제품 또는 번들을 복제합니다.
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);
다음 단계
영업 상담원이 판매할 수 있는 제품을 만들기 위해 제품 레코드를 게시합니다.추가 정보:제품군, 제품 또는 번들을 게시합니다.
참고 항목
제품 게시, 수정, 되돌리기, 폐기 및 활성화(제품 수명 주기)
샘플: 제품 만들기 및 게시
샘플: 제품 레코드 복제
샘플: 먼들에 제품 추가
제품 카탈로그 엔터티
Microsoft Dynamics 365
© 2017 Microsoft. All rights reserved. 저작권 정보