Loading component...

Published on February 23, 2021Reading time: 13 min read

Adding New Publishing Targets In Sitecore

Loading component...

Related Articles

SitecoreAI

Sitecore Workflow Automation with Management API

A practical guide to managing Sitecore workflows programmatically using the Management GraphQL API with production-tested patterns.

November 20, 20251 min read
Blog Card Placeholder
Dev

How to Create a New Sitecore SXA Headless Site

SXA Headless is easy, awesome and powerful! Learn how to create your first Sitecore Headless Tenant & Site with SXA.

November 19, 20251 min read

Loading component...

Digital solutions

Learn how to maximize your investment in Sitecore by working with us.

AI solutions

Dominate your industry. Work with us to digitally transform your business.

Fishtank's proprietary project accelerator. Save time and money. Build what matters.

Utilities

Energy

Education

Healthcare

Manufacturing

Professional services

Financial services

Non-profits and associations

About FishtankThe PlaybookSitecore SnackContact us

Solutions

  • Digital solutions
  • AI solutions
  • TIDAL for XM Cloud

About

  • About Fishtank
  • The Playbook
  • Sitecore Snack
  • Contact us

Insights

Work

Industries

  • Utilities
  • Energy
  • Education
  • Healthcare
  • Manufacturing
  • Professional services
  • Financial services
  • Non-profits and associations

Start typing to search...

Introduction To Publishing Targets

As you probably know, Sitecore standards send content from Master to Web database. In order to move items from master database to live (web) database, we use the Publish option. Towards bottom of the publishing window, you may have seen the Publishing Targets section.

Adding New Publishing Targets in Sitecore Step 1

Sitecore also provides a way to add more publishing targets. In this blog post, I am going to explain how to add a new publishing target in Sitecore.

Use Case Of Adding A New Publishing Target

By default, items that are in a workflow can only be published if the items are in the final workflow state. However, in situations where you need to publish an item before it reaches the final workflow state, for example, if you want the item to be reviewed by a non-Sitecore user, you can publish the item to a preview publishing target. You can refer to my other blog Publishing To Preview Environments In Sitecore Using Workflow for more detail.

How To Add A Publishing Target

1. Where are these publishing targets coming from? Go to /sitecore/system/Publishing targets and create a new publishing target.

Adding New Publishing Targets in Sitecore Step 2

2. Provide Target Database name.

Adding New Publishing Targets in Sitecore Step 3

3. Create new target database in ConnectionStrings.config where you want content to be published. The name should be same as provided in Target Database in Step 1.

<add name="preview" connectionString="Data Source=.;Initial Catalog=web_preview;User ID=;Password=" />

4. Create a configuration patch file (best practices suggest making a patch file) OR follow Steps 5-8.

Create a patch file under C:\inetpub\wwwroot\instancename\App_Config\Include\Project\ or any other folder based on your project architecture.

 
<?xml version="1.0" encoding="utf-8" ?>
 <configuration xmlns:patch="http://www.sitecore.net/xmlconfig/">
     <sitecore>
         <eventing defaultProvider="sitecore">
            <eventQueueProvider>
                <eventQueue name="preview" patch:after="eventQueue[@name='web']" type="Sitecore.Data.Eventing.$(database)EventQueue, Sitecore.Kernel">
                     <param ref="dataApis/dataApi[@name='$(database)']" param1="$(name)" />
                     <param hint="" ref="PropertyStoreProvider/store[@name='$(name)']" />
                </eventQueue>
            </eventQueueProvider>
         </eventing>
         <PropertyStoreProvider>
             <store name="preview" patch:after="store[@name='web']" prefix="preview" getValueWithoutPrefix="true" singleInstance="true" type="Sitecore.Data.Properties.$(database)PropertyStore, Sitecore.Kernel">
                  <param ref="dataApis/dataApi[@name='$(database)']" param1="$(name)" />
                  <param resolve="true" type="Sitecore.Abstractions.BaseEventManager, Sitecore.Kernel" />
                  <param resolve="true" type="Sitecore.Abstractions.BaseCacheManager, Sitecore.Kernel" />
             </store>
         </PropertyStoreProvider>
         <databases>
         <!-- Preview-->
             <database id="preview" patch:after="database[@id='web']" singleInstance="true" type="Sitecore.Data.DefaultDatabase, Sitecore.Kernel">
                 <param desc="name">$(id)</param>
                 <icon>Images/database_web.png</icon>
                 <securityEnabled>true</securityEnabled>
                 <dataProviders hint="list:AddDataProvider">
                     <dataProvider ref="dataProviders/main" param1="$(id)">
                         <disableGroup>publishing</disableGroup>
                         <prefetch hint="raw:AddPrefetch">
                              <sc.include file="/App_Config/Prefetch/Common.config" />
                              <sc.include file="/App_Config/Prefetch/Webdb.config" />
                         </prefetch>
                     </dataProvider>
                 </dataProviders>
                <PropertyStore ref="PropertyStoreProvider/store[@name='$(id)']" />
                    <remoteEvents.EventQueue>
                        <obj ref="eventing/eventQueueProvider/eventQueue[@name='$(id)']" />
                    </remoteEvents.EventQueue>
                    <archives hint="raw:AddArchive">
                        <archive name="archive" />
                        <archive name="recyclebin" />
                    </archives>
                    <cacheSizes hint="setting">
                         <data>100MB</data>
                         <items>50MB</items>
                         <paths>2500KB</paths>
                         <itempaths>50MB</itempaths>
                         <standardValues>2500KB</standardValues>
                    </cacheSizes>
              </database>
         </databases> 
     </sitecore>
 </configuration>

