Develop Fast, Deploy Faster
Advantages of APS Scripting
Miguel Sanchez miguel-sanchez-galan
msgalan@gmail.com
howToBrothers.com
Learn. Connect. Collaborate.
Agenda
• App Designer
• Custom Code
• APS Scripting
• Spring Beans
• Environment Properties
• REST Calls
Development is all about TIME
Learn. Connect. Collaborate.
Development is all about TIME
Time traveling is just
too dangerous
App Designer
Learn. Connect. Collaborate.
App Designer
Time traveling is
just too dangerous
Learn. Connect. Collaborate.
App Designer
Drag & Drop
Configuration
Custom Code
Custom Code
Learn. Connect. Collaborate.
Custom Code
Backend
• Execution Listeners
• Task Listeners
• Script Tasks
• Service Tasks
Learn. Connect. Collaborate.
Custom Code
Script Backed
vs
Java BackedWhich one to choose?
Script vs Java
Learn. Connect. Collaborate.
Script vs Java
Implement
Changes
DeployTest
Learn. Connect. Collaborate.
Script vs Java - Deployment Life Cycle
IDE
Update App Model
Publish App
Restart
Place on
Classpath
actitivi-app
Generate
Java
Backed
~ couple of minutes
Script
Backed
~ few seconds
Learn. Connect. Collaborate.
Script vs Java
Update App Model
Publish App
Java Backed
Reuse code
Debug
Unit Test
Active Process
Instances
Script Backed
Reuse code
Debug
Unit Test
Active Process
Instances
Learn. Connect. Collaborate.
Script vs Java – Which one to choose
Time
required to
implement
the solution
Complexity of the solution
ScriptJava
APS Scripting
Learn. Connect. Collaborate.
APS Scripting
Enable scripts
Set properties
validator.editor.bpmn.disable.scripttask=false
validator.editor.bpmn.disable.scripttask.groovy=false
File: activiti-app.properties
Location: activiti-appWEB-INFclassesMETA-INFactiviti-app
Let’s make it work
Learn. Connect. Collaborate.
APS Scripting
Enable scripts
Uncomment the language you want to use
File: whitelisted-scripts.conf
Location: activiti-appWEB-INFclassesactiviti
Let’s make it work
Learn. Connect. Collaborate.
APS Scripting – Update Active Processes
• SetProcessDefinitionVersionCmd(processDefinitionId, processDefinitionVersion));
• dynamicBpmnService.saveProcessDefinitionInfo(processDefinitionId, infoNode);
Script Listeners
Learn. Connect. Collaborate.
Script Execution Listener
Class: org.activiti.engine.impl.bpmn.listener.ScriptExecutionListener
Object available: execution
Events: start, end, take
Learn. Connect. Collaborate.
Script Task Listener
Class: org.activiti.engine.impl.bpmn.listener.ScriptTaskListener
Object available: task
Events: create, assignment,
complete, delete
Learn. Connect. Collaborate.
Secure Script Listeners
File: activiti-app.properties
Location: activiti-appWEB-INFclassesMETA-INFactiviti-app
Learn. Connect. Collaborate.
Secure Script Listeners
Execution Listener
Class: org.activiti.scripting.secure.listener.SecureJavascriptExecutionListener
Task Listener
Class: org.activiti.scripting.secure.listener.SecureJavascriptTaskListener
The future
is now safe
Script Task
Learn. Connect. Collaborate.
Script Task
Object available: execution
Learn. Connect. Collaborate.
Script Tasks – Reuse Code
Learn. Connect. Collaborate.
Script Task - Reuse Code
Spring Beans
Learn. Connect. Collaborate.
Default Spring Beans
• userInfoBean
• emailBean
• documentMergeBean
• auditLogBean
Learn. Connect. Collaborate.
Custom Spring Beans
• Create a bean
Package: com.activiti.extension.bean
• Deploy the JAR file generated
Location: activiti-appWEB-INFlib
• Add your bean name to
File: beans-whitelist.conf
Location: activiti-appWEB-INFclassesactiviti Custom Beans, Cool!
Environment Variables
Learn. Connect. Collaborate.
Environment Properties
package com.activiti.extension.bean;
import org.springframework.core.env.Environment;
import org.springframework.stereotype.Component;
import
org.springframework.beans.factory.annotation.Autowired;
@Component
public class EnvironmentProperties {
@Autowired
private Environment env;
public String get(String key) {
return env.getProperty(key);
}
}
Learn. Connect. Collaborate.
Environment Properties
Logging
Learn. Connect. Collaborate.
Logging
File: log4j.properties
Location: activiti-appWEB-INFclasses
We need to go back
to know what happened
Learn. Connect. Collaborate.
Logging
REST Calls
Learn. Connect. Collaborate.
REST Calls
Learn. Connect. Collaborate.
REST Calls – Basic Authentication
Learn. Connect. Collaborate.
Rest Calls – External Authentication
Learn. Connect. Collaborate.
Custom REST API
HTTP client
Java REST API
Script
Learn. Connect. Collaborate.
Custom REST API - Example
User sets the values on the app
form and completes the task
Script task calls the ACS API to
create the folder structure
Learn. Connect. Collaborate.
Custom REST API - Example
Learn. Connect. Collaborate.
Custom REST API - Example
• execution.getVariable(“numberofyears")
• acsApi.createFolder(parentNodeId, “name")
Learn. Connect. Collaborate.
Custom REST API - Example
Learn. Connect. Collaborate.
Final Thoughts
Learn. Connect. Collaborate.
Q & A
HowToBrothers.com

Develop Fast Deploy Faster - APS Scripting - Alfresco DevCon 2019

Editor's Notes

  • #10 We’re going to focus on the backend code