ActionService - Alfresco Content Services - 23.4 - 23.4 - Ready - Alfresco - external

Alfresco Content Services

Platform
Alfresco
Product
Alfresco Content Services
Release
23.4
License

An Action is a unit of work that can be carried out on a node. Actions are commonly used in conjunction with Rules, but that is not mandatory. When you create Rules for a folder, you can specify certain Actions to occur to nodes added to the folder. For example, when a Word document is added to a folder, you may want a PDF to be automatically generated, or a notification email to be sent. There are a number of built-in Actions available by default (there IDs in parentheses):

  • Execute Script (script)
  • Copy (copy)
  • Move (move)
  • Checkin (check-in)
  • Checkout (check-out)
  • Link to category (link-category)
  • Add Aspect (add-features)
  • Remove Aspect (remove-features)
  • Add simple workflow (simple-workflow)
  • Start workflow (start-workflow)
  • Cancel workflow (cancel-workflow)
  • Send email (mail)
  • Transform and copy content (transform)
  • Transform and copy image (transform-image)
  • Extract common metadata fields (extract-metadata)
  • Import (import)
  • Export (export)
  • Specialise type (specialise-type)
  • Create version (create-version)
  • Increment counter (counter)
  • Set property value (set-property-value)
  • Create thumbnail (create-thumbnail)
  • Execute all rules on node (execute-all-rules)

You can also create custom Actions to do whatever you want when content is added to a folder.

While Actions are typically triggered by Rules (see Folder rules), you can also invoke them directly by selecting them from a menu item. The ActionService also allows you to call them directly from code. Any piece of code that can access the ActionService can invoke the Action, for example:

  • JavaScript
  • Workflow
  • Web script
  • Java

The following example shows how to invoke the Add Aspect out-of-the-box action with the ActionService:

boolean executeAsync = true;
Map<String, Serializable> params = new HashMap<String, Serializable>();
params.put(AddFeaturesActionExecuter.PARAM_ASPECT_NAME, "cm:titled");
Action addAspectAction = serviceRegistry.getActionService().createAction("add-features", params);

if (a != null) {
    serviceRegistry.getActionService().executeAction(addAspectAction, docNodeRef, true, executeAsync);
} else {
    thrownew RuntimeException("Could not create add aspect action");
}

Another example of how to execute a script:

boolean executeAsync = true;

// JavaScript file node reference
NodeRef scriptRef = ...

Action action = serviceRegistry.getActionService().createAction("script");
action.setParameterValue(ScriptActionExecuter.PARAM_SCRIPTREF, scriptRef);
if (action != null) {   
    serviceRegistry.getActionService().executeAction(action, docNodeRef, true, executeAsync);
} else {
    thrownew RuntimeException("Could not create execute script action");
}

In this example we invoke a custom action with the Spring bean id send-as-email (more information about this repository action implementation can be found in Actions:

import org.alfresco.service.cmr.action.Action;

publicvoidsendEmailWithDoc(String to, String subject, String bodyText, NodeRef docNodeRef) {
    boolean executeAsync = true;
    Map<String, Serializable> aParams = new HashMap<String, Serializable>();
    aParams.put("to", to);
    aParams.put("subject", subject);
    aParams.put("body_text", bodyText);

    Action a = serviceRegistry.getActionService().createAction("send-as-email", aParams);
    if (a != null) {
       serviceRegistry.getActionService().executeAction(a, docNodeRef, true, executeAsync);
    } else {
       thrownew RuntimeException("Could not create send-as-email action");
    }
}

See also: