Articles 2017-02-07T07:09:02.2370000Z EPiServer World> Introducing Notifications in Content Approvals (Beta) 2016-12-27T12:21:27.6330000Z <p>This feature was released as a Beta feature in CMS UI 10.3.0 and is still under development.</p> <p>You can read more about how you enable Beta features in <a href="/link/8b4432703e44486ea1af6ddec232a8c5.aspx">Fredrik Tjärnbergs blog post</a>.</p> <p>You can also read more about Content Approvals in <a href="/link/dc12be0461b347888d55696f41729517.aspx">my previous blog post</a>.</p> <p>Notifications require <a href="/link/b59adfabbe504c61ad793973b05f002f.aspx">WebSockets</a> and <a href="/link/8ead888910d54679b8952d9eeb940b6e.aspx">configuring your email server</a>.</p> <h2>What are Notifications?</h2> <p.</p> <h2>Notifications on Content Approval events</h2> <p>In CMS UI 10.3.0 notifications are also used to send Content Approval-related messages, and it uses the new instant emails as well.</p> <p>In the screenshot below, Lina has received a notification that Alfred has sent a page to be reviewed, and she is one of the approvers that should approve or decline the change.</p> <p><img src="/link/dbde68e43e624ff7ae23dbcbd5d44be0.aspx" alt="Image blog-notifications-lina-ui.PNG" /></p> <p>Lina also receives an email about this, as seen below.</p> <p><img src="/link/08888dd1161f40348f2443f3a3d2a59c.aspx" alt="Image blog-notifications-lina-email.PNG" /></p> <p>Lina decides to approve the changes and since this scenario only has one step, the page is now ready to be published. In the screenshot below, Alfred is notified about this.</p> <p><img src="/link/6a7c1c25b046453792aa9ec314e0c507.aspx" alt="Image blog-notifications-alfred.PNG" /></p> <p>Notifications are sent when content is awaiting approval, has been approved, declined, or aborted. Those events are available on the <strong>ApprovalEngineEvents</strong> which can be hooked into.</p> Introducing Content Approvals (Beta) 2016-11-14T12:43:16.6600000Z <table> <tbody> <tr> <td> <p>This feature was released as a Beta feature in CMS 10.1.0 and is still under development.</p> <p><span>You can read more about how you enable Beta features in </span><a href="/link/8b4432703e44486ea1af6ddec232a8c5.aspx">Fredrik Tjärnbergs</a><span> blog post.</span></p> </td> </tr> </tbody> </table> <h2>What are Content Approvals?</h2> <p>Content approvals <span <strong>Ready for Review</strong>. One or more appointed reviewers must then approve the content item before it can be published. The reviewers are defined by an administrator in an<strong> Approval Sequence</strong>.</span></p> <table> <tbody> <tr> <td> <p>Content approvals do not apply to blocks at this stage.</p> </td> </tr> </tbody> </table> <p>The Approval Sequence <span>is set up by an administrator and can have any number of approval steps and any number of approvers in each step. If the page has multiple languages there has to be at least one approver for each language in each step.</span></p> <h2><span>Bonus feature: Pluggable menu items</span></h2> <p><span>The approval sequence overview is opened from the context menu in the page tree:</span><span> </span></p> <p><img src="/link/57a2dad539e94edb96ad90bcdefa2af9.aspx" alt="Image Content Approval blog post - context menu.png" /></p> <p>As a part of this release, we made the context menu pluggable. So now you can <a href="/link/54b2ad595a1340ada5f37300957b7934.aspx">easily add items to the context menu</a>.</p> <h2>More about Content Approvals</h2> <p>Content Approvals work with Projects but only on a per-content basis, and not for the whole Project.</p> <p.</p> <p>You can read more about Content Approvals in the <a href="">User guide documentation</a>.</p> <p>There are more things coming with Content Approvals, but please let us know what you like or if there's anything you want us to focus on.</p> The dot notation breaking change 2016-09-16T11:23:17.9270000Z <p>In Magnus's blog post (<a href="/link/4b536a6f4e1a4376a856ea949dcfca7e.aspx"></a>) on the upcoming breaking changes in the CMS UI, there were a lot of questions and a little confusion about the removal of dot notation support. I am hoping that with this blog post I can shed some light on the matter and make things a little easier to understand.</p> <h2>The history</h2> <p>When we first released the updated UI back in CMS 7, we were using a version of dojo that had its own synchronous loader which used dot notation, the syntax looked something like this:</p> <pre class="brush:html;auto-links:false;toolbar:false" contenteditable="false"><script type="text/javascript"> dojo.require("dijit.Dialog"); var dialog = new dijit.Dialog(); </script></pre> <p>When we updated to CMS 7.1 we also upgraded our dojo dependency. However dojo had changed its loader to be asynchronous and use the AMD format. This format uses slash notation since each dependency is a path to a JavaScript file. It looks something like this:</p> <pre class="brush:html;auto-links:false;toolbar:false" contenteditable="false"><script type="text/javascript"> require(["dijit/Dialog"], function (Dialog) { var dialog = new Dialog(); }); </script> </pre> <p>To ensure the change wouldn't be too breaking we added code to maintain support for the dot notation.</p> <h2>The breaking change</h2> <p>In the coming CMS 10 release we have removed the support for the dot notation in the JavaScript loader. So this means that anywhere were a JavaScript file is referenced in the code it should now use slash notation (that is forward slashes).</p> <p>It is also important to note that we have been using the slash notation since CMS 7.1 so you don't need to wait for the CMS 10 release to change your code. You can change it now!</p> <p>The effects of this should be very limited since there are not many areas where the dot notation could have been used. Here are the places that you should check in your code:</p> <p><strong>PropertyFor: </strong>It is possible to pass an additionalViewData argument to the PropertyFor method.</p> <p><strong>data-epi-* attributes: </strong>Any epi attributes that you manually render in your views.</p> <p><strong>Widget templates</strong>: The data-dojo-type attribute in widget templates.</p> <p><strong>Initializer class in module.config: </strong>It is possible to pass an initializer JavaScript file to the clientModule element in the module.config, for example:</p> <pre class="brush:xml;auto-links:false;toolbar:false" contenteditable="false"><clientModule initializer="addon/Initializer"> </clientModule></pre> <p><strong>ComponentBase:</strong> Any class inheriting from ComponentBase that sends a widget type to the constructor.</p> <p><strong>ComponentDefinitionBase: </strong>Any class inheriting from ComponentDefinitionBase that sends a widget type to the constructor.</p> <p><strong>EditorDescriptor: </strong>There are several properties on the EditorDescriptor that could be affect but the most likely is ClientEditingClass.</p> <p><strong>ViewConfiguration: </strong>The properties ViewType and ControllerType.</p> Planned breaking changes 2016 2016-08-25T13:08:05.4900000Z <p>An update to let you know what breaking changes are coming in CMS this year.</p> <p><strong></strong>The main breaking changes are:</p> <ol> <li>A new state AwaitingApproval for content. We are also adding new events to IContentEvents and new save actions. Supports features around content approval.</li> <li>IContentRepository.Save and the events around that (IContentEvents) have a few quirks and odd behaviours that we have fixed to make the API more consistent and work better with approvals.</li> <li>Migration to UTC dates in the database will be a required step when upgrading, be ready by <a href="/link/5237dc63906f423e96eb34159f5dd4d4.aspx">doing the migration today</a>.</li> <li>Reviewed all APIs to make sure we do not expose implementation classes as part of our public versioned API. We will make a separate post about this with more details.</li> </ol> <p>Some of the smaller breaking changes:</p> <ul> <li>Links to unpublished content will return 404 (instead of login screen).</li> <li>Localized texts will fallback to a fallback culture in the language files before falling back to values specified in code.</li> <li>LanguageBranch class now implements IReadOnly to support read-only caching.</li> <li>No longer possible to create sites without at least one host defined.</li> <li>Properties PageData.StartPublish/StopPublish are changed to Nullable.</li> <li>StartPublish will be null until published or set explicitly (today it defaults to the created date which is misleading).</li> <li>Fixed confusing handling of empty properties (for example assigning an empty link item collection to a typed model resulted in a null value)</li> <li>IContentVersionRepository List methods have been consolidated into one</li> <li>The UI Framework EPiServer.Shell.dll will be moved from NuGet package EPiServer.Framework to EPiServer.CMS.UI.Core.</li> </ul> <p>A lot more details will be provided as part of the release, including a list of all breaking changes and which APIs are being changed. Pre-release packages of the breaking change release will be made available as part of the <a href="/link/bac2c19b2b2b4a6fb3eba23049cdc3d1.aspx?page=1">continous release process</a> in the coming weeks.</p> Content reference list with page preview 2016-06-02T14:41:56.6500000Z <p>I'm sure everyone has read <a href="">Grzegorz Wiecheć</a> awesome blog, and if you haven't then you should. I while back he blogged about adding previews to the content reference list (<a href=""></a>) and the content area (<a href=""></a>). However it only supported previewing images, which I thought was under-selling the concept. So I'm going to one up him and add page and block preview support.</p> <p><img src="/link/8f7f198a1b264fb4b8e3de4d8d789304.aspx" alt="Image j2cWQXiw4B.gif" /></p> <p>There is a library called rasterizeHTML.js (<a href=""></a>) which provides some nice methods for rendering an HTML document to a canvas element. My custom editor will use this to load the preview URL of a page or a block and render it to a canvas which is then displayed as a preview tooltip.</p> <pre class="brush:js;auto-links:false;toolbar:false;highlight:[54,55,56,57,58,59,60,61]" contenteditable="false">define([ "dojo/_base/declare", "dojo/_base/lang", "dojo/on", "dojo/dom", "dojo/aspect", "dijit/popup", "dijit/TooltipDialog", "alloy/rasterize-html", "epi-cms/contentediting/editors/ContentReferenceListEditor" ], function ( declare, lang, on, dom, aspect, popup, TooltipDialog, rasterizeHtml, ContentReferenceListEditor ) { return declare([ContentReferenceListEditor], { buildRendering: function () { this.inherited(arguments); var _this = this; aspect.around(this.list._list, "insertRow", function (originalInsertRow) { return function (object, parent, beforeNode, i, option) { var row = originalInsertRow.apply(this, arguments); if (object.hasTemplate) { lang.hitch(_this, _this._createTooltip(row, object.previewUrl, !!object.downloadUrl)); } return row; }; }); }, _createTooltip: function (node, previewUrl, isImage) { var content; if (isImage) { content = document.createElement("img"); content.src = previewUrl; content.setAttribute("style", "max-width: 500px;"); } else { content = document.createElement("canvas"); content.height = 600; content.width = 750; var context = content.getContext("2d"); context.scale(0.75, 0.75); rasterizeHtml.drawURL(previewUrl, content, { height: 800, width: 1000 }); } this.own(node.tooltip = new TooltipDialog({ connectId: [node.id], content: content })); on(node, "mouseleave", function () { popup.close(node.tooltip); }); on(node, "click", function () { popup.open({ popup: node.tooltip, around: dom.byId(node.id), orient: ["after-centered"] }); }); } }); }); </pre> <p>This approach does not support CORS so the pages and blocks being rendered have to be from the same origin as the page running the script. Browser support is limited to Firefox, Chrome, Safari, and Edge.</p> <p>The server side code to make your properties use this editor can be found on Grzegorz's blog post (<a href=""></a>).</p> Episerver Developer Meetup, the Inaugural HEL Yeah Edition 2016-03-23T21:36:18.7730000Z <div class="introduction">Get excited about the inaugural <a href="">Episerver Developer Meetup</a>, taking place on April 21. Make sure you go ahead and sign up soon as space is limited!</div> <p>Episerver’s friend <a href="">Amcham Finland</a> is kind enough to offer their beautiful premises for our first-ever Developer Meetup in Finland. They are located at a very nice spot at South Beach (Eteläranta). There will be good food and beverages provided by Episerver to keep everybody energized.</p> <p>The topics covered should be of great interest to any epi developer worth their weight:</p> <h2>Episerver Forms</h2> <p>In the Winter Release 2016, Episerver Forms were officially released! Finally, a replcament for XForms. We will talk through different form examples you can build, re-using them, and customized rendering for display channels, personalization, multi-language and permissions. As well as the new four elements added after Beta; Date time, Range, Rich text and URL.</p> <h2><strong>Commerce Promotion Engine </strong></h2> <p>We will take you through the new and improved promotions engine in Commerce.</p> <h2>ASP.NET Core 1</h2> <p>(AKA ASP.NET 5) There are big changes coming soon to the ASP.NET framework. We'll be taken through some of the changes and how Episerver are redesigning the product to take advantage.</p> <p>See details and sign-up to the event <a href="">here</a>.</p> Upgrading your site and add-ons to EPiServer CMS 8 2015-02-12T12:56:52.4600000Z <p>As a few already have noticed, we have released pre-release packages of EPiServer CMS 8 in our Nuget feed. Given that EPiServer started to use a continous release process about a year ago and is now following semantic versioning, I want to explain a bit more what this actually means. First of all, if you have not already done so, I recommend reading Per Ivanssons article about the <a href="/link/d0fb45fcfe7e4d2e875444b6ca2cce2b.aspx?id=82637">continous release process</a>. A major version, according to semantic versioning, means <em>"MAJOR version when you make incompatible API changes"</em>. Given that EPiServer has done weekly releases for around a year now, this means that there are not that many changes in EPiServer CMS 8 compared to earlier major versions (and even compared to EPiServer CMS 7.5). There are a few breaking changes but most of these will have no or little impact on most sites. There will be more blog posts and articles about what is new and what has changed in EPiServer CMS 8, but for this blog I'll focus on how a site with add-ons can be upgraded.</p> <h2>Setting up a site for upgrade testing</h2> <p>As we are focusing on how the add-on upgrade process works, I'll start by installing a new site with the Visual Studio extension. I'm seleting an Alloy MVC site without search to keep it simple. To mimic a site that's been upgraded to a recent version of EPiServer CMS 7.X, I will start with upgrading to the latest packages for EPiServer CMS 7, so I'm upgrading the packages to the latest stable versions which currently is EPiServer CMS 7.x since the 8.x packages are still pre-release. After I've updated the packages I compile the solution and run the "update-epidatabase" command in the package manager console to run the database upgrade scripts. Now the site is up and running with the latest EPiServer 7.x packages.</p> <p><img alt="Image BlogAboutUpgrade_UpgradePackages1.JPG" src="/link/0479e2599e9a44f9a99df183e2428405.aspx?id=117137" /></p> <h3>Installing add-ons</h3> <p>Since we are focusing on how the add-on process works in this blog, I'll install a few add-ons. As I hope all of you are aware of, we did some quite large improvements regarding how add-ons can be managed in the end of last year (<a href="/link/27219dba83654f7d8201b4efa62d575b.aspx?id=113857"></a>). The biggest change was that we introduced support to install and manage add-ons as regular Nuget packages using Visual Studio. To enable this, we converted all add-ons to standard Nuget format. Depending on how you have installed your add-ons, there are two upgrade paths for your add-ons to EPiServer CMS. In this scenario, we'll test both by installing both some add-ons through the UI as well as some through Visual Studio and the EPiServer Nuget feed. I install the Tiny MCE spellchecker and Google Analytics add-ons through the UI and the EPiServer Social and EPiServer Language Manager add-on through Visual Studio. When I start the site I can see the diffrent add-ons and when I look into the modules/_protected folder of my web site I see the following:</p> <p><img alt="Image BlogAboutUpgrade_ModulesFolderBeforeUpgrade.JPG" src="/link/bbb040b7fc7c446a848f817a5486fd93.aspx?id=117132" /></p> <p class="informationBox">Note: We do not recommend that you mix add-ons installed from Visual Studio with add-ons installed through the UI. You can control how add-ons should be managed through configuration that is described in the <a href="/link/981b5054ff1f48cb8f2ac6bd5c578049.aspx">SDK</a>.</p> <h2>Doing the upgrade</h2> <p>Now we are ready to do the actual upgrade. Given that the EPiServer CMS 8 packages are currently still pre-release, we switch Visual Studio to include pre-release packages and upgrade all packages from the EPiServer Nuget feed.</p> <p><img alt="Image BlogAboutUpgrade_UpgradeToPrereleasePackages.JPG" src="/link/c4945c0384ad4ab4b13e33c182b067e0.aspx?id=117140" /></p> <p>As with the previous update, I have to compile and run the "update-epidatabase" command in the Package Manager Console. Now lets start the site and see what happens:</p> <p><img alt="Image BlogAboutUpgrade_SiteFailingAfterUpgrade.JPG" src="/link/506662dbeef049ac98df2be61f1c3863.aspx?id=117133" /></p> <p>It seems like there has been a breaking change that affects at least one of the add-ons. Actually, this is a kind of special case related to pre-release packages. Social Reach was installed as a Nuget package and if we look at the package, it says that it support up to, but not including EPiServer.CMS.Core 8. A pre-release package is actually treated as a very high version of the previous major version and that's why we were able to upgrade the core packages even though we had add-ons installed that does not support EPiServer CMS 8.</p> <h2>Upgrading the add-ons installed as Nuget packages</h2> <p>Normally, if the add-ons had had newer versions in the EPiServer Nuget feed, these would have been updated when we did the update all. Currently this is not the case. However, there is a new Nuget feed that is actually used by the EPiServer add-on UI in EPiServer CMS 8 that already hold some EPiServer CMS 8 compatible versions of some of the add-ons. The main purpose of this feed is to have a dedicated feed for certified add-ons that the EPiServer UI can use. This also means that the default format of certified add-ons will be the regular Nuget format (the old format is still valid for some time forward if you have custom addons). All packages should also be available in the regular EPiServer Nuget feed at the time of release, but for now, lets add this feed to Visual Studio to be able to upgrade some of the packages ().</p> <p><img alt="Image BlogAboutUpgrade_AddingNewPackageFeed.JPG" src="/link/37cf246af01345e29e5a12f4be7cbf98.aspx?id=117142" /></p> <p>Now we can update the add-ons that we installed previously from this feed. As usuall, I recompile after adding the packages and then I start the site again. Woohoo, the site is up and running again:</p> <p><img alt="Image BlogAboutUpgrade_SiteWorkingAfterUpgrade.JPG" src="/link/06d87d7a6a944dd8b3ab0d08f2535060.aspx?id=117134" /></p> <p>Now we have the following situation:</p> <ul> <li>The core packages for the site is on EPiServer CMS 8.</li> <li>We have two add-ons that have been installed through Visual Studio and upgraded to versions that support EPiServer CMS 8.</li> <li>We have two add-ons that were installed with EPiServer CMS 7.5+ that seems to still be working after the upgrade.</li> </ul> <p>But what if we installed Social Reach, or another add-on that are affected by a breaking change and needs to be upgraded, manually? Since these are not part of the Nuget dependency chain in Visual Studio they will not prevent an upgrade but instead, the site will crash after upgrade. There are two ways forward here.</p> <h3>Managing add-ons as Nuget packages</h3> <p>Our understanding is that most developers wants to control the add-ons installed on a site as Nuget packages. This has several advantages, for instance:</p> <ul> <li>It makes the add-ons included in the dependency management for Nuget packages so that you see when there are updated package in Visual Studio as well as preventing upgrades of packages that the add-ons are not compatible with.</li> <li>You easilly manage all your environments, including development, test, staging and production the same way as with the rest of the site functionality.</li> </ul> <p>Since we know that there are a lot of sites out there where add-ons have been installed through the UI (though they are still probably managed as resources in your source control), we wanted to provide a real easy way to replace existing manually installed add-ons with their Nuget equivivalents. The solution for this is a new powershell command that you can run in the Package Manager Console named "convert-epiaddons". Lets run this on our web site and see what happens:</p> <p><img alt="Image BlogAboutUpgrade_RunConvertTool.JPG" src="/link/b3a015a6942048b989a9512303e6c91b.aspx?id=117131" /></p> <p>It seems that the two add-ons that were manually installed were converted to Nuget add-ons. If we check the modules/_protected folder we can now see that the two add-ons are included in the project with the new format. If you compare with what was previously installed you can see that there are less files included compared to the previous manually installed version of the add-on. The reason for this is that add-ons delivered as Nuget packages normally have most of the add-on files placed inside a zip file (if you want to read more about this I recommend Henrik Nyströms <a href="">blog post</a>). Another thing to be aware of is that any configuration file inside the add-ons, for instance containing settings for the add-ons, are left intact and untouched so you don't have to redefine the settings.</p> <h3>Managing add-ons as UI add-ons</h3> <p>So, what happens if you want to upgrade a site without having to convert the add-ons to Nuget dependencies? This is still possible and we have done some improvements to conver this scenario as well. Let's install another site with the Social Reach add-on installed through the UI and upgrade it to the latest pre-release and then start the site to see what happens:</p> <p><img alt="Image BlogAboutUpgrade_ErrorAfterUpgradeWithManualAddon.JPG" src="/link/6e944edb401649f79f53c7dd8b982919.aspx?id=117143" /></p> <p>Even though the site still crashes, we get a detailed error message along with a description on how to disable the add-ons that's failing. We follow this and replace the existing scanAssembly section (I noticed that there is an attribute,</p> <h2>Summary</h2> <ul> <li>If you already have the add-ons installed as Nuget packages or if you run the "convert-epiaddons" command to convert manually installed add-ons, the upgrade should be like a walk in the park.</li> <li>The <span>"convert-epiaddons" task</span> will only convert add-ons that are manually installed and available in the add-ons Nuget feed. Other add-ons will be ignored.</li> <li>If you have add-ons in EPiServer CMS 7.x that are already installed as Nuget package, you can just upgrade them as regular Nuget packages at the same time as the EPiServer CMS core packages. Most verified add-ons will be available in the regular EPiServer Nuget feed at the time we release EPiServer CMS 8.</li> <li>It's possible to upgrade and maintain add-ons that are installed as UI add-ons, though it requires a few more steps (unless you only have add-ons that are not affected by breaking changes. In that case, nothing additional is required).</li> <li>Notice that I did not have to change a single line of code for the Alloy MVC project after I upgraded to EPiServer CMS 8! Depending on what API:s you are using for your web site, that might not be the case but in general, none or very few changes will be required for most upgrades.</li> <li>Some blog posts are already out there about new functionality in EPiServer CMS 8, like <a href="/link/3bd193af4f804116b80ceab5b3589de5.aspx?id=116470">improved allowed types</a> and <a href="/link/9f3313138f054433828e803bf9fce166.aspx">typed tabs/groups</a>. More blog posts and articles will come and of course, we will also post release information including a summary of new/changed functionality and breaking changes.</li> </ul> <p>Some interesting details that I learned while testing some upgrades</p> <ul> <li>Installing an add-on as a Nuget package in Visual Studio adds a reference to the assemblies in the package folder. You need to compile to copy the assembly to the bin folder of the site.</li> <li>This means that only assemblies installed through add-ons in the UI ends up in the modulesbin folder while add-ons installed as Nuget packages get their assemblies in the bin folder.</li> <li>I noticed a special case when upgrading the Live Monitor and Content Collaboration add-ons. The assemblies for these add-ons was not copied to the bin folder. When investigating this some more I saw that running the Clean Solution command in Visual Studio removed all assemblies except of the previously installed assemblies for these add-ons. After some more investigation I discovered that the cause of this was that these assemblies was compiled with .NET 4.5.1 while my current project was configured to run 4.5. Changing the target framework and recompiling solved this. This seems to be a Visual Studio issue/feature that's not just related to add-ons but Nuget packages in general. (If you want to see this for yourself, try changing target framework without recompiling and then run Clean Solution. The assemblies are still in the bin folder until you recompile them...)</li> </ul> Typed tabs/groups 2015-02-11T12:53:08.9500000Z <p>Currently:</p> <pre class="brush:csharp;auto-links:false;toolbar:false" contenteditable="false">[ContentType(GroupName=GroupNames.News, Order=1)] public class ArticlePage : PageData { [Display(GroupName = GroupNames.Contact)] public virtual ContentReference Image { get; set; } } public static class GroupNames { public const string [GroupDefinitions] public static class GroupNames { [Display([GroupDefinitions] public static class GroupNames { [Display(Order = 1000)] public const string Content = SystemTabNames.Content; }</pre> <p><br />See SDK article <a href="/link/4ef315102c474ebabff187444a7b966f.aspx">Grouping content types and properties</a> for more details.</p> Projects (Beta) 2014-09-01T06:14:00.0000000Z <p>Projects is our first Beta feature in the Edit UI, and the reason for it being beta is that we want to gather feedback from you on what we can improve, which features are we missing and so on, and still have the possibility to do large changes without causing a breaking change.</p> <p>You can read more about how you enable Beta features in <a href="/link/8b4432703e44486ea1af6ddec232a8c5.aspx">Fredrik Tjärnbergs</a> blog post.</p> <h2 id="what-is-a-project-and-what-can-it-do-for-you-">What is a Project and what can it do for you?</h2> <p>I have stolen this text from our User Story</p> <blockquote>As an Editor <br /> I want to be able to publish multiple content at the same time <br /> so that I can more easily handle a big change on the site, and make sure that all its parts <br />are available to the visitors at the same time</blockquote> <p>That means that we have built a "gadget" where you can</p> <ul> <li>Create Projects, e.g. Summer Campaign 1</li> <li>DnD the content that you want to be part of the "Summer Campaign 1"</li> <li>Make all the changes for the campaign</li> <li>Review your changes</li> <li>Mark the content as Ready To Publish</li> <li>Publish all the changes made to the content in the "Summer Campaign 1" project at the same time.</li> </ul> <p>If the content you are adding to the Project is not writable, e.g. Published, we will create a new version for you content before adding it, otherwise we will add the Primary Draft.</p> <p>I have attached a draft version of the <a href="/link/38baf27039e44e308ee27fd8a880a1b8.pdf">User guide documentation</a> were the feature is described in more detail.</p> <h2 id="whats-next-">Whats next?</h2> <p>We know that the Projects feature is far from perfect right now, but we are releasing it in smaller chunks and adding/removing features based on input gathered from you.</p> <p>The next upcoming features for the Projects are (might change depending on feedback)</p> <ul> <li>Preview the site as if the Project has been published</li> <li>Schedule the entire Project to be published at a given time</li> <li>Add content to the project using other ways than DnD, e.g. from the Publish button</li> <li>Auto refresh the Project list - Right now you need to hit the refresh button to see if anyone else has made any changes to the project</li> </ul> <p>If you want to try this feature out you need to be running at least EPiServer.CMS.UI 7.11.0. So please install/enable it and try it out for yourself, and if you have any feedback do not hesitate to let us know.</p>