Influencer Marketing: Und was empfehlen Sie so?

Influencer Marketing

Influencer Marketing

Ich bin seit 8 Jahren Sky-Kunde und verbringe jede Woche mindestens drei Stunden damit, Bundesliga-, Europapokal- und DFB-Pokal-Spiele meiner Lieblingsmannschaft zu verfolgen.

In den Halbzeitpausen wirbt der Sender aktuell mit Prämien, wenn ich Sky an Noch-nicht- aber-hoffentlich-bald-Kunden weiterempfehle.

Das Prinzip „Empfehlungen gegen Prämie“ ist gängige Praxis in Marketing und Werbung. Ähnlich funktioniert das Influencer Marketing im Web bzw. in den Sozialen Medien.

Was ist Influencer-Marketing?

Ein Unternehmen beauftragt sogenannte „Influencer“, also aktive Youtuber, Blogger und Twitterer damit, ihre Reichweite zu nutzen, um Werbebotschaften oder Produktempfehlungen zu verbreiten. Diese Beeinflusser dienen dabei dem werbenden Unternehmen als Multiplikatoren. Eine sehr clevere Lösung durch Technologie haben beispielsweise die Verlagshäuser der Bertelsmann-Gruppe geschaffen, die auf ihrem gemeinschaftlichen Bloggerportal.de Influencer auf sich zukommen lassen. Web-Publisher können hier gezielt Rezensionsexemplare anfordern, ihre Beleg-Links einreichen und so hat der Verlag nicht nur qualifizierte Inbound-Anfragen, sondern bekommt auch Analyse-Daten frei Haus zurück geliefert.

Was bringen denn solche Marketingaktionen mit Influencern?

Eine ganz simple Rechnung: Ein Fashion-Unternehmen hat in verschiedenen sozialen Kanälen eine Reichweite von 2.000 Followern. Wird über diese Kanäle ein edles paar Designer-Schuhe beworben, so erreicht diese Botschaft im besten Fall eben jene 2.000 Rezipienten (der Tatsache, dass diese Empfänger das stylishe paar Schuhe ebenso weiterempfehlen können, wird an dieser Stelle der Einfachheit halber keine Rechnung getragen).

Wird jedoch ein Multiplikator beauftragt, diese Schuhe in seinem oder ihrem Netzwerk zu bewerben, so erhöht sich die Reichweite um die Gefolgschaft eben jenes Influencers.

Neben den nackten Zahlen gibt es noch ein paar weitere, marketingpsychologische Effekte:

  • Trust: Der Influencer genießt in seinem Netzwerk einen gewissen Grad an Vertrauen – oftmals mehr als das werbende Unternehmen. Neben der Reichweite wird also – schwer messbar – dieses Vertrauen weitervererbt.
  • Indirekte Einflussnahme: Ähnlich wie bei meinem “Sky”-Beispiel bewirbt der Influencer und nicht das Unternehmen das Produkt. Direkte Werbung wird oftmals argwöhnischer betrachtet als Empfehlungen vertrauter Personen und Personenkreise.
  • Copy with Pride: Verhaltensmuster von Vorbildern werden oftmals kopiert. Bis vor ein paar Jahren zählten neongelbe Fußballtreter nicht unbedingt zum modischem Mainstream. Kaum wurden diese von namhaften Testimonials getragen und zur Schau gestellt, gelangten diese rasend schnell auf Amateurfußball- und Bolzplätze.
  • Social Proof: Das Prinzip des Word-of-Mouth-Marketings kombiniert mit sozialer Akzeptanz und künstlicher Verknappung funktioniert übrigens auch ganz ohne – im klassischen Sinne – prominente Fürsprecher. Tupperpartys sind hier ein seit Jahrzehnten bewährtes Paradebeispiel, ebenso wie der immer weitere Verbreitung findene Thermomix-Alleskönner: Produkte, die nicht im Handel, sondern nur über selbstständige Repräsentanten erhältlich sind. Beiden Unternehmen gelingt es, ohne große “Above-the-Line”-Kampagnen, Kunden zu gewinnen und auch zu binden. Zudem haben die Produktpräsentationen einen nicht zu unterschätzenden Eventcharakter. Das Auditorium wiederum fungiert hier als Multiplikator, indem es den eigenen Bekanntenkreis zu diesen Veranstaltungen einlädt.

Für das Online Marketing eröffnen sich in puncto Influencer Marketing ungeahnte Möglichkeiten.

Aus KPI- bzw. Messbarkeitssicht gibt es bei der Auswahl und Erfolgsmessung möglicher Beeinflusser mehrere Kennzahlen:

  • Die Anzahl der Follower (oder: Abonnenten) gibt einen ersten Hinweis über die mögliche Reichweite. Jedoch verrät diese quantitative Zahl noch nicht viel darüber, ob die Posts, Tweets, Videos auch tatsächlich Beachtung finden.
  • Qualitative Kennziffern ergänzen neben der Reichweite die Interaktionsrate der Influencer mit ihrem Publikum, wie z. B. die Anzahl an Retweets, Likes, Kommentare oder Aufrufe.
  • Testimonial-Brand-Fit: Die Multiplikatoren, wie auch die durch sie angesprochenen Zielgruppen sollten eine Affinität zum werbenden Unternehmen sowie seinen Produkten und Dienstleistungen aufweisen. Somit ist gewährleistet, das neben glaubwürdigen Aussagen auch eine ungefähre Erfolgsquote in Aussicht gestellt werden kann.

Zukunftsausblick Influencer-Marketing

Wir dürfen gespannt sein, wie sich das Influencer Marketing in Zukunft entwickeln wird. Sowohl rechtlich: Denn letztlich müssen Productplacement-Inhalte auch als das was sie sind gekennzeichnet werden: nämlich Werbung. Als Lektüre empfiehlt sich hier das Gesetz zum unlauteren Wettbewerb UWG – insbesondere §3 und §4 inkl. Anhänge.

Aber auch technologisch tut sich einiges: Momentan gibt es schon Marktplätze, auf denen sich Influencer bewerben und Unternehmen nach geeigneten Multiplikatoren Ausschau halten können.

Die technische Komponente wird sich zukünftig sicherlich auch noch entwicklen. So werden Bezahlmodelle Schule machen, die sich nicht mit der bloßen Verbreitung von Inhalten begnügen, sondern erfolgsabhängig gestaltet werden. Amazon vergütet über das Affiliate Marketing seine Multiplikatoren anteilig am Verkaufspreis des verlinkten Produktes (sofern der Käufer seine Transaktion über eben diesen Link tätigt). Ähnlich wird das Influencer Marketing funktionieren. Über eine Parametrisierung der URL werden Rückschlüsse gebildet, aus welcher Quelle die Transaktion stammt.

Hier steckt Musik drin. Und nicht zu wenig.

Sitecore Commerce Connect – Teil 3: Klassifizierungen synchronisieren

Im letzten Teil dieser Serie ging es um die Synchronisation von Produkten. Das Ziel dieses Blog-Artikels ist es auch Klassifizierungen unidirektional aus dem Sitecore heraus mit dem externen Commerce System (kurz ECS, in unserem Fall Hybris) zu synchronisieren und den Produkten zuzuordnen.

Klassifizierungen sind im Projekt individuell definierbare Spezifikationen zur Beschreibung von Produkten. Die sog. Classifications in Sitecore können über eine Parent-Verknüpfung (ExternalParentID) beliebig geschachtelt werden, die erste Ebene ist aber immer eine Gruppe, eine sog. ClassificationGroup.
ClassificationRepo

Synchronisation Klassifizierungen

Um Klassifizierungen zu synchronisieren muss zunächst die Pipeline ’synchronizeClassifications‘ der Sitecore.Commerce.Products.config erweitert werden:

Pipeline synchronizeClassifications

.config

[xml]
<!– SYNCHRONIZE CLASSIFICATIONS –>
<commerce.synchronizeProducts.synchronizeClassifications>
<processor type="Sitecore.Commerce.Pipelines.Products.SynchronizeClassifications.ReadSitecoreClassifications, Sitecore.Commerce">
<patch:delete />
</processor>
<processor type="Sitecore.Commerce.Pipelines.Products.SynchronizeClassifications.ResolveClassificationsChanges, Sitecore.Commerce">
<patch:delete />
</processor>
<processor type="Sitecore.Commerce.Pipelines.Products.SynchronizeClassifications.SaveClassificationsToExternalCommerceSystem, Sitecore.Commerce" >
<patch:delete />
</processor>
<processor type="Comspace.Sitecore.CommerceConnect.Hybris.Pipelines.Classifications.ReadClassifications, Comspace.Sitecore.CommerceConnect.Hybris" patch:after="processor[@type=’Sitecore.Commerce.Pipelines.Products.SynchronizeClassifications.ReadExternalCommerceSystemClassifications, Sitecore.Commerce‘]" />
<processor type="Comspace.Sitecore.CommerceConnect.Hybris.Pipelines.Classifications.ReadClassificationGroups, Comspace.Sitecore.CommerceConnect.Hybris" patch:after="processor[@type=’Sitecore.Commerce.Pipelines.Products.SynchronizeClassifications.ReadExternalCommerceSystemClassifications, Sitecore.Commerce‘]" />
</commerce.synchronizeProducts.synchronizeClassifications>
[/xml]