Note – If you are creating a patch file as per Step 3, you are done! Otherwise follow the steps below.

5. Navigate to your Sitecore.config file, and find for <database id="web" (around line 1100) and copy it from <!– web –>.

Paste the content, modify the following entries, and save the file <!– web –> to <!– preview –> (comment update for future reference) <database id=”web” to <database id=preview (must change).

Adding New Publishing Targets in Sitecore Step 4

    <database id="preview" singleInstance="true" type="Sitecore.Data.DefaultDatabase, Sitecore.Kernel" role:require="Standalone or Reporting or ContentManagement or ContentDelivery">
      <param desc="name">$(id)</param>
      <icon>Images/database_web.png</icon>
      <securityEnabled>true</securityEnabled>
      <dataProviders hint="list:AddDataProvider">
        <dataProvider ref="dataProviders/main" param1="$(id)">
          <disableGroup>publishing</disableGroup>
          <prefetch hint="raw:AddPrefetch">
            <sc.include file="/App_Config/Prefetch/Common.config" />
            <sc.include file="/App_Config/Prefetch/Webdb.config" />
          </prefetch>
        </dataProvider>
      </dataProviders>
      <PropertyStore ref="PropertyStoreProvider/store[@name='$(id)']" />
      <remoteEvents.EventQueue>
        <obj ref="eventing/eventQueueProvider/eventQueue[@name='$(id)']" />
      </remoteEvents.EventQueue>
      <archives hint="raw:AddArchive">
        <archive name="archive" />
        <archive name="recyclebin" />
      </archives>
      <cacheSizes hint="setting">
        <data>100MB</data>
        <items>50MB</items>
        <paths>2500KB</paths>
        <itempaths>50MB</itempaths>
        <standardValues>2500KB</standardValues>
      </cacheSizes>
    </database>

6. Next (in Sitecore.config only) find the following entry eventQueue=”web” (around line 350) and copy those lines highlighted in the red square.

Adding New Publishing Targets in Sitecore Step 5

Paste after the </eventQueue> and modify the following entry <eventQueue name=”web” to <eventQueue name=”preview″


<eventQueue name="preview" type="Sitecore.Data.Eventing.$(database)EventQueue, Sitecore.Kernel">
      <param ref="dataApis/dataApi[@name='$(database)']" param1="$(name)" />
      <param hint="" ref="PropertyStoreProvider/store[@name='$(name)']" />
    </eventQueue>

7. Now, find (in Sitecore.config only) the following entry <store name=”web” (around line 385) and copy those lines highlighted in the red square.

Adding New Publishing Targets in Sitecore Step 6

Paste after the </store> and modify the following entry <store name=”web” to <store name=” preview ″ AND prefix=”web” to prefix=”preview″


  <store name=" preview " prefix=" preview " getValueWithoutPrefix="true" singleInstance="true" type="Sitecore.Data.Properties.$(database)PropertyStore, Sitecore.Kernel">
    <param ref="dataApis/dataApi[@name='$(database)']" param1="$(name)" />
    <param resolve="true" type="Sitecore.Abstractions.BaseEventManager, Sitecore.Kernel" />
    <param resolve="true" type="Sitecore.Abstractions.BaseCacheManager, Sitecore.Kernel" />
  </store>

8. Save your Sitecore.config and access your Content Management again. Now, give a try and go to Publish and you will see an extra option for Publishing Targets.

Adding New Publishing Targets in Sitecore Step 7

Note - Don’t forget that your new database (Preview) for publishing target needs to be present in SQL Server otherwise you will get an exception.

Additional Tip

If you have multiple publishing targets then you will see all of them in the publishing window as checkbox items. If you want to set any of these publishing target database as your default target database, then you can configure it via DefaultPublishingTargets setting in web.config file.


<setting name="DefaultPublishingTargets" value="QA" />
 
Adding New Publishing Targets in Sitecore Step 8

Happy coding!

Solutions

  • Digital solutions
  • AI solutions

Brands

  • TIDAL for SitecoreAI
  • Sitecore Snack
  • The Playbook

Fishtank lore

  • Work
  • Insights
  • About us
  • Contact us

Industries

Utilities
Professional services
Energy
Financial services
Healthcare
Education
Non-profits and associations
Manufacturing
Utilities
Professional services
Energy
Financial services
Healthcare
Education
Non-profits and associations
Manufacturing

2025 @All Rights Reserved. Privacy Policy.

FISHTANK