Mobile First – Mobile Inspired Editing for WSM

<%stf_SENSATIONAL_CLAIM_OF_FIRST_MOBILE_FIRST_INLINE_EDITING_EXPEIENCE%>

It’s arrived and there have been enablement webinars (available on KC 11.2 release, Mobile Editing Deep Dive) on this new editor experience. The feedback I and others hear from demonstrations are that many feel this is a better approach for editors. Frank Steffen mentioned on the latest call the features are growing for this mobile editor and supported browsers expanding past Chrome for desktop.

Are you using this yet? Do you need a demonstration?

Pairing this with a Responsive Web Design refresh will make your editors and end users on mobile devices happy. We’ve retrofitted a few existing sites with the new Xample project, the OpenText Services RWD Prebuilt Project and similar designs in less than 30 days. If you want OT to do this for you or just give you a kick start reach out.

 

WSM Blossoming in the Spring

The leaves are coming out, the flowers are in bloom, and OpenText Web Site Management (WSM) innovations on top of a refreshed core architecture are slated to roll out or have.

  • Find out about a pre-built HTML5 Responsive Web Design implementation for WSM: http://www.solutionexchange.info/2064.htm
  • SmartTree cross-browser & new public APIs in v11.1 – yes we listen to those ideas on Solution Exchange. # 1 & 2 items complete or on road map.
  • Find out what’s in the soon to be released v11.1 and road map of new features through 2015 https://knowledge.opentext.com/knowledge/cs.dll?func=ll&objId=34146964&objAction=browse
  • Watch Solution Exchange and Twitter for Manuel’s teasers of new features coming in v11.2 ( around Q4) like Tablet editing
  • A new version of Portal Site Management is pending as well. With exciting possibilities with what SAP has done with SAP UI5, and mobile portal. That isn’t the same old grey and orange portal I started working with about a decade ago.

It’s an exciting time to work with OpenText WSM and more to come. Also enjoy seeing the EIM strategy taking hold in R&D and there are exciting new plans to come that could help out customers get much better Customer Experiences as well.

 

Globalized Personali(z|s)ation – Baked in goodness

I’m going to assume you  have an understanding of traditional WCM Deployment Patterns and recognize that the core that all OpenText Web Site Management(RedDot) is a baking machine. When OpenText WSM publishes it renders the approved final version of the content out statically to a location. That doesn’t mean its WCM journey is done. I’m about to describe a method to deploy a global personalization system. However, you could swap out where I have OpenText Delivery Server for ASP.Net, PHP, JSP, RoR, Django, or any language or framework you want. OpenText Professional services has a set of practices to help meld your development methodology with content creation to liberate your application developer. But back to the topic at hand. When I talk about Delivery Server it is often in the context of par-baking, which I have used before seeing Seth’s post or other sources.   The following method of par-baking in particular allows you to optimize personalized delivery without segmenting user storage by location. This scenario has come up many times over the years. Here is a general answer:

By setting up N (you could assume 3) data center locations, with Global Traffic Management (GTM) routing systems could sufficiently route traffic to one of N data centers closest to the client.  This would allow for optimal delivery speed of content, both personalized and not. For this discussion lets assume each data center location would have its own database server locally that does not have replication to the other database instances.  Content would be replicated from WSM Management Server in the current data center out.  This can include DynaMents or XSL configurations.  Any configurations can be promoted from development to all N production data centers using Delivery Server transport packages.  Users and personalization data remain a concern.  WSM Delivery Server with the Developer Toolkit activates SOAP web services that expose an API to edit user data, as well as a SOAP based Web Services Connector in Delivery Server.  With these services and connector, a Delivery Server DynaMent configuration can be developed such that when the profile of a user is updated, the change will be replicated to all data centers via Web Services DynaMents.  The synchronization could be configured for optimal user experience: to occur asynchronously with the use of AJAX.  This would prevent blocking of page loads for distant calls with longer write times.

For global companies performance of their sites is a factor in the User Experience. Having friends and colleagues in Australia and Germany I know this from feedback I’ve gotten working on shared servers. I’m lucky enough to have friends in Europe who now work at Compuware (Gomez) they’ve conveyed the experience gains of having your contents hosted in your region or country so there are real ROIs in investing in global infrastructure. This doesn’t rule out CDNs. In fact this works for active content and user profile synchronization with DR as well which is important to support a CDN strategy for your origin servers. Pairing up this approach with OpenText WSM multi-language capabilities to produce localized sites is always a great combo.

Have thoughts on the approach? Using a database level replication and having a good experience?

Responsive Web Site Management