Processor ReadClassificationGroups

[csharp]using System.Collections.Generic;
using System.Linq;
using Comspace.Sitecore.CommerceConnect.Hybris.Connector;
using Comspace.Sitecore.CommerceConnect.Hybris.Connector.Model;
using Sitecore.Commerce.Entities.Products;
using Sitecore.Commerce.Pipelines;
using Sitecore.Commerce.Services.Products;

namespace Comspace.Sitecore.CommerceConnect.Hybris.Pipelines.Classifications
{
/// <summary>
/// commerce.synchronizeProducts.synchronizeClassifications
/// </summary>
public class ReadClassificationGroups : PipelineProcessor<ServicePipelineArgs>
{
public override void Process(ServicePipelineArgs args)
{
var request = args.Request as SynchronizationRequest;
var groups = request.Properties["ClassificationGroups"] as List<ClassificationGroup>; //integration guide (page 9)
groups = groups ?? new List<ClassificationGroup>();

//get groups from ECS
IEnumerable<ExternalCategoryGroup> categoryGroups = ClassificationConnector.Load(request.Language);

//convert and add to commerce connect list
groups.AddRange(from @group in categoryGroups
select new ClassificationGroup
{
ExternalId = @group.Code,
Name = @group.Name
});

//persist for next processor
request.Properties["ClassificationGroups"] = groups;
}
}
}[/csharp]

Processor ReadClassifications

[csharp]using System.Collections.Generic;
using System.Collections.ObjectModel;
using Comspace.Sitecore.CommerceConnect.Hybris.Connector;
using Comspace.Sitecore.CommerceConnect.Hybris.Connector.Model;
using Sitecore.Commerce.Entities.Products;
using Sitecore.Commerce.Pipelines;
using Sitecore.Commerce.Services.Products;

namespace Comspace.Sitecore.CommerceConnect.Hybris.Pipelines.Classifications
{
/// <summary>
/// commerce.synchronizeProducts.synchronizeClassifications
/// </summary>
public class ReadClassifications : PipelineProcessor<ServicePipelineArgs>
{
public override void Process(ServicePipelineArgs args)
{
var request = args.Request as SynchronizationRequest;
var groups = request.Properties["ClassificationGroups"] as List<ClassificationGroup>; ////integration guide (page 9)
groups = groups != null ? groups : new List<ClassificationGroup>();

foreach (ClassificationGroup group in groups)
{
var classifications = new List<Classification>();

//get categories from ECS
foreach (ExternalCategory externalCategory in ClassificationConnector.Load(group.ExternalId, request.Language)) //TBD
{
//convert to commerce connect classification
var classification = new Classification();
classification.ExternalId = externalCategory.Code;
classification.Name = externalCategory.Name;
classifications.Add(classification);

//…with sub-classifications
HandleSubCategories(externalCategory, classifications);
}
group.Classifications = new ReadOnlyCollection<Classification>(classifications);
}

//persist for next processor
request.Properties["ClassificationGroups"] = groups;
}

private static void HandleSubCategories(ExternalCategory parentCategory, List<Classification> allClassifications)
{
if (parentCategory.Categories != null)
{
foreach (var category in parentCategory.Categories)
{
var classification = new Classification();
classification.ExternalId = category.Code;
classification.Name = category.Name;
classification.ExternalParentId = parentCategory.Code;

allClassifications.Add(classification);
HandleSubCategories(category, allClassifications);
}
}
}
}
}
[/csharp]

Klassifizierungen Produkten zuordnen

Anschließend müssen die Klassifizierungen nur noch den Produkten zugeordnet werden. Und auch dafür muss wieder eine Pipeline der Sitecore.Commerce.Products.config erweitert werden:

Pipeline synchronizeProductClassifications

.config

[xml]<!– SYNCHRONIZE PRODUCT CLASSIFICATIONS
This pipeline is responsible for synchronizing and updating the references between a given product and associated classifications and categories within.
It’s assumed that classifications are already synchronized and present in CMS.
The references to categories are stored directly on the main product item. –>
<commerce.synchronizeProducts.synchronizeProductClassifications>
<processor type="Comspace.Sitecore.CommerceConnect.Hybris.Pipelines.Products.ReadProductClassifications, Comspace.Sitecore.CommerceConnect.Hybris" patch:after="processor[@type=’Sitecore.Commerce.Pipelines.Products.SynchronizeProductClassifications.ReadExternalCommerceSystemProductClassifications, Sitecore.Commerce‘]" />
</commerce.synchronizeProducts.synchronizeProductClassifications>[/xml]

Processor ReadProductClassifications

[csharp]using System.Collections.Generic;
using System.Collections.ObjectModel;
using System.Linq;
using Comspace.Sitecore.CommerceConnect.Hybris.Connector;
using Comspace.Sitecore.CommerceConnect.Hybris.Connector.Model;
using Sitecore.Commerce.Entities.Products;
using Sitecore.Commerce.Pipelines;
using Sitecore.Commerce.Services.Products;

namespace Comspace.Sitecore.CommerceConnect.Hybris.Pipelines.Products
{
/// <summary>
/// commerce.synchronizeProducts.synchronizeProductClassifications
/// </summary>
public class ReadProductClassifications : ReadProduct
{
public override void Process(ServicePipelineArgs args)
{
var request = args.Request as SynchronizeProductRequest;
var product = request.Properties["Product"] as Product;
var groups = request.Properties["ClassificationGroups"] as List<ClassificationGroup>;
groups = groups != null ? groups : new List<ClassificationGroup>();

//get product from ECS
ExternalProduct externalProduct = ProductConnector.Load(request.Language, product.ExternalId); //tbd
if (externalProduct != null && IsProductValidForImport(externalProduct))
{
//convert to commerce connect product classification groups and classifications
foreach (ExternalCategoryGroup externalCategoryGroup in externalProduct.CategoryGroups)
{
ClassificationGroup group = new ClassificationGroup();
group.ExternalId = externalCategoryGroup.Code;
group.Name = externalCategoryGroup.Name;

IEnumerable<Classification> classifications = from externalCategory in externalCategoryGroup.Categories
select new Classification
{
ExternalId = externalCategory.Code,
Name = externalCategory.Name
};
group.Classifications = new ReadOnlyCollection<Classification>(classifications.ToList());

groups.Add(group);
}
}

//persist for next processor
request.Properties["ClassificationGroups"] = groups;
}
}
}[/csharp]

Resumé

Mein erster Eindruck:

  • Es gibt viel Dokumentation, aber z.B. zum Thema Zuordnung von Klassifikationen zu Produkten konnte ich nichts finden. Da habt ihr es jetzt ja besser 😉 Häufig war dann doch dotPeek mein bester Freund.
  • Der Differenzabgleich funktionierte problemlos, Mehrsprachigkeit war im Kontext der Zuordnung von Klassifizierungen zu Produkten noch etwas holprig, da sollte ein zweiter Blick erfolgen.

Wenn ihr mehr zum Sitecore Commerce Connect wissen wollt, dann schaut mal hier:

Sitecore Commerce Connect – Teil 2: Produkte synchronisieren

Im ersten Teil dieser Serie ging es darum einen kurzen Überblick über das Sitecore Commerce Connect Modul zu verschaffen. In diesem Beitrag geht es nun um die Synchronisation von Produkten zwischen einem externen Shopsystem (kurz ECS, in unserem PoC Hybris) und Sitecore.

Zunächst ist es wichtig zu verstehen, dass Preise und Bestand im Commerce Connect nicht als Produktstammdaten gelten. Der Bestand ändert sich ständig und DEN Preis gibt es ja auch nicht, Preisfindung ist ein sehr komplexes Thema. Sitecore geht davon aus, dass diese Informationen online vom ECS ermittelt und geliefert werden. Im Teil 4 dieser Serie wird dann beschrieben, wie ihr auch an diese Informationen kommt.

image00

Die Hoheit für die Produktdaten liegt sicherlich im ECS. Für die Synchronisation der Produktdaten schlägt Sitecore folgende Varianten vor:

  1. Produkte als Items in Sitecore Datenbank (optional bidirektional)
  2. Produkte in ECS, Zugriff über Sitecore Data Provider
  3. Produkte in ECS, Zugriff über Sitecore Index

Wir haben uns im Verlauf des PoC für die Variante 1 entschieden, da diese standardmäßig vom Sitecore so vorgesehen ist und den höchsten Komfort bietet. In der Sitecore Commerce Components Overview im Kapitel “Products” sind einige Argumente für oder gegen die unterschiedlichen Variante aufgeführt.

So, jetzt aber Butter bei die Fische 🙂

Installation Modul

Falls ihr das Modul noch nicht installiert habt, findet ihr wie gewohnt eine gute Installationsanleitung auf dev.sitecore.net.

Synchronisation Produkte

