Author |
Message
|
RJoubert |
Posted: Tue Jun 04, 2002 3:44 am Post subject: Using the XML Input Queue |
|
|
 Apprentice
Joined: 30 May 2002 Posts: 43 Location: Buffalo, NY
|
We have successfully employed the EXEXMLINPUTQ to accept XML messages and automatically create Workflow Instances. This is a great tool to use as it saves us busy programmers a lot of work. I do, however, have a few questions regarding the use of this mechanism.
First, what would happen if the XML message has more data elements than the specified data container can accept? Does it fail to create instances? Does it blow up?
Second, what else can be done using the XML Queue mechanism? I know that it can create instances and create & start instances...anything else?
Lastly, if my data structure contains an array element, how do I represent that in the XML message?
Thanks in advance for any help.
Rich _________________ Rich Joubert
Computer Systems Engineer
Univera HealthCare, an Excellus Company |
|
Back to top |
|
 |
RJoubert |
Posted: Tue Jun 04, 2002 5:29 am Post subject: |
|
|
 Apprentice
Joined: 30 May 2002 Posts: 43 Location: Buffalo, NY
|
Ok, I've done some testing and answered one of my own questions. If the XML message contains data elements that are not defined in the data container, the instances are not created. Therefore, any data passed in via the XML message must be defined. _________________ Rich Joubert
Computer Systems Engineer
Univera HealthCare, an Excellus Company |
|
Back to top |
|
 |
RJoubert |
Posted: Tue Jun 04, 2002 6:02 am Post subject: |
|
|
 Apprentice
Joined: 30 May 2002 Posts: 43 Location: Buffalo, NY
|
I've done some more research and testing, and I've answered the last question. I have a custom data structure which contains 3 elements. Then, in my main data container, I have an array of this custom data structure defined. To represent this in XML, I have to repeat the data structure as many times as necessary.
For example,
<DataStructure>
<Field1>Test</Field1>
<Field2>Test</Field2>
<CustomDataStructure>
<SubField1>Test</SubField1>
<SubField2>Test</SubField2>
<SubField3>Test</SubField3>
</CustomDataStructure>
<CustomDataStructure>
<SubField1>Test</SubField1>
<SubField2>Test</SubField2>
<SubField3>Test</SubField3>
</CustomDataStructure>
<CustomDataStructure>
<SubField1>Test</SubField1>
<SubField2>Test</SubField2>
<SubField3>Test</SubField3>
</CustomDataStructure>
</DataStructure>
So, all I need to know now is what else can the XML mechanism be used for? I know that I can create instances and create & start instances. _________________ Rich Joubert
Computer Systems Engineer
Univera HealthCare, an Excellus Company |
|
Back to top |
|
 |
jmac |
Posted: Tue Jun 04, 2002 10:14 am Post subject: |
|
|
 Jedi Knight
Joined: 27 Jun 2001 Posts: 3081 Location: EmeriCon, LLC
|
Rich:
When you start an instance if you specify a ResponseRequired YES then you will get a message back from MQWF indicating what any problems encountered were. In order to do this you have to set in the MQ header the ReplyToQMgr and ReplyToQueue.
As far as other XML messages, it depends on your MQWF version. with V330, the only other XML messages are for UPES activities (activity invoked, program terminated, activity expired).
With V332, there are now other Process Control messages including: TerminateInstance, SuspendInstance, ResumeInstance, etc.
The only thing I would add to what you've stated regarding arrays in XML is that if an array element is missing I.e you have values for a[0], a[2], it is specified as null:
<A>value of a[0]</A>
<A><null/></A>
<A>value of a[2]</A> _________________ John McDonald
RETIRED |
|
Back to top |
|
 |
RJoubert |
Posted: Tue Jun 04, 2002 10:22 am Post subject: |
|
|
 Apprentice
Joined: 30 May 2002 Posts: 43 Location: Buffalo, NY
|
Thanks for the feedback John. Regarding the other process control messages (terminateinstance, suspendinstance, resumeinstance)...could you expand on the etc? Do you have a complete list, or do you know where I might find a complete list?
Thanks. _________________ Rich Joubert
Computer Systems Engineer
Univera HealthCare, an Excellus Company |
|
Back to top |
|
 |
RJoubert |
Posted: Tue Jun 04, 2002 12:42 pm Post subject: Another problem with XML |
|
|
 Apprentice
