cancel
Showing results for 
Search instead for 
Did you mean: 

Current build of Microsoft Office Add-In

sacco
Champ in-the-making
Champ in-the-making
For me it installs fine for Excel and PowerPoint, but for Word 2003 there's absolutely no sign in the application that anything has been installed.

No error message, nothing in the logs …. just never starts.

It's worked before, and I completely uninstalled the old version before installing the new one.
7 REPLIES 7

mikeh
Star Contributor
Star Contributor
Hi

Nothing's changed around the installation recently. You must have all the pre-req's installed for it to be working with Excel and PowerPoint.

Have you rebooted between uninstall and install? It's possible that the Word.exe process was still running (e.g. if you use it as the editor in Outlook). Unfortuately the Microsoft installers don't pick this up, so it's a silent failure.

To see if the add-in has been disabled for some reason, in Word, go to Help/About then Disabled Items. Enable the add-in if it appears in the list.

To see if the add-in is installed, in Word, go to Help/About then System Info. Open the Office 2003 Applications node, then Microsoft Office Word 2003, then COM Add-Ins. The Alfresco add-in should be listed there.


Thanks,
Mike

sacco
Champ in-the-making
Champ in-the-making
Thanks for the quick reply Mike.

Yes, I had done all the usual dance around installation (and always kill any stray processes before installing), but, as you suggested, the add-in turned out to have been disabled for some reason.  I re-enabled it, but it insisted on being disabled, so I uninstalled, blasted assorted stuff in the Registry, deleted any suspicious looking files, and re-installed: this time it could be enabled.  Success!

sacco
Champ in-the-making
Champ in-the-making
Now, however,  whenever we select the second tab in the Add-In (Browse Spaces and Documents), we get a

Web Script Status 500 - Internal Error

from /alfresco/wcservice/office/navigation

Error during processing of the temple 'null'.

Script Status 500 - Internal Error 

The Web Script /alfresco/wcservice/office/navigation has responded with a status of 500 - Internal Error. 

500 Description: An error inside the HTTP server which prevented it from fulfilling the request. 
  
Message: Error during processing of the template 'null'. Please contact your system administrator. 
  
Exception: java.lang.NullPointerException 
   
