C#

Feedback Taken - EPiServer Localization Provider Updates

Listen to the audience. I was more than lucky to be on some local user groups to talk about strongly typed localization provider for EPiServer. Feedback from the audience is more likely to be provided than awaiting comments in blog posts. You have to listen to the audience, you really have to. They are your consumers, they know more about the context and projects where and how your library might be used. Over couple of last weeks I've been heads down busy with some of the feedback implementation. Here is…

Keep reading

Updates for DbLocalizationProvider - Foreign Resources

Blog post about latest updates for database localization provider project. Release mainly focuses on foreign affairs - foreign, hidden and referenced resources. Read further for more info. Foreign Resources Good friend and colleague of mine asked once: "How do I register localized resources for ValidationIssue enum from EPiServer Commerce assembly?" Short answer back then was - you can't. Until now. With latest database localization provider now you can tell provider to get familiar with so called foreign resources and include those in sync process as well - even they are…

Keep reading

Disposable Dependency for Azure WebJob

Recently we had experience with Azure WebJobs hosting system and specificely - with disposable jobs. This blog post will describe how to properly handle disposable job dependency. Why Dependency? You might ask, why I need to have dependencies for the Azure WebJob. The only purpose for WebJob would be to kick-off rest of the services and transfer control to them to do the work. According to some software architectural theories - WebJob is just the delivery mechanism, it's a trigger for other services to step up and carry out the…

Keep reading

DbLocalizationProvider step closer to front-end

Along with other smaller bug fixes, database-driven localization provider for EPiServer got closer to front-end. We joined forces together with my old pal and friend Arve Systad and made it possible to add translations to client side resources as well. Setup So setup for the client-side resource localization with help of DbLocalizationProvider plugin is more or less straight forward. You will need to install DbLocalizationProvider.EPiServer.JsResourceHandler package from EPiServer feed and add corresponding <script> include in your markup file to fetch translations from the server: <script…

Keep reading

Small Enhancement for Feature Folders

Great colleague of mine Māris Krivtežs wrote blog post about feature folders describing code organization into folders by features or functional areas rather than technology or different grouping. However, one of cons from Maris' approach we couldn't reconcile with - name of the sub-feature folder needs to follow Mvc controller naming convention. "Another issue is related to the sub-feature folder naming. Sub-feature folder still should be called with the same name as a controller." So I made tiny adjustment to the view engine worth sharing. Adjusted code is below. public…

Keep reading

Scheduled Jobs Updates

Some great updates have been delivered to EPiServer Scheduled Jobs infrastructure within version 10.3. In this blog post we will review some of the important changes. Scanning Process Property IsStoppable is now calculated during scanning process. Scheduled jobs scanner detects whether job is stoppable or not. If so - it's written down to the database and used later when job is being triggered. Also - now with v10.3 you don't need to inherit from base class (EPiServer.Scheduler.ScheduledJobBase). In this case all you need is to have…

Keep reading

Baking Round Shaped Software - Mapping to the Code

This part of the round shaped software blog posts as promised will be about mapping the theoretical terms and ideas mentioned in previous post to the actual code fragments and components. Application for the Post To move further and map theory to the code, I've created really simple sample application for managing the users. To demonstrate mediator internals and round shaped architecture - we will stick with hand crafted mediator. Mediator will be able to handle commands, queries and events. In the application you can: enlist existing users (for the…

Keep reading

Baking Round Shaped Software

This is the story how I discovered clean, understandable and maintainable software architecture. Why it's round shape and not pentagon, hexagon or any other *-gon shape? In this blog post I'll guide you through my journey. This part will cover theoretical side. Next blog post will map it to the code. Classical Architecture Agree that we all have been taught about N-tier/layer application software in high schools, universities or between the pages of some software development magazine?! Where order and most importantly dependency direction was stressed as one of…

Keep reading

Configure EPiServer Media Auto Publish on Upload

In this post we will enhance media auto-publish option to gain more control over what's going to be automatically published and what will stay for manual publishing. EPiServer gives site admins option to configure whether media file gets automatically published when uploading to Blob storage. This is very nice, but the problem is - this setting is global. It means either all media files get automatically published, or none - on/off. For one of our customers requirement was to delay publish only certain file extensions (usually .pdf files with…

Keep reading

Apply DisplayOptions for EPiServer.Forms Elements

Apply DisplayOption for EPiServer.Forms Elements Would you like to use this feature also for EPiServer.Forms? In this blog post I'm gonna show you how to do that. Background It's really great to see platform evolving and adding new features. But unfortunately - I must say that EPiServer.Forms are pretty close for modification (which is good) but at the same time - not so open for extensions, that's why we will need to modify some of the built-in templates to get this done. Getting Started First of all,…

Keep reading

