Author |
Message
|
RJoubert |
Posted: Thu Jun 13, 2002 7:21 am Post subject: UPES activities |
|
|
 Apprentice
Joined: 30 May 2002 Posts: 43 Location: Buffalo, NY
|
I am still trying to get a grip on the use of the UPES in workflow. It is my understanding (and please correct me if I'm wrong) that the UPES can be used in place of the PEA at a process step to run a program.
To get this to work, I would first create a queue for the UPES to monitor (through MQSeries explorer). Do I have to setup a trigger on this queue to react to incoming messages? If so, could I use an EXE, and where on the Triggering tab would I specify the EXE path/name. Am I missing anything else with the creation of the queue?
I would then create a new UPES through buildtime and point it to the newly created queue.
Then, I would change the Execution Unit of the desired program activity to use the newly created UPES rather than the default selection of the PEA.
Question 1 - What does the UPES write to the queue? I know it drops XML, but what is contained in the XML message? Data container elements?
Question 2 - If I have to setup the trigger on the queue, is the program specified to run at the desired program activity in buildtime ignored? Does it have to be the same as what is specified in buildtime?
Question 3 - Am I way off base on my understanding? Can anyone offer any help in clarifying my clouded mind?
Thanks. _________________ Rich Joubert
Computer Systems Engineer
Univera HealthCare, an Excellus Company |
|
Back to top |
|
 |
steinra |
Posted: Thu Jun 13, 2002 11:16 am Post subject: |
|
|
 Apprentice
Joined: 23 May 2002 Posts: 28 Location: USA
|
You are on the right track.
In our use of UPES we don't have a trigger set up on the queue. We have a program(server) that runs all the time consuming messages from the queue and invoking the correct work unit for the activity being sent from workflow.
So if activity A and B are UPES based activities the server gets both messages and directs them to the appropriate work unit.
But a trigger on a queue would work as well.
As for the content of the XML message. This is an extract from the programming guide. (page 224 of the 3.3 docs)
Code: |
<?xml version="1.0" encoding="UTF-8" standalone="yes"?>
<!-- This document is generated by a MQSeries Workflow Version 3.2.2 server -->
<WfMessage>
<WfMessageHeader>
<ResponseRequired>Yes</ResponseRequired>
</WfMessageHeader>
<ActivityImplInvoke>
<ActImplCorrelID>FFABCEDF0123456789FF</ActImplCorrelID>
<Starter>user1</Starter>
<ProgramID>
<ProcTemplID>84848484FEFEFEFE</ProcTemplID>
<ProgramName>PerformOrder</ProgramName>
</ProgramID>
<ImplementationData>
<ImplementationPlatform>AIX</ImplementationPlatform>
<ProgramParameters>custNo=1234</ProgramParameters>
<ExeOptions>
<PathAndFileName>/usr/local/bin/perforder</PathAndFileName>
<WorkingDirectoryName>/usr/local/data</WorkingDirectoryName>
<InheritEnvironment>true</InheritEnvironment>
<StartInForeGround>true</StartInForeGround>
<AutomaticClose>true</AutomaticClose>
<WindowStyleVisible>true</Visible>
<RunInXTerm>true</RunInXTerm>
</ExeOptions>
</ImplementationData>
<ImplementationData>
<ImplementationPlatform>OS390</ImplementationPlatform>
<ExternalOptions>
<ServiceName>CICS42</ServiceName>
<ServiceType>CICS</ServiceType>
<InvocationType>EXCI</InvocationType>
<ExecutableName>ORDR</ExecutableName>
<ExecutableType>REG1</ExecutableType>
<IsLocalUser>true</IsLocalUser>
<IsSecurityRoutineCall>true</IsSecurityRoutineCall>
<CodePage>850</CodePage>
<TimeoutPeriod>TimeInterval</TimeoutPeriod>
<TimeoutInterval>60</TimeoutInterval>
<IsMappingRoutineCall>false</IsMappingRoutineCall>
</ExternalOptions>
</ImplementationData>
<ProgramInputData>
<_ACTIVITY>AssessRisk_SubProcess</_ACTIVITY>
<_PROCESS>CreditRequest#123</_PROCESS>
<_PROCESS_MODEL>CreditRequest</_PROCESS_MODEL>
<CreditData>
<Customer>
<Name>User1</Name>
</Customer>
<Amount>1000</Amount>
<Currency>CurrencyX</Currency>
</CreditData>
</ProgramInputData>
<ProgramOutputDataDefaults>
<_ACTIVITY>AssessRisk_SubProcess</_ACTIVITY>
<_PROCESS>CreditRequest#123</_PROCESS>
<_PROCESS_MODEL>CreditRequest</_PROCESS_MODEL>
<CreditData>
<Risk>high</Risk>
</CreditData>
</ProgramOutputDataDefaults>
</ActivityImplInvoke>
<WfMessage>
|
The book shows it all indented correctly .
The activity that is being invoked is referenced by this XML tag
Code: |
<_ACTIVITY>AssessRisk_SubProcess</_ACTIVITY>
<_PROCESS_MODEL>CreditRequest</_PROCESS_MODEL>
|
These are the names in the process diagram.
If you want the actual program name from the program setting in your activity use this XML tag
Code: |
<ImplementationData>
<ImplementationPlatform>AIX</ImplementationPlatform>
<ProgramParameters>custNo=1234</ProgramParameters>
<ExeOptions>
<PathAndFileName>/usr/local/bin/perforder</PathAndFileName>
<WorkingDirectoryName>/usr/local/data</WorkingDirectoryName>
<InheritEnvironment>true</InheritEnvironment>
<StartInForeGround>true</StartInForeGround>
<AutomaticClose>true</AutomaticClose>
<WindowStyleVisible>true</Visible>
<RunInXTerm>true</RunInXTerm>
</ExeOptions>
</ImplementationData>
|
There will be an implementation data node for each platform configured.
The input container will be here
One thing to note. If the data element in the contatiner is not set then it will not appear in the XML document.
Code: |
<CreditData>
<Customer>
<Name>User1</Name>
</Customer>
<Amount>1000</Amount>
<Currency>CurrencyX</Currency>
</CreditData>
|
To send the data back in you build a XML reply message with the correlation ID from the UPES message.
Code: |
<ActImplCorrelID>FFABCEDF0123456789FF</ActImplCorrelID>
|
You can also modify your container with the updated data as need.
Here is an example reply
Code: |
<WfMessage>
<WfMessageHeader>
<ResponseRequired>No</ResponseRequired>
</WfMessageHeader>
<ActivityImplInvokeResponse>
<ActImplCorrelID>FFABCEDF0123456789FF</ActImplCorrelID>
<ProgramRC>0</ProgramRC>
<ProgramOutputData>
<CreditData>
<Customer>
<Name>User1</Name>
</Customer>
<Amount>1000</Amount>
<Currency>CurrencyX</Currency>
<Risk>low</Risk>
</CreditData>
</ProgramOutputData>
</ActivityImplInvokeResponse>
</WfMessage>
|
The Risk node was added in the reply to workflow.
I hope this helps.
Randy |
|
Back to top |
|
 |
Bobbo |
Posted: Thu Jun 20, 2002 4:03 pm Post subject: |
|
|
Acolyte
Joined: 17 Jun 2002 Posts: 50 Location: Buffalo, New York
|
What I am doing wrong if the data structure information is not showing up in the XML message? The only thing that shows is the Default Data Structure, and it doesn't have any values in it.
I've already made sure that each of my activies are using my custom data structure - NOT the Default.
Thanks for your help. |
|
Back to top |
|
 |
jmac |
Posted: Fri Jun 21, 2002 3:17 am Post subject: |
|
|
 Jedi Knight
Joined: 27 Jun 2001 Posts: 3081 Location: EmeriCon, LLC
|
I would guess that the model that is translated in the Runtime database does not have your data structures assigned. Perhaps you forgot to translate it. I've not seen a case where the XML message does not containe the proper input container. Be aware that this message shows both input container and output container so be sure you are looking at the write container. Maybe you are looking at the ProgramOuputDefaults and if you do not use an output container, that would be the Default Data structure.
good luck _________________ John McDonald
RETIRED |
|
Back to top |
|
 |
kriersd |
Posted: Tue Jul 23, 2002 5:30 pm Post subject: |
|
|
 Master
Joined: 22 Jul 2002 Posts: 209 Location: IA, USA
|
Also
I don't know if you will see any tags from the data container that do not contain data. Try making sure you have data in the data container.
Good Luck _________________ Dave Krier
IBM WebSphere MQ Workflow V3.4 Solution Designer |
|
Back to top |
|
 |
jmac |
Posted: Wed Jul 24, 2002 4:47 am Post subject: |
|
|
 Jedi Knight
Joined: 27 Jun 2001 Posts: 3081 Location: EmeriCon, LLC
|
Dave is right, the current XML implementation only sends the members that actually have data in them. There is no way in the XML interface (short of logging in and accessing the Workitem) to get AllLeaves of the container. _________________ John McDonald
RETIRED |
|
Back to top |
|
 |
|