Das Ziel: Titel, Beschreibung und Bilder der Produkte aus dem externen Shopsystem mit Sitecore zu synchronisieren.

image01

In folgende Pipelines der Sitecore.Commerce.Products.config muss für die unidirektionale Synchronisation der Produkte eingegriffen werden:

Pipeline getExternalCommerceSystemProductList

.config

[xml]
&lt;!– GET EXTERNAL COMMERCE SYSTEM PRODUCT LIST
This pipeline is responsible for obtaining the list of product Ids to be synchronized from the external commerce system.–&gt;
&lt;commerce.synchronizeProducts.getExternalCommerceSystemProductList&gt;
&lt;processor type="Sitecore.Commerce.Pipelines.Products.GetExternalCommerceSystemProductList.GetExternalCommerceSystemProductList, Sitecore.Commerce"&gt;
&lt;patch:delete /&gt;
&lt;/processor&gt;
&lt;processor type="Comspace.Sitecore.CommerceConnect.Hybris.Pipelines.Products.ReadProducts, Comspace.Sitecore.CommerceConnect.Hybris" /&gt;
&lt;/commerce.synchronizeProducts.getExternalCommerceSystemProductList&gt;
[/xml]

Processor ReadProducts

[csharp]
using System.Collections.Generic;
using System.Linq;
using Comspace.Sitecore.CommerceConnect.Hybris.Connector;
using Comspace.Sitecore.CommerceConnect.Hybris.Connector.Model;
using Sitecore.Commerce.Pipelines;
using Sitecore.Commerce.Services.Products;

namespace Comspace.Sitecore.CommerceConnect.Hybris.Pipelines.Products
{
/// &lt;summary&gt;
/// commerce.synchronizeProducts.getExternalCommerceSystemProductList
/// &lt;/summary&gt;
public class ReadProducts : PipelineProcessor&lt;ServicePipelineArgs&gt;
{
public override void Process(ServicePipelineArgs args)
{
var request = args.Request as SynchronizeProductsRequest;
var productIds = args.Request.Properties["ExternalCommerceSystemProductIds"] as List&lt;string&gt;; //integration guide (page 12)
productIds = productIds ?? new List&lt;string&gt;();

//get products from ECS
IEnumerable&lt;ExternalProduct&gt; externalProducts = ProductConnector.Load(request.Language);

//convert and add to commerce connect list
productIds.AddRange(from product in externalProducts
where product.Code != null
select product.Code);

//persist for next processor
args.Request.Properties["ExternalCommerceSystemProductIds"] = productIds;
}
}
}
[/csharp]

Pipeline synchronizeProductEntity

.config

[xml]
&lt;!– SYNCHRONIZE PRODUCT ITEM –&gt;
&lt;commerce.synchronizeProducts.synchronizeProductEntity&gt;
&lt;processor type="Sitecore.Commerce.Pipelines.Products.SynchronizeProductEntity.ReadProductFromSitecore, Sitecore.Commerce"&gt;
&lt;patch:delete /&gt;
&lt;/processor&gt;
&lt;processor type="Sitecore.Commerce.Pipelines.Products.SynchronizeProductEntity.SaveProductToExternalCommerceSystem, Sitecore.Commerce" &gt;
&lt;patch:delete /&gt;
&lt;/processor&gt;
&lt;processor type="Comspace.Sitecore.CommerceConnect.Hybris.Pipelines.Products.ReadProduct, Comspace.Sitecore.CommerceConnect.Hybris" patch:after="processor[@type=’Sitecore.Commerce.Pipelines.Products.SynchronizeProductEntity.ReadExternalCommerceSystemProduct, Sitecore.Commerce‘]" /&gt;
&lt;/commerce.synchronizeProducts.synchronizeProductEntity&gt;
[/xml]

Processor ReadProduct

[csharp]
using Comspace.Sitecore.CommerceConnect.Entities.Products;
using Comspace.Sitecore.CommerceConnect.Hybris.Connector;
using Comspace.Sitecore.CommerceConnect.Hybris.Connector.Model;
using Sitecore.Commerce.Pipelines;
using Sitecore.Commerce.Services.Products;
using Sitecore.Diagnostics;

namespace Comspace.Sitecore.CommerceConnect.Hybris.Pipelines.Products
{
/// &lt;summary&gt;
/// commerce.synchronizeProducts.synchronizeProductEntity
/// &lt;/summary&gt;
public class ReadProduct : PipelineProcessor&lt;ServicePipelineArgs&gt;
{
public override void Process(ServicePipelineArgs args)
{
SynchronizeProductRequest syncProdRequest = args.Request as SynchronizeProductRequest;

//get product from ECS
ExternalProduct externalProduct = ProductConnector.Load(syncProdRequest.Language, syncProdRequest.ProductId); //TBD
if (externalProduct != null &amp;&amp; IsProductValidForImport(externalProduct))
{
CustomProduct product = new CustomProduct();
product.ExternalId = externalProduct.Code;
product.Name = externalProduct.Name;
product.FullDescription = externalProduct.Summary;
product.ImageUrl = HybrisSettings.Url + externalProduct.ImageUrl; //custom property

//persist for next processor
args.Request.Properties["Product"] = product; //integration guide (page 12)
}
}

protected bool IsProductValidForImport(ExternalProduct product)
{
var result = true;
if (string.IsNullOrEmpty(product.Name)) // = item.Name
{
result = false;
Log.Info("Skip product ‚" + product.Code + "‘: Name not valid.", product); //NOTE System.Messages
}
return result;
}
}
}
[/csharp]

CustomProduct

Wenn auch die Bilder synchronisiert werden sollen, muss das Produkt-Template des Commerce Connect erweitert werden. Konkret müssen dafür folgende Anpassungen vorgenommen werden:

Template
Neues Template “CustomProduct” anlegen, welches vom Standard Commerce Connect Template „Product“ erbt.

Klassen
Erweiterte Produkt-Klasse „CustomProduct“ definieren:

[csharp]
using Sitecore.Commerce.Entities.Products;
using Sitecore.Data.Items;

namespace Comspace.Sitecore.CommerceConnect.Entities.Products
{
/// &lt;summary&gt;
/// Custom product including image field.
/// &lt;/summary&gt;
public class CustomProduct : Product
{
public string ImageUrl { get; set; }

public MediaItem Image { get; set; }
}
}
[/csharp]

Die Klasse „CustomProductRepository“ definiert dann wie das erweiterte Produkt gelesen und geschrieben wird:

[csharp]
using Comspace.Sitecore.CommerceConnect.Entities.Products;
using Comspace.Sitecore.CommerceConnect.Model.sitecore.templates.User_Defined.Comspace.CommerceConnect;
using Sitecore.Commerce.Data.Products;
using Sitecore.Data.Fields;
using Sitecore.Data.Items;
using Product = Sitecore.Commerce.Entities.Products.Product;

namespace Comspace.Sitecore.CommerceConnect.Data.Products
{
/// &lt;summary&gt;
/// Custom product repository including image field.
/// &lt;/summary&gt;
public class CustomProductRepository : ProductRepository
{
/// &lt;summary&gt;
/// Save product data to related item.
/// &lt;/summary&gt;
/// &lt;param name="entityItem"&gt;&lt;/param&gt;
/// &lt;param name="product"&gt;&lt;/param&gt;
protected override void UpdateEntityItem(Item entityItem, Product product)
{
base.UpdateEntityItem(entityItem, product);

using (new EditContext(entityItem))
{
var url = (product as CustomProduct).ImageUrl;

var image = GetMediaItem(url, product); //TBD
ImageField imagefield = entityItem.Fields[IProductConstants.ImageFieldName];
imagefield.Alt = image.Alt;
imagefield.MediaID = image.ID;
}
}

/// &lt;summary&gt;
/// Read product data from related item.
/// &lt;/summary&gt;
/// &lt;param name="entityItem"&gt;&lt;/param&gt;
/// &lt;param name="product"&gt;&lt;/param&gt;
protected override void PopulateEntity(Item entityItem, Product product)
{
base.PopulateEntity(entityItem, product);

ImageField imageField = entityItem.Fields[IProductConstants.ImageFieldName];
(product as CustomProduct).Image = imageField == null ? null : imageField.MediaItem;
}

#region Handle MediaItem
//…
#endregion
}
}
[/csharp]

.config
Angepasste Templates und Klassen in Sitecore.Commerce.Products.config registrieren:

