среда, 23 сентября 2015 г.

Solving error after migrating data from Alfresco 4.2.e to Alfresco 5.0.d

Problem:


After migrating data from Alfresco 4.2.e to Alfresco 5.0.d we got the following error in the log:

 2015-09-21 17:03:32,620  ERROR [node.integrity.IntegrityChecker] [http-apr-8080-exec-1] Found 1 integrity violations:
Mandatory property not set:
   Node: workspace://SpacesStore/ca785afc-6f6a-479d-a5f2-8a737c7702b6
   Name: ca785afc-6f6a-479d-a5f2-8a737c7702b6
   Type: {http://www.alfresco.org/model/content/1.0}person
   Property: {http://www.alfresco.org/model/content/1.0}sizeCurrent
 2015-09-21 17:03:32,636  ERROR [extensions.webscripts.AbstractRuntime] [http-apr-8080-exec-1] Exception from executeScript - redirecting to status template error: 08210714 Found 1 integrity violations:
Mandatory property not set:
   Node: workspace://SpacesStore/ca785afc-6f6a-479d-a5f2-8a737c7702b6
   Name: ca785afc-6f6a-479d-a5f2-8a737c7702b6
   Type: {http://www.alfresco.org/model/content/1.0}person
   Property: {http://www.alfresco.org/model/content/1.0}sizeCurrent
 org.alfresco.repo.node.integrity.IntegrityException: 08210714 Found 1 integrity violations:
Mandatory property not set:
   Node: workspace://SpacesStore/ca785afc-6f6a-479d-a5f2-8a737c7702b6
   Name: ca785afc-6f6a-479d-a5f2-8a737c7702b6
   Type: {http://www.alfresco.org/model/content/1.0}person
   Property: {http://www.alfresco.org/model/content/1.0}sizeCurrent
        at org.alfresco.repo.node.integrity.IntegrityChecker.checkIntegrity(IntegrityChecker.java:664)
        at org.alfresco.repo.node.integrity.IntegrityChecker.beforeCommit(IntegrityChecker.java:766)
        at org.alfresco.util.transaction.TransactionSupportUtil$TransactionSynchronizationImpl.beforeCommit(TransactionSupportUtil.java:498)
        at org.springframework.transaction.support.TransactionSynchronizationUtils.triggerBeforeCommit(TransactionSynchronizationUtils.java:95)
        at org.springframework.transaction.support.AbstractPlatformTransactionManager.triggerBeforeCommit(AbstractPlatformTransactionManager.java:925)
        at org.springframework.transaction.support.AbstractPlatformTransactionManager.processCommit(AbstractPlatformTransactionManager.java:738)
        at org.springframework.transaction.support.AbstractPlatformTransactionManager.commit(AbstractPlatformTransactionManager.java:724)
        at org.springframework.transaction.interceptor.TransactionAspectSupport.commitTransactionAfterReturning(TransactionAspectSupport.java:475)
        at org.alfresco.util.transaction.SpringAwareUserTransaction.commit(SpringAwareUserTransaction.java:482)
        at org.alfresco.repo.transaction.RetryingTransactionHelper.doInTransaction(RetryingTransactionHelper.java:479)
        at org.alfresco.repo.web.scripts.RepositoryContainer.transactionedExecute(RepositoryContainer.java:551)
        at org.alfresco.repo.web.scripts.RepositoryContainer.transactionedExecuteAs(RepositoryContainer.java:619)
        at org.alfresco.repo.web.scripts.RepositoryContainer.executeScriptInternal(RepositoryContainer.java:399)
        at org.alfresco.repo.web.scripts.RepositoryContainer.executeScript(RepositoryContainer.java:280)
        at org.springframework.extensions.webscripts.AbstractRuntime.executeScript(AbstractRuntime.java:378)
        at org.springframework.extensions.webscripts.AbstractRuntime.executeScript(AbstractRuntime.java:209)
        at org.springframework.extensions.webscripts.servlet.WebScriptServlet.service(WebScriptServlet.java:132)
        at javax.servlet.http.HttpServlet.service(HttpServlet.java:727)
        at org.apache.catalina.core.ApplicationFilterChain.internalDoFilter(ApplicationFilterChain.java:303)
        at org.apache.catalina.core.ApplicationFilterChain.doFilter(ApplicationFilterChain.java:208)
        at org.apache.tomcat.websocket.server.WsFilter.doFilter(WsFilter.java:52)
        at org.apache.catalina.core.ApplicationFilterChain.internalDoFilter(ApplicationFilterChain.java:241)
        at org.apache.catalina.core.ApplicationFilterChain.doFilter(ApplicationFilterChain.java:208)
        at org.alfresco.web.app.servlet.GlobalLocalizationFilter.doFilter(GlobalLocalizationFilter.java:61)
        at org.apache.catalina.core.ApplicationFilterChain.internalDoFilter(ApplicationFilterChain.java:241)
        at org.apache.catalina.core.ApplicationFilterChain.doFilter(ApplicationFilterChain.java:208)
        at org.apache.catalina.core.StandardWrapperValve.invoke(StandardWrapperValve.java:220)
        at org.apache.catalina.core.StandardContextValve.invoke(StandardContextValve.java:122)
        at org.apache.catalina.authenticator.AuthenticatorBase.invoke(AuthenticatorBase.java:504)
        at org.apache.catalina.core.StandardHostValve.invoke(StandardHostValve.java:170)
        at org.apache.catalina.valves.ErrorReportValve.invoke(ErrorReportValve.java:103)
        at org.apache.catalina.valves.AccessLogValve.invoke(AccessLogValve.java:950)
        at org.apache.catalina.core.StandardEngineValve.invoke(StandardEngineValve.java:116)
        at org.apache.catalina.connector.CoyoteAdapter.service(CoyoteAdapter.java:421)
        at org.apache.coyote.http11.AbstractHttp11Processor.process(AbstractHttp11Processor.java:1074)
        at org.apache.coyote.AbstractProtocol$AbstractConnectionHandler.process(AbstractProtocol.java:611)
        at org.apache.tomcat.util.net.AprEndpoint$SocketProcessor.doRun(AprEndpoint.java:2466)
        at org.apache.tomcat.util.net.AprEndpoint$SocketProcessor.run(AprEndpoint.java:2455)
        at java.util.concurrent.ThreadPoolExecutor.runWorker(ThreadPoolExecutor.java:1142)
        at java.util.concurrent.ThreadPoolExecutor$Worker.run(ThreadPoolExecutor.java:617)
        at org.apache.tomcat.util.threads.TaskThread$WrappingRunnable.run(TaskThread.java:61)
        at java.lang.Thread.run(Thread.java:745)

Solution:


We have fixed it by executing the script that initializes mandatory property (sizeCurrent) for user nodes:

var all = people.getPeople("");
​
for (var i=0 ; i < all.length; i++){
 
 var user = search.findNode(all[i]);
​
 if(user.properties.sizeCurrent === null){
  
  user.properties.sizeCurrent = 0;
   
  user.save();
​
 }
}

But after that I have found better solution, I haven't used it yet, but I guess it will work. Just add the following properties to alfresco-global.properties and restart Alfresco:

### Quotas ###
system.usages.enabled=true
 
### Db PostScript ###
db.schema.update=true

Original forum post of this solution.

понедельник, 7 сентября 2015 г.

How to call Alfresco from Share side

For code based on JavaScript (Surf) :

// set url to call
var url = "/url/to/some/webscript";

// get connector
var connector = remote.connect("alfresco");

// do HTTP get request
var result = connector.get(url);

// check success of call
if (result.status.code == status.STATUS_OK) {

    
    // parse response to object
    var obj = eval("(" + result.response + ")");
 
    // set some value to property of the model
    model.someProp = obj.someProp;
} else {

// do something
}


To call Alfresco from Share side in Java you need first write class:

import org.apache.commons.logging.Log;
import org.apache.commons.logging.LogFactory;
import org.json.JSONException;
import org.json.JSONObject;
import org.springframework.extensions.surf.WebFrameworkServiceRegistry;
import org.springframework.extensions.webscripts.ScriptRemote;
import org.springframework.extensions.webscripts.connector.Response;

/**
 * Created by s.palyukh on 07.09.15.
 */
public class CallAlfresco {

    private static Log logger = LogFactory.getLog(CallAlfresco.class);

    protected WebFrameworkServiceRegistry serviceRegistry = null;

    public JSONObject jsonGet(String uri)
    {
        ScriptRemote scriptRemote = serviceRegistry.getScriptRemote();
        Response response = scriptRemote.connect().get(uri);
        if (response.getStatus().getCode() == 200)
        {
            try
            {
                return new JSONObject(response.getResponse());
            }
            catch (JSONException e)
            {
                if (logger.isErrorEnabled())
                {
                    logger.error("An error occurred when parsing response to json from the uri '" + uri + "': " + e.getMessage());
                }
            }
        }
        return null;
    }

    public void setServiceRegistry(WebFrameworkServiceRegistry serviceRegistry) {
        this.serviceRegistry = serviceRegistry;
    }
}

And then setup Spring Bean for this class:

   
      
   



пятница, 4 сентября 2015 г.

Sudo like tool for Alfresco webscripts with scope and parmeters

I want to add some notes to the following blog post:  http://fabiostrozzi.eu/2009/11/23/sudo-like-tool-for-alfresco-webscripts/. It is really useful solution, but it doesn't allow to call functions with parameters and functions from another JS object...

My implementation of Sudo class:

import org.alfresco.repo.jscript.BaseScopableProcessorExtension;
import org.alfresco.repo.security.authentication.AuthenticationUtil;
import org.alfresco.repo.transaction.RetryingTransactionHelper;
import org.mozilla.javascript.Context;
import org.mozilla.javascript.Function;
import org.mozilla.javascript.Scriptable;
import org.mozilla.javascript.ScriptableObject;

public class Sudo extends BaseScopableProcessorExtension {


    public Object su(final Function func) {

        final Scriptable scope = getScope();

        return su(func,scope);
    }

    public Object su(final Function func, final Scriptable scope, final Object... objects) {

        final Context cx = Context.getCurrentContext();

        AuthenticationUtil.RunAsWork&lgObject&gt raw = new AuthenticationUtil.RunAsWork&lgObject&gt() {
            public Object doWork() throws Exception {
                return func.call(cx, ScriptableObject.getTopLevelScope(scope), scope, objects);
            }
        };

        return AuthenticationUtil.runAs(raw, AuthenticationUtil.getSystemUserName());
    }
}

Initializing of Spring bean:

    
        
        
    

Using sudo service in webscripts:

var SudoExample = {

   writeToLog : function(a,b) {

      logger.getSystem().out("First parameter = " + a);
      logger.getSystem().out("Second parameter = " + a);

   },

   execute: function() {

      sudo.su(this.writeToLog,this, "param#1", "param#2");
   }
}

SudoExample.execute();

четверг, 3 сентября 2015 г.

Custom root scope object (JS API service) in Alfresco

First of all you need to know that all JS objects that we can use in webscripts or rules are based on Java. It means that when we call, for example, siteService.getSite("shortSiteName") actually performed method getSite of org.alfresco.repo.site.script.ScriptSiteService java class.

Alfresco JS API is very comfortable to use, it allows to make custom webscripts or rules really quick and integrate it to the server without restarting, but there is a problem, it doesn't cover all methods that are allowed in the Java. For example you can't disable behaviors from JS API.

To make own service that will be allowed in JS API we need to create Java class that inherits BaseScopableProcessorExtension with some public methods. For exmple:

import org.alfresco.repo.jscript.BaseScopableProcessorExtension;
import org.alfresco.repo.policy.BehaviourFilter;
import org.alfresco.service.cmr.repository.NodeRef;
import org.alfresco.service.namespace.NamespaceService;
import org.alfresco.service.namespace.QName;

/**
 * Created by s.palyukh
 */
public class RootScopeObject extends BaseScopableProcessorExtension {

    private NamespaceService namespaceService;
    private BehaviourFilter behaviourFilter;


    public void disableBehaviour(NodeRef nodeRef, String className) {

        behaviourFilter.disableBehaviour(nodeRef, stringToQName(className));
    }

    public void enableBehaviour(NodeRef nodeRef, String className) {

        behaviourFilter.enableBehaviour(nodeRef, stringToQName(className));
    }

    public QName stringToQName(String prop) {
        return QName.resolveToQName(namespaceService, prop);
    }

    public void setNamespaceService(NamespaceService namespaceService) {
        this.namespaceService = namespaceService;
    }

    public void setBehaviourFilter(BehaviourFilter behaviourFilter) {
        this.behaviourFilter = behaviourFilter;
    }
}


And then you need to add new bean in Spring context that will have parent="baseJavaScriptExtension".

    


        
        
        




After that RootScopeObject will be allowed to use in JS with name that you have set for "extensionName" property of spring bean. For example:

customService.disableBehaviour(userhome, "cm:content");

среда, 2 сентября 2015 г.

Alfresco: Execute java code from another user


First of all you should implement RunAsWork interface from AuthenticationUtil. Do everything what you need in doWork method.
        AuthenticationUtil.RunAsWork&ltObject&gt raw = new AuthenticationUtil.RunAsWork&ltObject&gt() {
            public Object doWork() throws Exception {

                // do what you need

 
                return null;
            }
        };
Next you need to execute runAs method from AuthenticationUtil, where the first parameter is RunAsWork object and second parameter is username. In my case code from doWork method will be executed by System user.

        AuthenticationUtil.runAs(raw, AuthenticationUtil.getSystemUserName());

четверг, 2 июля 2015 г.

Problem with JS Debugger on Ubuntu 14.04 (xfce) and Alfresco 5.0.c

Propblem

When I tried to enable jsdebugger I got the following error:

  
2015-07-02 17:02:19,987  ERROR [extensions.webscripts.AbstractRuntime] [http-bio-8080-exec-1] Exception from executeScript - redirecting to status template error: 06020000 Wrapped Exception (with status template): null
 org.springframework.extensions.webscripts.WebScriptException: 06020000 Wrapped Exception (with status template): null
 at org.springframework.extensions.webscripts.AbstractWebScript.createStatusException(AbstractWebScript.java:1126)
 at org.springframework.extensions.webscripts.DeclarativeWebScript.execute(DeclarativeWebScript.java:171)
 at org.springframework.extensions.webscripts.PresentationContainer.executeScript(PresentationContainer.java:70)
 at org.springframework.extensions.webscripts.LocalWebScriptRuntimeContainer.executeScript(LocalWebScriptRuntimeContainer.java:236)
 at org.springframework.extensions.webscripts.AbstractRuntime.executeScript(AbstractRuntime.java:378)
 at org.springframework.extensions.webscripts.AbstractRuntime.executeScript(AbstractRuntime.java:209)
 at org.springframework.extensions.webscripts.servlet.mvc.WebScriptView.renderMergedOutputModel(WebScriptView.java:104)
 at org.springframework.web.servlet.view.AbstractView.render(AbstractView.java:264)
 at org.springframework.web.servlet.DispatcherServlet.render(DispatcherServlet.java:1201)
 at org.springframework.web.servlet.DispatcherServlet.processDispatchResult(DispatcherServlet.java:986)
 at org.springframework.web.servlet.DispatcherServlet.doDispatch(DispatcherServlet.java:933)
 at org.springframework.web.servlet.DispatcherServlet.doService(DispatcherServlet.java:851)
 at org.springframework.web.servlet.FrameworkServlet.processRequest(FrameworkServlet.java:953)
 at org.springframework.web.servlet.FrameworkServlet.doPost(FrameworkServlet.java:855)
 at javax.servlet.http.HttpServlet.service(HttpServlet.java:646)
 at org.springframework.web.servlet.FrameworkServlet.service(FrameworkServlet.java:829)
 at javax.servlet.http.HttpServlet.service(HttpServlet.java:727)
 at org.apache.catalina.core.ApplicationFilterChain.internalDoFilter(ApplicationFilterChain.java:303)
 at org.apache.catalina.core.ApplicationFilterChain.doFilter(ApplicationFilterChain.java:208)
 at org.apache.tomcat.websocket.server.WsFilter.doFilter(WsFilter.java:52)
 at org.apache.catalina.core.ApplicationFilterChain.internalDoFilter(ApplicationFilterChain.java:241)
 at org.apache.catalina.core.ApplicationFilterChain.doFilter(ApplicationFilterChain.java:208)
 at org.alfresco.web.site.servlet.MTAuthenticationFilter.doFilter(MTAuthenticationFilter.java:74)
 at org.apache.catalina.core.ApplicationFilterChain.internalDoFilter(ApplicationFilterChain.java:241)
 at org.apache.catalina.core.ApplicationFilterChain.doFilter(ApplicationFilterChain.java:208)
 at org.alfresco.web.site.servlet.SecurityHeadersFilter.doFilter(SecurityHeadersFilter.java:168)
 at org.apache.catalina.core.ApplicationFilterChain.internalDoFilter(ApplicationFilterChain.java:241)
 at org.apache.catalina.core.ApplicationFilterChain.doFilter(ApplicationFilterChain.java:208)
 at org.alfresco.web.site.servlet.CSRFFilter.doFilter(CSRFFilter.java:315)
 at org.apache.catalina.core.ApplicationFilterChain.internalDoFilter(ApplicationFilterChain.java:241)
 at org.apache.catalina.core.ApplicationFilterChain.doFilter(ApplicationFilterChain.java:208)
 at org.alfresco.web.site.servlet.SSOAuthenticationFilter.doFilter(SSOAuthenticationFilter.java:394)
 at org.apache.catalina.core.ApplicationFilterChain.internalDoFilter(ApplicationFilterChain.java:241)
 at org.apache.catalina.core.ApplicationFilterChain.doFilter(ApplicationFilterChain.java:208)
 at org.apache.catalina.core.StandardWrapperValve.invoke(StandardWrapperValve.java:220)
 at org.apache.catalina.core.StandardContextValve.invoke(StandardContextValve.java:122)
 at org.apache.catalina.authenticator.AuthenticatorBase.invoke(AuthenticatorBase.java:501)
 at org.apache.catalina.core.StandardHostValve.invoke(StandardHostValve.java:170)
 at org.apache.catalina.valves.ErrorReportValve.invoke(ErrorReportValve.java:98)
 at org.apache.catalina.valves.AccessLogValve.invoke(AccessLogValve.java:950)
 at org.apache.catalina.core.StandardEngineValve.invoke(StandardEngineValve.java:116)
 at org.apache.catalina.connector.CoyoteAdapter.service(CoyoteAdapter.java:408)
 at org.apache.coyote.http11.AbstractHttp11Processor.process(AbstractHttp11Processor.java:1040)
 at org.apache.coyote.AbstractProtocol$AbstractConnectionHandler.process(AbstractProtocol.java:607)
 at org.apache.tomcat.util.net.JIoEndpoint$SocketProcessor.run(JIoEndpoint.java:315)
 at java.util.concurrent.ThreadPoolExecutor.runWorker(Unknown Source)
 at java.util.concurrent.ThreadPoolExecutor$Worker.run(Unknown Source)
 at java.lang.Thread.run(Unknown Source)
Caused by: java.awt.HeadlessException
 at java.awt.GraphicsEnvironment.checkHeadless(Unknown Source)
 at java.awt.Window.<\init>(Unknown Source)
 at java.awt.Frame.<\init>(Unknown Source)
 at javax.swing.JFrame.<\init>(Unknown Source)
 at org.mozilla.javascript.tools.debugger.SwingGui.<\init>(SwingGui.java:149)
 at org.springframework.extensions.webscripts.ScriptDebugger$AlfrescoGui.<\init>(ScriptDebugger.java:165)
 at org.springframework.extensions.webscripts.ScriptDebugger.activate(ScriptDebugger.java:86)
 at org.springframework.extensions.webscripts.ScriptDebugger.show(ScriptDebugger.java:104)
 at org.springframework.extensions.webscripts.bean.JavascriptDebuggerPost.executeImpl(JavascriptDebuggerPost.java:61)
 at org.springframework.extensions.webscripts.DeclarativeWebScript.executeImpl(DeclarativeWebScript.java:235)
 at org.springframework.extensions.webscripts.DeclarativeWebScript.execute(DeclarativeWebScript.java:64)
 ... 46 more

Solution

  1. Stop Alfresco
  2. Open alfresco-5.0.c/tomcat/bin/setenv.sh by some text editor
  3. Remove the following string from JAVA_OPTS:
    -Djava.awt.headless=true
  4. Save file
  5. Start Alfresco

четверг, 16 апреля 2015 г.

Transformation problems in Alfresco 5.0.d and Ubuntu 14.04

Problem:

After uploading Microsoft documents you can't preview it in Alfresco and in catalina.out you see the following error:

  
ERROR [extensions.webscripts.AbstractRuntime] [http-apr-8080-exec-7] Exception from executeScript - redirecting to status template error: 03160000 The content node was not specified so the content cannot be stre
amed to the client: classpath*:alfresco/templates/webscripts/org/alfresco/repository/thumbnail/thumbnail.get.js
 org.springframework.extensions.webscripts.WebScriptException: 03160000 The content node was not specified so the content cannot be streamed to the client: classpath*:alfresco/templates/webscripts/org/alfresco/repository/thumbnail/thumbn
ail.get.js
        at org.alfresco.repo.web.scripts.content.StreamContent.execute(StreamContent.java:169)
        at org.alfresco.repo.web.scripts.RepositoryContainer$3.execute(RepositoryContainer.java:482)
        at org.alfresco.repo.transaction.RetryingTransactionHelper.doInTransaction(RetryingTransactionHelper.java:457)
        at org.alfresco.repo.web.scripts.RepositoryContainer.transactionedExecute(RepositoryContainer.java:551)
        at org.alfresco.repo.web.scripts.RepositoryContainer.transactionedExecuteAs(RepositoryContainer.java:619)
        at org.alfresco.repo.web.scripts.RepositoryContainer.executeScriptInternal(RepositoryContainer.java:399)
        at org.alfresco.repo.web.scripts.RepositoryContainer.executeScript(RepositoryContainer.java:280)
        at org.springframework.extensions.webscripts.AbstractRuntime.executeScript(AbstractRuntime.java:378)
        at org.springframework.extensions.webscripts.AbstractRuntime.executeScript(AbstractRuntime.java:209)
        at org.springframework.extensions.webscripts.servlet.WebScriptServlet.service(WebScriptServlet.java:132)
        at javax.servlet.http.HttpServlet.service(HttpServlet.java:727)
        at org.apache.catalina.core.ApplicationFilterChain.internalDoFilter(ApplicationFilterChain.java:303)
        at org.apache.catalina.core.ApplicationFilterChain.doFilter(ApplicationFilterChain.java:208)
        at org.apache.tomcat.websocket.server.WsFilter.doFilter(WsFilter.java:52)
        at org.apache.catalina.core.ApplicationFilterChain.internalDoFilter(ApplicationFilterChain.java:241)
        at org.apache.catalina.core.ApplicationFilterChain.doFilter(ApplicationFilterChain.java:208)
        at org.alfresco.web.app.servlet.GlobalLocalizationFilter.doFilter(GlobalLocalizationFilter.java:61)
        at org.apache.catalina.core.ApplicationFilterChain.internalDoFilter(ApplicationFilterChain.java:241)
        at org.apache.catalina.core.ApplicationFilterChain.doFilter(ApplicationFilterChain.java:208)
        at org.apache.catalina.core.StandardWrapperValve.invoke(StandardWrapperValve.java:220)
        at org.apache.catalina.core.StandardContextValve.invoke(StandardContextValve.java:122)
        at org.apache.catalina.authenticator.AuthenticatorBase.invoke(AuthenticatorBase.java:504)
        at org.apache.catalina.core.StandardHostValve.invoke(StandardHostValve.java:170)
        at org.apache.catalina.valves.ErrorReportValve.invoke(ErrorReportValve.java:103)
        at org.apache.catalina.valves.AccessLogValve.invoke(AccessLogValve.java:950)
        at org.apache.catalina.core.StandardEngineValve.invoke(StandardEngineValve.java:116)
        at org.apache.catalina.connector.CoyoteAdapter.service(CoyoteAdapter.java:421)
        at org.apache.coyote.http11.AbstractHttp11Processor.process(AbstractHttp11Processor.java:1074)
        at org.apache.coyote.AbstractProtocol$AbstractConnectionHandler.process(AbstractProtocol.java:611)
        at org.apache.tomcat.util.net.AprEndpoint$SocketWithOptionsProcessor.run(AprEndpoint.java:2403)
        at java.util.concurrent.ThreadPoolExecutor.runWorker(ThreadPoolExecutor.java:1142)
        at java.util.concurrent.ThreadPoolExecutor$Worker.run(ThreadPoolExecutor.java:617)
        at org.apache.tomcat.util.threads.TaskThread$WrappingRunnable.run(TaskThread.java:61)
        at java.lang.Thread.run(Thread.java:745)
2015-04-16 12:43:00,357  WARN  [alfresco.util.OpenOfficeConnectionTester] [DefaultScheduler_Worker-5] Error trying to query Open Office version information. OpenOffice.org's ConfigurationRegistry not implemented in this version of OOo. T
his should not affect the operation of OOo.

Solution:

First of all install required libraries for libreoffice:

sudo apt-get install libice6 libsm6 libxt6 libxrender1 libxinerama libfontconfig1 libcups2

If you got error during installation like:

E: Unable to locate package libxinerama

then try to install the following packages instead of libxinerama:

apt-get install libxinerama-dev libxft-dev libxi-dev

After checking dependencies you need to do next:

1) Go to alfresco->libreoffice->scripts folder

cd {patrh_to_alfresco}/libreoffice/scripts

2) Open file libreoffice_ctl.sh by using some text editor (I prefer mceditor)

sudo mcedit libreoffice_ctl.sh

3) Find the following line:

SOFFICE="$SOFFICEWRAPPER --nofirststartwizard --nologo --headless --accept=socket,host=localhost,port=$SOFFICE_PORT\;urp\;StarOffice.ServiceManager"

4) Remove backslashes (this characters "\") from this line and save. After your changes it should looks like the following string:

SOFFICE="$SOFFICEWRAPPER --nofirststartwizard --nologo --headless --accept=socket,host=localhost,port=$SOFFICE_PORT;urp;StarOffice.ServiceManager"

5) Start soffice
sudo libreoffice_ctl.sh start

среда, 25 февраля 2015 г.

Alfresco 5.0.a Send Email with attachments

Several days ago I was faced with a problem that Alfresco doesn't allow to send email with attachments and I written small patch to add this feature. I believe this AMP will be useful for somebody.

Addon was tested on Alfresco 5.0.a

What do you need to do:

  1. Download amp 
  2. Put this file into {Alfresco}/amps folder
  3. Stop Alfresco
  4. Run script {Alfresco}/bin/apply_amps.sh
  5. Run Alfresco
  6. After that you will get ability to send email with attachments

How to send email with attachments (example):

    
// create email
var mail = actions.create("mail");

// set receiver of the email
mail.parameters.to = "to.somebody@gmail.com";

// set mail subject
mail.parameters.subject = "Email with attachments";

// set sender of the email
mail.parameters.from = "from.somebody@gmail.com";

// set mail body
mail.parameters.text = "This is my first email with attachments";

// initialize array of attachments
var array = [];

//add document to array
array.push(document.nodeRef);

//add one more document to array
array.push(document1.nodeRef);

// add attachments to the email
mail.parameters.attachments = array;

// send email
mail.execute(document);