Pega Process
Pega Process
Enforcing business logic to your application process is done by creating business rules and applying
them to the use cases and workflow the application requires. Work and work items in a process flow
may need business logic applied to them for the process to continue or complete successfully.
Process Overview
PegaRULES Process Commander (PRPC) enables you develop and deliver business applications in a
completely model-driven environment. This approach makes it easy to directly capture, assess, refine,
and put into production process flows that precisely meet your business needs. At the core of these
modeling capabilities is the flow rule. In it, you use an easy-to-use diagram editor that provides a set of
modeling shapes, letting you graphically capture a business process and its components. The shapes
contain PegaRULES Process Commander business rules that define automated routing logic, declarative
and decision instructions, user work form and interface presentations, system and data source
integration, and other process elements. When you first build the model, you gain detailed insight into
the current process. As you research and analyze the model, you will likely discover tasks and
processing nodes that are impeding efficiency and productivity. As your team experiments with a
number of hypothetical configurations, you arrive at a process design that best meets your business
goals and resources. These modifications may include redirecting work paths, adding or removing
processing steps, or automating manual tasks. Because the process model is rule-based, you can
automatically implement the new design in your production environment and refine as necessary. Going
forward, you can make iterative updates to meet ever-changing business conditions and requirements.
What is a business process? | Key Features & Attributes | Terminology | Additional Information
One home insurance application that fails to meet the automatic credit approval rules may require
special research, while others are handled automatically
An arriving customer service call in Mary’s territory may be routed to Tom, if Mary is unavailable
A request that is in a foreign language may be routed to a manager who can decide who among
his or her team is best qualified to handle the request.
Flows
Flows represent the fundamental business processes; they identify how work items are created, who
works on them, in what sequence, what decisions and processing occur automatically, and how the
items are resolved. Process Commander processes are represented by a flow within the Process
Modeler or a Microsoft Visio diagram. It contains a network of task shapes such as Assignment, Decision,
and Utilities, and connectors. These are associated with rules, parameters, or property values that
precisely specify how the shapes and connectors act upon the work object. Collectively, the
components define the process from the time a work object enters the flow until it is resolved. To
modify the process you edit the flow diagram. You can use the flow rule to run the process and to test
the results of your modifications.
Work items
A work item in a PegaRULES Process Commander flow is an electronic representation of a paper work
form. When an item is created, the system generates a unique work item ID and enters basic
information such as who created the item and when. As the work item (an insurance application, for
instance) moves through the process, operators or automated procedures add information to it. This
data is accumulated and stored on a system database for use in the current or subsequent
assignments. Operators can enrich the item's information content by attaching text files, screen shot
images, URLs or PDFs as the item moves through the process flow. PegaRULES Process Commander
automatically keeps a history of the item's progress, identifying operators that have worked on the item
and when, and what automated tasks were performed on it.
Flow example
This example below represents a purchase order request process. The employee enters purchase
requests for office supplies or equipment. Operators collect information about the the employee and the
items. Certain criteria must be met to continue processing. If not met, the request may be rejected. If
accepted, the item is submitted to an operator in the accounting group, where it is routed with through
the accounting process. When completed, the item returns to the purchase order process. Based on
data in the work item, an automatic procedure routes it either to a manager for approval or it is
rejected. When a request is approved or rejected, it is resolved and no further processing occurs.
When the processes starts, the system generates a unique work object ID for the new item. The
following processes can occur:
, which contains its own flow rule and diagram. In this example, the request is
processed in the accounting department before it returns to the purchase order process.
Some tasks are performed automatically. For instance, decision logic to either route work to the
back to top
Application Designers can evolve the process in small iterative-based parts at the individual rule level.
Java code is compiled and executed by the system at run-time, giving designers immediate feedback on
the effects of their changes. New configurations can be tested in real-time, even on production systems
without affecting other users or processes.
An intuitive graphical design tool provides insight to all members of the design team regardless of
technical expertise. The tool helps your team conceptualize and consolidate complex multi-stream flows
into one process. Because Process Commander modeling is rule-based, your design team can quickly
convert high-level designs into fully functional business processes that can be analyzed, refined, and
put into production with minimal IT support.
Using service connectors (such as SOAP, MQ, active file listening) you can connect your process to
existing enterprise applications, and pass data between systems that can be parsed, extracted, and
interpreted.
Rich work item information and automated tracking enable users and managers to dynamically monitor
work and take corrective action based on events to make sure work is processed on time and is running
optimally.
back to top
Important Terminology
Assignment — A point in the business process that requires human judgment and input. Flow
processing of a work item normally pauses when it reaches an assignment shape until a user completes
the assignment. The assignment normally appears on the worklist of the user who starts the flow.
Flow — A flow rule is the fundamental representation of a business process in Process Commander. The
rule defines the sequence of processing that your application applies to work objects. It contains a
network of shapes and connectors. They are associated with rules, parameters, or property values that
precisely specify how the shapes and connectors act upon the work object.
Screen flow — A flow rule that presents a user with a sequence of forms to complete. A screen flow
provides an effective way to simplify input processing and present questions or input fields in a series of
related forms. Users can change an answer to an earlier question by backing up in the flow; and, in
some situations, can complete steps in any order.
Shapes — Each shape in Process Modeler represents an Assignment, a Utility, a Decision, a Start or
End, and so on. (The Microsoft Visio presentation of a flow are informally known as a tasks.)
Work item — The primary unit of work completed by an application, and the primary collection of data
that a flow operates on. Operators using an application create, update, and eventually resolve and close
work items.
Worklist — A list of outstanding (not complete) assignments waiting for a user to perform them. The
list appears in a portal that supports application users that create, update, route, and resolve work
objects.
Workbasket — A queue of open assignments that are not associated with an individual operator.
Managers can review the assignments placed in a workbasket and distribute them one-by-one to
appropriate users for processing. Alternatively, the system can automatically reassign assignments
from the workbasket periodically to a user's worklist.
back to top
Additional information
Introduction to Process Definition | November, 2008
How to drag rules from the Application Explorer into shapes on a Visio flow diagram | November,
2008
How to perform bulk processing for a large number of assignments V6.1 | May, 2010
back to top
We're doing mortgage pricing. Each mortgage program has its own work type in the Process
Commander system. The number of mortgage programs that might be included as part of one
submission (button-click, web service, etc.) could range from two to almost a hundred. The two
approaches we're considering are:
Use a cover object that includes information about the submission as a whole (the Request Object),
and open multiple separate covered work objects to represent each necessary mortgage program
included in the single submission. This could result in many object creations and saves upon
submit.
Create the Request Object, but not as a cover object. Create separate pages for each mortgage
program included in the submission, operate as necessary on those pages, then copy each such
page back to the Request Object as an embedded page. This would result in many and complex
embedded pages being copied to the Request Object upon submit.
Suggested Approach
The better practice in most situations is to create separate, distinct work objects. This is particularly
true if there's a likelihood that assignments could occur on the mortgage programs submitted, or that
reporting will be required.
Work objects offer extensive functionality, including assignments, history, attachments, and reports, for
example. Whenever feasible, your design should take advantage of such features.
The performance implications of saving multiple separate objects in the single submission do not differ
greatly from those of copying multiple complex pages to embed into a single work object. And the
multiple, smaller work objects will each be quicker to open and update subsequently than the fewer,
large objects.
Any reporting on the embedded pages of the fewer, large objects could require extensive indexing,
which is in itself a performance consideration - whereas the many, smaller objects will be more easily
accessed for reporting without requiring indexing.
The standard Work-. activities that call these extension points are mostly marked as final, so you cannot
override them.
For example, you can't override the Work-.New activity, but it calls Work-.NewDefaults, which is an
empty activity. Create an activity in your application RuleSet named MyWorkClass.NewDefaults to
extend the processing provided by Work-.New. Your activity, not the empty activity, is executed at
runtime.
Suggested Approach
V4.2SP4 includes the following extension point activities:
Cover manipulation
Assignment creation
To create settings for a specific assignment task in a specific flow, use the Assign- properties
pyFlowType and pxTaskName to identify it.
Perform an assignment
Problem scenarios
Two scenarios identified the need for the suggested approach described in this article.
Explanation
The Pega-provided activity ShowSelectedPortal calls only one other activity, ShowDesktop. The
suggested approach explains how to solve this problem, including how to add conditional logic that
opens the same portal from assignment links in both email and non-email modes.
Suggested approach
As an application developer, choose which development approach works best for your business users
who want to see linked-to assignments or work displayed immediately within the Case Manager portal
without SSO credential challenge.
Preview
How to create a process to open a portal from an assignment link
How to create a process to open a portal with the work object displayed on a tab
Preview
You work with the rules identified in the following table by rule name, rule type, and comments
describing what the rule does.
Rule
Rule Name Comments
Type
2. The portal rule ShowAssignment is very similar to the User portal, with Spaces specified as follows:
Space Name field value is Work.
Harness Class field value is Data-Portal.
Harness Name field value is UserOpenAssignment.
Default is selected.
3. The portal harness UserOpenAssignment looks very similar to the User harness, except that Center
Panel, Use Section field specifies the UserCenterPanelOpenAssignment section instead of
UserCenterPanel:
4. The portal section UserCenterPanelOpenAssignment, Layout tab specifies, at the bottom of the
form, Section Include [Data-Portal CallOpenAssignment]:
5. The portal section CallOpenAssignment HTML for JSP is not auto generated, and the HTML Source
script is as follows:
<script><br />
var assignmentHandle = "<p:r n='pxThread.AssignmentHandle'/>";<br />
window.setTimeout ("openAssignment(assignmentHandle)", 1000);<br />
</script>
In testing, we saw some issues when first-use assembly ran. Therefore, one second may not be enough
time. After first-use assembly ran, one second was sufficient. You might need to experiment with the
timeout value.
How to create a process to open a portal with the work object displayed on a
tab
As an alternative to opening the portal from an assignment link, use the following procedure as your
development approach to open the portal at the work tab:
Find the openWorkByHandle API in the Pega Public API Package > Desktopwrapper.
Related GCS Case Object Number
KR-936, SR-73504, SR-93957, SR-74865
To create a screen flow, you create a flow that calls the screen flow rule. A screen flow cannot be a
starter flow. The screen flow typically contains multiple assignment shapes that present information to
the user, along with other shapes. The scenario below explains how a screen flow is called from a
regular process flow.
Property panels for the allowable shapes in a screen flow contain an Entry Point checkbox. You must
check this box on at least one shape in a screen flow. When this box is checked, the shape is an entry
point to the process, meaning that processing can resume or begin at this point in the flow. This
checkbox also causes other fields to appear in the property panel, including the Only Going Back
checkbox that prevents users from jumping ahead without completing previous forms or steps. Once
the step is completed, the user can return to this point from the steps that follow.
TabbedScreenFlow:
The TabbedScreenFlow harness presents the forms using tabs. At runtime, as the user completes the
questions and clicks Submit under Select Rule then Select Filters, for example, Set Fields becomes
active with a new set of questions. A checkmark appears on tabs the user has completed.
TreeNavigation:
The TreeNavigation harness presents the forms in a tree or list format, depending on the configuration.
Active form names appear in bold, and a checkmark appears by steps the user has completed.
PerformScreenFlow:
The PerformScreenFlow harness presents the forms in a breadcrumbs format. Completed form names
display in a blue rectangle. Active form names display in a larger font and with a pale-colored rectangle.
Suggested Approach
A hypothetical scenario helps explain how to create a screen flow in the
Process Modeler.
A company takes orders from customers over the phone. It is important that customers of this company
have a solid credit rating before the business relationship is established. The CSR first determines if the
caller is a current customer. If so, the customer information is confirmed, the order is entered, reviewed,
and submitted. If the caller is not a current customer, a subprocess using a screen flow guides the CSR
through creating a new customer account. The flow provides the CSR with small sets of questions
organized using a tabbed screen flow. The questions relate to contact, payment, shipping, information
and finally credit rating. The CSR can switch between the tabs to navigate among the questions as
needed.
Once the information is gathered, a determination is made as to whether a credit relationship can be
established. If not, the customer cannot be added and a follow-up rejection letter is sent. If the customer
is credit worthy, they are added as a customer and processing returns to the main flow so the order can
be taken, reviewed and fulfilled.
To accomplish this business processing, create a main process flow, OrderEntry, that creates the work
items, determines if the caller is a new customer, and if so, creates a subprocess,
CreateNewCustomer, that uses a screen flow process to guide the CSR through creating or rejecting
the new customer, then returns processing to the main flow. The flows look similar to the following
diagram:
Add the Subprocess shape to a main flow
1. Create the OrderEntry flow as shown above.
2. For the Subprocess shape, complete the rule form.
Use the name CreateNewCustomer.
In the Filter Flow Rule By field, select Screen Flow. This selection causes only screen flow
rules to appear when you use the SmartPrompt in the Flow Rule field.
Because the Flow Rule does not exist yet, enter the name of the flow you will create,
CreateNewCustomer. You can either continue creating that flow now by clicking the Open
Rule icon, or follow the steps in the next section to create the screen flow.
Check the Subprocess has Entry Points box. This is required for both TabbedScreenFlow and
TreeNavigation harnesses.
5. Double-click the Start shape to view the property panel. In the Harness field, the
PerformScreenFlow harness is specified by default. Use the SmartPrompt to select an alternative
screen flow presentation, TabbedScreenFlow. You could also choose TreeNavigation. The
presentation to the CSR depends upon which harness you select in the Start shape.
6. Add shapes so that the flow is similar to the Subprocess screen flow in the diagram below. The
CreateNewCustomer flow includes four assignment shapes that present information in tabs to
the CSR. The name of the shape appears on the tab at runtime in the application.
7. Mark each of the Assignment shapes as an entry point in the flow. In a screen flow, at least one
shape must be marked as an Entry Point. Typically, many shapes are marked. An entry point is a
place in the flow that a user can move to either by clicking one of the tabs or by clicking << Back,
which appears automatically at runtime in any assignment designated as as entry point.
Each task in the flow also presents at runtime with a Next button. When the user clicks the button, input
is validated and processing advances to the next assignment. For the last assignment in a
TabbedScreenFlow or TabbedScreenFlow, Next >> changes to Submit. For information on adding a
Cancel button, see the Help documentation, Editing in Process Modeler - Creating and Editing Screen
Flows.
Only one connector starts at each shape, and since that path is always followed, no additional
information is needed on the connectors.
The presentation of the CreateNewCustomer flow with each harness is shown below.
TabbedScreenFlow:
PerformScreenFlow:
TreeNavigation:
Using the Show Rule Data button ( ) you can display the XML underlying all rule forms. In addition, you
can transfer your process flow diagrams to other flow management systems by generating XML files in
these industry-standard formats:
This article describes how you generate these file from your flow rules.
Suggested Approach
Here is a sample flow rule diagram:
Here is Process Commander XML representation of the flow:
Use the XPDL and BPEL options located on the Design tab on a flow rule form.
Do the following:
Click XPDL to generate an XPDL file.
Click BPEL to generate an BPEL file.
A dialog appears asking whether you want to save the file (default name export.xml) or open it in a
browser.
You can manually design the shapes in Visio, import image files, or mix shapes from Pegasystems
stencils, Microsoft stencils, or stencils designed by your company or industry group.
This article describes how you create a custom stencil, add shapes to it, associate them with flow tasks,
and upload the stencil into Process Commander.
Suggested Approach
There are three major steps in creating a custom template:
3. In Visio, select File > Shapes > New Stencilfrom the menu to create your new stencil. In the
example, the default stencil name is "Stencil2."
Note the red asterisk (*) in the header, which indicates that the stencil is in edit mode.
4. Click the header bar and save the .vss file in a local directory, using a file name of your choice
("OESstencil" here ):
4. Drag the shape back onto the Visio canvas. By default, it has freeform properties.
5. To associate the image with an activity type, use the drop-down menu and select the appropriate
type (Utility in this example):
6. Click Applyin the Utility Properties panel. Note that you can specialize the shape by adding
properties and entering a meaningful name to indicate its purpose.
7. Turn on the Connection Point tool in the Standard Visio toolbar. Select the shape, and attach one or
more connection points as shown here:
Adding the connection points maintains the shape's association with the task and its properties.
8. Drag the image back to the new stencil pane, rename it as appropriate, and delete the original
master shape.
9. Add more shapes as necessary. You can also copy and paste shapes from other stencils. Here is an
example showing a mixture of custom and standard Process Flow shapes in one stencil:
10. When you are finished, save the stencil and exit Visio.
1. Enter webwb as the App Name (Directory). This is usually the location of standard Process
Commander binary files.
2. Enter a File Name of your choice.
3. Enter biw as the File Type (extension). (For technical reasons, when a stencil file is
incorporated in a binary file rule, the final key part of the binary file rule is biw.)
2. In the rule form, optionally enter a name of your choice in the Relative Path field to differentiate it
from the other .biw files in a list view.
7. Click Upload File in the window. A File uploaded successfully message appears.
8. Save the binary rule.
9. To use your new template in a flow, open the Designtab, use SmartPrompt to select the stencil, and
save the rule.
When you open the flow in Visio, your custom template and the standard Process Flow stencil will
appear in the Shapes panel.
This gadget automates the steps described in How to extend the security auditing feature to record
changes to additional properties by automatically creating the model and activity rules necessary to
record changes in the work object history.
Suggested Approach
To configure change tracking using the Field Level Auditing gadget:
1. Confirm that the the application containing the property to be tracked appears in the header bar of
the Designer Studio. If not, select Switch Application > application from the application menu.
2. Access the Field Level Auditing gadget by selecting > Process & Rules > Work History >
Field Level Auditing.
3. Select the work type which has the property to be tracked. All work types in the current application
are shown.
4. Click the Add a Row button and select a property using the SmartPrompt.
5. Click Submit. The gadget creates (or updates) a model named pyTrackSecurityChanges in the
Work Type and RuleSet Version you specified. The gadget also creates (or updates) a Declare
Trigger rule that monitors the property for changes and adds records to the work object history.
6. To test, create a new work object. Any changes made to the value of the identified property, along
with the operator that made them, are reflected in the work object history.
Suggested Approach
The viewer enables you to:
You use the View tab to open referenced rules, and use the Edit tab to modify shape
properties.
3. To open a referenced rule instance, click its link on the View tab. For example, clicking on
Perform opens the harness rule used in the assignment.
Note: You open flow action rules leaving an assignment by clicking the Flow Action links on the
assignment shape viewer as shown above.
If you modify and save the rule, the shape uses the updated rule when you execute the flow. You do not
have to save the flow rule for your updates to take effect.
4. Return to the flow diagram. To open the shape's properties panel, click the Edit tab on the shape
viewer. The panel, which is the same one used in the Visio editor, appears. Here is an example:
5. Review the panel information and modify it if necessary. You cannot modify the shape name.
6. Click Apply to keep your updates and leave the viewer open. Alternatively, click OKto apply your
updates and close the viewer.
You can only use the viewer with one shape at a time. That is, if the viewer is open and you right-
click on another shape, the original viewer closes and a new one opens. The original updates are
automatically applied.
7. Save the flow rule when you are finished with your design session. When you save, any changes in
an open viewer are applied.
To cancel your changes, exit without saving. A warning message appears indicating that there is
changed data (assuming that the Exit warning is set in General Preferences).
You can move the viewer to any position on the flow diagram. Click the the pin icon ( ) to anchor
it. The viewer remains open in that position and updates are applied each time you right-click on
another shape. To close the viewer, unpin it in order to display the OK button or use the exit icon (
).
You can work concurrently with other flow rules using a viewer in each diagram. Switching
between rules does not apply viewer updates.
You cannot open a viewer on an unconnected shape (grayed out).
Process Modeler is the default flow editor for flows. However, if you prefer, you may continue to edit and
create flows in Visio. You can save existing Visio flows first created in V6.2, V6.1, or an earlier version
for editing in either Process Modeler or Visio. However, a flow saved using Process Modeler cannot later
be converted to Visio format.
The Process Modeler offers a new, yet familiar, look to shapes, based upon those found in Business
Process Modeling and Notation (BPMN). Some shapes that were available in Visio are eliminated, as
their functionality is built into other shapes.
Visio users who try the Process Modeler editor will find the transition straightforward. All the tabs on the
Flow rule form, other than the Diagram tab, are identical for both editors, and runtime execution is
nearly identical.
The flows below demonstrate the PurchaseOrder flow in the Visio editor, and that same flow converted
to Process Modeler editor.
In the converted PurchaseOrder flow below, the shapes and flow are easily recognizable in the Process
Modeler.
Maintaining the diagram and updating the property panels is an intuitive process. Connectors are drawn
from shape to shape on the canvas. Keyboard shortcuts simplify common tasks. Further information is
available in the Developer Help.
To understand the differences and similarities between the two editors, review these topics:
Toolbars
Other differences
Keyboard shortcuts
Suggested Approach
What's different with shapes?
Shape names can contain spaces and are no longer limited to characters and digits. You can even
use foreign character sets.
You can change the name of a shape by clicking it, then typing the new name in the highlighted
field. You do not need to open the shape property panel.
Rather than the shape stencil on the left panel in Visio, shapes are added using the Flow Shape
palette button on the toolbar or by right-clicking the canvas to display an Add Shape menu.
To open the primary rule associated with a shape, right-click the shape. From the drop-down menu
on an Integrator shape, for example, you can select Open Activity. For an assignment shape, you
can select Open Harness.
Starting with PRPC 6.3, shapes have a Status tab that allows you to easily change the status at
multiple points in the life cycle of a work item without adding a utility shape to the flow for each
status change.
Starting with PRPC 6.3, the Assignment shape has the Optimization tab that allows you to select
one or more properties to use for process optimization.
One of the more noticeable differences between Process Modeler and Visio is that there are fewer
shapes in the Process Modeler. The functionality of all the shapes in Visio has been retained and
often enhanced. However, to better streamline flow interaction and to be more consistent with the
BPMN standard, some shapes are now combined with other shapes. Specifically, the following
shapes, explained below, no longer appear on the shapes palette:
Connector
Spinoff
Router
Ticket
Fork
Comment
Connector
Draw connectors using click-and-drag from one shape to another in Process Modeler. Each shape has
pre-defined connector points. The connector may be drawn to and from specific connector points,
creating an "anchored" connection. The connector will stay on anchored points, regardless of where the
shape is moved on the canvas.
The connector may also be drawn to or from the arrow in the middle of the shape, creating an
"unanchored" connection. The connector will attach to the best or closest connection point as a shape is
moved.
A connector must be drawn to and from a valid point in order to appear on the canvas. An invalid
connector will not appear.
The functionality of the Spinoff shape in Visio is built into the Subprocess shape in the Process Modeler.
In the Subprocess Properties panel, the Subprocess tab contains a Spinoff Flow checkbox to indicate
that a subprocess flow executes as a spinoff flow while the current flow continues to execute.
A subprocess that runs as a spinoff flow appears with the spinoff arrows icon.
Fork
The functionality of the Fork shape in Visio is built into the Decision shape in Process Modeler. In the
Decision Properties panel, the Decision Tab contains the Type drop-down menu that provides a list of
available decision types. Select Fork from the menu. The outbound connectors from the Fork type
Decision shape contain information about the branches.
Notify
The functionality of the Visio Notify shape is built into the Assignment shape in the Process Modeler. In
the Assignment Properties panel, the Notification Tab contains the Notify field where you use the
SmartPrompt to select the Notify activity.
An Assignment shape with Notification appears in the flow with an envelope icon.
Router
The functionality of the Visio Router shape is built into the Start shape for screen flows, and into the
Assignment shape and Swimlanes for regular process flows in the Process Modeler. The Swimlanes
Properties panel contains the Swimlane tab with a Router field where you use the SmartPrompt to
select the Router activity.
In the Assignment Properties panel for process flows and the Start Properties panel for screen flows, the
Routing Tab contains the Router field where you use the SmartPrompt to select the Router activity.
If you are using Swimlanes, the Router assigned to the Swimlane overrides the router assigned to an
assignment.
Ticket
The functionality of the Visio Ticket shape is built into all shapes in the Process Modeler that allow
tickets:
Assignment
Assignment Service
Decision
End
Integrator
Spinoff
Split Join
Split For Each
Subprocess
Utility
The Properties panel for each shape has a Tickets tab where you select the ticket to set on the shape.
A shape with a ticket assigned appears in the flow with a triangular ticket icon.
Comment/Annotation
The Comment shape in Visio is replaced by the Annotation shape in Process Modeler. Comments in Visio
flows will not be preserved when the flow is converted to Process Modeler.
Toolbars
Process Modeler Toolbar
In Process Modeler, the toolbar is arranged differently from the Visio toolbar. Controls on the left side
allow you to interact with the process flow, while controls on the right side let you control your view.
Functionality has been added, including access to the Flow Shape palette, the ability to control the
display of likelihood on connectors, shape alignment, grid snapping. The function of each icon is
described below, and further information is available in the Developer Help.
Icon Function
View shape properties
Preview harness of selected Start or Assignment shape
Delete selected item
Pan mode
Select mode
Draft mode is on
Display metrics options
The right side of the toolbar allows you to select the a view of Process Modeler or the Discovery Map. If
you have created or opened a Visio flow, a Visio button will also appear to indicate your current flow
editor.
Visio Toolbar
In Visio, the toolbar displays differently as well. The function of each icon is described below.
Icon Function
Display Visio toolbar
Undo
Zoom in
Zoom out
Draft mode is on
You may continue to work with existing Visio flows. When you open the process flow, you will see:
On the right side of the toolbar, Visio is the selected view. On the left, use the icons to open the flow
using Visio:
You can convert an existing Visio flow to a Process Modeler flow. Once you have converted and saved
the flow with Process Modeler, you edit the flow with Process Modeler going forward. You cannot return
to Visio editing on this flow.
With a Visio flow open, click . The Visio flow converts to a Process Modeler flow. Edit the flow
as desired.
When you save the flow, a warning message informs you that once you save this flow in the Modeler
view, it can no longer be viewed or edited with Visio. You can continue with the Save or click Cancel. If
you cancel, you can click to discard any edits made in Process Modeler and continue editing
the flow using Visio, or you can simply close the flow. When you next re-open the flow, Visio will be the
flow editor.
Comments in Visio flows will not convert to annotations in Process Modeler. Re-enter comments as
Annotations.
All connectors in the converted flow will have unanchored connections.
Process Modeler is the default flow editor. However, you can still create new Visio flows. On the Flow:
New form, select VisioFlow or VisioScreenFlow in the Template field.
For a tabbed screen flow, open the property panel on the Start shape and enter TabbedScreenFlow in the
Harness field.
Other differences
Swimlanes and Pools
Assignments are dragged onto a swimlane in Process Modeler. You cannot drag a swimlane onto
an assignment.
The Swimlane uses a default router of ToCurrentOperator. The assignment will always use the
Router assigned by the Swimlane.
A flow diagram has one pool only.
When you add Swimlanes to a pool, they appear at the end of the pool and may be repositioned, as
needed.
When you delete a pool or a Swimlane, the shapes contained within do not get deleted. Rather,
they remain on the canvas.
Minimap
The minimap, in the lower right corner of the Process Modeler canvas, allows you to pan, using click-
and-drag, around a flow that is larger than the window. Click the square in the lower right corner of the
minimap, then drag to zoom in on an area of your process flow.
Three templates are available when you create a new flow: ScreenFlow, VisioFlow, and VisioScreenFlow.
Older templates are still accessible.
Screen flows are created using a template. On the Flow: New form, select ScreenFlow or
VisioScreenFlow in the Template field.
For a tabbed screen flow, open the property panel on the Start shape and enter TabbedScreenFlow in the
Harness field.
In Process Modeler, you cannot drag a rule from the Application Explorer onto the canvas.
Flow filter
When editing a process flow, the property panel for Subprocesses, Split Join and Split For Each shapes
allows you to filter flow rules by Screen Flows or Process Flows. When you edit a screen flow, only
Screen Flow rules can be chosen.
Define one or more initial properties and property values for instances of a class.
Map properties (and their values) of an instance of a class to an instance of a different class, or the
same class.
Using a data transform, rather than setting the property values one-by-one in an activity, improves
runtime performance. Consistency is also improved when a data transform rule is re-used. Data
transform rules speed development, because you can set values for many properties quickly in a single
form.
WhereAmI?
In the WhereAmI display, the Process Modeler flow image is vector-based, allowing you access to
navigational tools such as pan and zoom.
The Open Folder button in the left panel for Visio flows is replaced with the Open icon beside the flow
name in Process Modeler.
The selected flow name displays in bold text rather than yellow highlight.
Keyboard Shortcuts
The following keyboard shortcut keys are available in Process Modeler:
Process Commander associates a flow rule with a Microsoft Visio diagram, which graphically represents
a process. The diagram contains a network of shapes (tasks) and connectors (arrows). They are
associated with rules, parameters, or property values that precisely specify how the shapes and
connectors act upon the work object. Collectively, the components define the process from the time a
work object enters the flow until it is resolved. To modify the process you edit the flow diagram in Visio.
You can use the flow rule to run the process and to test the results of your modifications.
Note: Begining in PRPC 6.2, you can define flows using Process Modeler, a browser-based tool, rather
than Visio. See Introducing Process Modeler, an alternative to Visio for creating and editing flows.
This article provides an overview of how you define a process in Process Commander and the tools you
use to meet your design objectives. The topics include:
Locating your flow rule and opening the flow diagram in Visio
Understanding flow shapes and the tasks they perform
Double-click Flow in the Application Explorer to display all the flow rules in your application, which
are listed in the Process category.
Click the appropriate flow rule from the list to open the rule form.
Use the Process slice in the Developer portal to open flow rules that you are likely to be working on
as follows:
Example of a process
The flow in the above example defines a purchase order request process. The employee enters
purchase requests for office supplies or equipment. Operators collect Information about the the
employee and the items. Certain criteria must be met to continue processing. If not met, the request
may be rejected. In some cases, requests must be approved by a manager. When a request is approved
or rejected, it is resolved and no further processing occurs.
This article uses the above flow to describe a typical Process Commander process definition and how it
can be modified to meet your business requirements.
1. Check the Creates a new work object option so that when the flow starts, a new work object,
which is uniquely identified, is created.
2. Select New in the Harness field. This ensures that a new work harness is used when the new work
object is created.
3. Select pyDefault in the Model field so that standard property values are used to populate
information about the new work object.
To open the diagram in Visio and begin editing, click the Flow Editor icon on the Developer toolbar.
Here is how the diagram is displayed in Visio:
Building blocks: Flow shapes and connectors
The Shapes palette named Process Flow contains the shapes you use to build your flow. Each shape has
a descriptive text name.
The shapes identify types of tasks. Drag a shape from the palette into the Visio workspace to add them
to your flow.
The following table lists the shapes and describes the tasks they perform.
Shape Description
Optionally, after the assignment task is defined, you can associate a service level rule with it. A
clock appears on the diagram, as shown here.
Comment — Adds explanatory text comments anywhere on the flow diagram. Comments do
not affect execution of the flow.
Connector — Associates a task in the flow with another that may follow the first task.
Connectors leaving assignment tasks may be flow actions. Connectors leaving other tasks such
as decision or utility shapes may be when conditions.
Decision — Identifies an activity that can make an automated decision about the progress of
the work object through this flow.
Flow — Identifies a subflow, which is a flow rule that is referenced in another flow. For
example, add a Flow shape to the your flow rule to start another flow and end processing of the
current flow. The second flow is called a subflow of the first flow.
FlowEnd — Marks the end of the flow. When processing reaches this shape, no further
processing by this flow happens. A flow may contain none, one, or multiple FlowEnd shapes.
Integrator — Identifies an activity that can connect to an external system to send or receive
data.
Notification — Notifies a work party by email or correspondence about the status or progress
of this work object as the assignment is created.
Router — Sends an assignment to a user, workbasket, or agent other than the current user.
Associate a Router task with an assignment task. This activity determines which worklist or
workbasket is to contain the assignment.
Spin-off — Starts a new flow execution and does not wait for its completion.
Split-Join — Sends the work object to two other flows, both of which must complete before the
current flow resumes.
Pools and swim Lanes — Identifies and groups tasks performed by separate organizational
units within one division.
Ticket — Marks a business exception that might arise at any point in the flow, such as a
cancellation.
Utility — Specifies an activity to run at that point in the flow to perform automated processing
without any user assignment.
Here is an example of a connector properties panel for a flow action leaving an assignment:
The connector is defined by a flow action rule (Submit) and a parameter (Likelihood). The star icon ( )
indicates that the field is required. Here is the associated flow action rule.
Other fields such as Application and Work Type may be entered by the system based upon rule settings
or properties located elsewhere in the application.
From the properties panel, you can edit rules that display an edit icon next to it. Click on the icon to
open the rule and modify it. You can also create new rules (ones that do not yet exist) from the panel.
For example, you could delete Submit in the Flow Action field, enter the name of a new rule , and click
the edit icon to open a new rule dialog.
Note: If you use either of these methods while in the flow rule, you are prompted to create a test page
and use the pyDefault model. Click the Reset page & Run flow button.
If you are not working on the flow rule, you can select Run > Process > (your flow rule) from the
Developer portal at any time.
If the results are not what you expected, modify the rule and run it as many times as necessary, testing
each possible path. Use the gold Where-Am-I? arrow to see where an assignment is located in the
flow.
When designing and testing, you can turn on draft mode . In this mode, the flow rule is known as a
flow model. Flow modeling lets you run flows during the development cycle without having to
associate rules with shapes. For more information, see How to create and test a flow model.
Note: You cannot test a flow rule that has Availability set to No/Draft Mode.
Set the Available field to Yes, even if the Visio draft mode is in force.
Understanding the basic shapes and how they work
The shapes and their tasks that you will probably use most frequently include:
Assignment — This is the core shape in almost every flow. It represents a user's analysis, research,
data input, and decisions that cause the assignment to be completed. In conjunction with their
connectors, which represent flow actions, assignments represent the stepping stones on the process
path. For this reason, pay special attention to how you configure assignments so that your design
results meet your objectives. In addition, because the process will stop if an assignment is not
completed, you must be careful to account for flow prerequisites and contingencies such as insufficient
data, or incoming or outgoing processing conflicts that may impair performance.
Who performs the action on the work object and what actions must be performed?
An assignment assigns work to individuals or to an automated process based upon the rule
you select in the Rule field in the Assignment properties panel. In almost all cases, you send
the work to an individual operator's worklist or to a workbasket that is shared among an
access group associated with multiple operators.
When an operator opens the work object in their work list or basket, a work object form is
displayed. You use harness rules to define the appearance and processing of work object
forms used in your application. Process Commander includes more than a dozen standard
harness rules, which you can customize to extend and tailor them to your specific needs.
You specify which harness rule to use with an assignment in the Harness Purpose field in the
Assignment Properties panel.
Here is an example of the Perform harness rule used with the Item Entry assignment. It has
been customized using other rules such as sections and properties to suit the required tasks.
When must the assignment be completed?
An assignment can have an associated service level rule, which tracks the time that has
elapsed from when it was assigned until it is completed.
Clicking the Open icon displays the rule, which specifies that the manager's goal is to
complete the approval action within 2 hours of receiving the assignment. As time passes, the
assignment's urgency is escalated. Another task (such as reassigning the assignment) may
automatically be triggered as a result.
Which path will the work object take when the assignment is complete?
You associate flow action rules with assignments to specify the choices available to users as
an interim or final disposition of an assignment. Each flow action indicates the likelihood it will
occur when the assignment is completed. Flow actions are represented in the flow diagram as
connectors leaving an assignment.
For example, an operator in the Item Entry assignment gathers information about the items
ordered (names, quantities, and prices) and the requestor's information (department name
and number). For example, if the the employee requests 20 laptops, the operator can choose
to reject it based on a company policy to send requests of this size through another purchase
process.
A flow actions is usually associated with a likelihood value or percentage between 1 and 100.
Typically this is a before-the-fact opinion about the estimated percentage of times users are
expected to choose that flow action during the process.
In this example, there are two flow actions. the user at the Item Entry assignment can either
submit the request (likelihood of 90%) or reject it (likelihood of 10%).
Flow actions may require different input fields and may use different form displays. In this
case, the reject flow action has its own work form. Flow actions contain HTML that displays to
the user in the Take Action drop-down box of their assignment work form (Perform harness) as
shown here:
The layout of the Reject work form is designed in the Reject flow action rule. The text from
Short Description field appears in the Take Action field.
The order in which the flow actions appear depends upon the flow action likelihood
percentage (. In the above example, Enter Order Items appears first because the likelihood of
the Submit flow action is 90%.
You can also use flow actions to update a work object without advancing it to the next task in
the process. These updates may include attaching a note to the work object, or attaching a
file that enables the user to browse for and attach a file from an outside data source. You use
the Local Action section in the Assignment Properties panel to select one or more standard
local actions, or you can create one to meet your needs.
Router — To send newly created assignments to a destination other than the default ( the worklist user
who originated the work for example), you attach a router to an assignment shape. For example, you
can send an assignment to an operator based upon availability, switch a worklist assignment to a
workbasket, or send an assignment to a specific operator based on the operator ID.
A router's behavior is governed by an activity rule. Activities contain instructions that automate
processing through a sequence of steps. During processing it usually references other rules to perform
its tasks. In this example, the router uses an activity called ToManager.
The router sends the assignment to an operator based on his or her operator ID. In this case it is
[email protected].
Decision — Automating flow decisions can significantly enhance overall process performance. It
eliminates the need for an operator to review relevant information about the work object and decide
which path it should be sent to based upon a set of business conditions or criteria. A decision shape is
associated with a decision rule such as a decision map, tree, or table, or you can create your own
Boolean expression. The decision process you choose uses the appropriate logic to compute an
outcome based upon property values associated with the work object.
In this example, the decision shape is associated with a decision tree rule named
OrderTotalNeedsApproval.
The path taken from the Needs Approval shape is based upon the outcome of the decision and the
values in the connectors leaving the Decision shape.
The rule uses a logical statement so that if the request total (an amount computed by the system based
on data entered in the work form) is greater than $100, the outcome is True.
Therefore, a request with an order total value of $1000 will produce an outcome of True and follow the
process path leading to the Manager Approval assignment.
Utility — Automating certain processing steps can also contribute greatly to process efficiency. A utility
updates or performs tasks on a work object without human interaction before advancing it to the
appropriate path. Standard utility processes include:
Attaching correspondence to the work object (a request in this case)
Sending correspondence
Saving it as an attachment to the request
Changing the status of a work object (not the status of an assignment)
Adding a record of this change to the history of the request.
In this example, the Update Status Completed utility uses an activity named UpdateStatus, which
automatically sets the request status to Resolved and writes this on the request's history record. In
addition, the system updates properties related to the work object so that processing can be finalized.
Most Utility shapes have one connector leaving it. When the Utility tasks are completed, the work can
advance on only one path. In some cases, the work object can advance on two or more paths based on
the outcome of the update.
In this example, the connector always advances the work object to the Set Confirmation Note utility, as
indicated in the Connector Properties panel.
The utility simply appends a text note to the work object's record indicating why it is resolved (either
completed or rejected). The request process is complete and no further processing occurs.
The Flow editor provides other tools to make your design session easier. To open these tools, use the
following tool buttons in the Visio toolbar:
Button Description
Turn on or turn off draft mode. While the flow rule is in draft mode it is known as a flow model.
You can reference rules and flow actions that are not yet defined.
When a flow is saved in Draft Mode, Process Commander validates whether rules exist for each
shape in the flow. A warning ( ) image marks an incomplete shape and appears on the
property panel next to the parameter in error. Hover over the shape to display the error
message.
You can execute a flow rule in draft mode in systems where the production level is set to a
value less than 5.
Display the normal Microsoft Visio toolbars, to access full Visio features for drawing, shape
alignment, colors, and so on.
Click once to display the toolbars. Click again to hide the toolbars.
When you save, Process Commander validates whether all shapes on the diagram can be
reached through connectors that leave either the Start shape or ticket shapes. It marks any
unreachable shapes with a gray background rather than a colored background. Incomplete
Button shapes are marked in red to indicate an error. Click the shape to review the error message. An
Description
error indicator ( ) also appears on the property panel next to the parameter in error.
Exit Visio editing and return to normal rule form editing. The system automatically uploads
your results from your workstation to the new or updated flow rule and changes the toolbar. As
you exit Visio, Process Commander checks the diagram and highlights any dangling
connectors.
When you create your work party rule, you specify party roles. Roles identify why a party is present,
and may determine which properties are defined for that party. Roles are associated with pre-existing
classes. Their properties can be used to define the user interface and the storage location of work party
role information within the work object.
There must be one role designated as the originator (the party who directly caused the work object to
exist). Most roles are categorized as interested parties. This typically means that they are kept
informed through correspondence as the work object progresses to completion. Correspondence can
include email, mail, or phone text.
For example, a work object for a customer complaint may contain these party roles:
Customer (a person)
Customer service representative (an employee of your organization)
Customer's spouse
Customer's lawyer
Your organization's lawyer
A vendor involved in the complaint
CoreParty — Contains a drop-down list of work parties associated with the work object.
PartyDisplay— Displays fields for collecting data defined for each work party.
Here is an example of how the work parties appear at runtime in the drop-down list on a new work form:
Selecting any one of these roles displays fields for collecting information about the role as shown here
for DeptManager:
Cases and Content slice ( ) — Click the icon on the Developer portal to access a summary
report of the the work party rules that apply to the work types in your application. Select Summary
from the drop-down list to display the report.
Application Explorer — Located in the Process category, double-click on Work Parties to display
a list of all the rules available in the current application:
1. In the Application Explorer, right-click on Process and select New > Work Parties.
A new Work Party rule dialog opens.
2. In the Applies To field, use SmartPrompt to select your desired work type. Enter Default in the
WorkParty field.
3. Click Create.
A work party rule form appears. Here is a sample of a completed rule form that is used for the New
Purchase Order work form example shown above.
The rule form contains the following fields on the Valid Parties tab:
Field Description
Enter a party role that will appear on the CoreParty section on the work form. It must not
Role
contain spaces or underscores.
Select a class derived from the Data-Party class, which are intended for work parties. For
Party example, you can enter Data-Party-Person for a customer role and Data-Party-Operator
Class for Process Commander users. In the above example, Employee is associated with Data-
Party-Operator and Accounting
Optionally, you can enter a short description of the Data- class. This description appears
next to the party role on the work object entry form when you execute the flow.
Party
Prompt
For example, you can enter Real Estate if the class distinguishes Real Estate Lawyers from
Family Lawyers. On the work form, you will see Lawyer — Real Estate.
Field Optionally you can use a model rule to cause the system to complete initial values for some
Description
Model fields on the PartyDisplay section.
Select the VOE (Visible on Entry) check box to cause the PartyDisplay section for this work
party role to appear when the work object entry form first displays. For example, you can
require that the originator is automatically displayed. If not selected, the user must select a
VOE?
role from a selection box.
Select to indicate that this party must be present in every new work object. This is usually
selected for the originator.
Required?
In the above example, Employee (the originator) is required.
Entering a party role in one or more Party fields lets you enter information for multiple
instances of that role. For example, if you enter party role "Dependent" in the Party field,
List
you can repeatedly open a PartyDisplay section for the role and collect information for each
Parties
That May dependent. By default, you can enter information in only one PartyDisplay section for each
Repeat role.
To help you capture information about work parties who are directly involved in processing the work
object within the system, you can use standard properties in class Data-Party-Operator such as
pyUserIdentifier, pyUserName, and so on. These are included in the CurrentOperator model.
In this example, the assignment is routed to the SalesManager work party (the role is listed in the work
party rule):
Note that the recipient work party must have the ability to interact with the work object (for example, a
user within the work pool and an operator ID that is enabled to receive work).
In this example, this work object is associated with the EntryOperator work party in the Data-Party-
Operator class. The properties associated with the class are listed in the Single Value properties panel.
In V5.5, this feature was enhanced to allow developers to interactively create subflow, flow action,
activity, connector, decision, and when rules during a test run of the flow.
Best Practice: Although a shape name can be blank, it is a good practice to always name the
shape. If you name the shape here, when you configure the rule on the fly from a test run, the
rule form defaults to the shape name, and the flow will recognize it on the next test run.
3. Click Save to save the flow and validate that the flow shapes are connected and identify
incomplete shapes. Warning symbols appear on the diagram next to an incomplete shape
and on the shape's property panel next to the parameter in error. Error text is displayed on
the panel when you hover-over the symbol.
To run the model, click the Run toolbar icon ( ). As the flow runs, the user interface displays the
harness and actions for rules that exist and are complete. It overrides incomplete shapes by either
moving to the next shape or displaying a substitute action that allows you to continue processing the
flow.
The following screen shots provide a V5.5 example of a test run of a draft RequestService flow that
generates override screens where rules and/or data parameters are missing for shapes or connectors.
V5.4 displays are similar but do not include the option to create the rule from the override screen.
When the flow moves from the EnterRequest assignment shape to the CanProcess decision shape using
a single undefined connector, the flow moves to the next step in the flow and an override screen is
displayed with a Submit button. Use the Click to create link to configure the missing flow action rule.
When the flow processes the undefined CanProcess decision shape with multiple connectors, an
override screen displays a selection list of the available connecting paths and a Submit button. Use the
Click to create link to configure the missing map value rule.
When the Reject connector is selected, an override screen for the RejectService activity shape displays
with a Submit button. Use the Click to create link to configure the missing activity rule.
In versions prior to the V4.2SP2 (SmartBuild) release, it was possible for a business process to be
developed that would misuse this functionality, resulting in a potential data integrity exposure.
The V4.2SP2 release introduces more stringent validation at both design time and runtime that makes it
more difficult to misuse the locking facility.
Overview
A key objective of the Version 4.2 SmartBuild release is to provide automatic best practice guidance
during the development . As part of this guidance, enhancements have been made to the product that
highlight circumstances where a design or implementation falls outside of the best practices. This
article discusses the enhancements to locking that facilitate the management of work objects, and
enforce best practice for transactions.
To prevent exposures to work object integrity, Process Commander provides a built-in work object
locking facility. In releases before the V4.2SP2 release, it was possible to misuse this functionality,
resulting in a potential data integrity exposure. V4.2SP2 introduces more stringent validation at design
and runtime that makes it less easy to misuse the locking facility. This Advanced Lock Management
feature catches the following two scenarios:
Obj-Save or Obj-Delete calls which operate on an objects of a class that has locking enabled, but
which do not hold a lock, will now fail.
Applications that lack proper error handling for these Obj-Save and Obj-Delete calls will now have
these errors flagged. Saving to the PegaRULES database will be prevented until the error is
handled.
If errors were ignored (in previous releases) it was possible to continue with the business process,
creating the possibility of saving contextually-inconsistent data. Advanced Locking keeps track of
the errors and does not let a business process Commit any data that is potentially inconsistent as a
result of the above condition.
These changes affect existing applications. It is strongly recommended that you thoroughly review and
test existing applications before using them in a production environment with Version 4.2 SmartBuild
Release, as Advanced Lock Management may detect issues in currently implemented business
processes that should be addressed.
At runtime, any Obj-Save or Obj-Delete step in an activity where a valid lock is not held on the instance
results in a step-status of FAIL. As a result of this failure, the Commit for this transaction also fails. In
addition, once such a failure has occurred, no further Commits may be executed for this user's session
(Thread),.
Follow t he following process to upgrade your applications and correct/prevent these errors:
2. If failure is due to locking, then determine the best upgrade for this particular locking requirement.
"...Commit error: A commit cannot be performed because a deferred save of an instance of class ...
failed..."
Using Tracer
In V4.2SP4, a new Tracer Event Type of Locking is available to assist in diagnosing lock events. Enable
this Event Type to track and display lock acquisitions and releases in the Tracer window when tracing a
process.
To enable this feature, on the Trace Options form, type Locking in the Event Type field, and click Add.
The Locking check box appears at the bottom of the Event Types to Trace section. Select the check
box for this option.
On the Tracer display, Event Types of Acquired Lock and Release Lock appear. Review these messages
to determine when locks are needed but not established, or when locks are released prematurely.
If locking is not enabled in the process being traced, the lack of locks and the subsequent errors are
easy to discover:
In addition, you must add error handling to the Obj-Save/Obj-Delete calls, to prevent future Commit
failures while processing (the runtime locking strategy). These two strategies are described below.
However, for work object processing, if two users have retrieved one work object from the database
(without locking it), and both make changes, then the user who saves second will overwrite the changes
made by the first user, possibly losing valuable data.
Thus, depending upon the type of processing being done, you may design different locking strategies:
Always lock
Sometimes lock
Locking not needed
If application users will enter work objects for which it is important that data is not overwritten, then
locking must be enabled. For any activities that perform either an Obj-Open, Obj-Open-by-Handle, or an
Obj-Delete, the Lock parameter must be checked. As a best practice, check the ReleaseOnCommit
check box as well.
A new activity Work-.WorkLock locks a work object. Using WorkLock has advantages over Obj-Open or
Obj-Open-by-Handle. Some work objects may be opened or viewed in read-only mode (not locked, but
put on the clipboard read-only). If the user then decides to open the work object to change it, it is
inefficient to return to the PegaRULES database to re-read this object. The WorkLock activity allows the
system to simply take out a lock and open the object that is already on the clipboard.
In addition, this activity has full error handling and reporting - if another user has acquired a lock on the
object after between the time it was opened in read-only mode and the time that the user required a
lock, the system displays a "Locked by requestor XXX"S message.
In this example, the WorkLock parameters are set to show the Lock harness information. If a user tries
to open a work object upon which another user has a lock, the Lock harness appears, with information
about the user who holds the lock:
There may be cases where locks are sometimes needed, but not always. For example, a company may
build an application where there are many tasks which are grouped under covers. Each cover may have
multiple tasks, which can be processed simultaneously by different users. The task objects must be
locked, to prevent data from being overwritten. However, if the cover is also locked when the task is
locked, then only one user may work on a task from that cover at a time, which may not be efficient. If
the cover is not being changed with every operation, then not locking the cover will allow multiple users
to work on tasks for that cover simultaneously.
Some operations, however, will need to update the cover. For those operations, it is important that the
cover also be locked, so that data is not overwritten. Thus, the cover needs to be locked on-the-fly only
for certain operations.
The V4.2SP2 method Obj-Refresh-And-Lock handles this situation. At runtime, the, Obj-Refresh-And-
Lock method queries the database to see if any requestor holds a lock on the requested object.
If no one has the lock, then Obj-Refresh-And-Lock acquires the lock for and continues.
If the page has changed (the timestamp in the database is different than the timestamp in the
page on the clipboard), then the page on the clipboard is discarded (including any changes that
may have been made), and the page in the database is locked and then put onto the clipboard. (It
is no longer possible to make changes to a page [on a class that requires it] without a lock.)
If someone else has acquired the lock for this item, the system displays an error message: "cannot
obtain lock as Requestor xxxxx already has a lock."
For some classes, locking may not be needed. For example, History- instances are stored by using a
timestamp from the server clock. Each instance is therefore stored with a unique key value; these
entries are never modified after they are initially created, so there is no danger of different operators
making conflicting changes to them. In this case, the locking may be turned off for this class (in the
Class form).
In unusual situations, you disable this feature. Using Advanced Lock Management is a best
practice. However, you can may choose to run in backward compatibility mode and allow
implementations that require relaxed transactional design principles.
By default, Advanced Lock Management is enabled in the pegarules.xml file in the Database node by
setting the transactionalLockManagement entry to advanced. Since this is default, the transactionalLockManagement entry
is not mentioned in the shipped pegarules.xml file.
To disable Advanced Lock Management, you must add the transactionalLockManagement element to
the database section in the pegarules.xml file, and set the value to standard :
<node name="database">
<map>
<entry key="drivers"
value="oracle.jdbc.OracleDriver;com.microsoft.jdbc.sqlserver.SQLServerDriver"/>
<entry key="storageVersion" value="5"/>
<entry key=" transactionalLockManagement" value="standard"/>
<node name="baseTable">
<map>
<entry key="name" value="pr4_base"/>
</map>
</node>
...
At runtime, other errors may occur, such as the lock required by a particular class instance already
being taken by another user. To handle these situations, and prevent them from creating Commit
failures, error handling must be added to activity processing.
This error handling is designed to handle runtime errors only, such as the locks being in use by another
user; it will not handle situations where the lock was not taken out at all (a design error).
In addition to these options, the application must handle messages about failures from the system.
Rollback
When a failure occurs in a deferred operation, it is important that the entire transaction be rolled
back. As an example, one transaction may take money out of a customer's checking account and
deposit it into their savings account. If the deposit into the savings account fails, the withdrawal from
the checking account must be rolled back, so the money doesn't just disappear from the account.
Every deferred operation which updates or deletes instances from the database (such as Obj-Save or
Obj-Delete) is put onto an internal deferred list, to be committed later (as opposed to the transactions
which have the Write Now parameter checked, which are committed immediately). The Rollback
method deletes the entire deferred list, thus rolling back that transaction. Most transactions use this
method of handling a run-time error.
NOTE: The Rollback method also releases any locks which were specified as ReleaseOnCommit.
When using any of the harness rules, if an error occurs, the rollback occurs automatically.
Retry the transaction
If the system reports a lock error ("lock already held by another"), then you can retry the transaction,
and allow processing to continue. For example, if the system reports that another user has the lock, the
application can present a window to the user stating something like, "This transaction was unable to
complete. Please try again," with a Submit button. If the lock were released by the other user before
the Submit was entered, then this user can acquire the lock and complete the transaction.
Make sure that your application handles situations where the second submit was still unsuccessful, and
determine how many tries are reasonable before failure and a Rollback.
Your activity can use the Obj-Save-Cancel activity method to remove one item from the deferred list.
This method will remove the failed Obj-Save from the deferred list, allowing the Commit to succeed.
This method could be used for objects where missing some data is not critical (such as log records or
history records).
Handling Messages
Process Commander offers several techniques available to handle error or failure messages,
In the following example, as part of the Rollback, the developer has determined that if the lock is not
obtained, then the activity should stop. The possibility that the lock will not be obtained is handled in
step 6, using Property-Set-Messages and the @getWorstMessage(tools) function. This function gets the
processing status error message from the system, and then Property-Set-Messages puts that error into
the specified Field . The work object form then presents this message to the user.
Commit failure
When running activities directly (rather than through a work-object form), rollback may not occur
(unless programmed into the activity). Thus, once an error occurs, no further Commits may be executed
- including the Commit that may be needed to update the activity to fix the problem. Therefore, once
the failing step in the activity is determined, you must log out and log back in, to clear the Commit error
and be able to correct and resave the activity.
Lock released by intermediate Commit prior to Obj-Save
This issue (frequently associated with Utility activities) is usually the result of unintended commits that
release a requestor's locks.
For example, as part of a work process, a second work object might be spun off from the main work
object. As part of the spinoff process, the second work object may be committed to the database. The
Commit process will commit all outstanding work to the database, so any data saved but not committed
by the main process (which is still executing) might be unintentionally committed, and the lock released
by the commit. Then when the Commit step is executed later in the main process, there is no lock
available, and an error occurs.
This issue can be diagnosed by using the new Tracer Event Type of Locking.
Flow processing typically handles its own commit operations, and it is rare that you need to augment
this. Two new V4.2SP2 activities spin-off an additional work object:
Work-.AddWork
Work-.AddCoveredWork
These activities do not perform Commits. Call them for all spin-off processes, rather than the old
activities Work-.Add and Work-.AddCovered, which do contain commits.
Reacquire locks
For instances other than work objects, when an intermediate commit is required for a particular object
instance (this is rare), then reacquire locks by using either:
The problem can occur when an Obj-Save for the newly-created object has Write Now checked, which
causes a commit; the actual Commit statement then requires a lock. The Write Now option is often
selected, but is not always necessary; simply uncheck the Write Now option if not needed, or
alternatively, acquire the lock prior to the Obj-Save operation.
6.2 offers an attractive alternative to Visio for process modeling, using notations that are based on
the Object Management Group's Business Process Modeling Notation (BPMN). The built-in Process
Modeler allows direct, graphical definition of flow elements and relationships, but doesn't require
that Microsoft Visio be installed on each developer's workstation. Process Modeler is a thin-client
editor with natural drag-and-drop operations you can use to create, arrange, and update flow
shapes and connectors. You can convert any Visio-based flow rule to use the new editor, or
continue to edit flows with Visio if preferred. Tabs on the flow form other than the Diagram tab are
the same for both types of flow editing. See:
Introducing Process Modeler, an alternative to Visio for creating and editing flows
How to create a screen flow
Webinar Archive: Process Modeler (September 1, 2011)
Where Am I? display — The Where-Am-I? display can present both Visio-based and Process
Modeler-based flows or a flow execution that involves a mix of both editing modes. The display is
localizable.
Process Engine API — A new landing page gadget provides access to activities, flow actions and
other facilities that can be used to support flow processing without user forms, such as straight-
thru-processing.
Data Transform in connector shapes — Optionally, in a connector shape, for flows defined in
Process Modeler, you can call a Data Transform rule (formerly known as model rule) to compute
property values when that connector is followed during a runtime flow execution.
Validation rules are enhanced so that each rule can define validation based on multiple "states"
of an important property such as work item status. This approach reduces the number of validation
rules in your application. When a user completes and submits a flow action, validation of user
inputs (and other values in the work item) can be based on a proposed future work item status,
rather than the current status. If the data passes validation, the work item status changes and the
action is complete.
To process elements of a Page Group in a specific order, you need to create a Page List data structure,
and create a reference to the properties within the Page Group.
Suggested Approach
To process select elements from a Page Group in a user-defined order:
1. If you have a Page Group already in your application, define a new Page List property in the same
class.
Define the Page List property to be of the same class as the Page Group, and set it as a Reference
Property.
2. Create a new activity in the same class as the Page Group that will cause the Page List to
reference the value of the properties in the Page Group. List the elements in the order they should
be processed, according to the Page List subscript.
3. In the flow:
1. Add a utility shape that calls the activity you created in step 2.
2. Add a Split-For-Each shape that calls the Page List property you created.
Select the Iterate option for the Join field.
Note: If your calling flow is a screen flow, the Split-For-Each shape defaults to the Iterate and
cannot be changed.
Note: Create the flow rule that is called within the Split-ForEach shape in the Applies To class
as the Class field. The steps of this flow will be repeated for each item in the Page List.
4. Create an activity to remove the Page List, using the Property-Remove method. Add a utility shape
to the end of the flow which calls this activity.
5. Your flow should now contain the following shapes:
Example
In this example, information about four companies is stored in a Page Group property, and elements are
displayed in the order they were created. Notice that the Customer values are not presented in
alphabetical order.
After the Page List has been populated, and the Split-For-Each shape has been reached, the elements
appear in alphabetical order. Note: This example was created using a screen flow and the standard
Work-.TreeNavigation harness to better illustrate the reordering.
Because the elements in the Page List reference the same elements as the Page Group, updates made
to the Page List are reflected in the Page Group.
How to control which of two assignments from one flow users
perform first
Summary
A developer asks: I have a flow containing a lot of assignments. For each assignment, I want a local
action that will spawn another assignment, and we don't want the first assignment finished until this
second one is completed.
Suggested Approach
There are two ways to handle this. You can either route the first assignment to a workbasket before
spawning the second assignment, or simply revise the instructions to say, "Waiting on xyz". Your
business needs will determine if the instructions-only approach is sufficient.
In either case, you need to do the following in your local action's post-processing activity:
When the assignment is completed, it should lead to a utility shape. The utility activity, using the flow
parameters, either transfers the assignment back to the user's worklist or changes the instruction text
back as appropriate.
Suggested Approach
The primary page of Routing, Assignment, and Notify activities is the work object, while everything else
in the flow — including property references in the activity parameters —uses the primary page of the
flow.
To obtain the correct SmartPrompt for Routing, Assignment, and Notify activities, fill in the Work Class
field on the Explore tab of the Flow form.
Assume you have a flow in the work class MyWork-Approvals in which you need to gain the approvals of
every work party.
2. Place the approval flow in the Data-Party class named (say) PartyApproval.
Perhaps you are using a special notify activity, which is located in the class MyWork-Approvals. For the
SmartPrompt in the PartyApproval flow to list this notify activity, list MyWork-Approvals in the flow rule's
Work Class field.
Remember that the primary page of all other rule references in the flow, such as a service level on the
assignment, or flow action rules, or property references in the parameters to the notify activity, are all
resolved in the Data-Party (interest page) class.
I've got embedded Data- class instances inside my work objects. I have some logic and flow
actions that I want to specialize for each of the subclasses on my Data- class. Are there any tricks
to writing flows that operate on embedded data classes, compared to those which operate on the
top-level work class?
In a Split-ForEach task, if I have processed enough and want to exit, how do I control that?
Suggested Approach
1. On the second tab of a Flow form, the value of the work class is indicated. It's important to specify
that correctly to get the right SmartPrompts in Visio. If you have a flow that's operating on the data
class, you define the flow rule in your data class. Flows can run on embedded pages. Set the Applies
To key part (pyClassName) of your flow to the class that it's running against, and if that's an embedded
page, then you specify that class. So you define the flow you're asking about in your Data- class.
And in your work class, if you have an embedded flow, you say it operates on the embedded page. The
Flow shape has three choices:
Current page
Embedded page
Different object.
Pick "embedded page". If you're doing a Split-ForEach, that's always on embedded Page List or Page Group.
2. Specify a When rule on the Split-ForEach properties. At runtime, the system evaluates the rule for
each embedded page. You can set a property and exit according to its value. On each iteration, the
When is iterated over, so the When rule needs to apply to the embedded page as well.
As soon as a user logs in, my application will have enough information about the user to create a
WHERE clause to be used in later invocations of our custom GetNextWork activity.
Where should I place or call the activity that creates this WHERE clause? In Data-Portal.Show?
Suggested Approach
The act of logging in causes execution of the standard activity Code-Security.ApplicationProfileSetup.
This activity —which is not marked as a final rule — provides a hook for the application to perform
whatever processing it needs. Into that activity you could call your activity that assembles the WHERE
clause you plan to use in later processing.
For example, you could accept or reject numerous purchase orders. To do this, use the bulk processing
feature.
This article shows you how to use the bulk processing feature available in the WorkManager portal.
Suggested Approach
1. In the Work Manager Portal Process Work workspace, expand My Process Actions.
2. You can perform bulk processes for the assignments on an operator worklist, or the assignments in
a workbasket. In the example, an operator has been selected from the Bulk process for pull-down
list and some purchase orders will be rejected.
3. When you select a flow action from the with action pull-down list, the list of available assignments
appears. Note that you select items in the top of the window, then select options for processing in
the bottom of the window.
4. You can expand each assignment by clicking the arrows on the left. Select some assignment to be
rejected by clicking the boxes on the left. Optionally, click the box at the top of the column in the
header to select all assignment.
5. Enter any required information for the action selected at the bottom of the window.
6. Optionally, enable Run in background to have the processing occur through the Pega-ProCom
agent.
For example, you could accept or reject numerous purchase orders. To do this, use the bulk processing
feature.
This article shows you how to use the bulk processing feature available in the 6.1 Manager portal. For
bulk processing in 5.4, see How to perform bulk processing for a large number of assignments.
Suggested Approach
1. In the Manager Portal expand Process Work on the left-hand side.
2. You can perform bulk processing of all assignments on an operator's worklist, or all assignments in
a workbasket, or selected assignments. You can apply one flow action to all the assignments, or to
only those assignments of a specific work type.
For example, if a manager needs to use the Reject flow action to reject assignments of all work
types, select the operator ( from the Bulk process for pull-down list. At the on work type pull-
down select All Work types. At the with action pull-down list, select Reject.
3. When you select a flow action from the with action pull-down list, the list of available assignments
appears. Select items in the top of the window, then select options for processing in the bottom of
the window.
4. Expand each assignment by clicking the arrows on the left. Select the individual assignments to be
rejected by clicking the checkboxes on the left. Optionally, click the box at the top of the column in
the header to select all assignments.
5. Enter any required information for the action selected at the bottom of the window.
6. Optionally, select the Run in background checkbox to have the processing occur through the Pega-
ProCom agent.
8. When processing is complete, the window displays with checks next to those assignments that
were successfully processed (assignments saved, in this example.)
9. If you display the worklist or workbasket of assignments again, the processed assignments no
longer appear.
10. If you selected Run in background, the Pega-ProCom agent sends to you an email confirmation of
the bulk process action results.
1. In the upper left area of the Manager portal, select the work pool name that contains the
assignments to be processed. Locate the row containing the label Bulk Process by Work Type.
2. Select one Work Type from the drop-down list. At the Bulk Processing screen, at the Create
Operator field enter the first two letters of the Operator's name to view a list of results. Select an
operator's name from the Create Operator list.
3. Enter the first two letters of the Operator's name at the Update Operator field to get a list of
results. Select an update operator from the Update Operator list. Note that the operator fields use
operator names and no ID's.
5. Select the Created After and Updated After dates. Click Update Filter to return search results.
6. Results are listed below. Click the checkbox to select a specific result, or click the checkbox in the
header to Select All. Click on any of the tabs to sort by ID, Subject, Status, Update Operator, or
Update Time.
1. In the upper left area of the Manager portal, select the work pool name that contains the
assignments to be processed. Locate the row containing the label Bulk process cover.
2. Select one Cover from the drop-down list, for example Build a Product.
3. Enter the first two letters of the Cover ID to view a list of results. Then Select a cover ID from the
Cover ID list. Click Process Cover. All Work Objects in a Cover are displayed in the Bulk Processing
screen.
1. In the upper left area of the Manager portal, select the work pool name that contains the
assignments to be processed. Locate the row containing the label Bulk process folder.
2. Select Process Folder. Enter the first two letters of the Folder ID to get a list of results. Then Select
a folder ID from the Folder ID list.
3. Click Process Folder. Results are displayed in the Bulk Processing screen.
Can Process Commander offer capabilities similar to the personal mailbox? Once I perform an
assignment that normally advances the flow to assign work to another operator (whose worklist I cannot
see), is there a way for me to "recall" that assignment, perhaps to update it further and then reassign
later?
Suggested Approach
Use a Split/Join flow shape in the flow to achieve this.
If you perform your assignment first, the second assignment for the other assignee is automatically
deleted. If the other assignee performs his or her assignment first, the one for you is automatically
deleted.
This also works for another business setting, where you are a bidder and the other assignee has
something for sale. You can revise your bid as often as you want, up until the seller accepts it.
However, by default, PRPC will always prevent this because the router logic assumes that work in a
screen flow must first be processed by a single user (an Operator ID); therefore, the default behavior
always routes work in screen flows initially to user worklists. You can work around the default behavior
and assign a screen flow initially to a workbasket by following the Suggested Approach.
Example Scenario
1. Create a screen flow with more than one assignment.
2. Add routing logic in the Start shape of the screen flow.
3. Label the Router activity as "ToWorkbasket" and specify the workbasket from the selection list.
4. Create a process flow with one assignment after the Start shape and one flow action on it.
5. Connect the screen flow created in Step 1 to the flow action. This is the main flow that you want to
create the work object.
6. Connect the flow End shape to the screen flow.
7. Run the main flow to test it.
8. At the first assignment, complete the fields of the work form displayed by the flow action and click
Submit.
9. See this error on the screen:
Flow <<em>name of Screen Flow</em>> had an error in step AssignmentSF4:
Unable to open assignee's Data-Admin-Operator-ID record <<em>Operator ID</em>>
Suggested Approach
Choose one of the following approaches.
Insert an assignment shape in the main flow to route it to the workbasket before the screen flow
subprocess. Then the application user can see and use the screen flow after he or she pulls the
work from the workbasket.
This approach creates an additional screen for the user to submit before entering the screen flow. If this
is not desirable, choose the second approach.
Avoid the extra screen created in the first approach: Create a flow action that performs
AutoSubmit when the user opens the assignment.
Additional Information
How to create a screen flow
Flow form, Editing in Process Modeler - Creating and editing screen flows
This approach can impact performance. With many operators, this function can execute many SQL
SELECT operations on the assignment table.
A developer asks: Our requirements are simpler than what this load balancing algorithm seems to offer.
We want to identify the available operator who has the fewest assignments — the shortest worklist. .
We're thinking of building a custom SQL query that joins the assignment and operator tables. Is that a
good approach?
Suggested Approach
The load balancing approach in the standard function may be more than you need.
In your case a more efficient way may be a custom SQL query that joins the count of assignments from
the assignment table with the operator table, ordering the operator table by the number of
assignments.
As you experiment with this approach, be sure to test what you build by checking the Performance tool
statistics, checking the load on the database, running some volume testing, and so on.
If your approach appears to be running well, such testing and analysis will show whether your
implementation is actually performing as well as you require.
For example, can I complete the first few steps, log off, then return later and complete the remaining
steps?
Suggested Approach
By default, screen flow steps are not saved to the PegaRULES database.
However, you can set an attribute (in the Start shape) when editing the flow rule that causes a
database save after each step in a screen flow.
You should turn this on as appropriate, but only where supporting such interim step saves are
necessary, as the database save operations add to processing workload.
Note that this approach causes each step to be treated as an assignment, which means that a line is
added to the work object history for each step.
We have a class with many properties that are relevant only based on other properties. The user
interface is a series of forms that branch depending on input data and fill in only the relevant properties.
However, application users want to jump back several steps to review and possibly change what they
entered. Based on their changed inputs, flow execution will branch to different forms and fill in new
properties.
Issue: The property values entered previously may no longer be valid. Validation and declarative rules
then produce undesired behavior, because the clipboard still holds stale property values.
At certain points, provide a flow action that takes users back to an earlier point in the processing.
Along the path back, invoke an activity that clears out the properties to be to reset or which could
negatively affect validation and or declarative rules.
Provide a local action that allows users to choose a value different from the current value. In such
a scenario, create a "clear-properties" activity that takes a parameter. Invoke that activity as the
flow action's "Before this Action. .." activity -- to force the clearing out of old values.
A function rule, pickBalancedOperator(), in the Routing library allows a routing activity to select an
operator (from those who belong to a specific work group) based on desired skills, required, skills, and
three other parameters.
The standard routing activities use this function rule. If desired, your application can call this function
using different parameters to factor in the size of each operator's current workload, whether they have
assignments that are past service level goals or deadlines, and assignment urgency or another numeric
property. Call pickBalancedOperator directly if you want to change how these factors are weighted.
The function uses advanced database retrieval techniques to achieve high performance. The function
returns a randomized list of the qualified operators if there is a tie. Usually (especially if worklists are
taken into account) the result is deterministic. If there are two users with the exact same workload and
the parameters are just right, it will randomly select one.
The Work–.ToSkilledGroup routing activity sends an assignment to a randomly selected operator within
a specific work groupwho:
1. Is available between the time the assignment starts and the time it is due
AND
2. Has the minimum skill proficiencies to complete the assignment
Work–.ToSkilledGroup uses the skill table pr_index_operatorskillsto search for an operator with sufficient
skill levels using the database side to minimize performance impact.
Work–.ToLeveledGroup
The Work–.ToLeveledGroup routing activity is similar to Work–.ToSkilledGroup except that it sends an
assignment to the operator within a specific work group while taking operator workload into account
and assigns work to the least busy operator who has the required skills.
Suggested Approach
Skill-based routing using Work–.ToSkilledGroup
Add the work group of the Operators you wish to include. Add the Skills and Skill Levels desired
(Skill levels range from 0 to 9 typically). In this case, German Skill Levels of 9 are desired and
French Skill Levels of 8 are Required.
4. Return to your flow and save any changes. The assignment will be routed to the Operator who is
available, has the appropriate skills (in this case, German Level 9 and French Level 8), and has the
least workload in the designated group.
In this example, there are three Operators in the workgroup [email protected] who meet the
prerequisite skills— [email protected], [email protected], and [email protected]—
possess the necessary language skills.
Of all the Operators in the [email protected] work group, [email protected] has the
appropriate levels of both German and French to complete the Assignment. The Assignment is therefore
routed to [email protected] for completion.
1. Save the Activity Work–.ToSkilledGroup into your ruleset. Expand row # 1. PropertiesValue is set to
pickBalancedOperator.
2. The routing function pickBalancedOperator accepts several parameters (viewable by clicking the
Parameters tab). pickBalancedOperator picks the operator who is available, has the appropriate
skills, and has the least load in the WorkGroup. The above values, 0, 0, 0 have not been set, and
therefore pickBalancedOperator will not take workload into account when routing. See below on
how to add these values.
3. To customize pickBalancedOperator, modify the following Parameters with a value of 1 — 10 in
your saved version of Work–.ToSkilledGroup:
pastGoalMultiplier ⁄ pastGoalDeadlineMultiplier– determine the workload of the user.
desiredSkillMultiplier – determines how important it is to assign the work to a user with
the desired skill.
The desired skill multiplier determines how important it is to assign the work to a user with the
desired skill. For example, if user A has a huge workload and the desired skill for an assignment
and user B has nothing in their worklist (but no desired skill), who should the assignment go to?
The formula is: if there are 5 desired skills and the multiplier is 10; any user who possesses the
desired skills has their effective total workload reduced by the number of desired skills they
possess * the desired skill multiplier.
One way your application can influence routing is with a back-to-back assignment. The informal term
back-to-back assignments describes the case when a user who completes an assignment for a specific
work object is then able to work on a second assignment for the same work object. The second
assignment may arise from the same flow execution or — in unusual situations — a different unrelated
flow execution.
When appropriate and feasible, back-to-back assignments are likely to improve user productivity
because recent exposure to the work object, its parties, and attachments makes coming up to speed
quicker. Your settings on the Action tab of the Flow Action form can increase the likelihood that
assignments will be performed back-to-back when possible.
Each time a user completes an assignment, your application can select and provide another assignment
for that user to work on next. By choosing the best, most appropriate assignment to work on next, your
application can promote user productivity, timeliness of processing, and customer satisfaction.
The following example flow requires a user to gather pharmacy information from a patient over the
phone and enter the information into the application. Once this information is submitted, the Call
Pharmacy assignment requires the user call the pharmacy to refill the patient's prescription. Since the
user gathered the pharmacy information in the Obtain Pharmacy Information assignment, it is
productive to have that user complete the Call Pharmacy assignment too.
Suggested Approach
To edit a flow action to enable back-to-back assignments:
1. Open the flow action rule for the flow action that, when chosen, is to redisplay the Perform harness
again with the second assignment.
2. From the Actions tab locate the After This Action section which defines processing that is to occur
after the user submits the action form.
As a best practice, select the Look for an assignment to perform? checkbox. In many situations,
two or more assignments may be open for one work object, assigned to the same person. When a
user who performs one of these assignments is also qualified to perform other assignments, it is
usually most efficient to have that user perform the assignments one after another, because the
work object is familiar.
The system only finds and presents assignments that the current user is qualified to perform and
that are available to be completed (that is, those forwhich the value of Assign-.pyActionTime is
past). The action time is only set when there is a service level specified for the assignment,
otherwise the action time is considered now.
For example, an assignment instructs a user to "Record the closing stock price". This assignment
can only be completed after 4 PM, when the market closes. If the assignment is created at 2 P.M.,
the action time is in the future. As a result, the system displays the Confirmation harness instead of
the Perform harness.
4. Once the Look for an assignment to perform? checkbox is selected three additional checkboxes
appear:
Checkbox Description
If... Then...
when that assignment is completed (using that flow action) and the flow leads
to another assignment (in the same flow or a subflow called by that flow), the
you select only the user sees the Perform harness displaying the default flow action for this new
Look for an assignment assignment, given that:
to perform? checkbox
the current user is the assigned operator
and
the assignment's action time is now or earlier.
you select the If not at runtime, after checking if a new assignment meets the above conditions and
found, look in other finding that it does not, Process Commander also checks if there are any other
flows on this work flows on the work object that have assignments assigned to the current
object? checkbox operator and that have reached their respective action times.
you select If not found, after exhausting all assignments on the work object, Process Commander
look in flows on the examines the cover object (if any) for assignments assigned to the current
cover object? checkbox operator and that have reached their action time.
you select the you
the search scope expands to examine the assignments in the workbaskets
select For each also
associated with the user's work group (through the Work Group field on the
consider assignments
Workbasket tab of the Workbasket form), as well as assignments on the user's
in workbasket?
worklist.
checkbox
This flow action references both a pre-processing activity and a post-processing activity. Only the post-
processing activity of the flow action is called.
Answer
Bulk processing does not open the work object when the flow action is displayed. Therefore, you should
not specify pre-processing activities in a flow action if you intend to use it with Bulk Processing.
Understand that Bulk Processing is also not intended for use with the following:
Circumstanced flows
Assignments on embedded pages
Like pre-processing activities, circumstanced flows cannot be bulk processed because the work object is
not opened when the flow action is displayed.
Related Topic
How to perform bulk processing for a large number of assignments
At what points in work object processing does the work object need to be named pyWorkPage?
At what points in work object processing does Process Commander rename my current work object
to the name pyWorkPage?
Suggested Approach
Here are some best practice, guardrail-aware observations.
pyWorkPage is a reserved page name. It is true that you would collide with it when you rename an object
to pyWorkPage. But other than that fact, you should ideally be oblivious to the fact that it even exists as a
name.
A key question is: when does your service processing end, and flow processing start? If you don't
manage those points, then your application can experience problems resulting from intertwining your
service processing with flow processing - and not only page name problems, but also transaction
integrity problems.
For the most part, you want to create a new work object and get into the flow as soon as you can. And if
you need to create multiple work objects, for example need to create a second work object while you're
already working on one in a flow, then your utility should not be concerned with pyWorkPage, but should
be completely independent —saving its objects using whatever page names it needs, and then finishing,
getting out of the picture, and letting flow processing take over.
The key challenge in designing an application with multiple work objects is how to do your non-flow
processing piecemeal or atomically, then get out of the way and return to flow processing to let flow
processing coordinate the multiple work objects. There aren't any points in work object processing
where you need explicitly to name your Page-New objects that are created by services pyWorkPage.
Also: If you do have multiple work objects and they participate in the same flow, then you must be
careful about locking and ensuring to make things part of the same transaction. See locking details in
Understanding V4.2 advanced lock management.
Related topics
If I use an activity and the Flow-New method to start the flow execution, then in the next activity step
set a ticket to get to the flow shape that I want processing to start, Process Commander still executes
the initial tasks in the flow.
Suggested Approach
Don't use tickets.
Make the first shape in a decision shape that determines which shape to advance to next.
Your process may have a flow that creates a work object, does some processing against that object,
and then creates a new object that is processed in a subflow. When the subflow completes, the new
work object is resolved and control returns to the calling flow where the original work object resumes
processing. This process can also be used when working in a cover flow, which creates a covered object
for the subflow.
You can automate the process using an activity in the top-level flow that creates a new work object and
calls the subflow. This configuration can provide the work user with a smoother transition between
steps during a work session. For example, the user can work on the first item and then go immediately
to work on the new one without having to step through an Add Work flow action.
This article shows you how to create this configuration using flows within the same Work class.
Suggested Approach
In this example, you create the following:
A top-level flow
An activity that creates a new page, adds work to it, and transfers it for execution.
A subflow where the new work is executed.
1. Create a flow called WorkOES in a work class (AlphaCorp-OrderEntrySystem in this example) and
add the shapes as shown here:
Do not enter the shape properties for the Utility and the Flow (subflow named BetaWorkOES)
shapes yet. An assignment shape is included so that the you can examine the object and the locks
on the clipboard before the object jumps to the second flow.
2. Create a flow called BetaWorkOES in the same work class. For testing purposes, this flow is simple
and needs only to have an assignment shape so that you can examine the clipboard and locks
when you run the flow.
3. Create a new activity called AddOESWork. The Utility shape in the main flow uses this activity to
create a new page, add work to it, and change the flow name.
4. On the Pages & Classes tab on the Activity form, enter pyTempWorkPage as the page name in your
work class.
5. On the Steps tab, create the steps as shown below. All use the same step page
(pyTempWorkPage).
Step 1: Enter method Page-New — Use the pyDefault model and your work class.
Step 2: Enter method Property-Set — Set .pyFlowName to double quotes ("").
Step 3: Enter method Call and standard activity AddWork (if the calling flow is a cover flow, use
AddCoveredWork instead).
Step 4: Enter method Property-Set — Set .pyFlowName to the name of the second flow,
"BetaOESWork."
After you have created the activity, do the following in the OESWork flow:
1. Select the Utility shape. In the Utility Properties panel, select AddOESWork in the Rule field and
click Apply.
2. Select the SubProcess shape and enter the information in the SubProcess Properties panel as
shown here:
Set Define Flow to On Another Work Item, select your work class, enter the page name
"pyTempWorkPage", set Flow Rule to BetaWorkOES, and click Apply.
3. Save the rule.
4. Start the WorkOES flow to test the configuration. Note the work object ID when the object is
created at the first assignment. When the object reaches the assignment shape on the second flow,
verify that the work object id has changed. For example, when you create a work object in
WorkOES, it appears as a new object in your worklist (for instance, W-21) and is locked, which you
can verify using View > System > Locks > My Locks. When you approve the work, a new object
starts in BetaWorkOES and the object ID changes to W-22. This object appears in the worklist and
is locked. W-21 should not appear either in the worklist or in the list of locked objects.
When W-22 is approved or rejected, W-21 resumes in the Review Work assignment in WorkOES.
This article explains how you create and modify these rules to control history write behavior.
Note: This feature does not apply to user-created history instances used in an Audit Note field or in a
History-Add method.
Suggested Approach
To modify the default behavior, do the following:
1. In the Rules by Type Explorer navigate to SysAdmin>System Settings and open the rule
instance Pega-ProCom.FilterHistoryas shown here:
Create an instance in your application RuleSet. Do not change the Owning RuleSet (
Pega-ProCom
This array contains five rows for production levels 1 (experimental) through 5 (production) and
correspond to the production level in the system data instance in class Data-Admin-System . The default
values used in the .FilterHistory rule are as follows:
For example, if your system is at production level 3, the default system settings rule .FilterHistory allows
all history records to be written. If you want to filter the history records, change the value in row 3 to
WRITE_SOME. The system settings rule will then use the decision tree rule .FilterHistory to determine
which records are written.
After you have made your edits, save the rule and run the History-Work-.resetFilterHistory activity
to make the changes effective. Alternatively, restart the server.
To optimize performance, it is a best practice to sort the most commonly used values by
frequency; that is, put the fields you use most at the top of the tree.
5. Note: Changes to these rules take effect going forward only. History instances already written
remain in the audit trail.
You can also take advantage of Smart Shape capabilities by designing your own shapes based on PRPC
standard activity APIs. This article describes how to create your own Smart Shape and add it to the
palette.
Example
In a student loan application, you can design a Smart Shape that automatically adds a history memo
indicating that an applicant has finished the student loan application process after the Education Details
flow action is complete.
Use the standard AddHistory activity as the basis for creating a new Add History Smart Shape:
Use the Smart Shape in your process to add the history memo:
Basic steps
To create the Smart Shape:
Create a section
1. Create a section named AddHistory in your application.
2. Drag and drop the Text Area control from the Basic palette onto the layout.
4. Add a row on the dialog's Action tab. The behavior dialog displays.
5. In the Action section, click the Select link and select Other > Run Script.
The Behavior dialog refreshes and displays the Run Script options.
6. Enter:
addApi in the Function Name field.
Utility and AddHistory in the Parameters fields.
14. Open the Advanced tab on the configuration dialog. In the Show area's When field, remove the
default never value and replace it with Always.
7. Click the Adds history to case shape to open its properties panel.
8. Enter the memo that displays in the case history after the Education Details action is processed.
Suggested Approach
When you create the pyDefault model in your application's Work- class, you do not need to repeat many
of the settings in the Work- pyDefault model, because to the Call Super Class Model check box causes
that model to execute first.
.pxUrgencyWorkClass — Specify how much urgency the work object starts with. For example, if
your application has two work classes, Enhancement and Bug, you may want work objects of the
Bug type to have a higher starting urgency.
.pyFlowName — (V3.2 and earlier) Set this in your model to identify the primary flow for this work
class. The primary flow is the one that is started on the work object when it is created.
.pySLAName — Specify a service level for the work object (as opposed to a service level for one
assignment) that monitors processing until the work object's status changes to "Resolved-xxx".
(Examine the standard service level rule Work-.OverallSLA for an example.) If you don't need this
capability, set this property value to "".
.pyWorkIDPrefix — Determine the prefix your work object IDs start with. For instance, the IDs of
work objects of the Enhancements work type could start with E- while IDs for Bugs start with B-.
.pyWorkIDSuffix — (Optional) This property causes the generated IDs to end in a specific suffix.
.pyStatusWork— The Work- pyDefault model sets the initial work status to "New". You may desire
something else, such as "Open" or "Pending-Qualification". Remember that pyStatusWork values
are enumerated as field value rules. If your application requires custom work statuses, you must
create a field value rule for each.
.pyStatusCustomerSat — Much like .pyStatusWork, the values for the customer satisfaction
property are enumerated as field value rules. The Work- pyDefault model also defaults this to
"New".
.pyConfirmationNote — Determine the text to appear on the Confirm harness after the work object
form is submitted. The Work- pyDefault model defaults this to "Thank you for your input".
.pyNotifyQuickStream — The flow action Work-.NotifyQuick uses the value of this property to
determine which correspondence to send. This is set to QuestionAboutItem in the Work- pyDefault
model.
Is there a way to represent this in a flow without wrapping the map value inside of an activity?
Suggested Approach
The decision flow shape is not really the right mechanism to use just to translate a value, because it
creates two or more outgoing connectors defining branch options based on the value.
Instead, use a Utility shape to execute a one-step activity that simply calls the Property-Map-Value
method.
At the end of this utility, I want to know that the work object will save successfully before moving on to
subsequent steps. If it won't save, then I'd like to somehow still save this work object data so that I can
later examine it to see what went wrong.
The flow execution continues (quickly reaching an EndFlow shape, which returns control to my
initial activity). The initial activity then performs a Commit method and finally sends a service
response.
Suggested Approach
The work object database table is not a natural or recommended place to log errors. If the
reason you wish to persist the work object — despite errors — is simply to collect forensic
evidence on the nature of its errors, consider the following alternative:
Use a separate Data- class (not the work object class), into instances of which you persist the
XML string of the data coming in from the service and a snapshot of the XML and its
generated page.
That way you'll have all the information in a format that can be digested in a lot of different
ways, in a place where saving it with errors is not an issue.
For work pages with errors, return to the service the name of the Data- class in which
you're capturing the forensic evidence, and the ID of the instance.
For work objects without errors, return to the service the class and the work object ID.
If you receive errors upon subsequent service manipulations of already persisted work
objects, you can use the same data class to persist the forensic evidence, and in addition
capture in that instance an image of the work object page in XML format.
Alternatively, you could place the forensic evidence into an embedded page for which the Do
not validate embedded pages field (on the Property rule form ) is specified, and then you
could save that flawed page without actually validating it.
Looping is sometimes accomplished by iterating through items in an activity. Although that’s effective,
many business users prefer the loop logic not be “hidden” in the activity. Similarly, placing the loop in a
subflow appears to “hide” the nature of the loop from the business users as well. By contrast, flow rules
are very visual and open.
Placing a loop inside of a flow can, however, result in a loop count error at runtime:
This flow has looped back to this shape too many times - it may be in an infinite loop.
For most Process Commander versions, you can change settings to increase the tolerance for infinite
loop executions. Details depend on your version.
Suggested Approach
The image below depicts an example of a loop that might be required in a flow rule. In the example,
batches are retrieved for all items in Get Contract Batch shape. When the last batch retrieval attempt
produces no items, the ContractExists? shape determines that loop is finished. The loop is incremented
in the Is It New Batch shape.
Practical considerations when designing a loop inside of a Flow Rule
In releases prior to v5.2, the infinite loop threshold setting is in the FlowFUA library. The
MaxFlowLoopCount is defaulted to 25
You can change this to a higher or lower value. Then regenerate the library to have this change take
effect.
In V5.2, V5.3 and V5.3SP1, the FlowFUA library is marked as Final. Looping through activities and
subflows is the only recourse.
This makes the flow diagram look very busy. Are there techniques that I can try to simplify the
appearance?
Suggested Approach
One approach calls for using fewer distinct assignments. Instead of using a separate assignment shape
for each workbasket, use When records on flow actions that determine if the flow action is available or
not to the current assignee, based on the workbasket that it's sitting on. You would have 6 flow actions
from the one assignment - 3 common flow actions, and the other 3 available (one or another) based on
the workbasket assigned. You can set the processing behind the connector to determine where the
assignment should be placed, but the Router should do the work, and then the When record will
determine which workbasket is to be used.
Another approach, distinct from that suggested above, is to introduce a new shape to make the
determination of which among several assignments to connect to. Use common connectors from that
shape to proceed to the separate assignments. That would work well if all of recipients could use within
reason the same HTML display within the flow action.
Suggested Approach
The following is a properties panel for a Split-ForEach shape in a screen flow:
The differences between these properties and those available when using a Split-ForEach shape in a
regular flow are described below.
Iterate mode only — The only flow processing mode is Iterate, which spawns flows for
elements of a Page Group or Page List property. Therefore, there is no Join field available in
the panel.
No When or Exit Iteration When options — Because screen flows do not support either of
these when conditions, these options are not available.
No Page Group processing options — Page Group properties are processed in an
indeterminate order and all pages are shown. Page Groups iterate in whatever order the
clipboard has the pages in (see example below). You cannot define different order as you
could in a regular flow. Therefore, the Pagegroup-specific iteration settings options
(Subscript Order, Exact Match?, and Remaining Pages) are not available.
Entry Point links — Links are displayed according to the type of harness you use. Links in a
perform or a screen flow harnesses display as a breadcrumb trail. A tree navigation screen
flow harness displays tree nodes. A tabbed screen flow harness displays a tab. If you click a
navigation link for the Split-ForEach shape, you return to the first step (assignment) and the
split runs again. You can click on links in the tree and breadcrumb harnesses to return to any
step (subflow) within the flow.
Header labels — When you select Subflow Entry Pts?, you can select a property in the Label
Property field. The property is used for the navigation labels used on subflow tab headers or
tree nodes.
You can create a property that will enable you to distinguish each of the pages in the tabs. For instance,
assume that your screen flow uses a Split-ForEach shape named “MySplit”. On the work object, three
pages are referenced by “MySplit”. You want each tab to have a different label rather than all of them
saying "MySplit". In this example, the Split-ForEach shape uses a Page Group property named
.aPageGroup. Each page of the Page Group has a property .aStringProp, which is used as the header
label property. Here is the Page Group on the work object:
The value of .aStringProp is used as each tab’s label. In the above example, the subscript order is RED,
BLUE, then GREEN. Here are the resulting tabs:
1. In a higher version, flow rules are updated, assignment tasks within them are modified or deleted,
but in production there are open work objects that reference those assignments.
2. In a higher version, rules are introduced that reference properties that do not exist on older work
objects, assignments, or other persisted objects.
We've thought of some ways to address these, but none feel comprehensive:
Suggested Approach
One way to address the situation you describe is to use the date circumstance feature and the
pxCreateDateTime value of the work object.
Date circumstancing lets you tie a rule to a date value in a property of the primary object.
By following this approach, you can limit the new flow rules to apply only to those work objects that are
created after a specific date.
An alternative suggestion: For no-longer-needed assignments in the higher versions of the flows, delete
the connectors that lead into discontinued assignments. But don't delete the assignment shapes
themselves.
You'll get the behavior you want because no more flow executions can reach theses assignments, but
any work objects already at those assignments can advance through the updated flow.
Related topics
Upgrading flows that are already in production
Failure to consider open work objects progressing through updated flows can result in problem flows,
stuck work objects, assignments in error, orphaned assignments, and other errors.
This article lists the advantages and disadvantages of four approaches to this design issue. Choose the
approach that best fits your needs.
Suggested Approach
Background
Pega Platform lets you "build for change." This means that existing assignments and work objects in the
system automatically pick up many of the latest changes to your flow rules.
For instance, if you update a flow rule to add an additional local action to an assignment shape, users
can perform the new local action for existing assignments in the production system, even assignments
that were created long before you changed the flow rule.
As you can see, the pzInsKey of the flow rule, which uniquely identifies the rule, is not stored, by design.
What sorts of changes to a flow can cause problems?
Removing an assignment shape for which one or more open assignments exist. The old
assignments become "orphans".
Replacing an assignment shape. If you remove an assignment from the flow diagram and later
replace it with a new assignment giving it the same name, internally it may have a distinct name.
Flow processing relies on an internal, Visio-generated name for each shape.
Removing or replacing the other wait points in the flow, such as the Subflow shape and the Split-
for-each shape. If you examine an embedded flow page of a work object, you'll see that it keeps
track of the shape ID in the parent flow.
No approach among the following is always best. Each configuration and business setting is is different
and so you must choose the one that best fits your needs.
Approach 1: Create distinct flow rules, either by choosing new flow names or by circumstancing,
leaving the old flow ones as they are.
Copy and clear the Creates a new work object check box on the old flow rules, and check the
Creates a new work object box on the new flow rules, so that new work objects are based only on the
new flows.
If you choose circumstancing, you probably want the default v to be the new flow (in the higher version
number), and the circumstanced version to be the older one. You'll probably want to use date
circumstancing as opposed to property circumstancing.
After these changes are moved into production, the New Work gadget will then list only the new flow
rules, and new work objects will thus execute using the new flows.
This is straightforward to implement, provided your flows aren't too deeply nested with
Advantages
subflows.
After a few releases, your set of flow rules will grow and maintenance may become
difficult, especially if a mix of assignments pointing to the various versions is in
Drawbacks
production. This approach is not recommended if your changes require you to modify 4+-
level deep subflows.
Approach 2: In the updated flow rules, leave all the old flow wait points unchanged. (Assignment,
Subprocess, Split-for-each). Drag these shapes off to one side.
To ensure that flow processing does not drop these shapes when the flow rule is saved, add a
placeholder ticket that connects to these shapes. Keep their outgoing connectors intact.
This way, new work objects never reach these outdated shapes, but the work objects at older
assignments will still follow the same path.
At some point later, you can run a report that checks whether the old assignments are no longer in use.
If so, you can then remove the flow wait points in the next version of the flow.
Advantages: This allows all your work object to use the same rule names across multiple versions
This may not be a feasible solution depending upon your configuration changes. This
Drawbacks:
approach produces cluttered Visio diagrams.
Approach 3: Add tickets in the newly modified flows to control where processing of each type of old
assignments is to resume processing. Run a bulk processing job that finds all the outdated assignments
in the system. For each assignment, the bulk processing should call Work-.OpenAndLockWork, then call
Work-.SetTicket on the work page.
Advantages: Leaves your flow rules clean. Best accomplished as an overnight job.
This approach may be impractical if the set of assignments is too large, or if there is no
moment when the background processing is guaranteed to acquire the necessary locks.
Drawbacks:
Also, an administrator may have to run this bulk processing activity several times until
all the assignments are successfully locked and updated.
Approach 4: Revert the user's RuleSet list to the original, lower versions when dealing with the older
assignments.
When the changes between versions go beyond just the flow rules, this is the only sure
Advantages:
approach.
This may easily have unintended consequences, where desirable fixes in the higher
Drawbacks: RuleSet version aren't executed because the user's RuleSet list is too low to include
them.
Conclusions
Using one or a mixture of these approaches allows you to successfully navigate the challenge of
updating flow rules that are already in production.
The most important thing to remember is to always test updated flow rules with existing work objects,
not just newly created work objects.
If you do encounter problems and some assignments become problem assignments, utilize the problem
assignment list view to make bulk fixes as necessary. In V5.1, you can access the problem assignment
list view from the Developer portal. Select View > System >Assignment Errors. ( In older versions you
can also access it from the Problem Work link on the Dashboard.)
NOTE: As noted above, if you remove an assignment shape and replace it with a new one but keep the
label the same, the internal Visio ID changes. In flow rules first saved before V4.2, the label and Visio ID
are often the same, but since V4.2 added assignment shapes have an ID like "ASSIGNMENT51".
So an error message such as "The task ‘Development’ cannot be found in this flow” can be confusing,
because you see that the label is unchanged, but the error reports the Visio ID, not the label.
Smart Shapes are purpose-built. They are quickly and easily implemented, and provide only the settings
that you need. Additionally, the Properties panels are easy to understand and to configure.
Example Usage
For instance, in PRPC 6.3, you would use a Utility to send an email by adding a Utility shape and
entering CorrNew in the Properties panel's Rule field. The appropriate Parameters settings
automatically populate the Utility tab. However, many of the settings are optional, rarely used, or
labeled in technical terms that may not be understood by all team members.
In contrast, to accomplish the same task in PRPC 7.1, you add a Send Email Smart Shape , which
presents only the settings that you will likely need in your configuration.
Adding Smart Shapes
When working in Process Modeler, display the Smart Shape palette by selecting the Flow Shapes icon
on the header , or by hovering your mouse pointer over the design canvas and selecting Add >
Smart Shapes:
The yellow shapes, such as Attach Content and Change Stage, represent utilities.
The blue shapes are processes.
When working in Case Designer Process Outline view, you can also select Smart Shapes from the step
tree in the left panel by hovering your mouse pointer over a process shape and extending the Add
Shape menu.
To view, update, or edit a Smart Shape's properties or parameters, hover your mouse pointer over
the shape, right-click, and select View Properties; or double-click the shape.
To see the shape's underlying activity or process, right-click a Smart Shape and select Open
Activity or Open Flow.
For example, here is an Add Email Smart Shape in its own Send Email process.
Attach Content
Use the Attach Content Smart Shape to automatically attach a file, URL, or note to a case.
For example, you can attach a file that has been defined in the case type record's Attachment Category.
In this example, a category named "VendorProfile" is associated with a Word document, as shown here:
The case type's category and file associated are defined on the case type record's Attachment
Categories tab.
Change Stage
For a case with stages, the Change Stage Smart Shape allows operators to route a case to either the
next stage or to a specified stage.
In this example, a case type process contains an Approval primary stage and a Rejection alternate
stage.
The Get Program Approval step on the Process Overview page includes a "Get Program Fund Owner
Approval" assignment. This is connected by a Reject flow action to the Change Stage Smart Shape
named "Rejection", as shown here:
The process is configured so that if a case is rejected, it is routed to the Change Stage Smart Shape. It
is defined to route the case to the Rejection stage.
When the operator processes an approval, the Reject flow action is available. When clicked, the case is
routed to the Change Rejection stage and undergoes the steps defined for it, Send Email and Reject.
Create Case
Use the Create Case Smart Shape to create a top case, a single subcase, or multiple subcases.
In this example, a Purchase Request case starts with a Request Entry stage followed by a Vendor
Addition, which contains a Create Vendors step:
The step process looks like this:
While entering line items in the Request Entry stage, the operator can add a new vendor for each item.
Here the operator adds a vendor named "Talon Inc.", which supplies desk chairs.
When Request Entry is complete, the system advances the case to the Vendor Addition stage.
The Create Vendors step (Create Case) automatically adds a subcase in case type Vendor Maintenance
for each added vendor:
A data transform record named "CopyVendorToVM" initializes the values of the Vendor Maintenance
subcase, which can be copied from the source page SourceLineItem. Note that the source page is
referenced in the Source column on the .VendorSearchValue row, as shown here:
The Vendor Maintenance subcase (VM-21) was created when the vendor Talon Inc was added to
the request for desk chairs. Here is how the subcase appears in the Purchase Request (PR-50) review
form:
In addition to using a Create Case Smart Shape to your process diagram, you can also add a Create a
Case single-step process to a stage from the Stages & Processes tab by adding a step and selecting
Case as the Step Type as shown below:
Create PDF
Use the Create PDF Smart Shape to convert a section to a PDF file and attach it to a case. In this
example, the Smart Shape is configured to convert the Approve section used in the Approve flow action.
When the process completes, the PDF appears as an attachment on the Review harness as shown here:
Opening the PDF displays the section and its contents:
Persist Case
Use the Persist Case shape in your flow when you would like the convert a case was created as a
temporary object to a permanent object by writing it to the database. You do not have to make any
entries in the property panel for this shape.
In this example, verifying a customer address on a purchase request form consists of two stages:
In Stage 1, the customer's address on the form is matched against the address on the department's
most current customer list.
If the addresses match, the temporary case is resolved—no further processing is necessary.
If the addresses do not match, the case is made permanent and advances to Stage 2.
The case begins Stage 1 as a temporary object in the Match data to customer list starting process.
Note that the Temporary object? checkbox is selected on the record's Process tab:
The process indicates that if the addresses do not match, the case is made permanent in the Persist
Case Smart Shape, and continues to Stage 2 for further research and updating.
Post to Pulse
Use the Post to Pulse utility to automatically create a post to the PegaPulse social activity stream.
Options enable you to associate the post with the current operator or an operator that you specify. You
can also associate the post with a case or allow only operators associated with a case to view the post.
When the process is complete, the post appears on the case's Review harness, as shown here:
Push Notification
Use the Push Notification Smart Shape in a flow to "push" a notification to users indicating that an
action is required.
In this example, placing the Push Notification Smart Shape before an assignment shape creates an
action that automatically sends a notification to the user's mobile device indicating that an appraisal is
ready for their review.
For more information on configuring an app to use push notifications, see How to use push notifications
with a hybrid mobile application.
Send Email
Use the Send Email Smart Shape to automatically generate an email. In this example, a standalone
process called Send Email is used in a Rejection stage.
The shape uses parameters defined in the flow record that enable you to reuse the flow in more than
one stage throughout your application.
On the Stages & Processes tab, open the Send Email step in the Rejection stage to show the parameter
settings. The Purchase Request Rejection template is used:
The Send Email process is also used as a step in the Procurement stage:
However, the Purchase Request Confirmation correspondence template is used in this context.
Update a Case
Use the Update a Case Smart Shape to apply a data transform that updates a single case (as defined by
its ID), or all child cases and their descendants.
In this example, a Create Case Smart Shape in the Purchase Request case type creates subcases in the
Purchase Order case type. Before this occurs, the Update Case shape applies a data transform to so
that all the subcases use the default addresses:
Here is how the Update Case parameters are set:
Cascading Approval
The Cascading Approval Smart Shape allows you to create an approval workflow in your application. Use
the Smart Shape's properties to create a list of approvers based on a Page List and property (Authority
Matrix), or manager settings in operator or work group records (Reporting Structure).
The Smart Shape's standard subprocesses named Cascading Approval (pxCascadingApproval) and Get
Approval (pyGetCascadingApproval) use the list to route cases. You can configure these processes to
suit your requirements by copying them into your application.
For example, the Cascading Approval properties use an Authority Matrix; the Page List and property are
determined by the results of a decision table.
For a detailed description of the Cascading Approval Smart Shape and how to use it in your application,
see Route cases for approval with the Cascading Approval Smart Shape.
Duplicate Search
The Duplicate Search Smart Shape (using the standard process pyDuplicateSearchCases ) compares a
case to other cases (with same case type) to find any potential duplicates.
The search is based on criteria in a Case Match rule, which you define by accessing the Duplicate
Search option on the Case Designer Details tab. In the Duplicate Search dialog, you create weighted
match conditions and specify a threshold for the sum of the conditions. When a case meets all of the
Must Match conditions and the threshold for the sum of the Weighted Match conditions, it meets the
criteria for being a potentially duplicate case.
The Duplicate Search process compares the current case to already-created cases of the same type to
search for potential duplicates. The flow action, pyDuplicateSearchCases, presents the list of potential
duplicate cases to the user who can determine if the cases are duplicates.
The users can choose to resolve the current case as a duplicate by selecting it from the list and
removing it from further processing.
If none are duplicates, users can cancel and go to the next step.
If there are no potential duplicates found, the user is not prompted, and the flow continues
processing.
Service level rules (SLA's) are associated with a particular work object. How can I build serve level rules
that instead operate against a workbasket?
We have a customer who wants to cause action based on the condition of a workbasket rather than any
particular item. For example, the service level might send an email to management when the
workbasket queue contains more than 25 items, or when the average time in the workbasket is more
than an hour.
Suggested Approach
Service level rules are designed to provide the features that your businesses need to in turn meet the
service level objectives that they commit to their clients.
Those operate on a work object or assignment basis and are not related to workbasket queue metrics.
What you need in this situation is a mechanism for alerts, not service level rules.
1. Create an agent that runs periodically and executes an activity that tests the conditions, such as
the length of the workbasket queue or the average wait time of the assignments in the queue.
2. If the agent detects an out-of-bounds condition, a best practice is to create a work object and route
that work object to the person who needs to take action.
Be careful when selecting the agents' execution interval. Consider related issues, such as how many
times you want a notice sent when a workbasket crosses the limits. One work object can deal with the
full set of alerts.
How to set SLA for next business day calculated in user's
time zone instead of GMT
Example
You want to define a Service Level Agreement (SLA) for the next business day when the current date
and time is not a business day. You want the SLA goal and deadline to be calculated in the application
user's time zone, not in GMT.
If incoming work is not during a business day or is after 3:00 p.m. on a business day, set the SLA
deadline to midnight of the next business day.
If incoming work is during a business day and prior to 3:00 p.m. on that day, set the SLA deadline
to midnight of that day.
All times are relative to the application user's time zone.
In PRPC 6.2 SP2, Pega-provided functionality cannot fulfill this requirement. However, you can write a
custom function rule (Rule-Utility-Function rule type) to get a specific time on a given day and use the
function in an activity. The custom function and the activity described in this article are available in
Pega 7.
Suggested approaches
Choose one of the following approaches:
Upgrade to Pega 7
1. From the PDN Deployment Guides page, specify any version of Pega 7.
2. Scroll to find and select the PegaRULES Process Commander Upgrade Guide, Version 7.1 or later
version guide.
Set SLA Goal to 8:00 p.m. on the next business day and
Set SLA Goal to 8:00 p.m. on the current business day and
Else
Set SLA Goal to 8:00 p.m. on the next business day and
Times must be calculated in the current user's time zone, not in GMT.
As an example, the following screen shows how to create the function, getSpecifiedTime, to perform the
business logic.
if (theInputDate == null)
return "";
calDate.setTime(theInputDate);
calDate.setTimeZone(TimeZone.getTimeZone(timezone));
calDate.set(Calendar.HOUR_OF_DAY, hours);
calDate.set(Calendar.MINUTE, minutes);
calDate.set(Calendar.SECOND, seconds);
calDate.clear(Calendar.MILLISECOND);
return dtu.formatDateTimeStamp(theOutputDate);
The following screens show how to call the getSpecifiedTime function in an activity called
figureOutSLATime. The SLA goal is 8:00 p.m.
Activity figureOutSLATime, Step 2, Get next business day goal and deadline
Activity figureOutSLATime, Step 3, If current time is not a business day
Activity figureOutSLATime, Step 5, If current time is after 3:00 p.m., use next business day (NBD) goal
and deadline
Activity figureOutSLATime, Step 6, Else use current time as goal and deadline
Suggested Approach
To specify the Service Level Late interval (the Passed Deadline event) using a property reference, follow
these steps:
1. In the Service Level work form of your application, under the General tab, specify the Passed
Deadline with non-zero values for the days, hours, minutes, and seconds.
These values won't be used because of actions taken in subsequent steps, but they must be
specified.
You might want to add another step to your deadline activity that sets
newAssignPage.pxLateTime to queuePage.pyMinimumDateTimeForProcessing and follow that
with an Obj-Save deferred of newAssignPage, as shown.
The Late time calculated from the values specified in the Service Level form is still set in the
Assignment in the property pxLateTime. However, the time that is set on the queuePage is
what matters in terms of when it executes; it may be confusing to have them differ.
3. Repeat this procedure similarly in the late activity if you need to specify multiple late events.
Additional Information
About Service Level rules
Deadline - definition
For example, if you create and test an service level rule that has a deadline three weeks from today,
you need to verify that the service level rule works and the resulting workflows process correctly.
Suggested Approach
You can configure a test environment on VMware to set the system date/time to a specific future
date/time required for testing and verifying a function or workflow.
To accomplish this, you need to have your entire environment running on VMware in one of the
following scenarios:
Run one large VMware session containing all the pieces of your environment (Process Commander,
application server, database, etc.).
Run multiple VMware sessions, each containing part of your environment.
By default, VMware synchronizes its system time with that of the host machine. You can disable this
synchronization to set the VMware date/time to any value necessary. To disable the system time,
access the virtual machine’s configuration file (.vmx) and set the following parameters to FALSE:
To set the system date, use the date/time function of your operating system
Related topics
and the Keeping a Fictitious Time In a Guest System section of the following PDF document:
http://www.vmware.com/pdf/vmware_timekeeping.pdf
I know service level rules are subject to normal rule resolution. But I have heard advice that service
level rules I create must have unique names so the Pega-ProCom agent finds them and runs them
correctly.
Suggested Approach
Some developers use distinct names that do not match any standard service level rules in the Pega-
ProCom RuleSet.
For example, rather than to override the Work-.Default service level rule, they choose names such as
Default2 or DefaultA.
Their rationale is that if, in a production or other non-development system, someone fails to put an
appropriate access group in the governing Pega-ProCom Agent Queue instance, users may never realize
that the service level rules executing are not from the application, but rather are the standard rules of
the same name.
If the names differ from standard rules and the same access group error is made, no service level rules
execute at all. This is likely to be noticed promptly.
Even if you choose to follow this approach, it doesn't imply that every service level name should be
unique. When you have a flow at an abstract class level and two different work classes that descend
from that, you should use one common service level name and allow rule resolution to determine the
correct service rule.
For example, consider a service level rule that only takes into account business days.
If an object is created at Friday, 3 PM in Los Angeles (Pacific Standard Time) and routed to a West Coast
office, then the service level timer starts immediately. On the other hand, if an object is created at
Friday, 3 PM in Los Angeles and routed to an East Coast office, the service level timer should start the
following Monday.
Can our application implement such service level processing (without going beyond the guardrails)?
Suggested Approach
Determining a service level rule based upon to whom an assignment is routed is antithetical to the way
assignments are created. Service level goals and deadlines are defined before the routing activity is
called.
That means in this case routing needs to be done before reaching the assignment. An acceptable way
to accomplish this is:
Your decision rule could also determine a value for the pyCalendar property on the work object. The
pyCalendar property determines which calendar data instance is used when performing business day
calculations in service level processing.
Typically, service levels are associated with individual assignments. However, what if the time spent on
individual assignments isn't important, but the entire process must be accomplished within a specific
amount of time? In this case, you can associate a service level rule with the work object itself.
How it Works
After a service level rule has been configured for a work type, whenever a work object from that class is
created, a standard flow named Work-.OverallSLA starts running in the background. In its default state,
the OverallSLA flow creates an assignment named SLAProcessing in the default workbasket for the operator's
organization.
This assignment stays open until the work object is resolved. The times specified in the work object's
service level are tracked against the SLAProcessing assignment. Additionally, the OverallSLA flow appears
in the clipboard as one of the executing flows on the pyWorkPage page:
The OverallSLA flow has few component parts. It has an assignment, a router, and a ticket. Examine this
flow to determine whether the design needs of your application require it to behave differently. For
example, it is likely that you will want to change the behavior of the router (ToOverallSLA). If so, save
the flow and its component parts into the appropriate RuleSet and make your changes there.
Suggested Approach
To associate a service level rule with work objects, you specify it in the model for the work class.
Complete the following steps:
1. Create the service level rule. (From the Rules by Type explorer, select Process > Service Level.)
Here's the Work-.Default service level rule.
2. Locate and open or create the pyDefault model rule for the work type of the work object for which you
created the service level rule (Rules by Type explorer > Technical > Model).
3. In the model rule, configure an entry for the pySLAName property that specifies the name of the
service level you created. Save the Model . For example:
Now when you create a work object of that work type, flow processing tracks the service level for the
work object against the SLAProcessing assignment. Note that because you specify the service level in a
model for the work class, the service level applies to all flows that create work objects of that class.
Note: Remember to verify that the OverallSLA flow routes the SLA assignments appropriately for your
application, to a person or workbasket that someone is monitoring..
Suggested Approach
1. Open the History and Attachments window for a work object or choose the local action Add
Attachments.
2. In the Attachments section, click New > Attach a Fileto display the screen for attaching new files.
3. Select the Drag and Drop Mode to checkbox to display the page icon under the Subjectfield.
4. Drag a file from your Windows Desktop or any folder in Windows Explorer onto the drop zone
within the page icon.
5. Hold the mouse pointer over the page icon until a plus sign indicates when you have reached the
target drop zone.
6. After you release the mouse button to drop the file, the file name displays in the File field
(confirming that the Windows Attachment Manager has a handle on the file).
When new file attachments are added, the property Data-WorkAttachFile.pyDragDropOrBrowse is set on
a model (pyDefault). This property determines which user interface control is displayed for adding
attachments to work objects: Browse or Drag and Drop Mode.
When the property pyDragDropOrBrowse on the pyWorkAttach page is set to false, the Browse
button displays in the work object window for adding attachments.
When the property pyDragDropOrBrowse on the pyWorkAttach page is set to true, the Drag and
Drop Mode checkbox displays in the work object window for adding attachments.
Viewing the Clipboard, you can see, for the class Data-WorkAttach-File the page pyWorkAttach, the
property pyDragDropOrBrowse.
Known limitations
The following limitations apply:
1. This feature only works with Microsoft Internet Explorer and Process Commander 5.5 SP1 with
HFix-2480 installed. The feature does not work with Firefox.
2. You can drag-and-drop attachments one file at a time. Drag-and-drop of multiple files is not
supported.
3. You can drag files only from the Windows desktop or from a folder in Windows Explorer. You
cannot drag an email message from Microsoft Outlook or from another email client into the drop
zone.
4. The file being dragged and dropped becomes a work object attachment. Customization is required
if you want to have the file attached elsewhere in your application.
This article describes which attachments are visible to users in application that involve covers.
Note: You can define covered work by adding a case type rule (Rule-Obj-CaseType) to a cover class.
See How to create an application using covers within covers.
Suggested Approach
Below is the class structure of a sample auto insurance case management application. Text in each box
shows the work object description, prefix, and work type.
In this example, the Vehicle Accident Claim top-level cover class contains a case type rule that covers
Bodily Injury and Vehicle Damage. Each of these classes contain a case type rule that covers their
covered work types. The case manager can access attachments to any of the inherited objects. Users at
lower levels in the application hierarchy can view attachments to their inherited work types.
The case manager created top-level case C-1 and then created CC1-1 and CC2-1. The user accessing
CC2-1 created PO-1. The user in CC2-1 created work objects VA-1 and VA-2. The work objects have
these attachments.
Because Vehicle Accident Claim is the parent or grandparent to all the work objects, the C-1 case
manager can open all the attachments.
However, a user who is accessing in work object CC2-1 can access documents attached to VA-1 and DA-
1 but not to PO-1. This objects is a child of CC1-1, which in turn is a child of C-1. CC1-1 is a peer of CC2-
1. Users accessing PO-1, DA-1, and VA-1 can only open their own attachments.
For example, assume that you have ten short movies (such as AVI files for Windows Media Player
format or SWF files in Adobe Flash form) that demonstrate how to fix common problems with a product
. In your application, you can store each movie in a binary file rule and then copy the appropriate movie
to a work object.
Your flow can include an activity that attaches a graphics file (including JPG, GIF, or PNG files) to a work
object. Storing the image or movie in a binary file rule (Rule-File-Binary rule type) provides the benefits
of version control, packaging, and inheritance. The example shown in the procedure below describes
how to build the activity and incorporate it into a flow.
Suggested Approach
In this example, assume that your flow includes a Utility shape that is to attach a binary file instance
called aboutlogo.gif.
Steps
1. Confirm that your Developer portal has the appropriate work pool selected.
2. Select the Application > New > Rule > Technical > Activity menu item. Enter the activity key
parts.
3. Select the Pages and Classes tab.
4. Create and enter a page name for the Rule-File-Binary and Data-WorkAttach-File classes (in this
example, binary and attachPagerespectively). The binary page will hold the binary file rule
containing the image.The attachPage page will hold the new work object attachment.
5. Open the Steps tab. In the first activity step, enter binary in the Step Page field and select method
Obj-open-by-handle, which copies the binary file rule to the clipboard.
6. Enter parameters for this method. For the InstanceHandle parameter, enter the handle of the
binary file rule in quotes. In this example, the handle is the value of the pzInsKey property "RULE-
FILE-Binary WEB ABOUTLOG!GIF #20070320T201009.615 GMT" .
Tip: You can quickly find the pzInsKey for a rule by clicking the RuleData toolbar button while
you are in the binary file rule form.
7. In the second activity step, enter the attachPage (class Data-WorkAttach-File) StepPage and
select Method Page-New.This creates an empty page to which you want to copy the image (which
is Base-64 encoded).
8. In the third activity step, on the attachPage select method Property-Set to copy the properties
from the binary file rule into the attachment.. In the first property row select the PropertiesName
.pxAttachName. In the PropertiesValue, select the page binary and its value .pyFileName. Append
the file extension (+".gif"). Add another property row, select .pyAttachStream, and enter the
second value .pyFileSource for the binary page
9. In the fourth activity step, select Obj-Save to create a database instance of attachPage. In the fifth
activity step, leave the Page field blank ( indicating the primary page). Select method Link-Objects.
In the LinkTo Page parameter enter the step page called attachPage. In LinkClass, select Link-
Attachment. This page when saved links the work object. to the new file attachment.
10. In the sixth activity step, enter Commit method to write the three instances to the PegaRULES
database and save the activity. It should look like this.
11. Run the activity to validate it. It is suggested that you select Run > Tracer to turn on the Tracer
utility.
12. After validating the activity, delete the Commit step (or make it a comment) since the Commit
happens automatically in a flow execution.
13. Test the flow that includes the activity. When processing completes, open the History and
Attachments display and verify that the image appears as a file attachment.
Because many applications prompt users to attach files such as correspondence to work objects, there
are several standard flow actions that create work object attachments. For example, the standard Work-
.AddAttachments flow action enables users to upload a single file and select a category for it while
Work-.AddMultipleAttachments enables user to select multiple files and choose a category for each.
However, there are times when you need to configure this kind of processing yourself. For example:
If the same file should be attached to every work object from a certain work type, there's no
reason to use a flow action and require user input.
If you are using the SmartForms feature to create PDF forms or documents or to process incoming
PDF forms, you might want to attach the original PDF to a work object. For information about this
feature, see Working with PDF Forms and Documents
If you are configuring an application that enables users to convert Word .doc files to PDF files, you
might need to modify one or more of the standard rules that support the standard Convert to PDF
flow action. This feature is also described in Working with PDF Forms and Documents.
How to configure an email service to use an email attachment as a work object attachment
describes another case in which you need to configure the attachment processing yourself.
This article describes how work object attachments are linked to work objects and explains how to
configure activities that attach files to work objects.
Suggested Approach
A file attachment for a work object is an instance of Data-WorkAttach-File. The attachment is connected
to its work object through a link object, an instance of Link-Attachment.
The work object must exist before you can create a work object attachment for it. That is, the work
object must be committed, not just saved to the deferred operations list with an Obj-Save method,
before you can attach something to it.
Creating attachments is a two-part process: an activity must create the attachment object (of class
Data-WorkAttach-File) and then it must create a link object (of class Link-Attachment) that connects the
attachment to the work object.
The file must be stream encoded to Base64 before it can be saved as an attachment.
If you are working with the SmartForms feature, you use the AttachEForm activity to save a PDF file
as a work object attachment – it takes care of the encoding.
When an email listener processes an email message, it Base64-encodes any email attachments
and puts them on a page named pyAttachments of class Data-ServiceMessage.
When a user creates an instance of Rule-File-Binary to store an image, PDF, or other binary file,
Process Commander Base64-encodes the file when the file is uploaded.
If the file that you want to attach to a work object has not already been encoded, you must configure
the activity to Base64-encode the file before it puts the file on the attachment page. You can use the
Encode() function from the PegaRULES.Default function library.
When the activity creates the attachment object (of class Data-WorkAttach-File), it must set values for
the following properties:
When the activity links the attachment to the work object, it should set a value for pyCategory on the
link object page. If you do not specify a category, files will be listed under the category “Other Files.”
Summary of Pages and Classes
pyWorkPage
pxRequestor (of class Code-Pega-Requestor). You use this page to obtain the user identifier of the
operator attaching the file when setting the value of pyAttachedBy
An attachment page of class Data-WorkAttachFile , typically named something like NewAttachment
If you are using the SmartForms feature, you also need a page of class Code-Pega-eForm.
Activities that create the attachment objects and link them to work objects include the following general
steps:
There are additional steps, depending on the kind of file and what your goals are. For example, if your
goal is to attach email attachments, you need a preliminary step that extracts the attachments from the
Data-ServiceMessage page. If you are attaching a file stored in the PegaRULES database, you need a
preliminary step that gets the file.
Note: Normal flow processing commits a work object after it has been updated, so in most cases you
should not include a step that commits the work object. If yours is a special case and you do need to
commit the work object during custom processing, use the standard activity Work-
.CommitWithErrorHandling. Do not use the Commit activity method. For more information about when
work objects are committed, see Designing Applications that Ensure Data Integrity.
Examples
In this example, an application supports customer service reps who take mortgage applications over the
phone. A standard privacy policy statement must be attached to all mortgage applications. Because the
privacy policy is the same for all applicants, there’s no reason to require the customer service reps to
manually attach it with a flow action. Instead, a utility activity attaches the privacy policy document to
approved mortgage work objects just before the end flow shape.
The privacy policy statement is a flat PDF file stored as a binary file rule (Rule-File-Binary).
Because the activity runs as the last step before the flow ends, it is clear that the work object
exists by the time the activity is invoked.
The first example shows how to use the activity methods Obj-Open-By-Handle and Link-Objects to
create a work object attachment. Figure 1 shows the Pages and Classes tab of the example activity.
In addition to the requestor page, the tab defines a page for the privacy policy binary file (PrivacyPolicy)
and the work object attachment page where the privacy policy file will be copied (AttachmentPage).
Step 1 uses the Obj-Open-By-Handle method to retrieve the privacy policy file from the PegaRULES
database; step 2 uses Property-Set to copy the file to the attachment page; step 3 saves the
attachment page; step 4 links the attachment to the work object with the Link-Objects method.
The InstanceHandle parameter is set to the value of the binary file rule's pzInsKey property.
Tip: To get the value of a rule's pzInsKey , open the rule, click the Rule Data toolbar button, and then
search for pzInsKey on the page that appears.
This step copies the file to the pyAttachStream property on the AttachmentPage. It also copies or sets
other property values that Process Commander needs to create a work object attachment:
pxAttachName, pxAttachedBy, pxAttachKey, pxRefObjectKey, and pyNote. Note the following:
The value set in pxAttachName includes the file type. If you do not specify a file extension for the
file, Process Commander cannot determine how to display the file when you click it in the
Attachments window of the work object.
The value specified for pyNote ensures that the value is within the character limit (60) for a note.
This step creates the link object that connects the new work object attachment to the work object. The
step page is specified as pyWorkPage. Therefore, the Link-Objects method creates a link object of class
Link-Attachment (LinkClass parameter) that links pyWorkPage to the AttachmentPage (LinkToPage
parameter), which now has the binary file (privacy policy).
To set additional properties on the link object page, use the LinkPageProperty and LinkPageValue
parameters. For example, to identify a category for the attachment, you specify the pyCategory
property as the LinkPageProperty and specify the category with the LinkPageValue parameter, as shown
in Figure 5.
The Link-Objects method writes the link operation to the deferred operations list. When the activity
finishes and returns control to the flow, normal flow processing commits the work object and the
attachment.
Because the privacy policy file is a PDF, you can use the eForm activities provided by the SmartForms
feature to attach the file to the work object. This example shows how to use the Code-Pega-
eForm.GetEformFromRuleFileBinary and Work-.AttachEForm activities.
Figure 6 shows what the Pages and Classes tab looks like:
As described in Working with PDF Forms and Documents, the Code-Pega-eForm class is a help class for
working with PDF files. The eForm activities use pages of this class as temporary storage locations for
the PDF files while manipulating the files.
Step 1 creates the eForm page; step 2 calls the GetEFormFromRuleFileBinary activity on the eForm
page; step 3 passes the PDF now located on the eForm page to the Work-.AttachEForm activity, while
creates the work object attachment.
This activity retrieves a PDF form or document from a binary file rule instance and puts it in the
pyEForm property on the eForm page. This activity takes the three keys to the binary rule as input
parameters: Application Name (typically webwb), File Name, and File Type
This activity retrieves the PDF file from the pyEForm property on the eForm page (PrivacyPolicyEForm)
and links it to the work object on pyWorkPage as a work object attachment. The input parameters for
this activity are those shown in Figure 9. Note the following:
Resources
The two activities used to illustrate this article are available here:
Suggested Approach
Work object attachments, like work object history, are in most situations considered a permanent and
unchangeable record of events, evidence, and facts. However, V5.2 includes two new privileges that
allow certain users to delete certain attachments:
For example, a file could be accidentally attached to the wrong work object. Using these capabilities, a
user could download the file, then detach it from the wrong work object, and later attach it to the
correct work object.
Standard access roles (such as PegaRULES:User4 and PegaRULES:WorkMgr4) do not provide either
privilege.
Also, these privileges do not allow users to delete correspondence items, which are permanent
records of materials sent to others.
2. Create or update an Access of Role to Object rule that has this access role as the first key part: and
Work-. as the second key part. On the Privilege tab, enter the privilege desired, and the production
level of your system. Save the Access of Role to Object form.
The Delete icon does not appear for other users who do not hold the privilege.
Tip: Through an Access When rule referenced in the Level field of the Access of Role to Object form, you
can further restrict in which situations the privilege is conveyed. For example, you could allow users to
delete attachments for open work objects but not resolved work objects.
Suggested Approach
The Word documents don't need to be copied over unless there is a compelling reason to do this.
Having only one copy of the documents saves space and eliminates any out-of-synch possibilities.
The work object attachment facilities seem a natural fit, especially if you will have multiple documents
associated with one work object. The external documents can be treated as attachments to the work
object. Any document that can be automatically opened by a URL link can be an attachment. (The
program — such as Word — that displays the document must reside on the user's Windows workstation
and be associated with the file type, such as DOC for Word.
A good way to implement attachment "by reference" is to use a URL that starts an activity. The activity
can perform whatever processing is required to open the actual document (including a Sybase SQL
query, if that's required.)
Work Parties
How to define new properties in a Data-Party class
Summary
A developer asks:
(1) I want to use as much out of the box as I can and override and extend the the work party classes.
However, I want to use State/Province for Province and not have the State property appear at all. How
can I do this?
(2) In addition, I'm having a problem with a summary view report on work objects: I want to display the
property .pyWorkParty(Candidate).pyFullName. I can get this property to display in a list view report,
but I can't save a summary view rule with this property specified in the Drill-Down tab. Why is this?
(3) I want users to be able to add a party in the middle of a flow. How do I do that?
Suggested Approach
(1) Standard Data-Party classes do not let you consolidate the State and Province lists. You must create
a custom party class, and put the required properties into that class.
(2) This problem with the drill-down from summary view report is a bug that has been previously
reported.
(3) You can add a party in the middle of a flow by adding a local flow action to each assignment This
lets users add a party anywhere in the flow they want.
For example, you can require that each interested party (who are Process Commander users with
Operator ID instances record his or her approval in a subflow, where the current process is resolved
only after all interested parties approve.
In this case, you identify the parties as interested and require their approval separately using a Split-
ForEach shape.
This article describes how to use the Split-ForEach flow shape with a repeating party, where subflows
are started for each party of a specific type ("interested"), but not for other parties in the work object.
Suggested Approach
To set up the Split-ForEach operation:
1. In the example, the approval of all the interested parties is required. You can copy and adapt
a standard approval flow rule for this case. Open the flow rule named Work-
.StandardApprovalsAll.
2. Save it to your application RuleSet.
3. Click the Flow Editor icon to start Visio editing of the flow.
4. Click the Split-ForEach shape to open the Split-ForEach Properties pane.
5. In the When field, select IsInterestedParty from the SmartPrompt list.
1. Click Apply.
2. Click the Save icon.
1. Open the flow to which you want to add the Split-ForEach operation.
2. Click the Flow Editor icon.
3. Drag a flow shape on to the diagram to be used as a subprocess.
4. Enter a text description in the Name field for the subprocess flow.
5. In the Flow Rule field, select the subflow flow that you just created from the SmartPrompt list.
6. Make sure connector shapes are added as appropriate. In the example, the shapes define approval
and disapproval statuses.
7. Click Apply.
8. Save the rule form.
This article describes V6.1 facilities. For a similar task using V5.2, see How to automatically add a work
party to a work object using the .addWorkObjectParty activity.
Suggested Approach
In the following example, you want to configure a purchase order flow so that managers have the email
address of the appropriate vendor work party when they receive orders for approval. Because the
vendor is not known when the order is first created, the person who creates the work object cannot
enter the party information in the New harness.
You want to automate the process so that after the order is confirmed, properties on the work object
identify the vendor and add a populated vendor work party section to the form. The area of interest in
the process looks like this:
Do the following:
1. Create a model in the Data-Party class (or a subclass of that class) that includes the required
properties pyWorkPartyUri , .pxPartyRole, .pyCorrPreferences(1) , .pyEmail1, , and .pyLabel.
properties. In this example, the values are copied from the vendor ID and shipping address on the
work page.
Note: Instead of using a model to set up property values, you can define a a page of the Data-
Party class (or a subclass of that class) as described in Step 5 below.
2. Add the vendor role, party class, and the associated model name in the application's work party
rule (Rule-Obj-WorkParties).
3. Open the flow in Visio, select the ReadyForApproval flow action that leaves the Confirm
assignment, and open the flow action rule by selecting the pencil icon.
4. On the rule's Action tab, enter the party role, party class, and party model in the After This Action
section and save the rule.
As an alternative to a model, enter a parameter value in the partyPage field to request the top-
level page that has been created.
5. The configuration is complete. Run the flow to test it.
Notes
This article describes V5.2 facilities. For a similar task using V6.1, see How to automatically add a work
party to a work object using the .addWorkObjectParty activity.
Suggested Approach
The standard activity Work-.addWorkObjectParty can add a party to an existing work object without user
interaction.
This activity accepts up to 7 parameters:
1. Open the flow rule in Visio. Add a Utility shape to the flow.
2. Complete the Utility Properties panel. In this example, a work party of role Broker is added.
3. If the new access role is not defined in the Rule-Obj-WorkParties rule for the work type update the
rule to include the new work party role.
4. Set up property values for the party in either (or both) of the following ways
Through a model in the Data-Party class (or a subclass of that class). You can identify the
model in the PartyModel parameter of the activity.
Through processing that creates a page of the Data-Party class (or a subclass of that class).
You can identify the page in the partyPage parameter of the activity.
pyWorkPartyUri
pyCorrPreferences(1)
pxPartyRole
pyLabel
pyEmail1
Notes
1. The Work-.addWorkObjectParty activity has an output parameter PartyIDUsed, which is available
to the calling activity if the parameter page is shared.
2. The activity is one of dozens in the Process Engine API. To see a list, open the Integration slice and
click the Process Engine API link. A similar standard routing activity Work-.ToNewWorkParty adds a
party (always of class Data-Party-Person) and routes an assignment to that party.
In V4.1 and early releases of V4.2, if a user in one organization tries to create a work object in a work
pool that already contains work objects from another organization,.the create operation completes and
assigns a work object ID ending with -1, but incorrectly overwrite the previous -1 object in the database
if it existed.
In V4.2SP3 and V4.2SP5, the create operation fails if the object with the same work object ID already
exists.
V4.2SP5 and later versions allow different organizations to use a common work pool.
However, if your system was upgraded to V4.2SP5 and work objects already exist from multiple
organizations ( or work object entry was ever attempted from multiple organizations) in one work pool,
then — immediately after upgrade —a special step is necessary to create the first V4.2SP5 work object.
Suggested Approach
The Data-UniqueID class supports the assignment of work object IDs. Consider this Class Explorer
display:
However, it is fair to guess that the Pegasystems.com organization, with 1721 entries, is the main
organization that was in use.
A user belonging to that organization should creating the first work object in an upgraded V4.2SP5
system When that first work object is created, Process Commander adds a new instance of in the Data-
UniqueID class with a blank organization and an ID of W-1722. (However, if the first work object is
added in V4.2SP5 from a user belonging to the pega.com organization, the new instance will have an ID
of W-4. This causes conflicts with existing work objects all the way up until 1722.)
If you want some users to execute V4.2SP5 rules and other users to execute V4.2SP4 rules, set the
access group for the V4.2SP4 users to reference version 04-02-62 of the standard RuleSets.
Related Topics
Use distinct work pools or work object prefixes for distinct organizations
By default, the standard activity Work-.GenerateID uses information in the Data-UniqueID class together
with a supplied prefix string and optional suffix string to assign a unique ID, by adding +1 to the
previous integer value saved in property Data-UniqueID.pyLastReservedID for the prefix. For example, if
the prefix is W-, the suffix is empty, and the last reserved ID is 10, the next work object ID is W-11.
Your application can use a different algorithm to generate pyID values that may be more meaningful to
the user community. Always design the logic carefully to ensure system-wide uniqueness. In this
example, the generated pyID value contains a single check-digit, which significantly reduces the chance
that manual updates to work objects will be made to an incorrect work object because of typing errors.
Suggested Approach
Users — even those who are careful and skilled typists — make errors when typing in sequences of
digits such as work object IDs. A common remedy — used for credit card numbers, Universal Product
Code numbers, and International Standard Book Numbers (ISBN) — is to include a computed check digit
at the beginning or end of the number. The check digit allows the system to detect common errors in
the input of a series of digits, such as a single mistyped digit, or the permutation of two successive
digits.
In this example application, pyID values are assigned in numerical sequence, but a check digit with
value 0, 1, ...9 or X is appended to the value, For example, the 14th work object has check digit 6, so is
identified as W-14-6 (not W-14). The 15th work object has check digit 3, and so is identified as W-15-3.
Procedure
1. Create a library rule to hold the function rule.
2. Create a function rule in the library to compute and append the check digit.
In this example, the function rule is named CheckSum. On the Parameters tab, identify the input
parameter, as a Java string, which corresponds to the Property type Text.
On the Java tab, enter code to compute a check digit. This example uses the Modulo-11 check sum
algorithm employed for the International Standard Book Number (ISBN) final digit. The final "digit" can
be the single character "X" or 0 to 9.
See //www.isbn.org/standards/home/isbn/international/html/usm4.htm.
Save the function rule form. On the Parameters tab, click Generate Library to compile the function rule.
Note: Since the ISBN algorithm treats digit positions differently, this Check Digit code first pads the
supplied value InputString with up to seven leading "0" characters, creating a starting value that is
always eight digits long.
As a result, the function will not work for starting values of more than 99,999,999. The leading zeros are
not included in the final result.
Open the standard activity Work-.GenerateID and save it into an application RuleSet, preserving the
Activity Name key part. In this example, the Applies To key part is set to the class group of the
application (MyCo-Emerald), so that the new algorithm is employed for only the work objects in that
class group.
On the Steps tab, insert a new step 3 before the existing Step 3.
In step 3, use a Property-Set method to save the default-generated .pyID value (excluding the leading
two-character prefix) in the local variable. Next, compute the string that includes the prefix, the
generated pyID value, and the check digit.
4. Test.
Save the Activity form. Enter a work object. Confirm that the check digit appears and is computed
correctly.
Using the Class Explorer, you can list the instances of the Data-UniqueID class to see the last ID
assigned for each prefix, to confirm that this change does not affect them. (Although the Data-UniqueID
class has property pyOrganization as a key part, that property is typically blank in Process Commander
applications built since V4.2SP5. This assures that work object IDs with a specific prefix and suffix are
unique system-wide, not just organization-wide.)
Notes
1. In this example, a dash character separates the check digit from the sequential number, Alternatively
the check digit can appear at the front of the sequential number, if separated by the leading zeros.
(Appending the check digit to the beginning or end of the sequence number without a dash or the
leading zeros does not assure uniqueness.)
2. In this example, the Applies To class of the activity is set to the class group of the application. To
have the check digit algorithm apply to all work objects in all applications, use Work- as the Applies To
class of the activity , and make sure the library, function rule, and activity belong to a RuleSet version
available to all applications.
3. This article presents only generation of the check digit. The same algorithm — if re-implemented in
JavaScript rather than Java —can be used to validate a user-typed check digit. Validation catches
errors earlier, as or before the user submits the form.
A client-side validation check also eliminates the network traffic, form processing, and database lookup
operations associated with the incorrect value.
4. For simplicity, the CheckDigit function in this example assumes that the prefix is two characters long.
To make the function more general, use the actual length of the prefix.
Related topics
1. What is the expected scope of a work object ID? Is it unique within an application and organization
but not assuredly unique system-wide, say within two organizations?
2. If multiple organizations separately use a single application, but work objects are never transferred
among them, what can be done in the application or deployment to prevent accidental work object
ID collisions and locking issues?
3. If multiple organizations use a single application, each entering new work, but work objects and
transferred among them, what can be done to prevent accidental work object ID collisions?
Suggested Approach
These answers are for V4.2:.
2. In the case described, no collision will occur because work objects are not being transferred.
3. If work objects share one class group, collisions will occur. Create a class group for each
organization, even though the application is shared.
Update: Beginning with applications created in V4.2SP5, work object numbers are assigned without
regard to organization, so the specific issue described above no longer occurs.
In V4.2SP5 and later, if both Southern Inc. and Western Corp. use the W- prefix, the work object IDs do
not collide. Rather, the work object IDs are issued in sequence, so that W-124 and W-126 may belong to
Southern and W-125 belongs to Western. See Can allow users in distinct organizations to share one
work pool.
However, to avoid human confusion, using distinct work pools and distinct prefixes is nonetheless a
good design practice.
Creating the same-numbered work object ("W-3") in two or more organizations causes the history
information for both items to be displayed in each work object. That is, history for the work object in
one organization appears incorrectly in the history for the work object of the other organization).
This problem does not occur if each organization uses a distinct work object ID prefixes for its work
objects. For example, the problem disappears if they agree to use the S- prefix for Southern Inc. and
and W- prefix for the Western Corp.
Update: Beginning with applications created in V4.2SP5, work object numbers are assigned without
regard to organization, so the specific issue described above no longer occurs.
In V4.2SP5 and later, if both Southern Inc. and Western Corp. use the W- prefix, the work object IDs do
not collide. Rather, the work object IDs are issued in sequence, so that W-124 and W-126 may belong to
Southern and W-125 belongs to Western. See Can allow users in distinct organizations to share one
work pool.
However, to avoid human confusion, using distinct work pools and distinct prefixes is nonetheless a
good design practice.
Solution
Workaround
To keep such history data correctly segregated, set up work pools (also known as class groups) for each
organization.
For example, the flow may reference a rule that is not found at runtime.
When this occurs, the system suspends the progress of that flow and notifies the a Flow Problem
operator, who can look into the nature of such a problem and correct the issue such that processing can
resume.
This article summarizes how to identify a Flow Problem operator for your applications.
Suggested Approach
The default processing sets the Problem Flow operator to an Administrator account in the requestor's
organization, such as "[email protected]". This means that all problems from all
applications are routed to a single worklist.
One suggested approach is for the activity to open a Data-EmailAccount instance from which to read
the Flow Problem Operator information (Account Type of FlowProblem), so that the
getFlowProblemOperator activity can remain static.
Suggested Approach
These actions are available to a administrator:
This action allows you to clean up the assignment pointers listed in the flows of the work object. Due to
various flow problems, these pointers may end up pointing to now-deleted assignments, or none at all.
The result is that the review harness may have extraneous assignments listed.
You'll first want to find the null assignment pointers. Use the Find radio buttons. Click Submit to access
a list of the assignment pointers.
To fix these, select the Fix radio buttons, and click Submit.
This action allows you to change a work object's class (work type) to another class in the same work
pool.
Caution: if a flow executing on the work object, and that flow isn't defined on the new class, a flow
problem will occur.
Add To a cover
This action allows you to add a work object to a cover. If the work object is already associated with a
cover, it is removed from the current cover. Enter the work object ID.
This action allows you to remove a work object from its cover. If you are fixing a cover, enter the ID of
the work object that you wish to remove.
When fixing a work object, his action appears only if the task belongs to a cover.
This article provides a guide as to what should be done with such assignments.
Suggested Approach
The flow results in an assignment routed to the Flow Problem Operator. This should be a user with the
role of system administrator.
To set the user to whom flow problem tasks are sent (routing and notification), override activity Work-
.getFlowProblemOperator.
Analyze the problem using the information in this article. If the original flow can proceed, select the first
action. When selecting the option "Return to (fixed) problem flow", you can can specify a new action to
take in place of one that caused the problem .
If the problem can't be fixed, the select the Cancel action. This deletes the Flow Problem assignment.
The administrator can then open the FixWork flow to run some additional utilities on it. See How to use
the FixWork flow to repair flow and assignment problems.
Routing Problem
a. Review the routing activity. Verify that all the properties are set, and all the expected parameters
have been passed to it. If the activity uses a decision rule, verify that all the inputs and outputs
are valid.
b. Does the operator ID instance exist? Was it deleted? While Process Commander does not always
require that an assignee exists, the routing activity can call additional functions based on the
assigned operator. Verify that it catches "Record Not Found" exceptions.
Once the underlying problem has been fixed, the FlowProblems assignment can be completed.
"The flow is stuck - none of the connectors from step X taken. No connector with status Y found."
a. The flow rule may have been revised so that X no longer leads to flow action Y .
b. Two users/processes update the same work object without synchronizing -- in other words, two
people are working on the same work object without talking to each other. Normally, Process
Commander uses locking to enforce synchronization. In rare situations, lock checking may be
incomplete of circumvented.
Troubleshooting
FAQ: Why does Visio 2007 always open in an external
application window and not within the Flow Editor?
Question
A developer asks: Why does Microsoft Visio 2007 open in an external application window and not in the
Process Commander Flow Editor?
After creating a flow rule, when I click the Flow Editor icon to open Visio within Process Commander,
the Flow Editor toolbar does not appear. I cannot perform Save, Save As, Add to Favorites, and other
actions.
Answer
Visio 2007 does not open in the Internet Explorer browser session because Microsoft Office 2007 sets
the BrowserFlags registry value for all products of the suite to open file types within the appropriate
Microsoft Office application and not within an Internet Explorer session.
Caution: The following procedure instructs you to edit the Microsoft Windows registry. Be very careful
when editing the registry. Editing mistakes in the registry can cause irreversible damage because the
registry contains the settings for the operating system and application components. Refer to the
Registry topic cited in the Microsoft References below for more information.
To enable Visio 2007 to open in the Process Commander Flow Editor, complete the following steps:
1. Make a backup copy of your Microsoft Windows registry. Refer to the Microsoft Support article
cited below if necessary.
2. To open the Registry Editor, from the Start menu on your Windows desktop, click Run. In the
Open field, type regedit and click OK.
Alternative: Open a command window. In the command line, change to the WIndows directory path
and type the command regedit.exe.
Microsoft References
A new window opens when you try to view a 2007 Microsoft Office program document in Windows
Internet Explorer 7 or Internet Explorer 8
Registry
Editing the Registry Hive For Your Image on the Target Device
When creating flows or sub-flows (flows called from the main flow) ensure you are using a unique name.
For example, if you name a flow using a reserved name, an exception error similar to the following
occurs:
Naming a flow ErrroHandler is an example of using a reserved name as a flow name. ErrorHandler is a
reserved name in Process Commander used to handle specific errors and exceptions.
Solution
If you have given a flow or sub-flow a non-unique name, you must use the Flow Explorer to locate and
rename the flows and sub-flows. Access the Flow Explorer in one of the following manners:
The group labeled Processes for the XX Application includes the Flow Explorer display, where XX is
the current work pool name.
To avoid this situation, check for common conditions that can cause this problem. Explicitly restarting
the flow at a specific assignment will allow processing of the work object to resume.
Explanation
A work object can have multiple assignments, which Process Commander synchronizes. Occasionally,
this synchronization of the work object and its assignments can be broken.
Here are the most common causes of a missing flow triggered by a break in the synchronization of the
work object and an assignment:
The application includes an activity that calls the Obj-Save method with the WriteNow parameter
set inside of the process flow.
This is a misuse of the WriteNow parameter. If the enclosing transaction then fails for
some reason, the object that was saved is now out of synch with the work object.
Deselect the WriteNow parameter if it is checked in the Obj-Save method of an activity
inside a process flow.
Suggested Approach
To restart the flow at an assignment, create an activity that uses Work-.RetryProblemFlow to restart the
flow and recreate the assignment:
Additional Information
When to set the WriteNow parameter in the Obj-Save and Obj-Delete methods
This error only occurs only at two of the many assignments in our flows. However there is very little
about these assignments that is out of the ordinary. Also, the audit trail entry shows that the
assignment has been completed. We also see the goal time was reached on this 'stale' assignment.
After more analysis, we found that when we turn off the Pega-ProCom agent during our stress test,
these errors do not occur. We think the Pega-ProCom agent and the user have a locking/committing
issue.
By the way, 80+% of assignments have goal times that are in the past even when they are first set, and
so run instantly.
Solution
If goal times are in the past when first set, the behavior you describe is expected,.
That can lead to the problems you report if the agent is never able to delete the assignment.
As a workaround, set the Lock Retries to zero in the service level rules.
** Save failed: A commit cannot be performed because a deferred save of an instance of class
Subscribe-CustServ-GCSReports failed: code:
SQLState:
Message:
I've checked the WriteNow parameter on the Obj-Save method to ensure that correspondence we send
includes the most recent work object data (rather than stale work object data.)
Solution
Using Write Now — also called "Save immediate" — can case data integrity issues that cause such
errors. You need to find a way to avoid using the Save immediate processing.
For example, when you first create a work object , you don't have a lock on it , so if you write it to the
database using Save-immediate, somebody else can acquire the object and start modifying it.
As a best practice, restructure your activities to eliminate use of Save immediate, not because V4.2SP3
forces you to, but to avoid such possible data integrity issues.
In flows, leave such transaction handling to underlying flow code. You need not make transaction
boundaries in your own activities that are called by flows. Process Commander validates utility activities
called by the flow and validation fails if there is use of Save immediate.
You need not use Save Immediate to address your concern about correspondence having stale work
object data. Correspondence will never contain stale data if your flow processing finishes the transaction
boundary.
Related topics
There was a problem switching to "Flow Edit" mode. Restore the "Form View" mode?
Solution
Explanation
These errors are due to Windows XP Service Pack 2. SP2 significantly tightened Internet security, which
creates a number of issues for Process Commander Version 4.2.
To support a rich user interface experience, Process Commander uses ActiveX components. Process
Commander also employs VBA macros in Excel Import manager and Visio editor content. These client
components conduct HTTP communications with the Process Commander server. XP SP2 changes some
behaviors in accessing results on HTTP requests, resulting in error conditions.
Additionally, under XP SP2, applications cannot be embedded into an HTML frame if this causes cross-
domain security violations. The V4.2 implementation launches a Visio session from a local Visio
document (located in a temp folder) and tries to embed it into a remote server-based HTML frame,
again causing errors.
Resolution
The application includes a model pyDefault in the class Work-Application-Mortgage with the Call
superclass model checkbox option selected..
The class Work- is the parent of Work-Application-. The class Work-Application- is the parent of Work-
Application-Mortgage. However, when the Work-Application-Mortgage.pyDefault rule executes, the
Work-Application- model is ignored.
Suggested Approach
After you save the Work-Application- model, you must also resave the model in the class Work-
Application-Mortgage.
Once saved, the Work-Application- model property settings become available to the Work-Application-
Mortgage model.
Process Commander identifies the superclass to be called at the time you save the Model rule form, not
at runtime.
Checking the PegaRULES logs, you see the Java Null Pointer Exception (NPE) for Java Server Page (JSP)
execution.
java.lang.NullPointerException
at com.pegarules.generated.html_section.ra_stream_pzruleformdiagram_<br />
...<br />
.property_Rule_Obj_Flow_pzOneViewerModelerErrorMaker<br />
(ra_stream_pzruleformdiagram_<br />
...
HFix-5328 for PRPC 6.2 SP1 and HFix-8368 for 6.2 SP2 correct this problem by introducing a new When
rule to skip code when a pyModelProcess property does not exist. After installing the hotfix appropriate
to the PRPC version you are using, you can open the forms of these older flow rules in the Designer
Studio of the newer PRPC release. However, when you try to edit and save these same flow rules, you
get the following error:
Errors
First error
Error in JSP execution
java.lang.NullPointerException
at com.pegarules.generated.hasMessages_<br />
060201_NkIYplDb9nAuJCnpX0y43A.hasMessages06_02_01<br />
(hasMessages_060201_NkIYplDb9nAuJCnpX0y43A.java:110)
at com.pegarules.generated.hasMessages_<br />
060201_NkIYplDb9nAuJCnpX0y43A.invoke<br />
(hasMessages_060201_NkIYplDb9nAuJCnpX0y43A.java:84)
at com.pega.pegarules.generation.internal.library.LibraryRuntime.<br />
resolveAndinvokeFunctionViaReflection(LibraryRuntime.java:131)
at com.pega.pegarules.generation.internal.library.LibraryRuntime.<br />
invokeLibraryRuntime(LibraryRuntime.java:108)
at com.pega.pegarules.session.internal.mgmt.Executable.<br />
invokeLibraryRuntime(Executable.java:7894)
at com.pega.pegarules.priv.generator.LibrarySupport.<br />
resolveAndInvokeFunctionViaReflection(LibrarySupport.java:181)
at com.pegarules.generated.pega_rules_default.<br />
hasMessages(pega_rules_default.java:2401)
at com.pegarules.generated.html_section.<br />
ra_stream_pzruleformdiagram_b26cff87a873175bbf9929c6b04dbcd6<br />
.when_2(ra_stream_pzruleformdiagram_<br />
b26cff87a873175bbf9929c6b04dbcd6.java:405)
at com.pegarules.generated.html_section.<br />
ra_stream_pzruleformdiagram_b26cff87a873175bbf9929c6b04dbcd6<br />
.property_Rule_Obj_Flow_pzOneViewerModelerErrorMaker<br />
(ra_stream_pzruleformdiagram_b26cff87a873175bbf9929c6b04dbcd6.java:457)
Second error
**Start shape must be connected to one or more shapes
Explanation
The first error and issue are caused by older flow rules using a property called pyTaskInfo. If you
migrate these older flows to a newer version of PRPC, the flows do not include the property
pyModelProcess. HFix-5328 (PRPC 6.2 SP1) and HFix-8368 (PRPC 6.2 SP2) correct this issue and allow
you to open the rule forms of older flows.
The second error and issue highlight that the missing pyModelProcess property is still a problem
because you cannot edit and save the older flow rules. You must convert these older flows into the
more modern Process Modeler flows.
Suggested approach
To convert older flow rules to newer Process Modeler flows, follow these steps:
1. Verify that your PRPC system has HFix-5328 for PRPC 6.2 SP1 or HFix-8368 for PRPC 6.2 SP2
installed:
Run the Update Manager System Scanner to check the inventory of installed hotfixes installed.
With the appropriate hotfix installed, you should be able to open the rule forms of older flows.
2. Save the activity Rule-Obj-Flow * OpenDefaults in your ruleset.
3. To this activity add Step 2, the method Call BPMConvertTaskIntoModel.
4. Specify the precondition @(Pega-RULES:Default).PageExists(.pyModelProcess").
5. Leave the rest of the activity as it is.
6. Open an affected flow and click View > Modeler to convert the flow to Process Modeler.
7. Confirm that the Process Modeler shapes now display for the flow.
You should now be able to edit and save the older flow rules.
These flow editor (Visio diagram) problems have been reported for Process Commander v6.1 SP2
running in non-English locales on Windows 7 64-bit, Apache Tomcat, IE8, and Visio 2007 SP2. You might
also encounter the problems using Process Commander v5.5 SP1 in non-English locales.
The Suggested Approach describes the local change that you can make until a hotfix or correction in a
future release of Process Commander is available.
Details
For flows generated by default using the Application Accelerator, you will encounter corruption of the
flow diagram in Visio if the operating system for your client machine specifies a non-English language
locale, specifically a non-English number format.
Non-English language locales use the period (.) as the thousand separator and the comma (,)
as the decimal separator, for example, 123.456.789,00.
English language locales use the comma (,) as the thousand separator and the period (.) as
the decimal separator, for example, 123,456,789.00.
When you open Visio to edit an Application Accelerator-generated flow, the blue overlay
masking the screen makes the flow diagram unusable.
Suggested Approach
1. Resolve your Visio diagram issues for the scenario described by temporarily changing the Regional
and Language Options for your client machine to any English locale.
1. Find the Regional and Language Options on the Control Panel. Make sure that the number setting
displays this format: 123,456,789.00
2. Save the diagram with the English setting applied. The diagram renders correctly.
3. Restore your original non-English setting to continue editing the flow with correct diagram display
and your correct regional setting.
Our application was configured to update the assignment related to this work object in the Before this
action activity of many local flow actions. These activities start when the user selects the associated
action in the action drop-down list. Note that this means the activity run without the user clicking
Submit on any of the forms.
This is causing many assignment errors to appear in the workbaskets where the object was originally
assigned. The instructions become:
We are using the Work-.Reassign activity. This activity attempts to remove the work basket assignment
(using the Obj-Delete method on the Assign-WorkBasket object) and create a new worklist assignment
(Obj-Save method on the Assign-Worklist object).
Solution
Explanation
Relationships between assignments and work objects are bidirectional. The assignment holds a
reference to the work object. The work object holds references to all existing assignments (under the
.pxFlow Page Group).
Updates to assignments from the Before this action activity of a flow action are unwise. In the case of
the scenario described, the assignment updates were being rolled back at this point. The problem is
that the updates to the work object were not being rolled back, resulting in the data inconsistency and
the Error: Assign Mismatch message.
Workaround
Do not reassign the work object before a user has performed any action on it. Defer updates to
assignments until after the actions have been performed by the user, . as part of the After this action
activity call. That way, the updates are fired when the user submits the local flow actions.
To address your business requirements, move the reassignment of the work objects to the After this
action activity. All transfers of assignments will occur correctly and no assignment errors will occur .
Still, the flow on the dashboard of my portal hasn't changed, and the newly changed Short Descriptions
for the flows don't appear in the New work select-list. The display is stale.
Solution
Your changes are saved and are operational.
You are not seeing them because cached versions exist on your client workstation.
For performance reasons, Process Commander performs extensive caching. Refresh buttons are
available at several locations where they're most likely to be needed.
For this case, use the Refresh Process link just to the right of the flow image on the Dashboard.
Administrators of PRPC systems that were upgraded from V5.1 to V5.5 SP1 report that work objects with
Service Level Agreements (SLAs) are not processed in a timely manner, causing a backup of work
queues. The problem was reported for systems using the Oracle database management system
configured in a clustered environment (multiple nodes). HFix-3536 for PRPC 5.5 SP1 (or HFix-4127 for
PRPC 6.1 SP2) corrects the processing of work objects using SLA agents to prevent the work queue from
backing up.
The hotfix delivers an SQL script that creates the new stored procedure for the Oracle database
management system: schemaFiles/schema/oracledate/proc/sppr_sys_reservequeueitem_b.sql
Problem Scenario
The system adds approximately 10,000 SLA queue records to the queue table for normal end-of-day
assignment processing. It takes an excessively long time (four and a half hours) for PRPC to complete
the processing of these records. Investigation of the SLA events across all nodes on which SLA agents
are running indicates that the SLA agents are not processing 500 records at a time as expected because
the Select query in the stored procedure sppr_sys_reservequeueitem_b is malfunctioning. SLA agents
are not processing the maximum quota of records.
Hotfix Details
HFix-3536 and HFix-4127 modify the stored procedure sppr_sys_reservequeueitem_b so that the Select
query gets ten (10) keys at a time and attempts to lock the work object for the current agent from the
top. Any given key in these ten (10) keys will be in one of three states:
1. The key is present and not locked. The work object is processed.
2. The key is present, but locked by another user. The work object is skipped and the key for the next
work object in queue is processed.
3. The key no longer exists. Another process reserved the work object, processed it, and deleted its
key.
Therefore, if the top-most key cannot be locked for this agent because of States 2 and 3, the stored
procedure will try to lock the next item.
Suggested Approach
You cannot use Update Manager to install either HFix-3536 or HFix-4127.
1. Contact Pegasystems Global Customer Support (GCS) and ask for HFix-3536 for PRPC 5.5 SP1 or
HFix-4127 for PRPC 6.1 SP2.
2. Stop the application server.
3. Drop sppr_sys_reservequeueitem_b stored procedure connecting to the database using database
tools.
4. Run the script file delivered in the hotfix attachment to create the new version of the stored
procedure: schemaFiles/schema/oracledate/proc/sppr_sys_reservequeueitem_b.sql
5. Start the application server.
Internet Explorer has encountered a problem and needs to close. We are sorry for the inconvenience.
When you log in to Process Commander again, you might notice loss of data caused by the termination
of the browser.
Internet Explorer 6.0 might terminate unexpectedly under the following circumstances:
While editing a flow rule in the Flow Editor, you click a flow shape to select it; then you right-click
to display the options menu.
If you are using the Developer portal menus, you click to display the menu drop-down list; then you
click a different top-level menu option without making a selection from the original menu option.
These are two examples of when IE termination might occur. You also might encounter this problem in
other scenarios.
Solution
The IE 6.0 termination is caused by the presence of Microsoft Security Update KB918899 (MS06-042),
Cumulative Update for Internet Explorer for Windows XP Service Pack 2.
1. Select Start > Control Panel to display the Control Panel window.
2. Open the Add or Remove Programs window.
NOTE: Ensure that the Show Updates checkbox at the top of the window is selected. This allows
you to view all the Microsoft updates installed on your machine.
3. Scroll down until you see the following entry:
Security Update for Windows XP (KB918899)
4. Select this entry and click Remove.
5. When the system finishes removing the update, close the Add or Remove Programs window and
the Control Panel.
You can now start Process Commander again and work without interruption from unexpected IE
termination.
Known problems with Microsoft Security Update KB918899 (MS06-042) led to the issuance of more
recent security updates. Ensure that your computer is set to receive notification of Microsoft Windows
Security Updates that are appropriate for your version of Microsoft Windows.
References
Article ID: 918899, MS06-042: Cumulative security update for Internet Explorer
To add detailed lock manager information to the Pega log, set the Logging Level Settings tool with this
category to Debug: com.pega.pegarules.engine.database.LockManagerImpl.
The symptoms seem to match those observed when the Pega configuration parameter commitNoWait is
used. This prconfig setting affects how Oracle treats commits.
Install HFix-8511 if your DEBUG logging of LockManagerImpl shows precisely the lost lock conditions
shown in the example.
Error
com.pega.pegarules.pub.database.LockGoneException: Save, Delete or Commit has failed because lock "<work record name>" is not held.
Explanation
The Pega-provided commitNoWait parameter affects how Oracle treats commits for the single
Transaction in flight. Independent of this setting, it is possible to configure Oracle using a global setting
to have this same behavior on every Transaction.
The Oracle NOWAIT and BATCH parameters cause the commitNoWait behavior regardless of any PRPC
settings that are specified to the contrary.
Running the following query displays the global status, which indicates whether you have to modify the
behavior to prevent locking errors and possibly other errors:
Example
If you turn on DEBUG logging in the LockManagerImpl class, you can see that the system has locked the
work record, the record has not been unlocked, and, when you check the record again, the system does
not see the lock.
In this example log, the highlighted lines show that the lock should be held.
Follow the suggested approach for installing HFix-8511 only when your scenario matches this example.
After you install the hotfix and specify the lockmanager parameters in the prconfig.xml file, the new
functionality is triggered during bulk processing of work assignments. You see a message in the
PegaRules log file about the first attempt to obtain the lock. The message is displayed without your
having to increase the debugging level.
If, after a delay cycle of one or more attempts, the lock is discovered, no further log entries or errors
occur.
Suggested approaches
Best practice
Upgrade to Pega 7.1.7 or a later release.
Alternative approach
If you are using PRPC 6.1 SP2, do the following steps:
PRPC 6.1 SP2 HFix-8511, Exception on backend while assigning WorkObject to users
HFix-8511 introduces new settings in the prconfig.xml file to allow a retry when the lock is not held
during a database COMMIT. The hotfix allows you to turn off the Oracle commitNoWait parameter by
customizing the wait time and the number of attempts to retrieve a lock.
For example, you can specify parameters that retrieve a lost lock for a work item after 100 milliseconds
and 10 attempts.
During a COMMIT (or a SAVE-IMMEDIATE), the system determines whether the required lock on the
object being committed is missing. If the lock is missing, the new code does the following actions:
1. Pauses for the specified number of milliseconds before looking again for the lock.
2. Retries the specified number of times before either seeing the lock and proceeding with the
COMMIT or throwing an exception with the LockGoneException message.
After you install HFix-8511, specify the following parameters in the prconfig.xml file:
lockmanager/numberOfRetryAttempts 10
With these two values specified, the system waits up to five extra seconds before failing the COMMIT
because of the lost lock.
During investigation, additional logging in the log files revealed that the system was encountering the
LockGoneException quite frequently, entering the retry loop, and always successfully seeing the lock
after one wait interval of 0.5 seconds.
The area instead displays an HTML error page (the generic "Internet Explorer cannot display the
webpage" message with no error number).
Solution
Workaround
The problem is caused by an outdated OCX control file (ActiveX). If you remove this outdated file, a
replacement is automatically downloaded and installed on the next login.
1. Log off..
2. Navigate to C:\Windows\Downloaded Program Files.
3. Remove the Visio control, prVisioInterface.EmVisioInterface. You can remove all PRPC control files (pr*) and
the most current versions will be downloaded
Next, verify that your Internet Explorer settings permit ActiveX controls to be downloaded and enabled
on your machine:
1. Open Internet Explorer. Choose Tools > Options. On the Security tab, select Local Intranet, and
click Custom Level.
2. In the ActiveX controls and plug-ins section, verify that the radio buttons for these options are set
to Enable or Prompt:
Verify that the radio button for this option is set to Enable:
The Visio Flow Editor’s Shape Properties settings box will display properly the next time you edit a flow
rule.
After renaming a class that is a class group (work pool), application users find that no starter flows
appear in the New Work gadget on the navigation panel of the WorkUser or WorkManager portal — the
work pool selector drop-down list is empty:
Background
To rename a class, select Tools > Classes > Rename a Class. When you rename a class, the wizard
automatically changes references to the old class name to the new class names in every (unlocked)
RuleSet and every (unlocked) version. Each renamed rule belongs to the same RuleSet and Version as
the original rule.
References to the old class name (if any) in the following data class instances are not automatically
renamed:
Data-Admin-DB-ClassGroup
Data-Admin-DB-Table
Data-Admin-Operator-AccessGroup
Solution
To resolve the issue:
- Data-Admin-DB-ClassGroup
- Data-Admin-DB-Table
Explanation
Versions of the Process Modeler included in PRPC 6.2 (when it was first introduced) through PRPC 6.3
SP1 do not evaluate property references added to the Work Status field under the Status tab of the
Assignment shape.
Suggested Approach
Starting with PRPC 7.1, property references added to the Work Status field under the Status tab of the
Assignment shape will evaluate properly to return the value of the property from the clipboard.
If you are running the Process Modeler in PRPC releases from 6.2 through 6.3 SP1, you can use one of
the suggested options below to resolve this issue.
Option 1
The simplest approach is to use a Utility shape before you arrive at the Assignment. The Utility calls the
standard out-of-the-box UpdateStatus activity, where you can pass the property reference as a
parameter.
Option 2
1. Save the UpdateStatus activity into an open ruleset version.
2. Add a step after Step 5 of the UpdateStatus activity.
3. Copy the below Java and paste it into the newly created Java Step (now Step 6).
String status = tools.getParamValue("StatusWork");<br />
if(status.contains(".")){<br />
status = myStepPage.getString(status);<br />
myStepPage.putString("pyStatusWork",status);<br />
}<br />
else{<br />
OriginalStatus = myStepPage.getString("pyStatusWork");<br />
myStepPage.putString("pyStatusWork",status);<br />
}
The Page property reference (for example, Pg1.Prop1) that you added to the Work Status field under the
Status tab of the Assignment shape properties will now appropriately return the value of the property
from the clipboard.
Additional Information
Flow form - Process Modeler - Editing Assignment shapes
Examples
Incorrect Rendering of a Flow in Process Modeler
It is possible that just this setting was changed, or it could be the result of someone changing the
Security settings for the Local Intranet zone from the default of Medium-low to High.
Suggested Approach
In some cases, browser security settings may be tightened temporarily to mitigate the risks associated
with a new and publicly disclosed vulnerability in Internet Explorer (IE). Prior to following the steps
below to change your browser security settings, check with your Information Technology (IT)
department to ensure that you have the most up-to-date IE security updates installed.
PRPC’s Process Modeler flow editor will now correctly render the shapes and connectors for your flow
diagram.
Additional Information
Introducing Process Modeler, an alternative to Visio for creating and editing flows
Solution
Workaround
Check that you have a supported version of msxml.dll in your C:/Windows/System32 directory. The msxml.dll
version 1.0 - 2.5 SP3 is no longer supported by Microsoft. The supported versions are msxml3.dll and
higher.
Related topics
The following Microsoft Knowledge base article describes how to port to supported versions msxml3.dll
or higher versions:
http://support.microsoft.com/default.aspx?scid=kb;en-us;823417
If your system includes flow rules saved in Visio 2003 but some developers have only Visio 2002, a
workaround procedure is available..
Resolution
If a flow rule is created and saved in Visio 2003, and then later is opened, changed, and saved again in
Visio 2003, no problems occur. However, for both types of flows (External or Embedded) that are saved
in Visio 2003, if a user with Visio 2002 tries to open those flow rules, the following message appears:
This flow was last saved with Visio 2003. It cannot be edited in Visio 2002.
If your development team uses both Visio 2003 and Visio 2002 to edit flows, then when saving flows in
Visio 2003m select the Visio 2002 Format choice:
Explanation
Process Commander uses ActiveX controls to provide a rich experience for developers. For these
controls to seamlessly integrate with applications like Microsoft Visio 2003 (for flow editing), Internet
Explorer must grant these controls more access to the client workstation than is typically allowed for
external, World Wide Web sites.
For most internal sites, where the hostname is a single word identifier, Internet Explorer classifies the
site as belong to a Local intranet, and allows ActiveX controls to run with greater permissions. This
designation appears in small type at the bottom right of the browser window:
http://pegarulesserver:8080/prweb/PRServlet
However, if the URL reference to a server is further qualified with a domain, or the IP address is used,
Internet Explorer assumes that Process Commander is hosted by an external Internet site (whether or
not the address is actually external), and runs the ActiveX controls with far more restrictions. Examples:
With this URL setup, Visio errors may occur. When you click the Edit Flow External button in the Explore
tab of the Flow definition to open a flow in Visio (or just double-click the Flow form to open Visio), the
flow may take a long time to appear. In addition, the following error may appear:
This error occurs because Internet Explorer switches to "external environment" mode.
Solution
In order to use Process Commander ActiveX controls with an IP address or a domain-qualified URL, you
must add that address of the Process Commander server to the list of Trusted Sites on each client
workstation.
The procedure below uses an IP address; the steps are the same for a domain-qualified URL.
4. Enter the appropriate IP address into the Trusted sites box, and click Add.The site is now one of the
Trusted web sites.
If your Process Commander server does not use secure HTTP — the URL starts with "http" not "https" —
clear the box next to Require server verification (https:) for all sites in this zone.
5. Click OK , and then click OK on the next form to save the changes.
Even after exiting from Process Commander, the next time I open Visio through Process Commander,
the shapes stencil remains stuck in the middle of the screen.
If I open Visio in standalone mode, it works fine. How do I get Visio to work with my flow rules?
Solution
Visio writes a temporary file on your local drive that records the positioning of the shapes stencil
window.
When Visio starts again, it remembers the size and position of the shapes window and the window is
frozen.
To fix this issue, you need to find and delete the temporary file.
1. Search for the file in the C:\documents and settings directory tree using an extension of ".vst". Look for
files that have been updated in the last few days or when the problem first started.
2. Rename the file, then restart Visio to see if the issue is solved. If the issue reoccurs, then you
picked the wrong VST file. Rename the VST file back to its original name, and try another VST file.
3. Repeat until you rename the relevant file and clear the stencil from appearing.
If I have a work type that in an application that has work objects created both by users from the portal
and from an (unauthenticated) SOAP Service the two entry techniques should have separate work
object counters.
But if I create 3 work objects from the portal, the are numbered W-1, W-2 and W-3. But then when I
create the first one using the SOAP service, W-1 gets created, overwriting the W-1 created by
interactive users.
This happens because the requestor of the SOAP service is unauthenticated, so it doesn't belong to any
organization.
Suggested Approach
To avoid this collision of work object IDs, use a single Organization data instance for both the BATCH
requestor and for the interactive requestors, or use two organizations and two work pools.
Unauthenticated requestors do not have an organization. You can specify an Organization instance for a
BATCH requestor if the BATCH requestor is authenticated. Set the Organization in an activity that
executes after logon.
Alternatively, if you decide to use two separate organizations, you'll need to follow SmartBuild best
practices, by placing them in separate work pools to avoid such work object ID issues. But if you decide
to use one organization, then one work pool is sufficient.
FirstUseAssemblerException
These errors did not appear when you tested the flow in the pre-production environments; for example,
process modeling, development, test, and staging. If you get these errors when trying to run a flow in
the production system, check to see if the flow is in Draft mode. Turn off Draft mode, save the flow rule,
and redeploy the application in the production system.
Errors
Errors appear on the screen and in the log file.
bIsConnector = IsConnectorFlowAction_ASSIGNMENT63_circum0(strAction);
^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^
----------
1 problem (1 error)
Explanation
Investigation of the flows with the error indicates that the flows are in Draft modepyDraftModeON=true.
The errors do not occur in the pre-production environments (process modeling, development, test,
staging) because you can save and run a flow in Draft mode in systems for which the production level is
set to a value less than 5. Rule resolution will find and process a flow rule when the flow is in Draft mode
and Rule Availability is set to Yes. This allows you to test the flow (including rule resolution) even
though some dependent rules do not yet exist. When flow Rule Availability is set to No/Draft, the flow
rule is not included in rule resolution.
Suggested Approach
For flows that cause the errors, turn off Draft mode, save the flow rule, and redeploy the application in
the production system.
Additional Information
Flow form -- Process Modeler Basics
I have the Agent Queue instance of Pega-ProCom: Correspondence and SLA events for Assign- set to
Periodic, with an interval of 30 seconds.
However, when I look at the work object history, it appears that the goal is reached only every 2
minutes, not after 58 seconds.
Suggested Approach
You're not necessarily doing anything wrong.
However, you must factor in the 30 second wake-up interval, and with that the timing could work out to
as much as a minute and a half after you think the occurrence should take place. The timer does not
start until the agent completes, so that time it takes the agent to complete is being added to the total.
One very likely cause when you find service level timings very different from what you expect is a
difference between the database server time and the application server time. The query to see
whether an assignment is due compares the assignment goal or deadline time with the system date and
time. If the two machines clocks differ enough, you will see such service level timing discrepancies.
Verify the time synchronization between the database and application servers. Synchronizing the two
will likely clear up the timing interval discrepancies that you observe.
Known Issues
Issue: Execute button is disabled during bulk processing
Symptom
A manager reports: When I perform bulk processing of assignments, the Execute button is unavailable,
grayed out. Yet, if I open an individual assignment, I can execute the ProcessAck feature. ProcessAck
is the only flow action for assignments in this workbasket.
What do I need to do to get the Execute button to be live? The tooltip hover text reads:
Solution
Workaround
Investigation shows that the behavior occurs only when exactly one flow action is connected to the
assignment. For assignments with multiple flow actions, the bulk processing Execute button is enabled
and operates correctly.
To work around the problem, add another flow action to the assignments in question so as to be able to
perform bulk processing on them.
Service-level rules specify goals and deadlines that indicate the expected or targeted time to complete
an assignment or resolve a work object. When an assignment is created and service level rules apply,
Process Commander calculates the goal, deadline, and late times and stores those times with the
assignment.
When the standard ProcessServiceLevelEvents activity — part of the Pega-ProCom agent — runs, it
compares the current time to the goal, deadline, and late times of assignments to determine whether or
not they are late. This activity is sometimes called the Service-Level Agreement (SLA) agent.
The information on whether a work object is locked is stored in the pxExpireDateTime column of the
pr_sys_locks table.
In certain instances, when your PegaRULES database is hosted by Oracle , the activity does not pick up
expired work objects in pr_sys_locks even though the agent shows a successful state.
This issue is caused by incorrect SQL in the Browse tab of the following Rule-Connect-SQL rules for
Oracle:
SLAGoalAssignments
SLADeadlineAssignments
SLALateAssignments
Solution
The incorrect SQL code in the Browse tab is:
<
>