[xml]
&lt;!– PRODUCT REPOSITORY –&gt;
&lt;productRepository type="Sitecore.Commerce.Data.Products.ProductRepository, Sitecore.Commerce"&gt;
&lt;patch:delete /&gt;
&lt;/productRepository&gt;
&lt;productRepository type="Comspace.Sitecore.CommerceConnect.Data.Products.CustomProductRepository, Comspace.Sitecore.CommerceConnect" singleInstance="true"&gt;
&lt;template&gt;{0C589D66-A119-435A-907F-43481CD5199F}&lt;/template&gt;
&lt;branch&gt;{0C589D66-A119-435A-907F-43481CD5199F}&lt;/branch&gt;
&lt;path ref="paths/products" /&gt;
&lt;Prefix&gt;Product_&lt;/Prefix&gt;
&lt;ProductsIndex&gt;commerce_products_master_index&lt;/ProductsIndex&gt;
&lt;ManufacturerRepository ref="productManufacturerRepository" /&gt;
&lt;DivisionRepository ref="productDivisionRepository" /&gt;
&lt;TypeRepository ref="productTypeRepository" /&gt;
&lt;ClassificationsRepository ref="productClassificationsFieldRepository" /&gt;
&lt;ResourcesRepository ref="productResourcesRepository" /&gt;
&lt;RelationsRepository ref="productRelationsRepository" /&gt;
&lt;GlobalSpecificationsRepository ref="productGlobalSpecificationsRepository" /&gt;
&lt;ClassificationsSpecificationsRepository ref="productClassificationsSpecificationsRepository" /&gt;
&lt;TypeSpecificationsRepository ref="productTypeSpecificationsRepository" /&gt;
&lt;/productRepository&gt;

&lt;includeTemplates&gt;
&lt;ProductTemplateId&gt;{0C589D66-A119-435A-907F-43481CD5199F}&lt;/ProductTemplateId&gt;
&lt;/includeTemplates&gt;

&lt;!– Commerce ENTITIES
Contains all the Commerce cart entities.
The configuration can be used to substitute the default entity implementation with extended one. –&gt;
&lt;commerce.Entities&gt;
&lt;Product type="Sitecore.Commerce.Entities.Products.Product, Sitecore.Commerce" &gt;
&lt;patch:delete /&gt;
&lt;/Product&gt;
&lt;Product type="Comspace.Sitecore.CommerceConnect.Entities.Products.CustomProduct, Comspace.Sitecore.CommerceConnect" /&gt;
&lt;/commerce.Entities&gt;
[/xml]

Stolpersteine

In der Klasse „Sitecore.Commerce.Templates“ existiert eine Konstante „ProductTemplateId“, deren Id fest verdrahtet ist und nicht auf die zuvor eingerichteten Konfigurationsdateien verweist. Die Konstante wird u.a. in der Klasse „ItemClassificationService“ verwendet, daher ist dieser auszutauschen:

[xml]
&lt;itemClassificationService type="Sitecore.Commerce.Products.ItemClassificationService, Sitecore.Commerce"&gt;
&lt;patch:delete /&gt;
&lt;/itemClassificationService&gt;
&lt;itemClassificationService type="Comspace.Sitecore.CommerceConnect.Entities.ItemClassificationService, Comspace.Sitecore.CommerceConnect" /&gt;
[/xml]

Resumé

Zuletzt möchte ich ein paar erste Eindrücke und Erkenntnisse zusammenfassen:

  • Der erste Einstieg durch Pipelines in Pipelines in Pipelines ist herausfordernd.
  • Es gibt umfangreiche Dokumentationen.
  • Einige hilfreiche Klassen aus Beispielen im Internet verweisen leider auf die CommerceServer API, z.B. ProductsSearchResult und CommerceConstants. Auch in dem Dynamics AX Demoshop von Sitecore (Commerce.Dynamics.Storefront) sind Verweise auf die CommerceServer API enthalten. Die Trennung bzw. Abstraktion ist m.E. noch nicht ganz sauber erfolgt.
  • Verwunderlich fand ich zunächst, dass die Synchronisation von Bildern nicht im Standard enthalten ist. Aber dem von Sitecore definierten Prinzip “kleinster gemeinsamer Nenner” folgend, ist es verständlich, denn Bild-Quelle und -Ziel sind doch sehr projektspezifisch.
  • Der “Merchandising Manager” ist NICHT Bestandteil des Commerce Connect, sondern des CommerceServer Connect.
  • In einem echten Projekt mit einem umfangreichen Datenmodell wird der größte Aufwand in das Verständnis und das Mapping der Datenmodelle gehen.

Wenn ihr mehr zum Sitecore Commerce Connect wissen wollt, dann schaut mal hier:

New Work 2016 ist was für Spinner. Noch. Ein optimistischer Ausblick

HR & digitale Transformation - think bigger!

Das Jahr 2015 geht zu Ende und Bastian Wilkat ruft zum Blick in die Glaskugel. “New Work 2016 – Vom Hype zum Allag?” Wird New Work weiter aus der Nische kommen oder verkommt es vielleicht sogar schon zum Buzzword? Um es kurz zu machen: Ich finde das zu optimistisch. Nicht, dass ich es mir nicht wünschen würde! Aber von irgendeiner Art von Alltag ist die deutsche Unternehmenskultur meiner Meinung nach in Sachen “Neues Arbeiten” noch weit entfernt.

Warum New Work 2016 nur Gallier interessiert

Mein direktes Arbeitsumfeld empfinde ich als sehr “new workig”. Bei comspace gibt es dank unserer Unternehmenskultur und digitalisierter Arbeitsumgebung flexible Arbeitsmodelle, ein gelebtes Gemeinschaftsgefühl und Freiraum für Individualität. So weit, so gut. Aber: Wer einmal mit dem New Work-Gedanken angesteckt ist, schärft automatisch seine Wahrnehmung zu diesem Thema. Man besucht Barcamps und Konferenzen zum Thema Arbeiten 4.0, vernetzt sich mit Gleichgesinnten und liest entsprechende Blogs. So kann schnell der Eindruck entstehen, New Work und all seine Synonyme würden längst zum durchgekauten Begriff. Spricht man aber mit Leuten außerhalb dieser New Work-Wolke wird schnell klar, dass viele vermeintliche Buzzwords und die Konzepte dahinter totales Neuland sind. Man stößt auf ungläubige Blicke, irritierte Kommentare und im besten Fall auf kritische Fragen, die zu einer weiteren Diskussion über das Thema führen. Ähnlich hat es auch bereits Guido Bosbach in seinem Beitrag zu dieser Blogparade beschrieben:

Da gibt es zwar die kleine Gruppe unbeugsamer, die in ihrem virtuellen gallischen Dorf immer wieder darauf hinwiesen, dass wir mittendrin sind in einer globalen Veränderung von Arbeitsweisen, Arbeitsstrukturen und Arbeitszielsetzungen. 

Auf andere HR-Themen übertragen hat übrigens Henner Knabenreich neulich beim XING Barcamp eine ganz ähnliche Erfahrung mit der Candidate Experience gemacht. New Work wird daher auch 2016 noch einen Exotenstatus haben und von Alltag weit entfernt sein.

 »Menschen mit einer neuen Idee gelten so lange als Spinner, bis sich die Sache durchgesetzt hat.« Mark Twain

Nun wäre es ein leichtes sich auf dieser ernüchternden These auszuruhen und alle New Work-Pioniere (zugegebenermaßen provokant) als Spinner abzutun. Warum wir das bei comspace nicht tun, liegt daran, dass wir vom New Work Gedanken überzeugt sind. Wir leben New Work und möchten den Gedanken einer Unternehmenskultur auf Augenhöhe weitertragen. Manchmal kommen wir dabei auch an unsere Grenzen, und zwar spätestens wenn es um unsere Systemgrenzen geht: in Kundenterminen, Vorstellungsgesprächen, öffentlichen Veranstaltungen. Dann merken wir, dass wir uns weiter oder sogar mehr anstrengen sollten, wenn wir dazu beitragen wollen, dass New Work irgendwann gelebter Unternehmensalltag in Deutschland wird.

Was können wir tun?

In unserer Wahrnehmung ist es so, dass es eigentlich fast niemanden gibt, der extern ist, also der nicht betroffen ist von dem was wir tun oder von dem was wir nicht tun. (Uwe Lübbermann, Premium Cola)

Wer als Unternehmen bereits intern den New Work-Gedanken lebt, kann den Kreis der Beteiligten erweitern, die in dieses Konzept einbezogen werden. D.h. wir können New Work vorleben, z.B. in dem wir die Nutzen der digitalen Zusammenarbeit auch verstärkt für Kunden oder Bewerber aufzeigen, z.B. ausgewählte Kundentermine oder Vorstellungsgespräche via Skype. Das spart Zeit, Kosten und natürliche Ressourcen.

Wie wir den New Work Gedanken weitertragen können:

  • Das Projekt AUGENHÖHEwege unterstützen
  • Austausch mitgestalten, z.B. bei Veranstaltungen wie dem nächsten Wevent zum Thema “New Work im Konzern”.
  • In persönlichen Gesprächen oder auf Veranstaltungen Impulse liefern, für Irritation sorgen, positive Beispiele kommunizieren und den New Work-Gedanken Stück für Stück zu mehr Präsenz verhelfen.

New Worker müssen andere einbinden, coachen, motivieren, anstecken. (Alex Kahl, Digital Strategist bei comspace)