org.alfresco.repo.security.permissions.impl.model.PermissionModel.getExposedPermissionsImpl(PermissionModel.java:455) 
org.alfresco.repo.security.permissions.impl.model.PermissionModel.getAllPermissions(PermissionModel.java:434) 
org.alfresco.repo.security.permissions.impl.PermissionServiceImpl.hasPermission(PermissionServiceImpl.java:356) 
org.alfresco.repo.security.permissions.impl.PermissionServiceImpl.hasPermission(PermissionServiceImpl.java:577) 
org.alfresco.repo.security.permissions.impl.acegi.ACLEntryAfterInvocationProvider.decide(ACLEntryAfterInvocationProvider.java:577) 
org.alfresco.repo.security.permissions.impl.acegi.ACLEntryAfterInvocationProvider.decide(ACLEntryAfterInvocationProvider.java:224) 
net.sf.acegisecurity.afterinvocation.AfterInvocationProviderManager.decide(AfterInvocationProviderManager.java:107) 
net.sf.acegisecurity.intercept.AbstractSecurityInterceptor.afterInvocation(AbstractSecurityInterceptor.java:329) 
net.sf.acegisecurity.intercept.method.aopalliance.MethodSecurityInterceptor.invoke(MethodSecurityInterceptor.java:82) 
org.springframework.aop.framework.ReflectiveMethodInvocation.proceed(ReflectiveMethodInvocation.java:176) 
org.alfresco.repo.security.permissions.impl.ExceptionTranslatorMethodInterceptor.invoke(ExceptionTranslatorMethodInterceptor.java:49) 
org.springframework.aop.framework.ReflectiveMethodInvocation.proceed(ReflectiveMethodInvocation.java:176) 
org.alfresco.repo.audit.AuditComponentImpl.audit(AuditComponentImpl.java:241) 
org.alfresco.repo.audit.AuditMethodInterceptor.invoke(AuditMethodInterceptor.java:69) 
org.springframework.aop.framework.ReflectiveMethodInvocation.proceed(ReflectiveMethodInvocation.java:176) 
org.springframework.transaction.interceptor.TransactionInterceptor.invoke(TransactionInterceptor.java:107) 
org.springframework.aop.framework.ReflectiveMethodInvocation.proceed(ReflectiveMethodInvocation.java:176) 
org.springframework.aop.framework.JdkDynamicAopProxy.invoke(JdkDynamicAopProxy.java:210) 
$Proxy15.selectNodes(Unknown Source) 
org.alfresco.repo.template.BasePathResultsMap.getChildrenByXPath(BasePathResultsMap.java:86) 
org.alfresco.repo.template.XPathResultsMap.get(XPathResultsMap.java:53) 
freemarker.template.SimpleHash.get(SimpleHash.java:193) 
freemarker.core.DynamicKeyName.dealWithStringKey(DynamicKeyName.java:136) 
freemarker.core.DynamicKeyName._getAsTemplateModel(DynamicKeyName.java:94) 
freemarker.core.Expression.getAsTemplateModel(Expression.java:89) 
freemarker.core.Assignment.accept(Assignment.java:90) 
freemarker.core.Environment.visit(Environment.java:196) 
freemarker.core.MixedContent.accept(MixedContent.java:92) 
freemarker.core.Environment.visit(Environment.java:196) 
freemarker.core.Environment.process(Environment.java:176) 
freemarker.template.Template.process(Template.java:232) 
org.alfresco.repo.template.FreeMarkerProcessor.process(FreeMarkerProcessor.java:201) 
org.alfresco.web.scripts.AbstractWebScript.renderTemplate(AbstractWebScript.java:396) 
org.alfresco.web.scripts.DeclarativeWebScript.renderFormatTemplate(DeclarativeWebScript.java:264) 
org.alfresco.web.scripts.DeclarativeWebScript.execute(DeclarativeWebScript.java:170) 
org.alfresco.web.scripts.WebScriptRuntime.wrappedExecute(WebScriptRuntime.java:364) 
org.alfresco.web.scripts.WebScriptRuntime$1.execute(WebScriptRuntime.java:330) 
org.alfresco.repo.transaction.RetryingTransactionHelper.doInTransaction(RetryingTransactionHelper.java:230) 
org.alfresco.repo.transaction.RetryingTransactionHelper.doInTransaction(RetryingTransactionHelper.java:160) 
org.alfresco.web.scripts.WebScriptRuntime.transactionedExecute(WebScriptRuntime.java:341) 
org.alfresco.web.scripts.WebScriptRuntime.authenticatedExecute(WebScriptRuntime.java:284) 
org.alfresco.web.scripts.WebScriptRuntime.executeScript(WebScriptRuntime.java:150) 
org.alfresco.web.scripts.WebScriptServlet.service(WebScriptServlet.java:106) 
javax.servlet.http.HttpServlet.service(HttpServlet.java:803) 
org.apache.catalina.core.ApplicationFilterChain.internalDoFilter(ApplicationFilterChain.java:269) 
org.apache.catalina.core.ApplicationFilterChain.doFilter(ApplicationFilterChain.java:188) 
org.apache.catalina.core.StandardWrapperValve.invoke(StandardWrapperValve.java:210) 
org.apache.catalina.core.StandardContextValve.invoke(StandardContextValve.java:174) 
org.apache.catalina.core.StandardHostValve.invoke(StandardHostValve.java:127) 
org.apache.catalina.valves.ErrorReportValve.invoke(ErrorReportValve.java:117) 
org.apache.catalina.core.StandardEngineValve.invoke(StandardEngineValve.java:108) 
org.apache.catalina.connector.CoyoteAdapter.service(CoyoteAdapter.java:151) 
org.apache.coyote.http11.Http11Processor.process(Http11Processor.java:870) 
org.apache.coyote.http11.Http11BaseProtocol$Http11ConnectionHandler.processConnection(Http11BaseProtocol.java:665) 
org.apache.tomcat.util.net.PoolTcpEndpoint.processSocket(PoolTcpEndpoint.java:528) 
org.apache.tomcat.util.net.LeaderFollowerWorkerThread.runIt(LeaderFollowerWorkerThread.java:81) 
org.apache.tomcat.util.threads.ThreadPool$ControlRunnable.run(ThreadPool.java:685) 
java.lang.Thread.run(Thread.java:801) 
   
