Tag: C#

  • Updated Exception enrichment functionality for added safety

    Here is an improved version of the Exception enrichment functionality described in the article Enriching your exceptions with information from Episerver. Updates has been made in order to make it more robust in regards to usage of abstract classes that may in some cases throw NotImplementedException, causing the enrichment code to terminate.

  • Allow only certain number of items in ContentAreas in Optimizely

    Here is a validation attribute that I wrote in order to limit the number of items that editors may put in Optimizely ContentAreas to a specific set of numbers, instead of having max and min values. The part that may be of interest to highlight is the possibility to skip validation in certain cases, for…

  • Hiding and showing edit mode properties on same content type in Optimizely CMS depending on context

    At my current client we have the need to hide or show properties for editors in Optimizely edit mode, on the same page type, depending on where/how the page type is used. Our structure consists of global pages, and local instances of the same pages. There are times when global editors should be able to…

  • Injecting Fragments in Optimizely XHtmlStrings

    Injecting fragments in Optimizely XHtmlStrings is quite easy using a custom display template to render the property. Here is an example on how you can inject custom data based on Optimizely blocks dropped in the XHtmlString property. I’ve been using an approach similar to this to inject ids used for anchor tag navigation also within…

  • Prevent certain Optimizely visitor groups from being used in content areas

    At my current client we had the need to prevent the use of certain visitor groups in some of the content areas. I.e. some areas were only to support national content, and other areas only regional content (where each region had a different visitor group). Here is a solution making use of ValidationAttribute. The visitor…

  • Using ActiveMQ with Optimizely 12

    Whilst setting up Optimizely 12 to work with RabbitMQ is rather straight forward, making it use ActiveMQ for transport instead requires a bit more configuration on our part. Here is a short article on how to set up Optimizely 12 to use MassTransit (EPiServer.Events.MassTransit) with ActiveMQ. For a short instruction on how to set up…

  • ActiveMQ tester application with topic support

    I’ve updated the ActiveMQ tester application with topic support as it is required by the Optimizely on-prem event provider (EPiServer.Events.MassTransit). Otherwise, the usage is as before (see ActiveMQ connection tester application). Source code at GitHub.

  • ActiveMQ connection tester application

    While moving our client’s Optimizely 12 website to a new hosting provider we had to abandon our RabbitMQ installation in favour of a new ActiveMQ one, also supported by the on-prem event provider (EPiServer.Events.MassTransit). To make it easier setting this up I rewrote the old RabbitMQ connection tester application into a new one working with…

  • RabbitMQ connection tester application

    We set up Optimizely‘s new on-prem event provider (EPiServer.Events.MassTransit) for my current client’s Optimizely 12 website the other week. At current date it is still in beta until there are enough uses for there to be a production release. For the mass transit we set up RabbitMQ. For earlier Optimizely (Episerver) versions built on ASP.NET…

  • Simple way to use enums for sorting in Optimizely Search & Navigation

    As stated in the Optimizely Search & Navigation developer documentation on Sorting, “Sorting is supported for numerical types such as int, double, DateTime, and string”. This means that you will get an error from EPiServer.Find.SortingValidationHelper.ValidateSupportedType if you attempt to sort on an enum field. There are of course various solutions to this problem, but here is…

  • Finding the latest Optimizely Search & Navigation’s client Javascript URL

    I got a question on how to find the latest version of the Search & Navigation /epi-util/find.js script file after publishing the article Proxy for Optimizely Search & Navigation tracking script. It is really quite simple, if you look at how Optimiezely does things. The solution is to make use of the built-in IPathHelper (namespace…

  • Proxy for Optimizely Search & Navigation tracking script

    When using Optimizely Search & Navigation (previously Episerver Find) you will automatically get a reference to a client side Javascript injected into your markup. Occationally, you may want to proxy it via your Optimizely website’s backend, caching it or just make it appear as if it comes from your own domain. It may also be…

  • Getting the root PageReference of the imported pages in Episerver

    In our work to automate export and import of the production database into our test environment we had to maintain a test node in the Episerver page tree. This ment that we had to export it before replacing the database, and then import it again. Please see Exporting Episerver content programmatically through an ApiController and…

  • Importing Episerver content programmatically through an ApiController

    Importing the test node package that we exported earlier (see article Exporting Episerver content programmatically through an ApiController) would be the next step in our automated transfer of the production database to the testing environment. I extended our ApiController with an import endpoint for this purpose. Note that this code is never intended to be…

  • Exporting Episerver content programmatically through an ApiController

    As part of the automated transfer of the production database to the testing environment for my current client we found the need to maintain a node in the Episerver page tree that is used for testing. I extended our ApiController with an export endpoint for this purpose. Note that this code is never intended to…

  • Tracing between logs with a correlation ID

    Attempting to match timestamps and whatnot to correlate requests over various logs may be quite tedious. Adding a correlation ID to your website makes this easier and may save you quite a bit of time. This is what we did at my current client for all of their Episerver websites. I Implemented this together with…

  • Enriching your exceptions with information from Episerver

    Adding custom information along with the usual message and stacktrace in your exceptions may possibly make it easier to find out what’s happening in your Episerver website. Here is a bit of code showing how it may be done in a quite simple way. I created it some time back and it has since then…

  • Different subsets of content types in different EPiServer multi sites with all types in one assembly

    As I explained in my previous article Different subsets of properties in different EPiServer multi sites using same content type model my current client is building a common platform for 7 websites spread over 3 EPiServer installations. As the platform grew the need for restructuring grew as well. It was no longer viable to keep…

  • Different subsets of properties in different EPiServer multi sites using same content type model

    For my current client we are building 7 websites spread over (at least) 3 EPiServer multi site installations. Rather than seeing each of them as separate entities, they all consume the same base code from a common platform (such as infrastructure, EPiServer content types, and so on). An issue that you’re facing when using the…

  • EPiServer TinyMCE 3 Wrapping selection in unsupported aside tag

    For my current client, we had a need to allow EPiServer editors to wrap XHtmlSting field content in aside tags in a user friendly manner. The first most obvious thought went to the styles drop down list and EPiServer’s editor.css file, however after a few tries and a bit of Ilspy‘ing I realized that the…