February 15, 2018

Different types of Content migration

Website is the most important element of any business & digital strategy. In rapid changing web and web technologies it becomes necessary to redesign your website/web app for different requirements.
  • Not responsive
  • Content update to reflection on website takes time.
  • Content creation process is mess.
  • Integration with CRM, DAM, E commerce, Social media.
  • Launch & Translation for new market is cumbersome
  • Conversion is bad
  • Outdated technologies
  • SEO & ranking issues.
Content is king and design is queen, so both needs to be up to date for your business kingdom.
Information Architecture (IA) is very first step in the redesign of the website. Information architecture helps in organizing content so that users intuitively adjust to the website & find without extra effort. Information Architecture becomes blueprint for UX team and wire framing. Though wire framing is becoming out of fashion due to quick turnaround time for design. IA and UX are very important aspects of the redesign.

Content Migration

IA & UX also helps in driving whether existing content can be used or needs to be migrated. Because if existing content does not fit, then new content copies and authoring of same becomes part of redesign project. Due to change in IA and UX new images, device specific images will be required. Content as-is migration does not make sense.
But still there are section of website which require content migrations, blogs, articles any other content which does not get impacted due to above changes.
Content Migration can be manual or automated.
Manual Migration:
It involves a person or team of people doing the work of copying and pasting a site’s content from one system to another. If content to be migrated is not enormous and doesn’t have lots of Media than Manual migration is the one of the choice. But any change in design will cause again going through all the content and update in all the pages, which becomes very cumbersome and error-prone.
Automated Migration
This method requires developers to write script/code to fetch the content from one system and push the content into target system using Target's system's API. (e.g. in SDL Tridion, Core Service is used). Depending on complexity of target system some specialization is always required to write the migration scripts and validation.
Automation migration also falls into two types
  • Source CMS to Target System directly.
  • Intermediate system to Target System.
Hybrid Migration
There are situations when Target system is not yet ready for content authors and authors can't wait till system gets ready, as content size is huge and timelines may get affected.
So an intermediate system is taken where author enters the content instead of Word processing software's. Later on when target system is ready, content can be imported using automation scripts, so a parallel track starts writing scripts to automate the content ingestion from intermediate system to target system.

February 14, 2018

Publish Settings in DXA explained

DXA has few system pages like Html-design, _navigation and “Publish Settings”, out of these Publish Settings is the one which boots an DXA application and considered as the very important system page.
Publish setting provides intelligence to the MVC application to get it work faster and isolated from CMS.
How does it choose what to publish?
So DXA provides a schema called Module Configuration. Whenever a module is created, a component of this schema is created you define the module name, version and related dependencies of it.

Whenever Publish-settings is published. It searches for the all components created with this schema
& generate files which store as binaries in the Broker DB. Above picture is of Core component (Module-Configuration schema). If you see it has listed configuration and Resource dependencies of this module.
Files Generated –  (each files starts with its module name)
/System/config
-          Core.json  - Contains all the configuration values(combined)  from attached components above
-          Core.schemas.json – contains name and id of all the schema of this module
-          Core.taxonomies.json – contain all taxonomies of the system.
There is another file _all.json in this directory which actually list all above files and few other environment settings.
/System/Resources
-          Core.json – a combined file of the entire resource component attached in module configuration.
/System/Mappings
We can say it is master data of schemas & templates, this is not module dependent files but global files.
-          Schemas.json - it contains all the schemas’ definitions from the CMS.
-          Regions.json - it has details of all the regions and details of component template where it’s used, along with linked schema of CT.
-          Includes.json – it contains all the Page Template Ids and associated includes in that PT.
So lots of information required/used by DXA for various purposes.
It needs schemas. Json to map field values to the respective entity, Semantics and XPM in MVC application. So whenever there is change in schema you have to publish “Publish settings” page to reflect the change in application.
Some Tips:
Any change in schema CT’s Region and PT’s includes require users to publish this page. Otherwise you will spend hours to figure out where the heck are my changes.
When DXA boots it loads _all.json of config and resources to read all the respective files and download all these under BinaryData folder of your application’ root directory.


January 22, 2018

Semantic markup using Schema.org in DXA

What is Semantic SEO:  Semantic SEO is giving meaning to your  data embedded in the html Tags using some metadata. and which would be utilized by the search engine to index your page in better way.

Why do i care: Semantic SEO is hot topic these days because Google and other Search engine have updated their algorithm to consider and give little higher weight to pages having  semantic markups. It seems inevitable that including semantic mark-up tags in your html will become more important,  check this: Schema mark-up rank higher in SERP’s.

What is Schema.org
Schema.org  provides vocabulary to give semantics to your html tags , which is supported by  Google & Bing. You can find out schema from schema.org for your particular entity and tag the content with that to give it a meaning.
schema.org standards allows specified entities such as products, places or people to be identified in your HTML with different attributes.