Responsive Web Design (RWD) is a term bouncing around marketing and web teams. I’m going to assume you’ve read some articles or good books on the topic. Where it hasn’t been heard of yet I’ve injected it into the mind share of a few organizations. Why is this important? The ability to deliver to multiple channels is important and the concept has been in OpenText Web Site Management (WSM) for as long as I’ve worked with it. In WSM a multi-channel support mechanism allows publishing multiple copies of content with different markup in a system called “Project Variants”. Why would I write about this concept that reproduces what the product offers? The reason is it reduces publication effort on your servers, getting the same content onto different devices. This practice empowers your web designers/developers, simply change your CSS/JavaScript and with no changes to your WSM implementation you can support a new device.

Want to learn more about WSM & RWD? There is an upcoming webinar from the WSM product team.

rwd-teaser

The OpenText Global Services team is about to release information on a pre-built WSM project that incorporates a Responsive Web Design on Solution Exchange. Some notes on the goals of that solution:

  • Common Content Types
  • Common UI Elements that support most sites needs
  • Skinnable HTML5 Framework with an active community
  • OpenText Global Services standard practices for navigation, project structure, and editor UX
  • Launch a micro-site or start a site redesign faster
  • Reduce initial setup time to get to greater value features faster
  • Lower cost and risk than implementing WSM from scratch

 

There are number of partners, customers and of course OpenText Global Services working with Responsive Web Designs with WSM. Need help getting started reach out to your preferred integrator or OpenText for help. I’m looking forward to see more launches & relaunches in 2013.

OpenText WSM and Wave Together

What follows is a simple recipe for creating an OpenText Wave Application filled with content from OpenText Web Site Management.

Ingredients:
1 existing WSM Project with Articles Content Class, you may have 1 to many available
1 existing Wave Application Template with NewsList and NewStory XML Consumer

Take WSM Project

 

 

 

Add Articles Variant to convert HTML to text for native applications:

 

Here’s a view of the template, not much needed.

 

 

 

Publish that out.

This Delivery Server project already had target DynaMent’s delivering personalized news.

 

 

 

Made a minor change to the target DynaMent to use the variant content

 

 

Some minor tweaks were needed.  Then pointing the URL for the NewsList template to WSM Delivery Server and this is the resulting application:

 

 

 

 

Results:

Cross Platform Native Applications (iOS, Android, Blackberry providing content reuse in a different channel

Next steps:
1) Clean up the content for the application a bit.
2) Examine sharing sample configuration (DS Transport Package, MS Content Class Template export& Documentation) to SolEx. This took about 2 days effort scattered in amongst other tasks, having a sample configuration will dramatically cut development time.

DS API and RQL via AJAX – A Test Drive

Recently in the community I’ve been advocating and drumming up support for DS REST API and Jian, Kim, and Manuel have been discussing MS Plugins using AJAX to call RQL. I recently got an opportunity to give them a test drive to see how they will work for rapid prototyping a solution for a Proof of Concept (POC). I was impressed.

The scenario (as originally understood):

To create a set of JSP pages that provide access to WSM

1)DS to display different contents based on date range, resolution, and later an audience category for personalization.

2) Remote access to Asset Manager contents, and on selection return relative paths for where published files would reside.

DS REST API In Depth:

After installing (used the quick start guide for backup) and testing base functionality. I jumped back to Management Server to create contents with metadata to drive the searches. Some assigned by categories and keywords, some by standard fields, and some embedded in the content class templates. After publishing I created a redundant database structure.

Screen capture of attributes and constraint

I created a new handler by copying the existing Target DynaMent handler. I removed authentication for the handler, as this is a POC it just make things simpler. I developed a query to the  specified my parameters.

http://host/api/1/newtarget.html?dbs=wcs&project=demo&include-mode=content,content&chunksize=1&chunk=1&sortedby=cms.date.wcsdatetime&ignore-constraints=completely&sortorder=desc&attributepath=none&constrainttime=20110623&hres=300

I added a couple DynaMents to write constraints for me based on values of ‘constrainttime’ and ‘hres’. And I had a single content returned per date/resolution. I finished it up by adding a simple HTML XSLT so the content of this one item is accessible as if it were called directly. The rest was some JSP to scrape characters from a URL into a StringBuffer. Much more sophisticated option is possible but it is a POC.

RQL via AJAX