Exception: org.alfresco.service.cmr.repository.TemplateException - Error during processing of the template 'null'. Please contact your system administrator. 
   
org.alfresco.repo.template.FreeMarkerProcessor.process(FreeMarkerProcessor.java:205) 
   
Server: Alfresco Community Network v2.2.0 (dev 595) schema 108 
Time: 18-Oct-2007 20:24:06 
  
Diagnostics: Inspect Web Script (org/alfresco/office/navigation.get) 
ge its size

The diagnostics link gives:

Web Script: org/alfresco/office/navigation.get 
Alfresco Community Network v2.2.0 (dev 595)
Generated from /alfresco/wcservice/script/org/alfresco/office/navigation.get on 18-Oct-2007 20:28:16

Script Properties  Id: org/alfresco/office/navigation.get
Short Name: Navigation (Office Add-In)
Description: Generate the Office Add-In Navigation page
Authentication: user
Transaction: required
Method: GET
URL Template: /office/navigation?p={path?}
Format Style: any
Default Format: html
Implementation: class org.alfresco.web.scripts.DeclarativeWebScript


Store: workspace://SpacesStore/app:company_home/app:dictionary/cm:extensionwebscripts

[No implementation files]


Store: workspace://SpacesStore/app:company_home/app:dictionary/cm:webscripts

[No implementation files]


Store: classpath:alfresco/templates/webscripts

File: org/alfresco/office/navigation.get.html.ftl 
<#assign doc_actions="${url.serviceContext}/office/docActions">
<#if args.e?exists><#assign extn=args.e><#else><#assign extn="doc"></#if><#assign extnx=extn+"x">
<#if args.n?exists><#assign nav=args.n><#else><#assign nav=""></#if>
<#assign chLen=companyhome.name?length>
<#if node.isDocument>
   <#assign thisSpace = node.parent>
<#else>
   <#assign thisSpace = node>
</#if>
<!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.0 Strict//EN" "http://www.w3.org/TR/xhtml1/DTD/xhtml1-strict.dtd">
<html>
<head>
   <title>Browse Spaces and Documents</title>
   <link rel="stylesheet" type="text/css" href="${url.context}/css/office.css" />
<!–[if IE 6]>
   <link rel="stylesheet" type="text/css" href="${url.context}/css/office_ie6.css" />
<![endif]–>
   <script type="text/javascript" src="${url.context}/scripts/ajax/mootools.v1.11.js"></script>
   <script type="text/javascript" src="${url.context}/scripts/office/office_addin.js"></script>
   <script type="text/javascript" src="${url.context}/scripts/office/navigation.js"></script>
</head>
<body>
<div id="overlayPanel"></div>
<div id="tabBar">
   <ul>
      <li><a title="My Alfresco" href="${url.serviceContext}/office/myAlfresco?p=${path?url}&amp;e=${extn}&amp;n=${nav}"><span><img src="${url.context}/images/office/my_alfresco.gif" alt="My Alfresco" /></span></a></li>
      <li id="current"><a title="Browse Spaces and Documents" href="${url.serviceContext}/office/navigation?p=${path?url}&amp;e=${extn}&amp;n=${nav}"><span><img src="${url.context}/images/office/navigator.gif" alt="Browse Spaces and Documents" /></span></a></li>
      <li><a title="Search Alfresco" href="${url.serviceContext}/office/search?p=${path?url}&amp;e=${extn}&amp;n=${nav}"><span><img src="${url.context}/images/office/search.gif" alt="Search Alfresco" /></span></a></li>
      <li><a title="View Details" href="${url.serviceContext}/office/documentDetails?p=${path?url}&amp;e=${extn}&amp;n=${nav}"><span><img src="${url.context}/images/office/document_details.gif" alt="View Details" /></span></a></li>
      <li><a title="My Tasks" href="${url.serviceContext}/office/myTasks?p=${path?url}&amp;e=${extn}&amp;n=${nav}"><span><img src="${url.context}/images/office/my_tasks.gif" alt="My Tasks" /></span></a></li>
   </ul>
</div>

<div class="header">Current Space</div>

