Take the community feedback survey now.

Deane Barker
Nov 13, 2014
  3609
(0 votes)

The EPiServer Channel Wrapper

We’re releasing a very early version of a wrapper we’ve written around EPiServer’s content channels. It reduces the amount of code necessary to connect to a content channel and send data to it.

Additionally, it provides a framework for the persistent mapping of external content IDs (from whatever datasource) against EPiServer PageGUIDs. This makes it possible to know when you need to create new content, and when you need to update existing content (and then have the correct GUID to do that).

The use case here is when you have content outside your EPiServer install that you need to sync against pages inside EPiServer. We see this so often in content integration scenarios that we finally built this wrapper to make it easier.

(And yes, we know the Service API for CMS will be coming at some point. But that’s just the transmission mechanism. If even we swap the services out, there’s still a bunch of surrounding logic to our library that’s still necessary.)

I wrote a blog post about the pattern here, which is worth reading as it discusses the reasoning and some of the architectural concepts behind the pattern (which, for the record, is not unique to EPiServer).

The “Import and Update” Pattern

And the code is on GitHub here:

EPiServer Channel Wrapper

There are example projects showing imports from code, XML, a SQL database, and another EPiServer installation (which makes it effectively a low-level form of content mirroring that you can modify, which is handy).  The README in the root has code samples and some architectural notes.

There’s quite a bit left to do on it yet:

  • Improve the deletion detection code
  • Implement content hashing to determine if content has changed since the last run and pre-empt the web service call entirely
  • Allow for parent page GUIDs, so as to allow nesting of content


Future improvements will come.  Pull requests are welcome.

Nov 13, 2014

Comments

Please login to comment.
Latest blogs
Building a Custom Payment in Optimizely Commerce 14 (with a simple “Account” method)

This post outlines a simplified method for integrating Account payments into Commerce 14, detailing a minimal working path without extensive...

Francisco Quintanilla | Oct 17, 2025 |

Going Headless: Making the Right Architectural Choices

Earlier this year, I began a series of articles about headless architecture: Going Headless: Optimizely Graph vs Content Delivery API Going Headles...

Michał Mitas | Oct 17, 2025

How to Use IPlacedPriceProcessor in Optimizely Commerce to Preserve Custom Line Item Prices (Donation Example)

Optimizely Commerce 12+ automatically validates line item prices based on catalog data, which can overwrite user-entered prices for donations or...

Francisco Quintanilla | Oct 15, 2025 |

Optimizely CMS - Learning by Doing: EP05 - Create Content Tree: Demo

  Episode 5  is Live!! The latest installment of my  Learning by Doing: Build Series  on Optimizely CMS 12 is now available on YouTube!   This vide...

Ratish | Oct 15, 2025 |