Author |
Message
|
VanshulChawlaSA |
Posted: Thu Jul 16, 2009 3:25 am Post subject: Setting the RCD node properties at runtime |
|
|
Novice
Joined: 03 Jul 2009 Posts: 14
|
Hi,
I need to set the property of the RCD node at runtime is i need to fetch the details like message domain,set,format,type from the incoming message and set it to the RCD node.
Is it possible? |
|
Back to top |
|
 |
smdavies99 |
Posted: Thu Jul 16, 2009 4:19 am Post subject: |
|
|
 Jedi Council
Joined: 10 Feb 2003 Posts: 6076 Location: Somewhere over the Rainbow this side of Never-never land.
|
You can do it in a Compute Node using ESQL and setting the values in the properties folder.
Remember to read the message as a BLOB though.
You may run into some problems if the message as an RFH2 Header that is populated with the domain etc so some careful thought is needed. _________________ WMQ User since 1999
MQSI/WBI/WMB/'Thingy' User since 2002
Linux user since 1995
Every time you reinvent the wheel the more square it gets (anon). If in doubt think and investigate before you ask silly questions. |
|
Back to top |
|
 |
VanshulChawlaSA |
Posted: Thu Jul 16, 2009 4:24 am Post subject: |
|
|
Novice
Joined: 03 Jul 2009 Posts: 14
|
I did this.I set the OutputRoot.Properties.XXXX for all the set,type,format but when i go to RCD( next to this Compute ) it fails there and exception is
"Message domain Blob" Some parser error
So RCD node is not picking the propeties from there
When i am doing the same for label node,its fine
Is it a case as RCD is having drop downs in node properties settings?
Can you elaborate if u think what u said will work?
It will be really helpful |
|
Back to top |
|
 |
jbanoop |
Posted: Thu Jul 16, 2009 4:34 am Post subject: |
|
|
Chevalier
Joined: 17 Sep 2005 Posts: 401 Location: SC
|
My understanding is that the RCD node just sets the message type, message format, message set properties and it does not trigger a parse itself. So changing the values in ESQL in a compute node could be sufficent. The next time an element is accessed within that message tree a parse is triggered which will use the newly set fields to do its job. |
|
Back to top |
|
 |
WMBDEV1 |
Posted: Thu Jul 16, 2009 4:44 am Post subject: |
|
|
Sentinel
Joined: 05 Mar 2009 Posts: 888 Location: UK
|
jbanoop wrote: |
and it does not trigger a parse itself. |
It can do.... depending on the parse timing set on the RCD node. If set to "immediate", it will do a parse immediately.
You could just do the parse in ESQL if you wanted and dynamically set the values you need in there.
Alternatively... if you have labels for the different formats that you expect you can route to the correct label which then has its own RCD node with the values correctly set at compile time.
Just some quick thoughts. |
|
Back to top |
|
 |
jbanoop |
Posted: Thu Jul 16, 2009 6:16 am Post subject: |
|
|
Chevalier
Joined: 17 Sep 2005 Posts: 401 Location: SC
|
From the infocenter:
http://publib.boulder.ibm.com/infocenter/wmbhelp/v6r1m0/index.jsp?topic=/com.ibm.etools.mft.doc/ac04810_.htm
Quote: |
ResetContentDescriptor node
Use the ResetContentDescriptor node to request that the message is reparsed by a different parser.
.......
Purpose
If you specify MRM as the new parser, you can also specify a different message template (message set, message type, and message format). This node does not reparse the message, but the properties that you set for this node determine how the message is parsed when it is next reparsed by the message flow.
|
|
|
Back to top |
|
 |
WMBDEV1 |
Posted: Thu Jul 16, 2009 6:31 am Post subject: |
|
|
Sentinel
Joined: 05 Mar 2009 Posts: 888 Location: UK
|
|
Back to top |
|
 |
jbanoop |
Posted: Thu Jul 16, 2009 6:42 am Post subject: |
|
|
Chevalier
Joined: 17 Sep 2005 Posts: 401 Location: SC
|
My understanding is that the RCD just changes the values (very much like ESQL) and when the control returns to the message flow after coming out of the RCD, it causes (forces ??) a parse of the message. So theoretically RCD "does not" parse a message.
I would wait for the experts to comment |
|
Back to top |
|
 |
WMBDEV1 |
Posted: Thu Jul 16, 2009 7:10 am Post subject: |
|
|
Sentinel
Joined: 05 Mar 2009 Posts: 888 Location: UK
|
jbanoop wrote: |
I would wait for the experts to comment |
Ok... but in the absence of this you could try a very simple test flow.....
Create an XML schema with an enumeration on a field. Generate a message set from this. Connect MQInput to a RCD that uses the MRM domain (and mset /type values) to validate content and value and use the "immediate parse" option. Then send in an XML message that does not contain a value in the enumeration.
If an exception is thrown indicating the enumeration is not satisified the node must have parsed it right? |
|
Back to top |
|
 |
ovasquez |
Posted: Mon Jul 20, 2009 9:26 pm Post subject: Re: Setting the RCD node properties at runtime |
|
|
 Centurion