<div id="currentSpaceInfo">
   <span style="float: left;">
      <span style="float: left;">
         <img src="${url.context}${thisSpace.icon16}" alt="${thisSpace.name}" />
      </span>
      <span style="float: left; padding-left: 6px;">
         <span class="bold">${thisSpace.name}</span><br />
<#if thisSpace.properties.description?exists>
         ${thisSpace.properties.description}
</#if>
      </span>
   </span>
<#if thisSpace=companyhome>
<#else>
   <span style="float: right;">
      <a title="Up to Parent Space" href="${url.serviceContext}/office/navigation?p=${path?url}&amp;n=${thisSpace.parent.id}">
      <img src="${url.context}/images/office/go_up.gif" alt="Up to Parent Space" />
      <span>Up</span>
      </a>
   </span>
</#if>
</div>

<div class="header">Spaces in ${thisSpace.name}<span class="headerExtra"><span class="toggle"> </span></span></div>

<div id="spaceList" class="containerMedium togglePanel">
   <div id="createSpaceContainer">
      <div id="createSpace" onclick="OfficeNavigation.showCreateSpace();">
         <img src="${url.context}/images/office/create_space.gif" alt="Create new space" />
         <span style="vertical-align: top;">Create New <#if args.cc?exists>Collaboration </#if>Space…</span>
      </div>
      <div id="createSpacePanel">
         <div id="createSpaceParameters">
            <div class="spaceParam">Name:</div>
            <div class="spaceValue">
               <input id="spaceName" type="text" value="" />
            </div>
            <div class="spaceParam">Title:</div>
            <div class="spaceValue">
               <input id="spacetitle" type="text" value="" />
            </div>
            <div class="spaceParam">Description:</div>
            <div class="spaceValue">
               <input id="spaceDescription" type="text" value="" />
            </div>
<#assign xpath="app:dictionary/app:space_templates/*">
<#assign templates = companyhome.childrenByXPath[xpath]>
<#if (templates?size > 0)>
            <div class="spaceParam">Template:</div>
            <div class="spaceValue">
               <select id="spaceTemplate" style="width: 172px;">
                  <option selected="selected" value="">(None)</option>
   <#list templates as template>
                  <option value="${template.id}">${template.name}</option>
   </#list>
               </select>
            </div>
</#if>
            <div class="spaceParam"> </div>
            <div class="spaceValue">
               <a class="spaceAction" href="#" onclick="OfficeNavigation.submitCreateSpace('${url.serviceContext}/office/docActions', '${thisSpace.id}');">
                  Submit
               </a>
               <a class="spaceAction" href="#" onclick="OfficeNavigation.hideCreateSpace();">
                  Cancel
               </a>
            </div>
         </div>
      </div>
   </div>
<#assign spacesFound = 0>
<#list thisSpace.children?sort_by('name') as child>
   <#if child.isContainer>
      <#assign spacesFound = spacesFound + 1>
      <div class="spaceItem ${(spacesFound % 2 = 0)?string("even", "odd")}">
         <span style="float: left; width: 36px;">
            <a href="${url.serviceContext}/office/navigation?p=${path?url}&amp;n=${child.id}"><img src="${url.context}${child.icon32}" alt="Open ${child.name}" /></a>
         </span>
         <span>
            <a href="${url.serviceContext}/office/navigation?p=${path?url}&amp;n=${child.id}" title="Open ${child.name}">
               <span class="bold">${child.name}</span>
            </a>
      <#if child.properties.description?exists>
            <br />${child.properties.description}
      </#if>
         </span>
      </div>
   </#if>
</#list>
<#if spacesFound = 0>
      <div class="noItems">(No subspaces)</div>
</#if>
</div>

<div class="header">Documents in ${thisSpace.name}<span class="headerExtra"><span class="toggle"> </span></span></div>

