This document provides an overview of advanced workflow capabilities in Alfresco, including service tasks, listeners, and scripting. Service tasks allow Java code to be executed from a workflow using Java delegate classes, beans, or expressions. Listeners can react to workflow events using classes, beans or expressions. Scripting supports JavaScript execution using scope and execution variables. Timers can delay workflow start, intermediate, and boundary events using date, duration, or repeating formats.
This session will introduce the audience to the workflow capabilities available in Alfresco. We will discuss the workflow UI in Share and the configuration options available. A working example will also show how custom Activiti workflows can be implemented, deployed, configured and monitored.
This session will introduce the audience to the workflow capabilities available in Alfresco. We will discuss the workflow UI in Share and the configuration options available. A working example will also show how custom Activiti workflows can be implemented, deployed, configured and monitored.
Javascript and first-class citizenry: require.js & node.js
Javascript on web pages is ubiquitous and its problems are legendary. Javascript, seen as a second-class code citizen, is usually hacked together even by seasoned developers. New libraries (jQuery, prototype, backbone, knockout, underscore) and runtime tools (firebug, jasmine) look like they solve many problems - and they do. But they still leave poorly written code as just that. One key problem is that all javascript code lives globally and this results in poorly managed, tested and delivered code.
In this session, I will illustrate that we can treat javascript as a first-class citizen using with require.js and node.js: it can be modular, encapsulated and easily unit tested and added to continuous integration cycle. The dependencies between javascript modules can also be managed and packaged just like in C# and Java. In the end, we can resolve many javascript difficulties at compile time rather than waiting until runtime.
This session will introduce the audience to the workflow capabilities available in Alfresco. We will discuss the workflow UI in Share and the configuration options available. A working example will also show how custom Activiti workflows can be implemented, deployed, configured and monitored.
This session will introduce the audience to the workflow capabilities available in Alfresco. We will discuss the workflow UI in Share and the configuration options available. A working example will also show how custom Activiti workflows can be implemented, deployed, configured and monitored.
Javascript and first-class citizenry: require.js & node.js
Javascript on web pages is ubiquitous and its problems are legendary. Javascript, seen as a second-class code citizen, is usually hacked together even by seasoned developers. New libraries (jQuery, prototype, backbone, knockout, underscore) and runtime tools (firebug, jasmine) look like they solve many problems - and they do. But they still leave poorly written code as just that. One key problem is that all javascript code lives globally and this results in poorly managed, tested and delivered code.
In this session, I will illustrate that we can treat javascript as a first-class citizen using with require.js and node.js: it can be modular, encapsulated and easily unit tested and added to continuous integration cycle. The dependencies between javascript modules can also be managed and packaged just like in C# and Java. In the end, we can resolve many javascript difficulties at compile time rather than waiting until runtime.
It’s trivial today to start writing and debugging some React code, but it’s not 100% clear how to properly deploy the application, manage versions and what implications that has on the build configurations. Especially if you want to allow different versions for different users in order to perform some A/B testing, testing new features in production environment, come up with some UI experiments, or gradually roll out new features for a subset of users.
In this presentation I hopefully covered all that.
AtlasCamp 2015: Connect everywhere - Cloud and ServerAtlassian
Patrick Streule
You have an idea for an add-on? You want to tap into both the Atlassian Cloud and Server customer base without writing and maintaining it twice? Patrick illustrates some techniques you can use today to share most of your code between the Connect and the P2 add-on implementation.
A presentation made for the NG-CONF Israel that took place in jun 2014 at Google TLV Campus (http://ng-conf.gdg.co.il/)
its an overview of how to use ngRoute and UI-Router in your app this slideshow contain a link for a working demo
Dethroning Grunt: Simple and Effective Builds with gulp.jsJay Harris
Grunt is king. It is the ubiquitous task runner used for most nodejs projects and has quickly expanded to conquer other software ecosystems. However, its kingdom is vulnerable. Grunt does not align well with many nodejs paradigms and is notorious for its harsh learning curve. Meet Gulp, the challenger in the taskrunner revolution. Gulp’s easy configuration produces an easy learning curve, and its alignment with nodejs paradigms eliminates the friction. Grab your ticket, your foam finger, and your team-colored face paint and witness the battle, the revolution, and the crowning of Gulp.
Arcadian Learning is an Industrial Training Company with 50 years of Industry Expertise on Planning, Implementation and Operation of the Networks Offering six months Industrial Training program on Cloud Computing, Telecom, Big Data and Application Development.
The Android developer should have the knowledge of fundamentals of Android layouts, Widgets, UIs and Web Services & how to program your app’s interaction with activities and services.
http://www.arcadianlearning.com/application-web-development.html
Activiti - the Open Source Business Process Management platform by AlfrescoAmplexor
Introduction to Alfresco ECM and Activiti, the open source Business Process Management Platform by Alfresco.
Presented at the Amplexor seminar on Case Management, 15 september 2011, Brussels
It’s trivial today to start writing and debugging some React code, but it’s not 100% clear how to properly deploy the application, manage versions and what implications that has on the build configurations. Especially if you want to allow different versions for different users in order to perform some A/B testing, testing new features in production environment, come up with some UI experiments, or gradually roll out new features for a subset of users.
In this presentation I hopefully covered all that.
AtlasCamp 2015: Connect everywhere - Cloud and ServerAtlassian
Patrick Streule
You have an idea for an add-on? You want to tap into both the Atlassian Cloud and Server customer base without writing and maintaining it twice? Patrick illustrates some techniques you can use today to share most of your code between the Connect and the P2 add-on implementation.
A presentation made for the NG-CONF Israel that took place in jun 2014 at Google TLV Campus (http://ng-conf.gdg.co.il/)
its an overview of how to use ngRoute and UI-Router in your app this slideshow contain a link for a working demo
Dethroning Grunt: Simple and Effective Builds with gulp.jsJay Harris
Grunt is king. It is the ubiquitous task runner used for most nodejs projects and has quickly expanded to conquer other software ecosystems. However, its kingdom is vulnerable. Grunt does not align well with many nodejs paradigms and is notorious for its harsh learning curve. Meet Gulp, the challenger in the taskrunner revolution. Gulp’s easy configuration produces an easy learning curve, and its alignment with nodejs paradigms eliminates the friction. Grab your ticket, your foam finger, and your team-colored face paint and witness the battle, the revolution, and the crowning of Gulp.
Arcadian Learning is an Industrial Training Company with 50 years of Industry Expertise on Planning, Implementation and Operation of the Networks Offering six months Industrial Training program on Cloud Computing, Telecom, Big Data and Application Development.
The Android developer should have the knowledge of fundamentals of Android layouts, Widgets, UIs and Web Services & how to program your app’s interaction with activities and services.
http://www.arcadianlearning.com/application-web-development.html
Activiti - the Open Source Business Process Management platform by AlfrescoAmplexor
Introduction to Alfresco ECM and Activiti, the open source Business Process Management Platform by Alfresco.
Presented at the Amplexor seminar on Case Management, 15 september 2011, Brussels
Launching Activiti v6 (Activiti Community Day Paris 2015) Joram Barrez
Launching Activiti v6 (Activiti Community Day Paris 2015)
For the recording of this presentation, see http://www.jorambarrez.be/blog/2015/06/18/activiti-6-launch/
This session will address the business aspect of BPM as well as the technical aspects. How will BPM make your organization run more efficiently? Activiti improves the collaboration between business and IT. What is BPMN 2.0 and what can you do with it? The second part of this session is more concrete and will include some demonstrations, including; How to get your first process running. How did we make BPMN 2.0 developer-friendly? How to embed Activiti into your application?
Fundamental modeling constructs of BPMN 2.0 - Activity, Gateway, Sequence Flow, Pool and Lane. Part of the Business Process Management coursework at Stevens Institute of Technology.
Introduction à BPMN 2.0 - Business Process Modeling NotationSanae BEKKAR
Bienvenue à notre nouveau voyage dans l'univers de la BPM - Business Process Management .aujourd'hui , nous allons découvrir le langage standard pour la modélisation des processus métiers : le Business Process Modeling Notation - BPMN 2.0 .. facilement compréhensible par tous les intervenants de l'entreprise que ce soit les analystes métiers , les développeurs techniques ou les superviseurs du bon fonctionnement des processus métiers ... Bonne Lecture !
This session will look deeper into the differences between using jBPM or Activiti in Alfresco. We’ll be showing how common concepts can be mapped from jBPM to Activiti’s BPMN 2.0 modeling. This session will provide you with a better view on what it takes to migrate your existing Alfresco jBPM-processes to Activiti, embracing the standard for business process modeling.
Video that accompanies these slides at: http://www.youtube.com/watch?v=v6cDIO7P5o8
Share v4.0 now gives developers, partners and implementors the ability to customize & extend the Share Document Library without having to either write or duplicate large amounts of code. This session will highlight the changes made to both the Repository and Web tier webscripts and show how new actions and custom metadata can be configured, often without touching a line of code! Some familiarity with the workings of the Document Library will be beneficial, as will general knowledge about configuring Share.
As more and more web applications integrate with third-party APIs and other external data, processing those external resources in the background more and more important. A simple job runner is a great start, however as your load increases, you very quickly outgrew that simplistic queuing system. We will cover where getting started using Resque and Redis, how to test your jobs, when it makes sense to use Resque, implementations of Resque in other languages, and look how I've used Resque.
Given at YAPC::EU 2012
Dancer + WebSocket + AnyEvent + Twiggy
This in *not* a talk about doing a hello world in Dancer, as there are plenty of it. This is a real-life example of using Dancer to address a problem in an elegant and powerful way
At $job, we have cpan mirrors. We want them to stay a bit behind the real CPAN for stability, but we have a tool to update modules from the real CPAN to our mirrors. Cool.
I wanted to have a web interface to trigger it, and monitor the injection. This problem is not a typical one (blog, wiki, CRUD, etc). Here we have a long running operation that shall happen only one at a time, that generates logs to be displayed, with states that need keeping. In this regard, it's interesting to see how Dancer is versatile enough to address these situations with ease.
This talk details how I did that, the technology I used, and the full source code (which is quite short). I used Dancer + WebSocket + AnyEvent + Twiggy + some other stuff.
This talk doesn't require any particular knowledge beyond basic Perl, and very basic web server understanding.
Service Workers is coming. Bring your own magic with the first programmable cache in your script, and more!
Presented at the GDG Korea DevFest 2014 on the 31st of May 2014: https://sites.google.com/site/gdgdevfestkorea2014/
Roundup of what is on the web at regarding Rails 3 as of Easter 2010.
Includes outline of significant changes to Rais in Rails 3 plus how you might set about upgrading an existing app.
Acknowledges and links to to some amazing resources already elsewhere on the web.
Accelerate your Kubernetes clusters with Varnish CachingThijs Feryn
A presentation about the usage and availability of Varnish on Kubernetes. This talk explores the capabilities of Varnish caching and shows how to use the Varnish Helm chart to deploy it to Kubernetes.
This presentation was delivered at K8SUG Singapore. See https://feryn.eu/presentations/accelerate-your-kubernetes-clusters-with-varnish-caching-k8sug-singapore-28-2024 for more details.
Transcript: Selling digital books in 2024: Insights from industry leaders - T...BookNet Canada
The publishing industry has been selling digital audiobooks and ebooks for over a decade and has found its groove. What’s changed? What has stayed the same? Where do we go from here? Join a group of leading sales peers from across the industry for a conversation about the lessons learned since the popularization of digital books, best practices, digital book supply chain management, and more.
Link to video recording: https://bnctechforum.ca/sessions/selling-digital-books-in-2024-insights-from-industry-leaders/
Presented by BookNet Canada on May 28, 2024, with support from the Department of Canadian Heritage.
Encryption in Microsoft 365 - ExpertsLive Netherlands 2024Albert Hoitingh
In this session I delve into the encryption technology used in Microsoft 365 and Microsoft Purview. Including the concepts of Customer Key and Double Key Encryption.
Software Delivery At the Speed of AI: Inflectra Invests In AI-Powered QualityInflectra
In this insightful webinar, Inflectra explores how artificial intelligence (AI) is transforming software development and testing. Discover how AI-powered tools are revolutionizing every stage of the software development lifecycle (SDLC), from design and prototyping to testing, deployment, and monitoring.
Learn about:
• The Future of Testing: How AI is shifting testing towards verification, analysis, and higher-level skills, while reducing repetitive tasks.
• Test Automation: How AI-powered test case generation, optimization, and self-healing tests are making testing more efficient and effective.
• Visual Testing: Explore the emerging capabilities of AI in visual testing and how it's set to revolutionize UI verification.
• Inflectra's AI Solutions: See demonstrations of Inflectra's cutting-edge AI tools like the ChatGPT plugin and Azure Open AI platform, designed to streamline your testing process.
Whether you're a developer, tester, or QA professional, this webinar will give you valuable insights into how AI is shaping the future of software delivery.
UiPath Test Automation using UiPath Test Suite series, part 3DianaGray10
Welcome to UiPath Test Automation using UiPath Test Suite series part 3. In this session, we will cover desktop automation along with UI automation.
Topics covered:
UI automation Introduction,
UI automation Sample
Desktop automation flow
Pradeep Chinnala, Senior Consultant Automation Developer @WonderBotz and UiPath MVP
Deepak Rai, Automation Practice Lead, Boundaryless Group and UiPath MVP
State of ICS and IoT Cyber Threat Landscape Report 2024 previewPrayukth K V
The IoT and OT threat landscape report has been prepared by the Threat Research Team at Sectrio using data from Sectrio, cyber threat intelligence farming facilities spread across over 85 cities around the world. In addition, Sectrio also runs AI-based advanced threat and payload engagement facilities that serve as sinks to attract and engage sophisticated threat actors, and newer malware including new variants and latent threats that are at an earlier stage of development.
The latest edition of the OT/ICS and IoT security Threat Landscape Report 2024 also covers:
State of global ICS asset and network exposure
Sectoral targets and attacks as well as the cost of ransom
Global APT activity, AI usage, actor and tactic profiles, and implications
Rise in volumes of AI-powered cyberattacks
Major cyber events in 2024
Malware and malicious payload trends
Cyberattack types and targets
Vulnerability exploit attempts on CVEs
Attacks on counties – USA
Expansion of bot farms – how, where, and why
In-depth analysis of the cyber threat landscape across North America, South America, Europe, APAC, and the Middle East
Why are attacks on smart factories rising?
Cyber risk predictions
Axis of attacks – Europe
Systemic attacks in the Middle East
Download the full report from here:
https://sectrio.com/resources/ot-threat-landscape-reports/sectrio-releases-ot-ics-and-iot-security-threat-landscape-report-2024/
LF Energy Webinar: Electrical Grid Modelling and Simulation Through PowSyBl -...DanBrown980551
Do you want to learn how to model and simulate an electrical network from scratch in under an hour?
Then welcome to this PowSyBl workshop, hosted by Rte, the French Transmission System Operator (TSO)!
During the webinar, you will discover the PowSyBl ecosystem as well as handle and study an electrical network through an interactive Python notebook.
PowSyBl is an open source project hosted by LF Energy, which offers a comprehensive set of features for electrical grid modelling and simulation. Among other advanced features, PowSyBl provides:
- A fully editable and extendable library for grid component modelling;
- Visualization tools to display your network;
- Grid simulation tools, such as power flows, security analyses (with or without remedial actions) and sensitivity analyses;
The framework is mostly written in Java, with a Python binding so that Python developers can access PowSyBl functionalities as well.
What you will learn during the webinar:
- For beginners: discover PowSyBl's functionalities through a quick general presentation and the notebook, without needing any expert coding skills;
- For advanced developers: master the skills to efficiently apply PowSyBl functionalities to your real-world scenarios.
Key Trends Shaping the Future of Infrastructure.pdfCheryl Hung
Keynote at DIGIT West Expo, Glasgow on 29 May 2024.
Cheryl Hung, ochery.com
Sr Director, Infrastructure Ecosystem, Arm.
The key trends across hardware, cloud and open-source; exploring how these areas are likely to mature and develop over the short and long-term, and then considering how organisations can position themselves to adapt and thrive.
Smart TV Buyer Insights Survey 2024 by 91mobiles.pdf91mobiles
91mobiles recently conducted a Smart TV Buyer Insights Survey in which we asked over 3,000 respondents about the TV they own, aspects they look at on a new TV, and their TV buying preferences.
Kubernetes & AI - Beauty and the Beast !?! @KCD Istanbul 2024Tobias Schneck
As AI technology is pushing into IT I was wondering myself, as an “infrastructure container kubernetes guy”, how get this fancy AI technology get managed from an infrastructure operational view? Is it possible to apply our lovely cloud native principals as well? What benefit’s both technologies could bring to each other?
Let me take this questions and provide you a short journey through existing deployment models and use cases for AI software. On practical examples, we discuss what cloud/on-premise strategy we may need for applying it to our own infrastructure to get it to work from an enterprise perspective. I want to give an overview about infrastructure requirements and technologies, what could be beneficial or limiting your AI use cases in an enterprise environment. An interactive Demo will give you some insides, what approaches I got already working for real.
Neuro-symbolic is not enough, we need neuro-*semantic*Frank van Harmelen
Neuro-symbolic (NeSy) AI is on the rise. However, simply machine learning on just any symbolic structure is not sufficient to really harvest the gains of NeSy. These will only be gained when the symbolic structures have an actual semantics. I give an operational definition of semantics as “predictable inference”.
All of this illustrated with link prediction over knowledge graphs, but the argument is general.
Connector Corner: Automate dynamic content and events by pushing a buttonDianaGray10
Here is something new! In our next Connector Corner webinar, we will demonstrate how you can use a single workflow to:
Create a campaign using Mailchimp with merge tags/fields
Send an interactive Slack channel message (using buttons)
Have the message received by managers and peers along with a test email for review
But there’s more:
In a second workflow supporting the same use case, you’ll see:
Your campaign sent to target colleagues for approval
If the “Approve” button is clicked, a Jira/Zendesk ticket is created for the marketing design team
But—if the “Reject” button is pushed, colleagues will be alerted via Slack message
Join us to learn more about this new, human-in-the-loop capability, brought to you by Integration Service connectors.
And...
Speakers:
Akshay Agnihotri, Product Manager
Charlie Greenberg, Host
Dev Dives: Train smarter, not harder – active learning and UiPath LLMs for do...UiPathCommunity
💥 Speed, accuracy, and scaling – discover the superpowers of GenAI in action with UiPath Document Understanding and Communications Mining™:
See how to accelerate model training and optimize model performance with active learning
Learn about the latest enhancements to out-of-the-box document processing – with little to no training required
Get an exclusive demo of the new family of UiPath LLMs – GenAI models specialized for processing different types of documents and messages
This is a hands-on session specifically designed for automation developers and AI enthusiasts seeking to enhance their knowledge in leveraging the latest intelligent document processing capabilities offered by UiPath.
Speakers:
👨🏫 Andras Palfi, Senior Product Manager, UiPath
👩🏫 Lenka Dulovicova, Product Program Manager, UiPath
GDG Cloud Southlake #33: Boule & Rebala: Effective AppSec in SDLC using Deplo...James Anderson
Effective Application Security in Software Delivery lifecycle using Deployment Firewall and DBOM
The modern software delivery process (or the CI/CD process) includes many tools, distributed teams, open-source code, and cloud platforms. Constant focus on speed to release software to market, along with the traditional slow and manual security checks has caused gaps in continuous security as an important piece in the software supply chain. Today organizations feel more susceptible to external and internal cyber threats due to the vast attack surface in their applications supply chain and the lack of end-to-end governance and risk management.
The software team must secure its software delivery process to avoid vulnerability and security breaches. This needs to be achieved with existing tool chains and without extensive rework of the delivery processes. This talk will present strategies and techniques for providing visibility into the true risk of the existing vulnerabilities, preventing the introduction of security issues in the software, resolving vulnerabilities in production environments quickly, and capturing the deployment bill of materials (DBOM).
Speakers:
Bob Boule
Robert Boule is a technology enthusiast with PASSION for technology and making things work along with a knack for helping others understand how things work. He comes with around 20 years of solution engineering experience in application security, software continuous delivery, and SaaS platforms. He is known for his dynamic presentations in CI/CD and application security integrated in software delivery lifecycle.
Gopinath Rebala
Gopinath Rebala is the CTO of OpsMx, where he has overall responsibility for the machine learning and data processing architectures for Secure Software Delivery. Gopi also has a strong connection with our customers, leading design and architecture for strategic implementations. Gopi is a frequent speaker and well-known leader in continuous delivery and integrating security into software delivery.
Epistemic Interaction - tuning interfaces to provide information for AI supportAlan Dix
Paper presented at SYNERGY workshop at AVI 2024, Genoa, Italy. 3rd June 2024
https://alandix.com/academic/papers/synergy2024-epistemic/
As machine learning integrates deeper into human-computer interactions, the concept of epistemic interaction emerges, aiming to refine these interactions to enhance system adaptability. This approach encourages minor, intentional adjustments in user behaviour to enrich the data available for system learning. This paper introduces epistemic interaction within the context of human-system communication, illustrating how deliberate interaction design can improve system understanding and adaptation. Through concrete examples, we demonstrate the potential of epistemic interaction to significantly advance human-computer interaction by leveraging intuitive human communication strategies to inform system design and functionality, offering a novel pathway for enriching user-system engagements.
4. Service Tasks!
• Service Tasks allow Java code to be executed as part of a
workflow!
• Allows easy unit testing and code re-use!
• Three ways to implement:!
• JavaDelegate Class!
• JavaDelegate Bean:!
• Arbitrary Expression!
5. Service Tasks: Java Delegate Class!
• The supplied class must implement JavaDelegate interface!
• Fields can be set on the class!
• Use the ʻactiviti:classʼ attribute to specify the delegate class
<serviceTask id=“getMimetypet" name=“Get Mimetype”
activiti:class="org.alfresco.examples.MimetypeGetter“ >
<extensionElements>
<activiti:field name=“document">
<activiti:expression>${dcwkflw_document}</activiti:expression>
</activiti:field>
</extensionElements>
</serviceTask>
6. Service Tasks: Java Delegate Bean!
• The supplied bean must implement JavaDelegate interface!
• The same bean instance is used for all executions!
• The bean must be defined in Spring and registered with the
activitiBeanRegistry!
• Use ʻactiviti:delegateExpressionʼ attribute to specify the
delegate bean in the process definition:!
<serviceTask id=“getMimetype" name=“Get Mimetype“
activiti:delegateExpression="${mimetypeGetter}" />
7. Service Tasks: Java Delegate Bean!
• Recommended to extend BaseJavaDelegate class!
• Recommend extending baseJavaDelegate bean!
• If the bean class extends BaseJavaDelegate and the Spring bean
definition extends baseJavaDelegate, then the bean will
automatically be registered with the activitiBeanRegistry and will
have access to the serviceRegistry!
<bean id=“mimetypeGetter" parent="baseJavaDelegate"
class="org.alfresco.example.MimetypeGetter" />
9. Service Tasks: Arbitrary Expression!
• Execute any arbitrary expression!
• The expression may reference any bean defined in Spring and
registered with the activitiBeanRegistry!
• A process variable can be specified for the return value using the
activiti:result attribute!
<serviceTask id=”getMimetype” name="Get Mimetype" activiti:resultVariable="dcwkflw_mimetype"
activiti:expression=“${mimetypeGetter.getMimetype(dcwkflow_document)}” />!
11. Listeners!
• Used to react to certain events during workflow execution!
• Two types: TaskLisener and ExecutionListener!
• Three ways to configure, as with ServiceTasks:!
• Listener Class:!
<activiti:executionListener class="org.alfresco.example.MyExecutionListener" event=“start” />!
• Listener Bean:!
<activiti:taskListener delegateExpression=“${myTaskListener}" event=“create" />!
• Arbitrary Expression
<activiti:executionListener expression=“myPojo.myMethod(myVar)" event="start" />
13. Listeners: Execution Listener Implementation!
Execution Listener class or delegate bean must implement
ExecutionListener interface:!
public class ExecutionEventLogger implements ExecutionListener
{
private static final Log LOGGER = LogFactory.getLog(ExecutionEventLogger.class);
@Override
public void notify(DelegateExecution execution) throws Exception
{
String eventName = execution.getEventName();
LOGGER.info("Received event: " + eventName);
}
}!
14. Listeners: Task Listener Events!
• All Task Listeners defined inside task elements:!
<userTask id=“theTask” name=“The Task” >
<extensionElements>
<activiti:taskListener ... [Listener Details] ... />
</extensionElements>
</userTask>!
• Event: assignment is called when a task is assigned to a user,
usually called before create:!
<activiti:taskListener event=“assignment” class=“org.alfresco.example.TaskEventLogger” />
• Event: create is called when the task is created, after assignment:!
<activiti:taskListener event=“create” delegateExpression=“${taskEventLogger}” />
• Event: completed is called when the task is completed:!
<activiti:taskListener event=“completed” expression=“${logger.info(task.eventName)}” />
15. Listeners: Task Listener Implementation!
Task Listener class or delegate bean must implement TaskListener
interface:!
public class ExecutionEventLogger implements TaskListener
{
private static final Log LOGGER = LogFactory.getLog(ExecutionEventLogger.class);
@Override
public void notify(DelegateTask task)
{
String eventName = task.getEventName();
LOGGER.info("Received event: " + eventName);
}
}
18. Scripting: Scope Variables!
• person ScriptNode, the current user!
• userhome ScriptNode, the home space of the current user!
• execution DelegateExecution, the current execution.!
• task DelegateTask, the current task (ScriptTaskListener only)!
• cancelled boolean, was the execution cancelled
(ScriptExecutionListener only)!
• deleted boolean, was the execution deleted
(ScriptExecutionListener)!
19. Scripting: Execution Variables!
• All execution variables added to scope!
• Variable names translated from “prefix:suffix” to “prefix_suffix”!
• Associations and noderef properties converted to ScriptNodes!
• Use execution.setVariable(name, value) to modify variables!
• Check if a variable exists using:!
if (typeof <variable name> != 'undefined')
20. Scripting: Examples!
• Copy a task variable to a process variable:
execution.setVariable('dcwkflw_reviewOutcome', task.getVariable('dcwkflw_reviewOutcome'));
• Set a task property from a pocess variable if it exists:
if (typeof bpm_workflowDueDate != 'undefined') task.dueDate = bpm_workflowDueDate;
• Apply an aspect ʻdcwkflw:publishedʼ to a document:
var presentation = bpm_package.children[0]; // Get the presentation
presentation.addAspect('dcwkflw:published'); // Apply published aspect
22. Timers!
• Timers are used to delay an event until a specified time/duration!
• Timers can be attached to three types of event:!
• startEvent: Starts the workflow!
• intermediateCatchEvent: Between nodes/events!
• boundaryEvent: Associated with a node (e.g. a userTask)!
• Three ways to set trigger time:!
• timeDate: Triggers at specified date/time!
• timeDuration: Triggers after specified delay duration!
• timeCycle: Triggers repeatedly with specified delay/interval!
• All dates/times/durations/intervals use ISO8601 format!
23. Timers: Start Event Date Example!
• Create a workflow which sends a Christmas Greeting
<!-- Start workflow at 12:05 on Christmas Day -->
<startEvent id="start" >
<timerEventDefinition>
<timeDate>2011-12-25T12:05:00</timeDate>
</timerEventDefinition>
</startEvent>
<sequenceFlow id='flow1' sourceRef='start' targetRef='sendGreeting' />
24. Timers: Intermediate Event Delay Example!
• Delay after some service task performs some asynchronous event
to wait for the job to complete:!
<sequenceFlow id='flow1' sourceRef='asyncJob' targetRef='waitForJobToFinish' />
<!-- Wait 1 hour 30 mins for the job to finish -->
<intermediateEvent id="waitForJobToFinish" >
<timerEventDefinition>
<timeDuration>PT1H30M</timeDate>
</timerEventDefinition>
</intermediateEvent>
<sequenceFlow id='flow2' sourceRef='waitForJobToFinish' targetRef='nextTask' />
25. Timers: Repeating Boundary Event Example!
• Send a reminder email if a task isnʼt completed after 1 week.
Repeat the email every day for 3 days:!
<userTask id="theTask" >
<!-- Wait 1 week, then repeat every 2 days a further 2 times -->
<boundaryEvent id="repeatingNotification" cancelActivity="false" attachedToRef="theTask" />
<timerEventDefinition>
<timeCycle>R3/P1W/P1D</timeDate>
</timerEventDefinition>
</boundaryEvent>
<sequenceFlow id='flow1' sourceRef='repeatingNotification' targetRef='sendEmail' />
<serviceTask id="sendEmail" activiti:delegateExpression="${sendEmailDelegate}" />