Längerfristig betrachtet bin ich der Überzeugung, dass “New Work” sich als Konzept von Unternehmenskultur, Zusammenarbeit und Begegnung auf Augenhöhe durchsetzen wird. Vielleicht nicht im Jahr 2016, aber sicher später. Vielleicht sogar schon im Jahr 2025; so wie viele von den Impulsgebern des Projekts “Arbeitsvisionen 2025”  das vermuten. Denn dafür sprechen einige gute Gründe:

  • Die demografische Entwicklung, die die strukturellen Machtverhältnisse zugunsten der Arbeitnehmer verschiebt. Wer nicht mit einer positiven Arbeitskultur punkten kann, wird im Zweifel der evolutionäre Verlierer auf dem Arbeitgebermarkt sein.
  • Die Generation Y, die mit neuen Vorstellungen von (Zusammen-)Arbeit die Unternehmen füllt und gestaltet.
  • Die Kraft des Menschlichen: In einer zunehmend komplexen und digitalisierten Welt werden sich Unternehmen dadurch unterscheiden, inwieweit sie menschliche Zusammenarbeit in den Fokus ihres Tuns rücken.

Weitere Beiträge zur Blogparade

Stefan Pfeiffer: Digitale Transformation, das Middle-Management und der Traum vom selbstständig handelnden Mitarbeiter.

Guido Bosbach: Warum in die Ferne schweifen, wenn die Zukunft… irgendwie doch nicht beginnt.

Sitecore Commerce Connect – Teil 1: Ein Überblick am Beispiel Hybris

Wie in meinem Vortrag zum Thema “Evaluierung einer Hybris-Anbindung an Sitecore” auf der letzten Sitecore Usergroup in Bielefeld versprochen, möchte ich mit dieser Beitragsserie unsere ersten Eindrücke von der Anbindung eines externen Shopsystems (in diesem Beispiel Hybris) an Sitecore mittels des Commerce Connect Moduls mit euch teilen.

In diesem Artikel geht es mir darum, euch einen ersten Überblick über das Marketing-Potenzial und Funktionsumfang des Moduls zu verschaffen. In den nächsten Beträgen wird es dann technischer mit konkreten Ausschnitten aus Konfigurationsdateien und Quellcode.

Warum sollten WebCMS und E-Commerce Platform verbunden werden?

Bevor wir an die technischen Details gehen, erlaube ich mir zunächst einige Gedanken aus Sicht von Produkt-Management, Marketing und Vertrieb auf Betreiberseite:

Webnutzer erwarten immer mehr eine einheitliche User-Experience, die sich über alle Kanäle und Plattformen eines Unternehmens erstrecken soll. Zudem  bringen auch Online-Shop Systeme kleinere CMS-Funktionalitäten mit und damit wird auch die Darstellung von Inhalten immer besser. Warum sollten dann CMS und Shop miteinander verbunden werden?

Sitecore bietet bereits in seiner eigenen Suite ein umfangreiches Bundle an Funktionen, um verschiedenste Touchpoints (Webseite, Newsletter, Social Media, Offline-Kanäle am POS usw.) zu einem Nutzererlebnis aus einem Guss zu verschmelzen.

Mit diesem Beispiel möchte ich Möglichkeiten aufzeigen, mit denen Besuchern auch auf Unternehmenswebseiten die Kernfunktionalitäten eines Online-Shops angeboten werden können (wie bspw. Produkte in den Warenkorb legen) und wie diese kombinierten Webseiten- und E-Commerce-Daten dann von der Unternehmenswebseite automatisch an das Shopsystem übergeben werden.

Ein Beispiel für eine Customer Journey mit Optimierungspotenzial sähe beispielsweise so aus:

Der Kunde schaut auf einer Webseite nach einem Produkt, muss sich das Produkt merken und im separaten Online-Shop danach suchen um zu bestellen. 

Das bedeutet:
Durch die zwei separaten Technologien Webseite und Shop entsteht für den Kunden Fehler- und Frustrations-Potenzial. Für Unternehmen und Shop-Anbieter kann das bedeuten: Erhöhte Abbruchgefahr und damit niedrigere Conversion-Rate.

Mit Lösungen wie dem Commerce Connect arbeitet die Technologie im Hintergrund für den Kunden, nimmt ihm Arbeitsschritte ab und erhöht damit die Wahrscheinlichkeit, dass es zu einem Verkauf kommt.

Der Endkunde bemerkt so den Technologiewechsel aus dem WebCMS in den Online-Shop überhaupt nicht und hat ein nahtloses Nutzererlebnis im Bestellprozess.

Kurzvorstellung Sitecore Commerce Connect

Sitecore Commerce Connect sieht sich als Framework und API zur nahtlosen Integration von 3rd-Party Commerce Systemen in Sitecore. Das Ziel ist die Überführung der Experience Marketing Features in die Commerce Welt:

  • Einheitliche Darstellung:  Produktkataloge, “normale” Inhalte und Bilder aus einem Guss
  • Bearbeitung von Produktkatalogen, Seiteninhalten und Bildern in einen System
  • Nutzung der Sitecore Facettensuche über ALLE Inhalte.
  • Personalisierung auch über das Kaufverhalten der Besucher
  • Tracking von Conversions und Values rund um den Einkauf
  • Identifizierung von und Einblick in die wertvollsten Kunden
  • Reaktion auf Änderungen im Geschäft, in Echtzeit

Konkreter Umfang des Commerce Connect Moduls

Das Sitecore Modul bietet die Möglichkeit Produktkataloge mit dem externen Commerce System zu synchronisieren, d.h. es stellt entsprechende Templates, Klassen, Repositories, Import-Pipelines etc. zur Verfügung:

Sitecore-Commerce-Connect-Modul

Erste Engagement-Pläne zu Warenkorb-Abbrüchen, neuen Aufträgen und Wiederverfügbarkeit von Produktbeständen werden mitgeliefert und genutzt:

Sitecore-Commerce-Connect-Engagement-Plan

Selbstverständlich kommen auch Erweiterungen für die Sitecore Rule Engine mit:

Sitecore-Commerce-Connect-Rule-Engine

Das Framework des Sitecore Commerce Connect 

Die Architektur wird von Sitecore wie folgt skizziert, wobei der Commerce Server Connector und der Dynamics AX Connector fertige Connectoren von Sitecore selbst sind und der Hybris Connector von uns im Rahmen der Evaluierung entwickelt wurde.

Service Layer:

Folgende Bereiche deckt das Modul ab:

  • Warenkorb
  • Preise
  • Kunden und Benutzer
  • Bestände
  • Produkte
  • Aufträge
  • Geschenkkarten
  • Wunschlisten
  • Bezahlung
  • Versand
  • Treueprogramme

Die einzelnen Layer sind optional und unabhängig voneinander. Ein Layer umfasst ein Datenmodell und Pipelines mit ggf. zugehörigen Service Providern. Die farblich markierten Service Layer wurden im Rahmen des PoC näher beleuchtet. Wenn ihr einen Eindruck haben möchtet was sich dahinter verbirgt, habt etwas Geduld – die zugehörigen Artikel folgen.

Prinzipien

Weil sie mir so gut gefallen haben, hier eine kurze Zusammenfassung und Übersetzung der Prinzipien welche dem Modul von Sitecore selbst auferlegt wurden:

  • Simplicity – kleinster gemeinsamer Nenner
  • Extensibility – Domain Model erweiterbar
  • Independently – keine Abhängigkeit zwischen Service Layern
  • Abstraction – keine Sitecore oder Shopsystem Abhängigkeit in Service Layern
  • Pipelines – jeder Service Layer benutzt Sitecore Pipelines
  • Fallback – fehlende Implementierungen im Shopsystem können überbrückt werden

Erstes Resumé

Mein Eindruck nach der Evaluierung des Commerce Connect anhand einer Hybris-Anbindung:

  • Der erste Einstieg ist herausfordernd, kurz stand ich davor wie “der Ochs vorm Berg”. Auf dem Partnertag in Frankfurt wurde von Sitecore eine Schulung zu dem Modul angekündigt. Die kann ich dann nur empfehlen.
  • Das bringt mich zu den zur Verfügung stehenden Materialien:
    • Es gibt umfangreiche Dokumentationen über das Modul im Developer Netzwerk.
    • Cookbooks gibt es leider keine, diese helfen sonst häufig die erste Hürde zu nehmen.
    • Wenn die Dokumentation nicht weiter hilft, gibt es im Internet aktuell leider noch wenig Material zum Commerce Connect.
    • Geholfen haben immer wieder die herunterladbaren Beispiel-Implementierungen für AX und CommerceServer und natürlich dotPeek.
  • Customizing gehört zum Grundkonzept. Durch eine gute Abstraktion ist fast alles flexibel anpassbar. Das gefällt, auch wenn es manchmal nicht einfach ist, im Pipeline-Dschungel den Überblick zu bewahren.
  • Für eine solide und benutzerfreundliche Integration ist eCommerce-KnowHow unumgänglich. Die dahinterliegenden Modelle und Prozesse müssen durchdrungen werden.
  • Die Komplexität einer Commerce Integration bringt auch höhere Konzeptions- und Abstimmungsaufwände mit sich als vielleicht sonst im CMS-Umfeld üblich.
  • Das Modul umfasst keine Layout-Komponenten und keine speziellen Applikationen.
  • Der “Merchandising Manager” ist  NICHT Bestandteil des Commerce Connect, sondern des CommerceServer Connect.
  • Eine gute Einsatzmöglichkeit für das Modul ist m.E. eine PIM-Integration.
  • Zu guter Letzt: Die Arbeit mit dem Modul hat mir Spaß gemacht!

