This hands-on lab assumes you have minimum programming
experience.
Before you begin, you need to install the following software on your
computer.




















| Scenario | Create
a new Workflow from scratch and execute it |
| Workflow | IDM_COURSE_WFP_Running
Workflow Download |
| Form | none |
| Subprocess |
none |
| Rule | none |
| Comments
Bold Code |
In this code you can see
the name of the workflow and the two main activities for a Workflow
(start / end). |
| CODE |
| Workflow |
| <?xml version='1.0'
encoding='UTF-8'?> <!DOCTYPE TaskDefinition PUBLIC 'waveset.dtd' 'waveset.dtd'> <TaskDefinition name='IDM_COURSE_WFP_Running Workflow' taskType='Workflow' executor='com.waveset.workflow.WorkflowExecutor' suspendable='true' syncControlAllowed='true' execMode='sync' execLimit='0' resultLimit='0' resultOption='delete' visibility='runschedule' progressInterval='0'> <Extension> <WFProcess name='IDM_COURSE_WFP_Running Workflow' maxSteps='0'> <Activity id='0' name='start'> <Transition to='end'/> <WorkflowEditor x='22' y='22'/> </Activity> <Activity id='1' name='end'> <WorkflowEditor x='201' y='37'/> </Activity> </WFProcess> </Extension> <MemberObjectGroups> <ObjectRef type='ObjectGroup' id='#ID#Top' name='Top'/> </MemberObjectGroups> </TaskDefinition> |
| Form |
| None |
| Subprocess |
| None |
| Rule |
| None |
| Scenario | Workflow using an activity and with one action that call a Manual Form displaying data. The data were harcoded just for course purpouse. |
| Workflow | IDM_COURSE_WFP_Manual
Form Download |
| Form | IDM_COURSE_FRM_Manual
Form Download |
| Subprocess |
none |
| Rule | none |
| Comments
Bold Code |
Workkflow. Shows the activity used to call a Form during this step named Call Form, all the form are called using a Manual Action, the parameter timeout -10 indicates that timeout of this form in seconds. Form. Shows the name of the form that is used for the workflow as a parameter, and the Display class indicate the kind of field that we are using to display information. For this example we are only using the Label class, but you can user another like text,text area,checkbox button,etc. |
| CODE |
| Workflow |
| <?xml version='1.0'
encoding='UTF-8'?> <!DOCTYPE TaskDefinition PUBLIC 'waveset.dtd' 'waveset.dtd'> <!-- MemberObjectGroups="#ID#Top" createDate="Wed Feb 13 19:57:47 CST 2008" extensionClass="WFProcess" name="IDM_COURSE_WFP_Manual Form" visibility="runschedule"--> <TaskDefinition name='IDM_COURSE_WFP_Manual Form' creator='Configurator' createDate='1202954267093' lastModifier='Configurator' lastModDate='1202956477250' lastMod='2' taskType='Workflow' executor='com.waveset.workflow.WorkflowExecutor' suspendable='true' syncControlAllowed='true' execMode='sync' execLimit='0' resultLimit='0' resultOption='delete' visibility='runschedule' progressInterval='0'> <Extension> <WFProcess name='IDM_COURSE_WFP_Manual Form' maxSteps='0'> <Activity id='0' name='start'> <Transition to='Call Form'/> <WorkflowEditor x='59' y='84'/> </Activity> <Activity id='1' name='Call Form'> <ManualAction id='0' timeout='-10'> <FormRef> <ObjectRef type='UserForm' name='IDM_COURSE_FRM_Manual Form'/> </FormRef> </ManualAction> <Transition to='end'/> <WorkflowEditor x='276' y='96'/> </Activity> <Activity id='2' name='end'> <WorkflowEditor x='476' y='126'/> </Activity> </WFProcess> </Extension> <MemberObjectGroups> <ObjectRef type='ObjectGroup' id='#ID#Top' name='Top'/> </MemberObjectGroups> </TaskDefinition> |
| Form |
| <?xml version='1.0'
encoding='UTF-8'?> <!DOCTYPE Configuration PUBLIC 'waveset.dtd' 'waveset.dtd'> <!-- MemberObjectGroups="#ID#Top" extensionClass="Form" lastMod="4" lastModifier="Configurator" name="IDM_COURSE_FRM_Manual Form"--> <Configuration name='IDM_COURSE_FRM_Manual Form' creator='Configurator' createDate='1202954470671' lastModifier='Configurator' lastModDate='1202956473359' lastMod='4' wstype='UserForm'> <Extension> <Form name='IDM_COURSE_FRM_Call Form 1' objectLocationID='objectType=UserForm&objectName=IDM_COURSE_FRM_Manual+Form&objectPath=0&isBegin=true'> <Display class='EditForm'> <Property name='title' value='Manual Form'/> <Property name='subTitle' value='This form is displayed using a Manual Action in the workflow with hardcode values in the Form.'/> </Display> <Field> <Display class='SectionHead'> <Property name='title' value='User Information'/> </Display> </Field> <Field> <Display class='Label'> <Property name='value' value='999010'/> <Property name='title' value='AccountId'/> </Display> </Field> <Field> <Display class='Label'> <Property name='value' value='Angus'/> <Property name='title' value='Firstname'/> </Display> </Field> <Field> <Display class='Label'> <Property name='value' value='Young'/> <Property name='title' value='Lastname'/> </Display> </Field> <Field> <Display class='Label'> <Property name='value' value='angus.young@idm.com'/> <Property name='title' value='Email'/> </Display> </Field> </Form> </Extension> <MemberObjectGroups> <ObjectRef type='ObjectGroup' id='#ID#Top' name='Top'/> </MemberObjectGroups> </Configuration> |
| Subprocess |
| None |
| Rule |
| None |
| Scenario | Workflow
using an activity and with one action that call an Application
(workflow service ) that execute a disable operation for
the Administrator account |
| Workflow | IDM_COURSE_WFP_Application Download |
| Form | none |
| Subprocess |
none |
| Rule | none |
| Comments
Bold Code |
Workkflow. Shows the activity used to call a workflow service, the argument op indicate the operation type we are calling , the account Id the account we are disabling and the doWaveset parameter indicates that we want to disable the Idm account. The idm account is the lighthouse account. |
| CODE |
| Workflow |
| <?xml version='1.0'
encoding='UTF-8'?> <!DOCTYPE TaskDefinition PUBLIC 'waveset.dtd' 'waveset.dtd'> <!-- MemberObjectGroups="#ID#Top" createDate="Thu Feb 14 23:56:51 CST 2008" extensionClass="WFProcess" name="IDM_COURSE_WFP_Application" visibility="runschedule"--> <TaskDefinition name='IDM_COURSE_WFP_Application' creator='Configurator' createDate='1203055011734' lastModifier='Configurator' lastModDate='1203056074968' lastMod='3' taskType='Workflow' executor='com.waveset.workflow.WorkflowExecutor' suspendable='true' syncControlAllowed='true' execMode='sync' execLimit='0' resultLimit='0' resultOption='delete' visibility='runschedule' progressInterval='0'> <Extension> <WFProcess name='IDM_COURSE_WFP_Application' maxSteps='0'> <Activity id='0' name='start'> <Transition to='Disable User'/> <WorkflowEditor x='59' y='84'/> </Activity> <Activity id='1' name='Disable User'> <Action id='0' application='com.waveset.session.WorkflowServices'> <Argument name='op' value='disableUser'/> <Argument name='accountId' value='administrator'/> <Argument name='doWaveset' value='true'/> </Action> <Transition to='end'/> <WorkflowEditor x='274' y='54'/> </Activity> <Activity id='2' name='end'> <WorkflowEditor x='476' y='126'/> </Activity> </WFProcess> </Extension> <MemberObjectGroups> <ObjectRef type='ObjectGroup' id='#ID#Top' name='Top'/> </MemberObjectGroups> </TaskDefinition> |
| Form |
| None |
| Subprocess |
| None |
| Rule |
| None |





