Navigation and service panel


Content

This text is fallbacked from the German Version. If you need use Google Translate


Umsetzung eigener EntityProvider

By Kevin Brechbühl on 14. June 2013, No comments

Verschiedene Eigenschaften einer Shopkonfiguration in SES wie z.B. die Länder oder Währungen werden als sogenannte Entities als Sitecore Items abgelegt. Über einen Entity Code und die API lassen sich diese sehr einfach auslesen, ohne dabei direkt auf Sitecore resp. das Item zugreifen zu müssen. Leider implementiert die API nur ein Teil aller verfügbaren Entitäten. Dieser Beitrag soll zeigen, wie weitere EntityProvider umgesetzt werden können, um auch diese über die API abfragen zu können.

Ich werde in diesem Beitrag auf die Länder und die MwSt Sätze eingehen. Für die Länder gibt es einen sogenannten EntityProvider, welcher die einfache Abfrage über die API ermöglicht. Für die verschiedenen MwSt Sätze (z.B. "Default" oder "Food") gibt es dies leider nicht. Diverse Eigenschaften der Produkte (wie z.B. den Preis) erhalten wir 1x pro Tag über einen Import eines angehängten ERP Systems. Weitere Eigenschaft welche über den Import kommt ist der Mehrwertssteuer Satz. Wir müssen somit den entsprechenden MwSt Satz aus Sitecore auslesen und diesen dem entsprechenden Produkt zuordnen können.

Jedes Entity ist ein Item in Sitecore, wessen Template vom SES Template "Option Value" erbt, und somit die Felder "Code", "Name" und "Title" erhalten. Zu jedem Entity Typ gibt es im Code eine Model-Klasse welche das IEntity Interface implementiert und das Mapping für die genannten Felder zur Verfügung stellt. Über einen entsprechenden EntityProvider können nun irgendwo im Code sämtliche verfügbaren Entitäten eines Typs ausgelesen werden:

IEntityProvider<Country> countryEntityProvider = Sitecore.Ecommerce.Context.Entity.Resolve<IEntityProvider<Country>>();
var countries = countryEntityProvider.GetAll();
var countryByCode = countryEntityProvider.Get("CH");

Um nun einen eigenen EntityProvider zu implementieren, sind einige Schritte notwendig:

  1. Template in Sitecore anlegen
  2. Zugehöriges Model im Code anlegen
  3. Code zum registrieren des Providers schreiben (Pipeline Processor)
  4. Pipeline Processor konfigurieren

Template in Sitecore anlegen

Das Template ist in unserem Fall bereits vorhanden ("VAT Option Value"). Falls dies nicht der Fall wäre müsste ein neues Template angelegt werden, welches von "Option Value" erbt.

Zugehöriges Model im Code anlegen

Das Model muss angelegt werden, damit die Entities in Form von Objekten zur Verfügung stehen können. Das Model existiert in unserem Fall nicht und muss angelegt werden. Dies sieht wie folgt aus:

public class VatType : IEntity
{
    public string Alias { get; set; }

    [Entity(FieldName = "Code")]
    public virtual string Code { get; set; }

    [Entity(FieldName = "Name")]
    public virtual string Name { get; set; }

    [Entity(FieldName = "Title")]
    public virtual string Title { get; set; }
}

Natürlich können hier auch zusätzliche Felder implementiert werden, falls dies notwendig sein sollte.

Code zum registrieren des Providers schreiben

Der EntityProvider muss am System (resp. in Unity) registriert werden, damit dieser auch aufgelöst werden kann. Dazu muss ein neuer Pipeline Processor geschrieben werden. Dieser registriert den Provider. In unserem Fall würde dieser wie folgt aussehen.

public class RegisterEcommerceProviders : InitializeContainerProviderBase
{
    public virtual void InitializeVatTypeProvider(PipelineArgs args)
    {
        NameValueCollection config = new NameValueCollection();

        // Beschreibung, nur für internen Gebrauch notwendig
        config.Add("description", "VAT Type Provider");

        // Feld, welches das Root Item der Entities in den Business Catalog Settings definiert
        config.Add("setting name", "VAT Link");

        // Container Name, nur für internen Gebraucht notwendig
        config.Add("default container name", "Default VAT Type");

        // Template des Entity (in unserem Fall "VAT Option Value")
        config.Add("containers item template Id", "{A6E55805-5516-4F17-BCBF-03DEDCCCF096}");

        // Registrierung
        this.RegisterProvider<VatType>(config["description"], config);
    }
}

Falls das Root der Entities nicht bereits in den Business Catalog Settings konfiguriert ist, so muss dieses noch hinzugefügt werden (Erweiterung der Templates "Business Catalog" und der Klasse BusinessCatalogSettings und entsprechende Konfiguration in Unity). In unserem Fall war dies bereits konfiguriert und somit sind keine zusätzlichen Erweiterungen notwendig.

Pipeline Processor konfigurieren

Der neue Pipeline Processor muss nun noch konfiguriert werden. Am einfachsten erweitert man die Config "Sitecore.Ecommerce.config" um den zusätzlichen Aufruf:

<pipelines>
      <initialize>
        <processor type="Unic.Ecommerce.Pipelines.Loader.RegisterEcommerceProviders, Unic.Ecommerce" patch:after="processor[@type='Sitecore.Ecommerce.Pipelines.Loader.ConfigureEntities, Sitecore.Ecommerce.Kernel']" method="InitializeVatTypeProvider" />
      </initialize>
</pipelines>

Nun können wir ganz bequem die einzelnen Entities wie bei den Ländern abfragen:

IEntityProvider<VatType> vatTypetEntityProvider = Sitecore.Ecommerce.Context.Entity.Resolve<IEntityProvider<VatType>>();
var vatType = vatTypetEntityProvider.Get("Default");

Categories  E-Commerce Tags  EntityProvider  Konfiguration  API

No comments

Add your comment

Your email address will not be published. Required fields are marked *

*