Die Präsentation zum Vortrag:

In den kommenden Tagen werde ich diese Serie mit den folgenden Artikeln fortführen:

 

 

Sitecore Usergroup Deutschland: Ein Rückblick auf das Treffen in Bielefeld

Christopher Wojiciech Agentur netzkern

Vor kurzem waren wir Ausrichter des 3. Sitecore Usergroup (SUG) Deutschland Treffens in Bielefeld. Rund 30 Entwickler, Anwender und Projektmanager aus Sitecore-Agenturen und Unternehmen, die ihre Website auf Sitecore-Basis betreiben, konnten wir im Vortragssaal des Historischen Museums Bielefeld begrüßen. Die meisten waren “Wiederholungstäter” und schon bei einem der beiden ersten Treffen dabei gewesen, aber es gab auch einige neue Gesichter.

SUG Deutschland Treffen in Bielefeld

 

Nach einem ersten Kennenlernen und Small Talk bei Brötchen und Kaffee haben als offizielle Vertreter der Sitecore Usergroup Deutschland unser Account Manager Johannes Tappmeier und Christopher Wojciech von der Agentur netzkern das Treffen eröffnet. Danach starteten die Fachvorträge.

Evaluierung einer Anbindung von Hybris an Sitecore mittels Commerce Connect

So lautete das erste Thema, über das unsere Sitecore-Expertin Friederike Heinze referierte. In ihrer dreiwöchigen Evaluierungsphase hat sie sich intensiv damit beschäftigt, einen fiktiven Hybris-Shop mit Sitecore Commerce Connect an die Sitecore Experience Platform anzubinden. Dabei wurden folgende Anforderungen umgesetzt:

  • Produkte synchronisieren
  • Preise darstellen
  • Artikel in den Warenkorb legen.

 

Präsentation Friederike bei dem SUG Deutschland Treffen in Bielefeld

 

Friederikes Fazit:

Die Entwicklung und Arbeit mit dem Sitecore Commerce Connect macht Spaß. Customizing gehört zum Grundkonzept des Moduls, dadurch ist alles ist flexibel anpassbar, das bringt aber natürlich auch Komplexität mit sich. Durch die nahtlose Integration des Shopsystems in Sitecore werden die umfangereichen Personalisierungs-Features mit in die eCommerce Welt genommen. Für eine gute Anbindung eines Shopsystems ist E-Commerce Knowhow unbedingt empfehlenswert und man sollte einen hohen Konzeptions- und Abstimmungssaufwand einplanen.

Die gesamte Präsentation können Sie hier nachlesen.

The good, the bad and the ugly modul

Der nächste Vortrag kam von Sitecore-Entwickler Maksym Ponomarenko von der Agentur netzkern und beschäftigte sich mit dem Thema “The good, the bad and the ugly modul”.

Präsentation Maksym Ponomarenko Agentur netzkern

 

Dabei ging es um Design- und Architektur-Spezifika bei der Entwicklung von Sitecore Modulen. Neu entwickelte Module sollten über eine durchdacht gestaltete, flexible Architektur verfügen, die zukünftige Weiterentwicklungen unterstützt. Die Präsentation beinhaltete einige Architektur Tricks und Tipps, sowie Best Practices bei der Modul-Entwicklung.

Weitere Entwicklung der Sitecore Usergroup Deutschland

Nach einer Kaffeepause berichtete Chris von netzkern über die angedachte Weiterentwicklung der Sitecore Usergroup Deutschland und stellte die geplante Vereinsgründung vor. Über die grob skizzierte Satzung wurde lebhaft diskutiert. Anvisiert wird, den Verein im Rahmen des nächsten SUG Treffens zu gründen.

Christopher Wojiciech Agentur netzkern

 

Erfahrungen mit Sitecore 8 und Möglichkeiten zur CRM-Anbindung

Zum Abschluss gab es zwei Kurzvorträge mit anschließender Diskussions- und Fragerunde.

Chris von netzkern gab den Teilnehmern Praxis-Einblicke in die Experience Management Features von Sitecore 8 mit Schwerpunkt auf die xDB und die Entwicklung und den API-Zugriff auf die jeweiligen Features. Diese führte zu intensiven Diskussionen über die noch bestehenden Bugs von Sitecore 8. U.a. waren sich die meisten Teilnehmer einig, dass das Arbeiten im Experience Editor momentan sehr langsam und zeitaufwändig ist.

Unserer Sitecore-Expertin Friederike stellte das Sitecore Modul “Dynamics CRM Campaign Integration” vor. Sie berichtete über mögliche Integrationslevel und über ihre Erfahrungen aus einem PoC mit MS Dynamics 2015. Näheres dazu werden Sie demnächst in einem eigenen Beitrag hier im Blog lesen können.

Ausklang mit Führung im Museum Wäschefabrik

Nach dem offiziellen Programm, das von allen Teilnehmern als sehr informativ und bereichernd empfunden wurde, stand eine interessante Führung durch das Museum Wäschefabrik auf dem Programm, dem einzigen im Originalzustand verbliebenen Bielefelder Zeitzeugnis von ehemals über 250 Wäschefabriken der Stadt im 20. Jahrhundert. Wir konnten uns glücklich schätzen, vom Vorsitzenden des Fördervereins des Museums selbst durch die Räume der damaligen Fabrik und des Wohnhauses der Unternehmer geführt zu werden. Er brachte uns die damalige Zeit mit zahlreichen spannenden Anekdoten und Details nahe, so dass es keine der rund 90 Minuten langweilig wurde.

Museum Wäschefabrik Bielefeld

Bei gutem Essen und anregenden Gesprächen haben die noch verbleibenden Teilnehmer die Veranstaltung im numa Restaurant ausklingen lassen.

Fazit

Die engagierten Teilnehmer sowohl von Agentur- wie auch Kunden-Seite mit ihrem unterschiedlichen Sitecore-Hintergrund und die interessanten Vorträge zu aktuellen Themen und Weiterentwicklungen haben das Treffen zu einer erfolgreichen Veranstaltung gemacht, aus der sicherlich jeder Teilnehmer etwas für seine Arbeit mitnehmen konnte.

Sie haben ebenfalls Interesse an Sitecore-Themen?

Wir freuen uns auf die Weiterentwicklung der Sitecore Usergroup Deutschland und viele weitere regelmäßige Treffen mit konstruktivem Austausch. Wenn auch Sie mit Sitecore arbeiten und Interesse an den kommenden SUG-Veranstaltungen haben, melden Sie sich gerne unter sugde@comspace.de. Dann schreiben wir Sie an, wenn das nächste Treffen in Planung ist.

Ottobock HealthCare: erfolgreiches internes E-Mail-Marketing mit Inxmail

Newsletter Ottobock France

Als unser langjähriger Kunde Ottobock vor einiger Zeit ein Tool zur unternehmensinternen Mitarbeiterinformation- und Kommunikation suchte, schlug ihm unser Projektleiter das Inxmail E-Mail-Marketing System vor. Die Idee zur Verwendung eines E-Mail Marketing Instruments wurde aus der Anforderung geboren, die News aus dem Ottobock Produktmanagement zielgruppenorientiert mit weiterführenden Downloads-Links und Responsemöglichkeit im Unternehmen zu versenden.

Mit der Ausarbeitung eines Newsletter-Layouts im Corporate Design von Ottobock und der Entwicklung und Programmierung eines Templates haben wir das E-Mail-Marketing Konzept mit Inxmail erfolgreich umgesetzt. Inzwischen existieren rund 13 verschiedene Newsletter in mehreren Sprachversionen, darunter auch in Kyrillisch und auf Arabisch – mit entsprechend anderer Laufrichtung des Textes und der Bedienelemente. In einem zweiten Schritt haben wir die Redakteure umfassend in der Erstellung und Auswertung der Newsletter und der Empfängerverwaltung geschult.

Newsletter Ottobock France
Newsletter Ottobock France

Newsletter zur internen Kommunikation: Was war die Ausgangslage?

Das Produktmanagement der Mobility Solutions – dem Unternehmensbereich, der hochwertige Rollstühle und Reha-Bedarf herstellt – versandte in unregelmäßigen Intervallen umfangreiche Präsentationen an alle Vertriebsbeteiligten der über 50 Standorte weltweit per MS-Outlook®.  Nicht nur, dass die inhaltlich wichtigen Infos Postfächer verstopften – es gab auch keine Übersicht für die Versender, was eigentlich von Interesse war. Ein attraktiver Newsletter, der die Neuigkeiten anteasert und bei Bedarf auf weitere Infos und viel häufiger auf wichtige Dokumente verlinkt, stellte die passende Lösung dar. Mit den Inxmail Webspaces lassen sich gerade die Download-Dokumente bestens verwalten und bereitstellen.

