Symantec Enterprise Vault adds archiving functionality to Outlook and makes it accessible through OWA. It does this by adding icons and menus to OWA.
The icons and menus are added by dynamically attaching more nodes to the DOM of OWA, and injecting custom scripts by loading them via XMLHTTP and injecting them into the execution context of OWA by using JavaScript's
eval() statement.
There are a few challenges when publishing this application because the authors have made a few assumptions:
- that there is no Host Address Translation between the client and OWA;
- about the way the URI is built (i.e. that there are 5, not 7 components in the URI).
This can be remedied by adding certain entries to the
Application Wrapper XML file that change the injected code a bit.
Namely,
- for self-referencing links, help KVS examine the root of the user's mailbox correctly.
- for injecting the code, use the HAT prefix of the application instead of assuming KVS lives at the root of OWA.
Here's the Application Wrapper code. Note you will have to adjust the sections where it says
INTERNAL_NAME and
PORTAL_APPLICATION_URL according to your setup.
<!-- begin custom changes for OWA with KVS -->
<DATA_CHANGE>
<!-- enable KVS restore folder funtionality, which is not properly rewritten -->
<URL>/enterprisevaultproxy/archiveexplorerui.asp.*</URL>
<SAR>
<SEARCH encoding="base64">OWARestoreFolderUrl="https://INTERNAL_NAME/</SEARCH>
<REPLACE encoding="base64">OWARestoreFolderUrl="/whalecomPORTAL_APPLICATION_URL/whalecom1/</REPLACE>
</SAR>
</DATA_CHANGE>
<DATA_CHANGE>
<URL>/exchweb/enterprise%20vault/6\.0/EVShared\.js</URL>
<!-- change code in KVS so that when it builds self-referencing links and needs to determine the base
directory for this purpose, it will not cut off the add'tl two URL segments and thus truncate the
path prematurely. -->
<SAR>
<SEARCH encoding="base64">function EVGetRootUrl()
{
//Return the url to the root folder of the mailbox
return document.location.href.split("/").slice(0,5).join("/");
}</SEARCH>
<REPLACE encoding="base64">function EVGetRootUrl()
{
//Return the url to the root folder of the mailbox
return document.location.href.split("/").slice(0,7).join("/");
}</REPLACE>
</SAR>
</DATA_CHANGE>
<DATA_CHANGE>
<URL case_sensitive="false">/.*util_owa\.js</URL>
<!-- add HAT signature to EV*.js files that are loaded by util_owa.js-->
<SAR>
<SEARCH encoding="base64">"/exchweb/</SEARCH>
<REPLACE encoding="base64">"/whalecomPORTAL_APPLICATION_URL/whalecom1/exchweb/</REPLACE>
</SAR>
<!-- display alerts for all JS exceptions. -->
<SAR>
<SEARCH encoding="base64">//Absorb any errors -we don't want the client constantly reminded if their browser or os isn't supported.</SEARCH>
<REPLACE encoding="base64">alert("N:"+e.name + "M:" + e.message);</REPLACE>
</SAR>
</DATA_CHANGE>
<!-- end custom changes for OWA with KVS -->