var loginguid=””;
var sessionguid=””;$(document).ready(function() {// hide search result area
$(“#searchresult”).hide();
if($.cookie(“assetlogin”) == null || $.cookie(“assetsession”) == null || $.cookie(“assetlogin”) == “” || $.cookie(“assetsession”) == “”)
{
login();
}else{
if(“<%= session(“sessionkey”) %>” ==”” || “<%= session(“loginguid”) %>”==””){
loginguid=$.cookie(“assetlogin”);
sessionguid=$.cookie(“assetsession”);
DisplayAssets(“FE46C4F25F4847F4A983C6F41EDC42A3”);
}else{
//alert(“asp vars”);
loginguid=”<%= session(“loginguid”) %>”;
sessionguid=”<%= session(“sessionkey”) %>”;
DisplayAssets(“FE46C4F25F4847F4A983C6F41EDC42A3”);
}
}
});

function DisplayAssets(FolderGuid)
{
if(FolderGuid == “”)
{
$(“#searchresult .content”).append(“<div class=\”error\”>Error</div>”);
return;
}

$(“#searchresult .content”).empty();

//load simple page info
var strRQLXML = padRQLXML(“<MEDIA><FOLDER guid=\””+FolderGuid+ “\” subdirguid=\””+FolderGuid+”\”><FILES action=\”list\” view=\”list\” sectioncount=\”-1\” maxfilesize=\”0\” attributeguid=\”\” searchtext=\”*\” pattern=\”\” startcount=\”1\” orderby=\”name\”/></FOLDER></MEDIA>”);
$.post(“/CMS/PlugIns/RemoteAssetManager/rqlaction.asp”, { rqlxml: strRQLXML },
function(data){
// add stuff to search results
if($(data).find(“FILE”).attr(“name”) != null)
{
//add on click alert http://host/saq/images/imagename
$(data).find(‘FILE’).each(function(){
$(“#searchresult .content”).append(“<div style=\”border: 2px solid grey; padding 15px;\”><a onclick=\”alert(‘URL for Integration Externally: http://host/url/images/”+$(this).attr(“name”)+”‘)\” href=\”#img=” + $(this).attr(“name”) + “\”><br/><img style=\”border:3px solid black;\” src=\”http://win-kk55dom76sa/cms/”+$(this).attr(“thumbnailpath”)+”\” /><br/>” + $(this).attr(“name”) + “</a><br/> </div>”);
});
}
else
{
$(“#searchresult .content”).append(“<div class=\”error\”>Folder with guid ” + FolderGuid + ” not found.</div>”);
}
$(“#searchresult”).show();
}, “xml”);
}

function login(){
// login
var strLoginRQLXML = “<IODATA> <ADMINISTRATION action=\”login\” name=\”admin\” password=\”dontdothis\”/></IODATA>”;
$.post(“/CMS/PlugIns/RemoteAssetManager/rqlaction.asp”, { rqlxml: strLoginRQLXML },
function(data){
//handle the login request
loginguid=$(data).find(‘LOGIN’).attr(“loginguid”);
userguid=$(data).find(‘LOGIN’).attr(“userguid”);
//sessionguid=$(data).find(‘LOGIN’).attr(“guid”);
$.cookie(“assetlogin”, loginguid);
//alert(“loginguid: “+loginguid);
//”<IODATA loginguid=\”<%= session(“loginguid”) %>\” sessionkey=\”<%= session(“sessionkey”) %>\”>” + innerRQLXML + “</IODATA>”;
var strProjectRQLXML = padRQLXMLNoSession(“<ADMINISTRATION action=\”validate\”><PROJECT guid=\”0B7FE095D7814EE48B95B2E2A41A0BA0\” /></ADMINISTRATION>”);
//alert(strProjectRQLXML);
$.post(“/CMS/PlugIns/RemoteAssetManager/rqlaction.asp”, { rqlxml: strProjectRQLXML },
function(data){
//handle the login request
sessionguid=$(data).find(‘SERVER’).attr(“key”);
$.cookie(“assetsession”, sessionguid);
DisplayAssets(“FE46C4F25F4847F4A973C6F41EDC42A3”);
}, “xml”);
return “”;
}, “xml”);
return “”;
}

function padRQLXML(innerRQLXML)
{
return “<IODATA loginguid=\””+loginguid+”\” sessionkey=\””+sessionguid+”\”>” + innerRQLXML + “</IODATA>”;
}
function padRQLXMLNoSession(innerRQLXML)
{
return “<IODATA loginguid=\””+loginguid+”\”>” + innerRQLXML + “</IODATA>”;
}

This made a quick and easy UI to include via a similar JSP to the ones used for Delivery Server. This could be expanded on by

Result:

Both satisfied the technical requirements as they were understood. Some on the fly reconfiguration during a break was able to more accurately meet the customers requirements.

Time Frame:

Total time <16 hrs

Facts:
This includes download, install, configuration of REST project. A good amount of this time was spent coding the JSP to include the results of my REST services. I will be honest I’m really a novice with limited hands on experience. Only some rusty revision of existing RQL scripting as background and an existing AJAX plugin as guide.