Besonders wichtig für die Produktmanager: der direkte Response. Zu den allermeisten News gibt es einen konkreten Ansprechpartner, der per Mail aus dem Newsletter heraus direkt angeschrieben werden kann – ohne jeden Medienbruch. Und: Newsletter eignen sich auch dazu kurzfristig definierte Zielgruppen zu erreichen.

Ausweitung der Newsletter auf den B2B-Bereich

Da sich die Kommunikationsform innerhalb des Unternehmens bewährt hat, wurde das Angebot für die B2B Kommunikation ausgebaut. Inzwischen erhält auch der ausgewählte Fachhandel, die Sanitätshäuser, in Deutschland und Österreich regelmäßig Updates aus dem Produktsegment Mobility.

Damit nicht genug: Die Lösung, per Newsletter intern zu informieren, überzeugte weitere Abteilungen der Otto Bock HealthCare, die gerne auf die guten Erfahrungen mit der Inxmail-Lösung zurückgriffen.

Die unterschiedlichen Unternehmensbereiche und mehr als 60 Redakteure können auf Basis der bestehenden Listen nun sehr gezielt Artikel verfassen, die dann in einem weiteren Schritt durch die Chefredaktion freigegeben und als Newsletter versendet werden.

Durch die einfache Texteingabe ohne HTML-Kenntnisse erweist sich die Erstellung der Mailings für die Redakteure als sehr komfortabel und einfach. So wird die Lösung auch im Produktmanagement sehr gut angenommen.

Inzwischen haben wir auf eigenen Vorschlag die Templates aller Listen in einer Vorlage konsolidiert. Da sich die Newsletter über Header und – besonders wichtig – in der Anbieterkennung des Footers unterscheiden, sind variable Teile der Templates als Bausteine hinterlegt. Einerseits können Anpassungen, z.B. an einen neuen Markenauftritt wie aktuell nach dem Website-Relaunch, einfacher umgesetzt werden, und gleichzeitig ist bei der Erstellung eines Mailings für die Redakteure sichergestellt, dass die verwendete Vorlage auch die richtige ist.

Newsletter Ottobock Prothetik
Newsletter Ottobock Prothetik

Mit Inxmail ließ sich das interne und inzwischen auf ausgewählte Partner ausgeweitete E-Mail Marketing gerade deshalb gut einführen, weil mit einzelnen Funktionen und kleinen Volumen in der Mietvariante (ASP-Service) mit sehr überschaubaren Kosten begonnen werden konnte. Die Weiterentwicklung des Tools haben wir stets in enger Abstimmung mit dem Auftraggeber durchgeführt.

Learnings und Anforderungen konnten alle Beteiligten am Projekt schnell zur Umsetzung bringen. Inzwischen gibt es auch über Inxmail erzeugte An- und Abmeldeseiten, die problemlos in das bestehende CMS integriert werden können.

Durch das Newsletter-Template im Ottobock-einheitlichen Layout können wir die korrekte Optik in allen Mailings gewährleisten, obwohl die Newsletter dezentral in verschiedenen Abteilungen erstellt werden. Die zahlreichen Auswertungsmöglichkeiten wie Öffnungs- und Klickraten liefern uns gute Hinweise für die Mailing-Optimierung. Ein weiterer Vorteil von Inxmail Professional ist die einfache Realisierung von Zielgruppen-spezifischen Mailings, indem wir die Empfänger durch die Vergabe von Attributen bestimmten Zielgruppen zuordnen können.

Janett Klaus, Head of Digital Marketing | Marketing Communications

Fazit zum internen Newsletter-Mailing

Mit einem effizienten E-Mail Marketing Tool wie dem Inxmail System können innerhalb einer großen Organisation schnell notwendige Informationen transportiert werden. Die Anfangsinvestitionen bleiben dabei moderat. Das Tool kann laufend und gezielt – entsprechend der sich entwickelnden Businessprozesse – ausgebaut und angepasst werden.

Wenn auch Sie eine Lösung für Ihr E-Mail Marketing suchen: Fragen Sie uns einfach! Wir stellen Ihnen gerne die E-Mail-Marketing Lösung von Inxmail vor. Als Inxmail Solution-Partner sind wir ein erfahrener Dienstleister und unterstützen Sie bei der Umsetzung Ihres individuellen Newsletter-Konzeptes.

Schnelleinstieg in das Team Development for Sitecore (TDS)

Test TDS

Ihr habt noch nicht mit dem TDS gearbeitet, möchtet es aber mal ausprobieren? Dann seid ihr hier richtig. Mit diesem Blog-Beitrag möchte ich euch einen schnellen Einstieg in das TDS vermitteln. Wenn ihr wissen wollt was das TDS ist und wie es grundsätzlich funktioniert, dann könnt ihr das in diesem Beitrag nachlesen.

Installation des TDS

Auf der Webseite von Hedgehog könnt ihr das TDS herunterladen und 30 Tage lang kostenlos testen. Anschließend müsst ihr euch nur noch den zu eurem Visual Studio passenden Windows Installer heraussuchen, z.B. den HedgehogDevelopmentTDS_VS2013.msi und euch durch den Assistenten klicken.

Konfiguration von TDS Projekten

Zunächst setzt ihr wie gewohnt ein neues Projekt auf, d.h. ihr installiert Sitecore und richtet eine Visual Studio Projektmappe/ Solution ein.

Anschließend werden die TDS-Projekte eingerichtet. Eine erste TDS-Projektstruktur könnte wie folgt aussehen:

  • Tds.Core – enthält Client-Anpassungen
  • Tds.Master.Templates – enthält Templates
  • Tds.Master.Layouts – enthält Layouts, Sublayouts etc.
  • Tds.Master.Content – Beispielcontent, den jeder Entwickler braucht.

Je Projekt führt ihr folgende Schritte durch, wie hier am Beispiel des Tds.Master.Template-Projektes visualisiert:

1. TDS-Projekt anlegen

Rechtsklick auf der Projektmappe > Hinzufügen > Neues Projekt:

TDS Project

2. TDS-Projekt konfigurieren

Rechtsklick auf dem TDS-Projekt > Eigenschaften:

General Tab

  • Datenbank eintragen, hier “master”
  • Hinweis: Ein Projekt, z.B. das Tds.Master.Template-Projekt sollte mit dem Web-Projekt verbunden werden, dann wird das Web-Projekt auch automatisch mit deployed (Pfad siehe Build Tab).

General Tab TDS

Build Tab

  • Sitecore Web Url: Url unter der das Projekt zu erreichen ist
  • Sitecore Deploy Folder: Root-Verzeichnis der Webseite
  • Den Sitecore Connector installieren und die Verbindung testen.
  • Hinweis: Die erste generierte Guid in ALLE Projekte kopieren, diese muss innerhalb der Projektmappe identisch sein.

Test TDS

3. Item Synchronisation einrichten

Um die zu synchronisierenden Items einzurichten, klickt ihr mit der rechten Maustaste auf TDS-Projekt > “Get Sitecore Items” und wählt die Items aus:

Get Sitecore Items TDS

Anschließend könnt ihr einfach mal ein Item in Sitecore anlegen und im Visual Studio das TDS-Projekt mit der rechten Maustaste > “Sync with Sitecore” synchronisieren:

Sync TDS

Das war’s schon. Das erste TDS-Projekt ist fertig eingerichtet.

Einrichtung Code Generierung

Als nächsten Schritt möchte ich mit euch noch die automatische Generierung von Template-Klassen mittels Glass.Mapper einrichten.

1. Installation Glass.Mapper.Sc

Bevor wir damit starten, solltet ihr sicher stellen, dass im Web-Projekt

  • das NuGet-Paket “Microsoft ASP.NET MVC” installiert ist und
  • die Sitecore.Kernel-Bibliothek als Verweis zur Verfügung steht.

Anschließend müsst ihr einfach das NuGet-Paket “Glass.Mapper.Sc“ von nuget.org installieren:

Glass.Mapper.Sc TDS

2. Generierung einrichten

Hierzu bedarf es folgender Schritte:

  • In den Projekteigenschaften des TDS-Projekts, das die Templates synchronisiert (hier Tds.Master.Template), auf dem Tab “Code Generation” die Code Generierung aktivieren.
  • T4-Templates für den Glass.Mapper hier herunterladen.
  • Folgende tt-Dateien im Tds.Master.Templates Projekt im Folder “Code Generation Templates” ablegen und zum TDS-Projekt hinzufügen:
    • Helpers.tt
    • GlassV3Header.tt
    • GlassV3Item.tt
    • GeneralExtensions.tt
    • Inflector.tt
    • StringExtensions.ttt
  • Die Generierung konfigurieren
    • Target Project:  Web-Projekt
    • Code Generation Target File:  z.B. “Model/GeneratedClasses.cs”
    • Base Namespace: z.B. Modle
    • Header Transformation File: GlassV3Header.tt
    • Base Project Transformation File: GlassV3Item.tt