Joined: 09 Dec 2005 Posts: 141 Location: Lima, Peru
|
VanshulChawlaSA wrote: |
Hi,
I need to set the property of the RCD node at runtime is i need to fetch the details like message domain,set,format,type from the incoming message and set it to the RCD node.
Is it possible? |
Why Do you need use RCD? ...
This a ESQL for same RCD work .
MQInput-->Compute--->MQOutput
********XML----->CWF**********
Code: |
DECLARE inCCSID INT InputProperties.CodedCharSetId;
DECLARE inEncoding INT InputProperties.Encoding;
DECLARE options INTEGER BITOR(FolderBitStream, ValidateNone);
DECLARE inBitStream BLOB ASBITSTREAM(InputRoot.XMLNSC, inEncoding, inCCSID);
CREATE LASTCHILD OF OutputRoot DOMAIN('MRM')
PARSE(inBitStream, inEncoding, inCCSID, 'MessageSet1',
'Message1', 'CWF1', options);
|
_________________ Oscar Vásquez Flores |
|
Back to top |
|
 |
sarathmattam |
Posted: Thu Nov 12, 2009 2:30 pm Post subject: Avoiding RCD Node |
|
|
Voyager
Joined: 05 Sep 2008 Posts: 94
|
Dear All,
I read the above post. Currently i have a similar requirement.
I have 2 flows . FlowA is a publication msg flow which is used for publishing the messages to multiple subscribers. FlowB which takes this input , processes and form the output.
Now i am facing problem at the starting of FlowB. I have a message set in FlowB which i configured in the MQInout node. But when i configure the message set in the MQinput node , the parsing fails.
Then i did a work around by using RCD node and the parsing is success ful. Next to the RCD node , i have a compute node, where i will check the value of two fileds . If they satisfy i will pass it to the next node. Here i want to avoid the use of RCD node. I have tried the method mentioned in the above post. But it fails. So my queries are
1. Why parsing fails wen i configure the message set in MQInput where as the same works perfectly with an RCD?
2. How can i do a BLOB to MRM conversion using a combination of ASBITSTREAM & CREATE ?
Thanks a lot in advance
Regards,
sarath |
|
Back to top |
|
 |
WMBDEV1 |
Posted: Fri Nov 13, 2009 1:21 am Post subject: Re: Avoiding RCD Node |
|
|
Sentinel
Joined: 05 Mar 2009 Posts: 888 Location: UK
|
Quick thoughts....
sarathmattam wrote: |
Dear All,
Then i did a work around by using RCD node and the parsing is success ful. Next to the RCD node , i have a compute node, where i will check the value of two fileds.
|
This may be better implemented as a filter node but this is more of an aside.
Quote: |
1. Why parsing fails wen i configure the message set in MQInput where as the same works perfectly with an RCD?
|
I give in. But if you could share the errors you get that may help.
Quote: |
2. How can i do a BLOB to MRM conversion using a combination of ASBITSTREAM & CREATE ?
|
As above. The snippet provided should work.
Again if you share errors / experiences we may be able to help. Previously, when using the MRM domain my common pitfall has been around using an incorrect message value (typo) which resulted in an empty message being propagated. |
|
Back to top |
|
 |
sarathmattam |
Posted: Fri Nov 13, 2009 5:25 am Post subject: RCD Node |
|
|
Voyager
Joined: 05 Sep 2008 Posts: 94
|
I will share the errors for sure ..
As you mentioned in the last line , am also getting an empty out while using a combination of ASBITSTREAM and CREATE with PARSE .
Can you tell me the reason ??
Thanks alot
Regards,
Sarath |
|
Back to top |
|
 |
smdavies99 |
Posted: Fri Nov 13, 2009 5:41 am Post subject: |
|
|
 Jedi Council
Joined: 10 Feb 2003 Posts: 6076 Location: Somewhere over the Rainbow this side of Never-never land.
|
As has been mentioned many times before in relation to this type of conversion, you need to take a UserTrace of the message as it passed through your flow. This will really help you discover what the problem is. Don't use the debugger!!!!!!
Posting the relevant section of the trace output here will help us to help you with this problem. _________________ WMQ User since 1999
MQSI/WBI/WMB/'Thingy' User since 2002
Linux user since 1995
Every time you reinvent the wheel the more square it gets (anon). If in doubt think and investigate before you ask silly questions. |
|
Back to top |
|
 |
sarathmattam |
Posted: Fri Nov 13, 2009 5:49 am Post subject: |
|
|
Voyager
Joined: 05 Sep 2008 Posts: 94
|
Initially i was getting "Invalid wire format" error.
The i tried setting the Domain,MessageSet,Type & format. Nw am getting empty string in the output. No errors .. Code is as given below
DECLARE parseOptions INTEGER BITOR(FolderBitStream, ValidateNone);
DECLARE subBitStream BLOB
CAST(ASBITSTREAM(InputRoot.BLOB.BLOB
OPTIONS parseOptions
SET 'GATEWAY'
TYPE 'FullMsg'
FORMAT 'Text1') AS BLOB);
SET OutputRoot.Properties = InputRoot.Properties;
SET OutputRoot.Properties.MessageDomain = 'MRM';
SET OutputRoot.Properties.MessageFormat = 'Text1';
SET OutputRoot.Properties.MessageSet = 'GATEWAY';
SET OutputRoot.Properties.MessageType = 'FullMsg';
CREATE LASTCHILD OF OutputRoot DOMAIN('MRM');
CREATE LASTCHILD OF OutputRoot.MRM
PARSE ( subBitStream
OPTIONS parseOptions
SET 'GATEWAY'
TYPE 'FullMsg'
FORMAT 'Text1');
Currently am just trying to get the output .
Regards,
Sarath |
|
Back to top |
|
 |
|