| Scenario | Workflow
using an activity and with one action that call a Manual Form, the form
is populated using Script in the workflow. |
| Workflow | IDM_COURSE_WFP_Script Download |
| Form | IDM_COURSE_FRM_Script Download |
| Subprocess |
none |
| Rule | none |
| Comments
Bold Code |
Workflow. We are creating 3 variables - firstname,lastname and email - and setting their values using xpress. We are using three differents actions for each variable. <expression> Used to define a script under the action. <set> Xpress function used to set a variable value <concat> Xpress function used to join two strings values <s> Xpress function used to declare a String value Form. <ref> Xpress function used to access a variable content defined previously in the workflow |
| CODE |
| Workflow |
| <?xml version='1.0'
encoding='UTF-8'?> <!DOCTYPE TaskDefinition PUBLIC 'waveset.dtd' 'waveset.dtd'> <!-- MemberObjectGroups="#ID#Top" createDate="Wed Feb 13 21:17:00 CST 2008" extensionClass="WFProcess" name="IDM_COURSE_WFP_Script" visibility="runschedule"--> <TaskDefinition name='IDM_COURSE_WFP_Script' createDate='1202959020937' lastModifier='Configurator' lastModDate='1205202602234' lastMod='16' taskType='Workflow' executor='com.waveset.workflow.WorkflowExecutor' suspendable='true' syncControlAllowed='true' execMode='sync' execLimit='0' resultLimit='0' resultOption='delete' visibility='runschedule' progressInterval='0'> <Extension> <WFProcess name='IDM_COURSE_WFP_Script' maxSteps='0'> <Activity id='0' name='start'> <Transition to='Script'/> <WorkflowEditor x='18' y='47'/> </Activity> <Activity id='1' name='end'> <WorkflowEditor x='368' y='28'/> </Activity> <Activity id='2' name='Script'> <Action id='0' name='Assigning Firstname'> <expression> <set name='firstName'> <s>Angus</s> </set> </expression> </Action> <Action id='1' name='Assigning Lastname'> <expression> <set name='lastName'> <s>Young</s> </set> </expression> </Action> <Action id='2' name='Assigning Email'> <expression> <set name='email'> <concat> <concat> <concat> <ref>firstName</ref> <s>.</s> </concat> <ref>lastName</ref> </concat> <s>@idm.com</s> </concat> </set> </expression> </Action> <ManualAction id='3' timeout='-10' syncExec='true'> <WorkItemRequest> <s> IDM Admin Interface </s> </WorkItemRequest> <WorkItemRequester> <s>IDM System</s> </WorkItemRequester> <WorkItemDescription> <s>Workflow Script</s> </WorkItemDescription> <FormRef> <ObjectRef type='UserForm' name='IDM_COURSE_FRM_Script'/> </FormRef> </ManualAction> <Transition to='end'/> <WorkflowEditor x='153' y='146'/> </Activity> </WFProcess> </Extension> <MemberObjectGroups> <ObjectRef type='ObjectGroup' id='#ID#Top' name='Top'/> </MemberObjectGroups> </TaskDefinition> |
| Form |
| <?xml version='1.0'
encoding='UTF-8'?> <!DOCTYPE Configuration PUBLIC 'waveset.dtd' 'waveset.dtd'> <!-- MemberObjectGroups="#ID#Top" extensionClass="Form" lastMod="19" lastModifier="Configurator" name="IDM_COURSE_FRM_Script"--> <Configuration name='IDM_COURSE_FRM_Script' creator='Configurator' createDate='1202959664218' lastModifier='Configurator' lastModDate='1205202096250' lastMod='19' wstype='UserForm'> <Extension> <Form name='IDM_COURSE_FRM_Script' baseContext='variables' noDefaultButtons='true' objectLocationID='objectType=UserForm&objectName=IDM_COURSE_FRM_Script&objectPath=0&isBegin=true'> <Display class='EditForm'> <Property name='title' value='Using Script'/> <Property name='subTitle' value='This form is displayed using a Manual Action in the workflow and assigning their values with a Script'/> </Display> <Field> <Display class='Label'> <Property name='value'> <ref>firstName</ref> </Property> <Property name='title' value='Firstname'/> </Display> </Field> <Field> <Display class='Label'> <Property name='value'> <ref>lastName</ref> </Property> <Property name='title' value='Lastname'/> </Display> </Field> <Field> <Display class='Label'> <Property name='value'> <ref>email</ref> </Property> <Property name='title' value='Email'/> </Display> </Field> <Field name='submitCancelButtons'> <Field name=':complete'> <Expansion> <s>true</s> </Expansion> </Field> <Field name=':formButton' button='true'> <Display class='Button'> <Property name='label' value='Submit'/> <Property name='value' value='Next'/> <Property name='command' value='Save'/> </Display> </Field> <Field name=':formButton' button='true'> <Display class='Button'> <Property name='label' value='Cancel'/> <Property name='value' value='Cancel'/> <Property name='command' value='SaveNoValidate'/> </Display> <Derivation> <null/> </Derivation> </Field> <Field name='formButton'> <Expansion> <ref>:formButton</ref> </Expansion> </Field> </Field> </Form> </Extension> <MemberObjectGroups> <ObjectRef type='ObjectGroup' id='#ID#Top' name='Top'/> </MemberObjectGroups> </Configuration> |
| Subprocess |
| Rule |
| None |



