Lee Crowe
Nov 19, 2014
  4116
(0 votes)

Content search and replace

The development team I currently work in like to have content in line with production content but it very quickly becomes outdated.


To aid with this we have Go pipelines which restore production database backups over lower internal environment databases.


The CMS Site has many links to various other product journeys. These journeys have environment specific Urls. If we are are in our regression environment, we would like content links to hand off to the relevant regression product journeys.


Our go pipeline restores the production database and performs many content replacements by executing a search and replace stored procedure. Below you will find the stored procedure definition to search and replace content.


IF  EXISTS (SELECT * FROM sys.objects WHERE object_id = OBJECT_ID(N'[dbo].[usp_CustomSearchAndReplace]') AND type in (N'P', N'PC'))
      DROP PROCEDURE [dbo].[usp_CustomSearchAndReplace]
GO

CREATE PROCEDURE [dbo].[usp_CustomSearchAndReplace]
      @SearchFor nvarchar(1000),
      @ReplaceWith nvarchar(1000) = ''
AS
      SELECT * FROM [tblContentProperty] WHERE [String] LIKE '%' + @SearchFor + '%' OR [LongString] LIKE '%' + @SearchFor + '%'
      SELECT * FROM [tblWorkContentProperty] WHERE [String] LIKE '%' + @SearchFor + '%' OR [LongString] LIKE '%' + @SearchFor + '%'

      IF LEN(LTRIM(RTRIM(@ReplaceWith))) > 0
      BEGIN
            PRINT 'Updating published pages'
            UPDATE [tblContentProperty] SET [String] = REPLACE([String], @SearchFor, @ReplaceWith) WHERE [String] LIKE '%' + @SearchFor + '%'
            UPDATE [tblContentProperty] SET [LongString] = REPLACE(CAST([LongString] AS nvarchar(max)), @SearchFor, @ReplaceWith) WHERE [LongString] LIKE '%' + @SearchFor + '%'
            PRINT 'Updating unpublished pages'
            UPDATE [tblWorkContentProperty] SET [String] = REPLACE([String], @SearchFor, @ReplaceWith) WHERE [String] LIKE '%' + @SearchFor + '%'
            UPDATE [tblWorkContentProperty] SET [LongString] = REPLACE(CAST([LongString] AS nvarchar(max)), @SearchFor, @ReplaceWith) WHERE [LongString] LIKE '%' + @SearchFor + '%'
            PRINT 'Updating soft links'
            UPDATE [tblContentSoftlink] SET [LinkURL] = REPLACE([LinkURL], @SearchFor, @ReplaceWith) WHERE [LinkURL] LIKE '%' + @SearchFor + '%'
      END
Nov 19, 2014

Comments

Nov 19, 2014 02:27 PM

The TSQL above is for EPiServer v7.

For EPiSever v6 the following replacements will need to be made:
- Replace [tblContentProperty] with [tblProperty]
- Replace [tblWorkContentProperty] with [tblWorkProperty]
- Replace [tblContentSoftlink] with [tblPageSoftlink]

Henrik Fransas
Henrik Fransas Nov 19, 2014 03:58 PM

Do not forget that you have to make EPiServer to recycle the cache (IIS reset is the best way)

Nov 19, 2014 04:20 PM

Indeed, our Go pipelines recycle the application pools once content has been refreshed.

Nov 20, 2014 03:17 PM

Nice work Croweman. as ever I'd approach this in a slighlty different way using my favourite tool IIS UrlRewrite:)

Rather than modifying the datbase. I've approached this by adding some outbound rewrite rules. These scan any outbound html from the server and replace all instances of the live url with the test site url (or other environment). The advantage of this per environment configuration approach, is no changes to data. and you can be very sure that no urls matching that pattern willl ever appear, regardless of how they are entered in the website.

Obviously scanning outbound html incurs a small performance hit, but on a test environment this shouldn't be an issue.

I've put a gist together of the type of configuration needed.

https://gist.github.com/markeverard/8aa02cf0539d12cbefd7

Nov 20, 2014 05:37 PM

Very nice Doctor ;)

I didn't realise you could modify outgoing html using the rewrite module :)

Please login to comment.
Latest blogs
Copy Optimizely SaaS CMS Settings to ENV Format Via Bookmarklet

Do you work with multiple Optimizely SaaS CMS instances? Use a bookmarklet to automatically copy them to your clipboard, ready to paste into your e...

Daniel Isaacs | Dec 22, 2024 | Syndicated blog

Increase timeout for long running SQL queries using SQL addon

Learn how to increase the timeout for long running SQL queries using the SQL addon.

Tomas Hensrud Gulla | Dec 20, 2024 | Syndicated blog

Overriding the help text for the Name property in Optimizely CMS

I recently received a question about how to override the Help text for the built-in Name property in Optimizely CMS, so I decided to document my...

Tomas Hensrud Gulla | Dec 20, 2024 | Syndicated blog

Resize Images on the Fly with Optimizely DXP's New CDN Feature

With the latest release, you can now resize images on demand using the Content Delivery Network (CDN). This means no more storing multiple versions...

Satata Satez | Dec 19, 2024