Don't miss out Virtual Happy Hour this Friday (April 26).

Try our conversational search powered by Generative AI!

Loading...
ARCHIVED This content is retired and no longer maintained. See the latest version here.

Recommended reading 

The order system default implementation contains many classes that you can extend with your own fields. This means that you can customize fields to all order objects to help with your business use cases.

Classes in this topic are available in the Mediachase.Commerce.Orders namespace. The order classes that you can extend are:

How to configure a meta class

  1. In the Commerce Manager Administration section, navigate to the Order System/Meta Class node.
  2. From the Element drop-down list, select the correct group type.
  3. From the Type list, select the meta-class you want to configure. Only the OrderGroup and Payment group types have multiple type options. Edit meta-class definitions by enabling checkboxes associated with the fields you want to associate with each meta-class.
  4. To add meta-fields, click the Order System/Meta Fields node and select New/Meta Field.

Working with meta data types

The default implementation uses Mediachase.MetaDataPlus for its storage of extended attributes.  The list of available types for use in IExtendedPropeties.Propeties are represented in Mediachase.MetaDataPlus.Configurator.MetaDataType.  The supported list for the order system is below.

Supported Types
MetaDataType .NET Type
MetaDataType.DateTime DateTime
MetaDataType.Date DateTime
MetaDataType.DictionarySingleValue MetaDictionaryItem
MetaDataType.EnumSingleValue MetaDictionaryItem
MetaDataType.Float double
MetaDataType.Decimal decimal
MetaDataType.Money decimal
MetaDataType.Integer int
MetaDataType.DictionaryMultiValue MetaDictionaryItem[]
MetaDataType.EnumMultiValue MetaDictionaryItem[]
MetaDataType.StringDictionary MetaStringDictionary
MetaDataType.Boolean bool
MetaDataType.Email string
MetaDataType.URL string
MetaDataType.ShortString string
MetaDataType.LongString string
MetaDataType.LongHtmlString string
MetaDataType.File MetaFile
MetaDataType.ImageFile MetaFile

 

Accessing order meta data

When determining if an object has extended properties, see if the interface derives from EPiServer.Commerce.Storage.IExtendedProperties.

var orderRepository = ServiceLocator.Current.GetInstance();
var contactId = PrincipalInfo.CurrentPrincipal.GetContactId();
var cart = orderRepository.LoadCart(contactId, "Default");

var cartField = cart.Propeties["myfield"].ToString();
var formField = cart.GetFirstForm().Properties["myFormField"].ToString();
var paymentField = cart.GetFirstForm().Payments.First().Properties["myPaymentField"].ToString();
var shipmentField = cart.GetFirstShipment().Properties["myShipmentField"].ToString();
var lineItemField = cart.GetAllLineItems().First().Properties["myLineItemField"].ToString();

Setting order meta data

When determining if an object has extended properties, see if the interface derives from EPiServer.Commerce.Storage.IExtendedProperties.

var orderRepository = ServiceLocator.Current.GetInstance();
var contactId = PrincipalInfo.CurrentPrincipal.GetContactId();
var cart = orderRepository.LoadCart(contactId, "Default");

cart.Propeties["myfield"] = "hello";
cart.GetFirstForm().Properties["myFormField"] = 23m;
cart.GetFirstForm().Payments.First().Properties["myPaymentField"] = 11;
cart.GetFirstShipment().Properties["myShipmentField"] = 9;
cart.GetAllLineItems().First().Properties["myLineItemField"] = "yes";

Accessing order meta data [Legacy]

To access order meta-objects, each order meta-class has a dictionary of meta-fields accessible by the root object.

Example: accessing meta-fields from different order meta-fields

Cart newCart = OrderContext.Current.GetCart("myname", newCustomer);
//This is the meta field data access
string myCartField = newCart["myField"].ToString();
string orderformField = newCart.OrderForms[0]["myOrderFormField"].ToString();
string paymentField = newCart.OrderForms[0].Payments[0]["myPaymentField"].ToString();
string shipmentField = newCart.OrderForms[0].Shipments[0]["myShipmentField"].ToString();
Do you find this information helpful? Please log in to provide feedback.

Last updated: Oct 12, 2015

Recommended reading