Example: Markup with semantic attributes

<div prefix="s: http://schema.org" typeof="s:Movie">
<h1  property="s:name">Avatar</h1>
  <span  property="s:genre">Science fiction</span>
</div>

On inspecting above tags, you will find out above details have been given meaning by adding those attributes (bold). so without this any search engine can't distinguish between what is above information exactly. Now Search engine knows its A movie which has name Avatar, and its a Sci fiction.

Without semantics Google may have index it as book, some mythological character etc. but now its has specific meaning and that's the purpose of Semantics SEO and Schema.org.

Formats: Schema.org just provided the vocabulary or schema to give meaning to your information, but hows this vocabulary is attached to content is , where format comes to the picture.
following are the main formats using which we can tag our content.


DXA and Semantic SEO : 
DXA makes life very easy for us to add those ugly semantics markups into your html tags. Its very good feature which comes OOTB in the DXA all version.

DXA default Implementation: DXA comes with RDFa Lite implementation.  RDFa Lite consists of five simple attributes; vocab, typeof, property, resource, and prefix. so its lite version of RDFa which i mentioned in the list above.
if you want to use any of other format in your code, then you have to implement it.

[SemanticEntity(Vocab = "http://schema.org", EntityName = "Movie", Prefix = "s", Public = true)]
    public class Movie: EntityBase
    {
        [SemanticProperty("s:name")]
        public string Name { get; set; }
         [SemanticProperty("s:genre")]
        public string Genre { get; set; }
    }

SemanticEntity -:  This attribute actually defines which Vocabulary you are going to use
EntityName: Entity name from specified Vocab. Name is one of schema in Schema.org
Prefix: kind of namespace. so if you define multiple formats , Vocab on the it. it would help to differentiate.
Public=true/false:  Semantic attributes will only be applied to markup if Public=true, otherwise it will be ignored.
SemanticProperty: Name of  Entity properties has to match with the name defined in schema.org/Movie only then it will add meaning and will be used by Google to index.

<div @Markup.Entity(Model)>
  <h1 @Markup.Property(Model, "Name")>@Model.Name</h1>
   <span @Markup.Property(Model, "Genre")>@Model.Genre</span>
</div>

so when this is executed, it will give output  as shown above.

Semantics markup Validation using Google structure testing tool; developers.google.com/structured-data/testing-tool/


December 20, 2017

Tutorial for Tridion Powershell commands

In my last blog post, i demonstrated the setup of Powershell for beginners. Now i will discuss more commands of Tridion Powershell.

List of commands: following Power shell command will return all the commands available in Tridion Powershell module.

PS C:\Windows\system32> Get-Command -Module Tridion-CoreService

  • Clear-TridionCoreServiceSettings
  • Close-TridionCoreServiceClient  
  • Convert-TridionApplicationData  
  • Get-TridionUser - there is also Get-TridionUsers which is not listed by get-command
  • Disable-TridionUser             
  • Enable-TridionUser              
  • Get-TridionApplicationData      
  • Get-TridionCoreServiceClient    
  • Get-TridionCoreServiceSettings  
  • Get-TridionGroup                
  • Get-TridionGroups               
  • Get-TridionItem                 
  • Get-TridionPublications         
  • Get-TridionPublicationTarget    
  • Get-TridionPublicationTargets   
  • Get-TridionPublishTransaction                
  • New-TridionGroup                
  • New-TridionItem                 
  • New-TridionPublication          
  • New-TridionUser                 
  • Publish-TridionItem      
Lets try few of the commands to unleash power of Powershell 

Get-TridionPublications:
Above command it will list all the publication details with lots of additional information.  You can also filter the the number of fields to show and in nice format. below example show just Title, Id and PublicationType.








User Based Operations:


To get all users those are not currently active. PS module make is very easy to fetch those details and take action if required. Firstly all the Users are fetched then filtered on rows, then on columns respectively.

PS C:\Windows\system32> Get-TridionUsers | where  {$_.IsEnabled -eq $false} | select Title, IsEnabled, Description

Title                                                                 IsEnabled Description
-----                                                                 --------- -----------
SDLDEVCMS\rkum                                                      False Raj Kumar

Enabling all the disabled users at once:

Get-TridionUsers | where  {$_.IsEnabled -eq $false} | Enable-TridionUser

otherwise if you just use Enable-TridionUser command, you have to pass one by one to enable/Disable the users


Publish Transactions Operations:
To get the status of transactions, you manipulate the results on various parameters

Following command with list out all the failed transactions in publishing queue. 

Get-TridionPublishTransaction | where {$_.State -eq "Failed"} | select Title, Id, State

List out tranactions grouped by State

PS C:\Windows\system32> Get-TridionPublishTransaction | Group-object State