<div id="documentList" class="containerMedium togglePanel">
<#assign documentsFound = 0>
<#list thisSpace.children?sort_by('name') as child>
   <#if child.isDocument>
      <#assign documentsFound = documentsFound + 1>
      <#assign relativePath = (child.displayPath?substring(chLen+1) + '/' + child.name)?url?replace('%2F', '/')?replace('\'', '\\\'') />
      <div class="documentItem ${(documentsFound % 2 = 0)?string("even", "odd")}">
         <span class="documentItemIcon">
      <#if child.name?ends_with(extn) || child.name?ends_with(extnx)>
            <a href="#" onclick="window.external.openDocument('${relativePath}')"><img src="${url.context}${child.icon32}" alt="Open ${child.name}" /></a>
      <#else>
            <a href="${url.context}${child.url}?ticket=${session.ticket}" rel="_blank"><img src="${url.context}${child.icon32}" alt="Open ${child.name}" /></a>
      </#if>
         </span>
         <span class="documentItemDetails">
      <#if child.name?ends_with(extn) || child.name?ends_with(extnx)>
            <a href="#" onclick="window.external.openDocument('${relativePath}')"><span class="bold">${child.name}</span></a>
      <#else>
            <a href="${url.context}${child.url}?ticket=${session.ticket}" rel="_blank"><span class="bold">${child.name}</span></a>
      </#if>
            <br />
      <#if child.properties.description?exists>
         <#if (child.properties.description?length > 0)>
            ${child.properties.description}<br />
         </#if>
      </#if>
            Modified: ${child.properties.modified?datetime}, Size: ${(child.size / 1024)?int}Kb<br />
      <#if child.isLocked >
            <img src="${url.context}/images/office/lock.gif" style="padding:3px 6px 2px 0px;" alt="Locked" />
      <#elseif hasAspect(child, "cm:workingcopy") == 1>
            <a href="#" onclick="OfficeAddin.runAction('${doc_actions}','checkin','${child.id}', '');"><img src="${url.context}/images/office/checkin.gif" style="padding:3px 6px 2px 0px;" alt="Check In" title="Check In" /></a>
      <#else>
            <a href="#" onclick="OfficeAddin.runAction('${doc_actions}','checkout','${child.id}', '');"><img src="${url.context}/images/office/checkout.gif" style="padding:3px 6px 2px 0px;" alt="Check Out" title="Check Out" /></a>
      </#if>
            <a href="${url.serviceContext}/office/myTasks?p=${path?url}&amp;w=new&amp;wd=${child.id}"><img src="${url.context}/images/office/new_workflow.gif" style="padding:3px 6px 2px 0px;" alt="Create Workflow…" title="Create Workflow…" /></a>
            <a href="#" onclick="window.external.insertDocument('${relativePath}')"><img src="${url.context}/images/office/insert_document.gif" style="padding:3px 6px 2px 0px;" alt="Insert File into Current Document" title="Insert File into Current Document" /></a>
      <#if !child.name?ends_with(".pdf")>
            <a href="#" onclick="OfficeAddin.runAction('${doc_actions}','makepdf','${child.id}', '');"><img src="${url.context}/images/office/makepdf.gif" style="padding:3px 6px 2px 0px;" alt="Make PDF…" title="Make PDF" /></a>
      </#if>
      <#if !child.isLocked>
            <a href="#" onclick="OfficeAddin.runAction('${doc_actions}','delete','${child.id}', 'Are you sure you want to delete this document?');"><img src="${url.context}/images/office/delete.gif" style="padding:3px 6px 2px 0px;" alt="Delete…" title="Delete" /></a>
      </#if>
         </span>
      </div>
   </#if>
</#list>
<#if documentsFound = 0>
      <div class="noItems">(No documents)</div>
</#if>
</div>

<div class="header">Actions</div>

<#assign currentPath = thisSpace.displayPath  + '/' + thisSpace.name />
<#assign currentPath = currentPath?substring(chLen+1)?url?replace('%2F', '/')?replace('\'', '\\\'') />
<div id="documentActionsNavigation">
   <div id="saveDetailsPanel">
      Document filename:<br />
      <input class="saveDetailsItem" type="text" id="saveFilename" style="height: 18px; width: 168px;" />
      <a class="spaceAction" href="#" onclick="OfficeNavigation.saveOK(this);">OK</a>
      <a class="spaceAction" href="#" onclick="OfficeNavigation.saveCancel();">Cancel</a>
   </div>
   <div id="nonStatusText">
      <ul>
<#if !node.isDocument>
         <li>
            <a href="#" onclick="OfficeNavigation.saveToAlfresco('${currentPath}')">
               <img src="${url.context}/images/office/save_to_alfresco.gif" alt="Save to Alfresco" />
               Save to Alfresco
            </a>
            <br />Save the document to the current Space.
         </li>