EPiServer Twitter Bootstrap Content Area Renderer Updates

Here comes small updates for the Content Area renderer in the latest version: Now EPiServer.Forms are supported Possibility to have your own Css classes DisplayOption is now available in block template as well (if needed) Some smaller bug fixes Naming Challenges As you might know - I'm still struggling with naming of this package. Originally it was planned to be as Twitter Bootstrap Content Area Renderer, but apparently over time package feature set deviated from original idea as now package gives so much more than just adding necessary Css…

Keep reading

EPiServer DbLocalizationProvider - fresh 2.0 is out!

Why? You might ask, but changes I guess is the only constant thing in this industry. DbLocalizationProvider is witnessing new version and some cool features covered in more details below. Also internally provider survived quite huge refactoring activities, while I was redesigning from central services and repositories to more granular command and queries. But that’s the story for another blog post. New Features in 2.0 Here goes the list of new features available in version 2.0. List is not sorted in any order. Translate System.Enum It's…

Keep reading

Specify Default DisplayOption in the Content Area

Time to time when working on various projects we come across requirement to control somehow which DisplayOption will be selected as default, once content is placed inside particular ContentArea. As most of our projects are running under Twitter Bootstrap system - this is ideal feature request for EPiServer Bootstrap Content Area plugin. As I'm always trying to be developer friendly - I would like to be able to define these default display option rules in the code. And finally version 3.3 got these features. Default DisplayOption for Block So…

Keep reading

<head> driven by Content Area

For some powerful sites and editors sometimes it's wise to give them power to manipulate some stuff in <head> area. One of the simplest way to give editors this possibility is to create ContentArea where editors could create particular set of available blocks that would output themselves between <head> elements. By default EPiServer will generate wrapping element around content area (div tag name is actually controllable as well, more info here): @Html.PropertyFor(m => m.PageHeaderArea) Resulting in: <div> <!-- CA wrapper…

Keep reading

Year in Review

This is perfect timing for a busy people like us in IT industry to stop by and look back on the path that has been walked and some good things accomplished. Below is a short summary of things that I hope you will find useful and beneficial in your own way. This is an experience had this year within my lovely industry, company I'm working in and with people around me. Github Move I was using git and GitHub particularly as open source project repository quite a while. Once you…

Keep reading

Update EPiServer Commerce SKU price in lightweight way - Service Api

Lately I've been playing around EPiServer Service API. I found these interfaces really simple and lightweight way to manipulate with your catalog's content and characteristics of the items in the catalog. This blog post will show you the way how you can update SKU prices via these services using REST client library called "Refit". There are tons of various style and type REST client frameworks for accessing and consuming REST services. I do not have any interest in promoting "Refit" here, but found it really convenient way to work with.…

Keep reading

Row support added to Bootstrap ContentArea

With helpful support from Huilaaja (@huilaaja) Bootstrap aware ContentArea renderer (or in other words - EPiBootstrapArea) got row markup support. Originally row support documentation for ContentArea you can find in author's blog post. With author's permission now row support is added to Bootstrap aware content area renderer package. Enable Row Support For backward compatibility and general idea of Bootstrap content area renderer - row support is disabled by default. You need to enable it explicitly. If you want to enable row markup support "globally" on every content area, you should…

Keep reading

What's new in FeatureSwitch?

It's been while since last FeatureSwitch library release. Just pushed out a bit of stuff held under the hood. Some of them are requested by my lovely consumers :) Here are enlisted some of the latest version features in the library. 1) EPiServer Site Strategy. Now you can use EPiServer's site strategy to enable or disable feature per particular EPiServer site. With example below feature ThisFeatureIsOnlyForSite1 will only be enabled if request is made against site named "Site1", otherwise - feature will be disabled. [EPiServerSite(Key = "Site1")] public class ThisFeatureIsOnlyForSite1 : BaseFeature…

Keep reading

Creating EPiServer Site Menu out of Block Driven Content

For one of our great customers we needed to make site out of just only few pages and lots of blocks. It reminds sort of single page application, just there is no client-side behavior as original SPA projects have. Anyway, in the middle of the project we came to task to make site menu. As we know it's quite easy to build site menu out of the pages and subpages and children pages of these subpages. But this time, we had almost no page structure in CMS, but instead, we…

Keep reading

Asp.Net Mvc Areas - Packed as NuGet

If you would want to add Asp.Net Areas support to your EPiServer site, you would need to copy some files from my previous blog post. Copying files from someone's blog posts seems to be good idea, but it's a bit problematic in case of updates or changes. If so, then we share common vision that by installing NuGet package, your project gets up-to-date support for Asp.Net Mvc Areas. For that reason I packed up Asp.Net Mvc Areas support into NuGet package, for you guys. You may just…

Keep reading