| Scenario | Workflow
using an activity and with one action that call an Application
(workflow service ) that execute a disable operation for
the Administrator account |
| Workflow | IDM_COURSE_WFP_Subprocess Download |
| Form | IDM_COURSE_FRM_Subprocess Download |
| Subprocess |
IDM_COURSE_WFS_Subprocess Download |
| Rule | none |
| Comments
Bold Code |
Subprocess. We are using the Activity id=2 to call a subprocess. The action id=0 is the action used to launch the subprocess. process='Configuration:subprocess name' is the syntax used to specify the subprocess to be called. Note that a subprocess is under the configuration object type. |
| CODE |
| Workflow |
| Download File |
| Form |
| Download File |
| Subprocess |
| <?xml version='1.0'
encoding='UTF-8'?> <!DOCTYPE TaskDefinition PUBLIC 'waveset.dtd' 'waveset.dtd'> <!-- MemberObjectGroups="#ID#Top" createDate="Wed Feb 13 22:20:56 CST 2008" extensionClass="WFProcess" name="IDM_COURSE_WFP_Subprocess" visibility="runschedule"--> <TaskDefinition name='IDM_COURSE_WFP_Subprocess' createDate='1202962856281' lastModifier='Configurator' lastModDate='1205202755609' lastMod='6' taskType='Workflow' executor='com.waveset.workflow.WorkflowExecutor' suspendable='true' syncControlAllowed='true' execMode='sync' execLimit='0' resultLimit='0' resultOption='delete' visibility='runschedule' progressInterval='0'> <Extension> <WFProcess name='IDM_COURSE_WFP_Subprocess' maxSteps='0'> <Activity id='0' name='start'> <Transition to='Call Subprocess'/> <WorkflowEditor x='18' y='47'/> </Activity> <Activity id='1' name='end'> <WorkflowEditor x='368' y='28'/> </Activity> <Activity id='2' name='Call Subprocess'> <Action id='0' process='Configuration:IDM_COURSE_WFS_Subprocess'> </Action> <Transition to='end'/> <WorkflowEditor x='151' y='145'/> </Activity> </WFProcess> </Extension> <MemberObjectGroups> <ObjectRef type='ObjectGroup' id='#ID#Top' name='Top'/> </MemberObjectGroups> </TaskDefinition> |
| Rule |
| None |






