I was already using rather heavily modified item display template for the customer, so I simply needed to modify that one, but you can also copy any item display template (from the Master Pages gallery, Display Templates > Content Web Parts folder) that best fits your purposes and modify the copy. Mind you, you only copy the html template, modify it, save it with another name and upload it back to the library. The .js file will be automatically created.
The things you need to do to your display template in order to enable opening documents in OWA are:
1) Add the managed property 'ServerRedirectedURL' to the managed properties:
This is the property that provides the open in OWA url for documents. You could use this as a simple property for the LinkURL, but if you cannot be certain that each and every document that gets listed in the CSWP is in fact an office document, you need to add a bit more code to the template.
2) Right there, where the commented code of the display template begins, below the var encodedId line, insert the following code I intecepted from the common search result item template:
var useWACUrl = !$isEmptyString(ctx.CurrentItem.ServerRedirectedURL);
if(ctx.ScriptApplicationManager && ctx.ScriptApplicationManager.states){
useWACUrl = (useWACUrl && !ctx.ScriptApplicationManager.states.openDocumentsInClient);
}
var appAttribs = "";
if(!useWACUrl)
{
if (!$isEmptyString(ctx.CurrentItem.csr_OpenApp)) { appAttribs += "openApp=\"" + $htmlEncode(ctx.CurrentItem.csr_OpenApp) + "\"" };
if (!$isEmptyString(ctx.CurrentItem.csr_OpenControl)) { appAttribs += " openControl=\"" + $htmlEncode(ctx.CurrentItem.csr_OpenControl) + "\"" };
}
var url = ctx.CurrentItem.csr_Path;
if($isEmptyString(url)){
if(useWACUrl)
{
url = ctx.CurrentItem.ServerRedirectedURL;
} else {
url = ctx.CurrentItem.Path;
}
}
3) Then modify the LinkURL variable to use the url instead of the default Path:
var linkURL = $urlHtmlEncode(url);
4) Finally, remove the line
linkURL.overrideValueRenderer($urlHtmlEncodeValueObject);
And that's it, folks.
2 comments:
Best Post on this that I have found. I did exactly what you laid out and it worked the first time.
Thank you so much!
Awesome! was looking for a solution for ages
Post a Comment