</#if>
<#if args.search?exists>
         <li>
            <a href="${url.serviceContext}/office/search?p=${path?url}&amp;e=$(extn}&amp;searchagain=${args.search?url}&amp;maxresults=${args.maxresults}">
               <img src="${url.context}/images/office/search_again.gif" alt="Back to results" />
               Back to search results
            </a>
            <br />Return to the search tab.
         </li>
</#if>
      </ul>
   </div>
  
   <div id="statusText"></div>
</div>

</body>
</html>

File: org/alfresco/office/navigation.get.desc.xml 
<webscript>
  <shortname>Navigation (Office Add-In)</shortname>
  <description>Generate the Office Add-In Navigation page</description>
  <url>/office/navigation?p={path?}</url>
  <authentication>user</authentication>
  <transaction>required</transaction>
</webscript>

File: org/alfresco/office/navigation.get.js 
if ((args.n) && (args.n != ""))
{
   model.node = search.findNode("workspace://SpacesStore/" + args.n);
}
else if ((args.p) && (args.p != ""))
{
   var path = args.p;
   if (path == "/" + companyhome.name)
   {
      model.node = companyhome;
   }
   else
   {
      var node = companyhome.childByNamePath(path.substring(companyhome.name.length));
      if (node != null)
      {
         model.node = node;
      }
      else
      {
         model.node = userhome;
      }
   }
}
else
{
   model.node = userhome;
}
model.path = args.p;

Any idea what might be missing?

Cheers,
s/t

sacco
Champ in-the-making
Champ in-the-making
Any news?

This still breaks in the latest build.

mikeh
Star Contributor
Star Contributor
Hi

I'm guessing the problem might be when the script tries to obtain a list of space templates:
<#assign xpath="app:dictionary/app:space_templates/*">
<#assign templates = companyhome.childrenByXPath[xpath]>

Have you locked-down access to the Data Dictionary and/or Space Templates spaces?

Thanks,
Mike

sacco
Champ in-the-making
Champ in-the-making
Hi Mike

Excellent guess:  in fact, about the same time you were writing that,
I was tracing the script and indeed the XPath call was the problem. 
Unfortunately it turned out to be a lot bigger problem than that…

Have you locked-down access to the Data Dictionary and/or Space Templates spaces?

No, the Data Dictionary was pretty much as it started, I hadn't ever done
anything with space_templates  and, in any case, the problem occurred
even when accessing the Repository as  admin.


As far as I can tell, the  app:space_templates  node turned out to be
corrupted in some way:  it was possible to browse through it in the Web
Client, but pretty much anything else that touched this node crashed and
burned with a null pointer error.  Even the Web Clients Node Browser
couldn't display anything of this node.

I tried restarting the Repository and then doing a full re-index both with
the old index still in place and with the old index completely deleted, but in
every case the entire server died before it finished bootstrapping — this
appeared to happen as soon as it touched this node.  The node could not
be deleted, as any process touching it (except, weirdly, for ordinary
browsing in the Web Client) died instantly. 

I tried various things like switching off the bootstrap checks, but they
didn't seem to have any effect, so finally I tried to re-index with the
bootstrap file cut down as far as I could get away with.  All of these
attempts failed completely, so I tried to continue using the repository.



A few hours later, however, I needed to restart, and it wouldn't come back
up — it looked as if perhaps something else had triggered an automatic
re-index — so I was left with a completely dead and inaccessible
Repository!

sacco
Champ in-the-making
Champ in-the-making
The really big problem I have now, is that I need a demo system up and
working to show to some people very soon, bit I don't know which build to
use.

The 2.CE is out because it has a number of critical bugs: in particular the
Import/Export problem is a stopper for me.

Unfortunately, the recommended solution to this is to use one of the
nightly builds, but so far I 've tried quite a few and have come to grief in
one way or another each time (though not always quite as spectacularly
as this one)!
Or course, there's then also the problem of whether such a build will be
upgradable to the next release…

Any helpful suggestions (e.g. a pointer to a build known to be working
reasonably) well would be most helpful.

The latest nightly I have is from 31 October: does anybody have any idea whether this would be a good one to try?


Thanks,
s/t