Joined: 30 May 2002 Posts: 43 Location: Buffalo, NY
|
We are attempting to create and start instances using the XML input Queue in MQ Series. It was working at one point, but after a few minor changes to our buildtime model (none of which we thought would affect the XML portion), we are not getting successful creation of workflow instances. We are now getting a "FMCSYS: FMC00119E Not Authorized" error message for each instance creation attempt. Any thoughts? Suggestions?
Thanks. _________________ Rich Joubert
Computer Systems Engineer
Univera HealthCare, an Excellus Company |
|
Back to top |
|
 |
jmac |
Posted: Tue Jun 04, 2002 2:08 pm Post subject: |
|
|
 Jedi Knight
Joined: 27 Jun 2001 Posts: 3081 Location: EmeriCon, LLC
|
Rich:
This error is an indication that the UserId being used for the start is not authorized to the Process Category assigned to the Process Template. _________________ John McDonald
RETIRED |
|
Back to top |
|
 |
RJoubert |
Posted: Wed Jun 05, 2002 4:33 am Post subject: |
|
|
 Apprentice
Joined: 30 May 2002 Posts: 43 Location: Buffalo, NY
|
I'm not exactly sure what you mean by the "UserId being used for the start", but I can tell you that we log into MQWF Runtime as ADMIN to get the PEA running before running our dumping our XML messages onto the EXEXMLINPUTQ...And we have not changed anything about the ADMIN user in Buildtime. _________________ Rich Joubert
Computer Systems Engineer
Univera HealthCare, an Excellus Company |
|
Back to top |
|
 |
RJoubert |
Posted: Wed Jun 05, 2002 4:53 am Post subject: |
|
|
 Apprentice
Joined: 30 May 2002 Posts: 43 Location: Buffalo, NY
|
FYI...the big change that was made in Buildtime was that our process model used to have two layers (one main diagram with a block activity). It now has three layers (one main diagram with a block activity...the block activity has another block activity nested within it). Before we added the additional layer, everything seemed to work just fine. Could this be causing any problems? _________________ Rich Joubert
Computer Systems Engineer
Univera HealthCare, an Excellus Company |
|
Back to top |
|
 |
jmac |
Posted: Wed Jun 05, 2002 5:14 am Post subject: |
|
|
 Jedi Knight
Joined: 27 Jun 2001 Posts: 3081 Location: EmeriCon, LLC
|
Rich:
You do not need to logon to MQWF in order to issue the CreateAndStartProcessInstance XML message, however, the userid that is associated with the XML message will be assigned as the Process Starter and as such must be authorized to the Process Category. What is the userid that is assoicaited with the program issuing the MQPut to the EXEXMLINPUTQ?
Changing the number of levels in Buildtime can not have the affect you are indicating in my opinion. Just about the only Buildtime change that could cause this would be to assigne the Template to a process category to which the starter is not authorized. _________________ John McDonald
RETIRED |
|
Back to top |
|
 |
RJoubert |
Posted: Wed Jun 05, 2002 5:23 am Post subject: |
|
|
 Apprentice
Joined: 30 May 2002 Posts: 43 Location: Buffalo, NY
|
The reason we were starting MQWF runtime (logging in as ADMIN) is that we have an automated step (runs unattended) at the beginning of our process, and we want that run as the instances are created and started.
We are currently not specifying a process starter in the XML message itself. Should we do this? What happens if a starter is not specified?
Thanks again for your help. _________________ Rich Joubert
Computer Systems Engineer
Univera HealthCare, an Excellus Company |
|
Back to top |
|
 |
jmac |
Posted: Wed Jun 05, 2002 10:13 am Post subject: |
|
|
 Jedi Knight
Joined: 27 Jun 2001 Posts: 3081 Location: EmeriCon, LLC
|
Rich:
As I understand this, the logged on user at the time the MQPut is done becomes the starter.
If say the logged on user is USER1 who is authorized to use MQ, but not authorized to the Process Category you would need code like this to set the put options:
Code: |
MQMessage mqMessage = new MQMessage();
mqMessage.userId = "ADMIN"; // or any other MQWF userid authorized to the category
MQPutMessageOptions pmo = new MQPutMessageOptions( );
pmo.options = MQC.MQPMO_SET_IDENTITY_CONTEXT; |
_________________ John McDonald
RETIRED |
|
Back to top |
|
 |
|