Generation TDS

3. Generierung testen

Entweder ihr klickt mit der rechten Maustaste auf das TDS-Projekt > “Re-Generate Code for all Items” oder ihr fügt im Sitecore ein neues Item hinzu und synchronisiert dieses mit dem TDS-Projekt.

Wenn ihr keine Fehlermeldung erhaltet, dann findet ihr eure Templates als Klassen in der “GeneratedClasses.cs” wieder. Andernfalls schaut mal im nächsten Absatz.

Mögliche Stolpersteine

Fehlender Namspace Glass.Mapper.Sc.Mvc

Es ist wichtig, dass ihr erst ASP.NET MVC installiert und dann das Glass.Mapper.Sc-Paket, andernfalls wird der Verweis auf “Glass.Mapper.Sc.Mvc” nicht mit installiert.

T4-Templates gesperrt

Wenn ihr die Meldung ”ErrorGeneratingOutput” wiederholt in der generierten Klasse findet, dann liegt es häufig daran, dass ihr die T4-Templates von einer externen Quelle geladen habt und diese noch entsperrt werden müssen:

Stolpersteine TDS

Überflüssige Leerzeile

Wenn ihr in der generierten Klasse untenstehende Meldung seht, dann schaut mal im “GlassV3Item.tt”. Dort ist vermutlich in der letzten Zeile eine Leerzeile, die zu entfernen ist.

*********************************************
 An error occured while generating code for item '/sitecore/templates'.
T4 Template: F:\SitecoreDEV\Projekte\TdsDemo\TdsDemo.Tds.Master\Code Generation Templates\glassv3item.tt
Errors:
Kompilierte Transformation: Ungültiges Token 'this' in Klasse, Struktur oder Schnittstellenmemberdeklaration.
Kompilierte Transformation: Die Methode muss einen Rückgabetyp besitzen.
Kompilierte Transformation: Typ erwartet.
*********************************************

Wie geht es weiter?

Die erste Einrichtung habt ihr jetzt hinter euch und damit habt ihr auch einen ersten Eindruck vom TDS gewonnen. Wenn ihr das Thema vertiefen wollt, empfehle ich euch z.B. das Manual von Hedgehog. Zum Thema automatische Builds und Deployment-Strategien findet ihr im Build Extensions Whitepaper Ansätze.

Ich freue mich über Kommentare zu euren Erfahrungen mit dem TDS!

Sitecore Usergroup Deutschland – Entstehung, Ziele und Entwicklung

Workshop Kreativität

Was ist eine Usergroup?

Usergroups finden sich überwiegend im IT-Umfeld und verstehen sich als Anwendergruppen für eine bestimmte Software oder Technik. Die Mitglieder einer Usergroup sind bestrebt, die Software gemeinsam weiter zu entwickeln, ihre Interessen gegenüber der Herstellerfirma zu vertreten und einen regelmäßigen Erfahrungsaustausch zu pflegen.

Im Bereich der Content Management Systeme bestehen einige Usergroups bereits seit längerem, so z.B. die OpenText Usergroup und die OpenCMS Usergroup.

Von der Idee zum 1. SUG-Treffen

Sitecore Usergroup Deutschland LogoSitecore Usergroups wurden bereits bspw. in der Schweiz, den Niederlanden und den USA gegründet. Da das Sitecore CMS immer stärker auch bei Web-Projekten für den deutschen Markt eingesetzt wird, hat sich Christopher Wojciech von der netzkern AG zum Ziel gesetzt diese Community ebenfalls auch im deutschen Raum aufzubauen. Nachdem das erste Treffen in Köln ein voller Erfolg war, wollte man dies wiederholen. Aufgrund des Besuchs von webit! Gründer Sven Haubold in Köln hat man sich dazu entschlossen das nächste Treffen in Dresden zu veranstalten. Ein ebenso großes Engagement zeigte comspace aus Bielefeld und somit hat sich eine kleine Gruppe aus sehr motivierten Menschen gefunden, um die Sitecore Communtiy in Deutschland weiter nach vorne zu bringen.

Workshop Kreativität

 

Zielsetzung und Zielgruppen der Sitecore Usergroup

Da das Sitecore CMS in Deutschland einerseits noch nicht so lange auf dem Markt ist wie andere CMS-Lösungen, andererseits aber enormes Potential für digitale Marketingprojekte bietet und sich schnell weiter entwickelt, stehen der Erfahrungsaustausch und die gezielte Verbreitung von neuen Lösungen im Sitecore-Umfeld im Vordergrund.

Zu diesem Zweck wurden gemeinsam organisierte und regelmäßig stattfindende Veranstaltungen geplant, die Sitecore-Entwickler und -Anwender sowie Marketing- und IT-Verantwortliche zusammen bringen – sprich potentiell jeden, der in seinem Arbeitsalltag mit Sitecore zu tun hat, ob auf Agentur- oder Kundenseite. Diese Treffen dienen dem Wissensaustausch und der Weiterbildung, u.a. durch Fachvorträge, in denen über neue Lösungsansätze, Tools und Einsatzszenarios in der Praxis berichtet werden.

Auch außerhalb der Veranstaltungen soll ein fachlicher Austausch zu Erfahrungen, Ideen und auch Problemen mit dem Sitecore CMS nicht zu kurz kommen. Dazu dient z.Zt. eine Sitecore Usergroup Deutschland XING-Gruppe. Für die Zukunft ist eine Community geplant, die allen Sitecore Usergroup-Interessierten – unabhängig von einer XING-Mitgliedschaft – offen steht.

Nicht zuletzt bildet die Sitecore Usergroup eine gemeinsame Interessenvertretung von Anwendern und Partnern gegenüber Sitecore als Hersteller. Durch einen regelmäßigen Dialog mit Sitecore möchten wir die Wünsche und Anregungen der deutschen Anwender gesammelt und strukturiert kommunizieren.

Was die Usergroup nicht ist

Wichtig für die Organisatoren war es auch sich auf gewisse Rahmenbedingungen zu einigen. Dazu gehörte es festzulegen welche Zwecke die Sitecore Usergroup nicht verfolgt:

  •         Die Usergroup ist nicht der Platz für Kundengespräche.
  •         Die Usergroup dient nicht der Kundenakquise.
  •         Die Usergroup-Treffen sind keine Werbeveranstaltung.

Erfahrungen aus den ersten Sitecore Usergroup Treffen

Mittlerweile haben die ersten Sitecore Usergroup Treffen stattgefunden – im Herbst 2014 in Köln und im Frühjahr 2015 in Dresden. Die Events mit Vorträgen von Sitecore-Kollegen, – Partnern und -Kunden und mit einem kulturellen Rahmenprogramm wurden von allen Zielgruppen gut angenommen, auch wenn Entwickler von Sitecore-Partneragenturen in der Überzahl waren. Präsentiert wurden sowohl technische als auch Consulting-Themen oder Kundenprojekte, bspw. “Sitecore Health – Monitoring und Stabilität von Sitecore Umgebungen”, “Vernetzt ans Ziel – die neue Website der Dresdner Verkehrsbetriebe AG” oder Mehrwert für Webprojekte mit Sitecore und Microsoft Azure.

Wie geht es weiter?

Wir haben große und spannende Pläne um diese Community weiter zu vergrößern. Wir wollen eine kontinuierliche Plattform schaffen und dies auch in der Außenwirkung bekräftigen. Seid gespannt und kommt zum nächsten Treffen, dann erfahrt ihr mehr!

Daher lade ich Euch zu guter Letzt…

… herzlich zum 3. Sitecore Usergroup Treffen am 30. September 2015 im Historischen Museum in Bielefeld ein. Diese spannenden Themen stehen auf dem Programm:

  •         Evaluierung einer Hybris-Anbindung an Sitecore mittels Commerce Connect
  •         The good, the bad and the ugly Sitecore module
  •         Auf dem Weg zur Connected Customer Experience – Möglichkeiten zu omni-channel Strategien mit Sitecore

Ausführlichere Informationen zum Programm und die Möglichkeit zur Anmeldung finden Sie hier.

Das Westfalen-Blatt berichtet über unsere Arbeit der Zukunft

Westfalen-Blatt - Arbeit der Zukunft bei comspace

Das Westfalen-Blatt brachte vor kurzem einen Sonderteil zur Ostwestfälischen Wirtschaft und wir waren ebenfalls vertreten. Auf fast einer vollständigen Doppelseite wirft die Zeitung einen Blick hinter unsere Kulissen.

Westfalen-Blatt - Arbeit der Zukunft bei comspace

Wir freuen uns immer wieder über so einen objektiven Blick von Außen. Einerseits zeigt es uns, dass wir auf einem richtigen Weg sind, andererseits ist es auch eine schöne Erinnerung daran, dass wir hier schon einige Privilegien genießen, die alles andere als selbstverständlich sind.

Vielen Dank an Autor Michael Diekmann und das Westfalen-Blatt für die Erlaubnis, Ihnen hier den vollen Artikel als PDF zur Verfügung stellen zu dürfen.