ASG
IBM
Zystems
Cressida
Icon
Netflexity
 
  MQSeries.net
Search  Search       Tech Exchange      Education      Certifications      Library      Info Center      SupportPacs      LinkedIn  Search  Search                                                                   FAQ  FAQ   Usergroups  Usergroups
 
Register  ::  Log in Log in to check your private messages
 
RSS Feed - WebSphere MQ Support RSS Feed - Message Broker Support

MQSeries.net Forum Index » WebSphere Message Broker (ACE) Support » How do I do mapping for an element that's repeatable ?

Post new topic  Reply to topic
 How do I do mapping for an element that's repeatable ? « View previous topic :: View next topic » 
Author Message
AlexeiSkate
PostPosted: Thu May 23, 2002 3:40 pm    Post subject: How do I do mapping for an element that's repeatable ? Reply with quote

Centurion

Joined: 10 Apr 2002
Posts: 123

Hi,

I have a compound type 'HeaderLineType' defined that consists of two elements: 'HeaderElement' and 'LineElement'. The 'LineElement' has its repeatable flag set to yes and its min occurs set to 1 and max occurs set to 10.

When I map an icoming message with 10 lines to the 'HeaderLineType' message in the compute node, how can I iterate through the 10 'LineElement' ?

Thanks for any input,
Alex
Back to top
View user's profile Send private message
kirani
PostPosted: Thu May 23, 2002 5:14 pm    Post subject: Reply with quote

Jedi Knight

Joined: 05 Sep 2001
Posts: 3779
Location: Torrance, CA, USA

Alex,

here is pseudo code ...

totalcount = cardinality(input messaeg with 10 or less number of lines)
i = 1
SET OutputRoot.MRM."HeaderElement" = value from input data or constant.

while ( i < totalcount)
SET OutputRoot.MRM."LineElement"[i] = InputRoot.XXX.Line[i];
SET i = i+1;
END WHILE;
_________________
Kiran


IBM Cert. Solution Designer & System Administrator - WBIMB V5
IBM Cert. Solutions Expert - WMQI
IBM Cert. Specialist - WMQI, MQSeries
IBM Cert. Developer - MQSeries

Back to top
View user's profile Send private message Visit poster's website
AlexeiSkate
PostPosted: Mon Jun 10, 2002 11:52 am    Post subject: Reply with quote

Centurion

Joined: 10 Apr 2002
Posts: 123

Kirani,

Should the inequality comparison in the while loop be less than or equal to, e.g. WHILE ( i <= totalcount ) ....

Let say you have a msg with a header and repeating lines, and there is only one line. You initialize i = 1. You set totalCount = cardinality(InputRoot.XML."lineElements"[]) which means that totalCount will also be set to 1. The while loop would then never execute if you test only for ' < totalCount ', correct ? You would have to use <= totalCount for the loop to execute at least once.

I'm having some trouble mapping a repeating line to a repeating line, getting an "XML Writing Errors have occurred. No valid body of the document could be found" but can't find what is wrong with the output XML msg being generated when viewed with the traceNode. I'm not sure if maybe using '<=' instead of only '<' in the while condition test might have something to do with it, though it seems unlikely.
Back to top
View user's profile Send private message
kirani
PostPosted: Mon Jun 10, 2002 12:10 pm    Post subject: Reply with quote

Jedi Knight

Joined: 05 Sep 2001
Posts: 3779
Location: Torrance, CA, USA

oops ... sorry I missed '=' in my post!
As you pointed out the while statement should be like this ..

Code:

while ( i <= totalcount)



Quote:
XML Writing Errors have occurred. No valid body of the document could be found.

This error indicates that logical message tree is not matching with your message definition in MRM. Changes made in while loop should not cause this error. Could you post a sample input message and required output message format here?
_________________
Kiran


IBM Cert. Solution Designer & System Administrator - WBIMB V5
IBM Cert. Solutions Expert - WMQI
IBM Cert. Specialist - WMQI, MQSeries
IBM Cert. Developer - MQSeries

Back to top
View user's profile Send private message Visit poster's website
AlexeiSkate
PostPosted: Mon Jun 10, 2002 12:37 pm    Post subject: Reply with quote

Centurion

Joined: 10 Apr 2002
Posts: 123

--- This is the Input msg dtd that was imported into WMQI

<!-- MellonDepositConfirmationFile Interface Message Definitions -->

<!-- Interface Control Data (shared) -->

<!ENTITY % controlData SYSTEM "MessageControlData.dtd">
%controlData;

<!-- Message Definitions -->

<!ELEMENT MellonDepositConfirmationTransaction (MessageControlData,(MD01,MD02,MellonDepositConfirmationLine+))>
<!ATTLIST MellonDepositConfirmationTransaction version CDATA #FIXED "1.0">

<!-- Record Definitions -->

<!ELEMENT MD01 (FILLER1,RECORDTYPE,RECORDSEQUENCE,BANKNUMBER,CHAINPARENT,DEPOSITSOURCE,TRANSMISSIONSITE,LETTERSERIALNUMBER,MERCHANTNUMBER,D7TRANSACTIONREFERENCENUMBER,AMOUNTDEPOSITREPRESENTED,SIGNOFDEPOSITAMOUNT,DEPOSITADJUSTMENTAMOUNT,SIGNOFDEPOSITADJUSTMENTAMOUNT,DATEDEPOSITPROCESSED,FUNDINGCBMETHOD,FUNDINGCBACCOUNTNUMBER,FUNDINGCBTRANSITROUTINGNUMBER,FUNDINGCBLISTPOSTIDENTIFIER,FUNDINGLEVELRELATIONSHIP,FUNDINGADJUSTMENTIDENTIFIER,DEPOSITSTATUS,MERCHANTSTATUS,FILLER2)>
<!ELEMENT MD02 (FILLER1,RECORDTYPE,RECORDSEQUENCE,MERCHANTDESCRIPTIVE,MERCHANTPHONENUMBER,MERCHANTFAXNUMBER,MERCHANTMCC,MERCHANT5DIGITZIP,MERCHANT4DIGITZIP,FILLER2)>

<!ELEMENT MellonDepositConfirmationLine (TD01, TD02)>
<!ELEMENT TD01 (FILLER1,RECORDTYPE,RECORDSEQUENCE,MTRANSACTIONTYPE,CARDHOLDERNUMBER,CARDTYPE,AUTHORIZATIONCODE,D7TRANSACTIONREFERENCENUMBER,INTERCHANGECLASS,DETAILSTATUSCODE,DATEOFTRANSACTION,MICROFILMNUMBER,TRANSACTIONAMOUNT,POSTERMINALCAPABILITY,POSENTRYMODE,AUTHSOURCE,CARDHOLDERIDMETHOD,SWITCHSETTLEMENTDATE,CREDITDEBITINDICATOR,PAYMENTSERVICEINDICATOR,TRANSACTIONIDENTIFIER,VALIDATIONCODE,AUTHRESPONSECODE,AUTHORIZEDAMOUNT,AUTHCURRENCYCODE,CREDITSETTLEMENTINDICATOR,FILLER2)>
<!ELEMENT TD02 (FILLER1,RECORDTYPE,RECORDSEQUENCE,FUNDINGDATE,FILLER2)>

<!-- Field Definitions -->

<!ELEMENT FILLER1 (#PCDATA)>
<!ELEMENT RECORDTYPE (#PCDATA)>
<!ELEMENT RECORDSEQUENCE (#PCDATA)>
<!ELEMENT BANKNUMBER (#PCDATA)>
<!ELEMENT CHAINPARENT (#PCDATA)>
<!ELEMENT DEPOSITSOURCE (#PCDATA)>
<!ELEMENT TRANSMISSIONSITE (#PCDATA)>
<!ELEMENT LETTERSERIALNUMBER (#PCDATA)>
<!ELEMENT MERCHANTNUMBER (#PCDATA)>
<!ELEMENT D7TRANSACTIONREFERENCENUMBER (#PCDATA)>
<!ELEMENT AMOUNTDEPOSITREPRESENTED (#PCDATA)>
<!ELEMENT SIGNOFDEPOSITAMOUNT (#PCDATA)>
<!ELEMENT DEPOSITADJUSTMENTAMOUNT (#PCDATA)>
<!ELEMENT SIGNOFDEPOSITADJUSTMENTAMOUNT (#PCDATA)>
<!ELEMENT DATEDEPOSITPROCESSED (#PCDATA)>
<!ELEMENT FUNDINGCBMETHOD (#PCDATA)>
<!ELEMENT FUNDINGCBACCOUNTNUMBER (#PCDATA)>
<!ELEMENT FUNDINGCBTRANSITROUTINGNUMBER (#PCDATA)>
<!ELEMENT FUNDINGCBLISTPOSTIDENTIFIER (#PCDATA)>
<!ELEMENT FUNDINGLEVELRELATIONSHIP (#PCDATA)>
<!ELEMENT FUNDINGADJUSTMENTIDENTIFIER (#PCDATA)>
<!ELEMENT DEPOSITSTATUS (#PCDATA)>
<!ELEMENT MERCHANTSTATUS (#PCDATA)>
<!ELEMENT FILLER2 (#PCDATA)>
<!ELEMENT MERCHANTDESCRIPTIVE (#PCDATA)>
<!ELEMENT MERCHANTPHONENUMBER (#PCDATA)>
<!ELEMENT MERCHANTFAXNUMBER (#PCDATA)>
<!ELEMENT MERCHANTMCC (#PCDATA)>
<!ELEMENT MERCHANT5DIGITZIP (#PCDATA)>
<!ELEMENT MERCHANT4DIGITZIP (#PCDATA)>
<!ELEMENT MTRANSACTIONTYPE (#PCDATA)>
<!ELEMENT CARDHOLDERNUMBER (#PCDATA)>
<!ELEMENT CARDTYPE (#PCDATA)>
<!ELEMENT AUTHORIZATIONCODE (#PCDATA)>
<!ELEMENT INTERCHANGECLASS (#PCDATA)>
<!ELEMENT DETAILSTATUSCODE (#PCDATA)>
<!ELEMENT DATEOFTRANSACTION (#PCDATA)>
<!ELEMENT MICROFILMNUMBER (#PCDATA)>
<!ELEMENT TRANSACTIONAMOUNT (#PCDATA)>
<!ELEMENT POSTERMINALCAPABILITY (#PCDATA)>
<!ELEMENT POSENTRYMODE (#PCDATA)>
<!ELEMENT AUTHSOURCE (#PCDATA)>
<!ELEMENT CARDHOLDERIDMETHOD (#PCDATA)>
<!ELEMENT SWITCHSETTLEMENTDATE (#PCDATA)>
<!ELEMENT CREDITDEBITINDICATOR (#PCDATA)>
<!ELEMENT PAYMENTSERVICEINDICATOR (#PCDATA)>
<!ELEMENT TRANSACTIONIDENTIFIER (#PCDATA)>
<!ELEMENT VALIDATIONCODE (#PCDATA)>
<!ELEMENT AUTHRESPONSECODE (#PCDATA)>
<!ELEMENT AUTHORIZEDAMOUNT (#PCDATA)>
<!ELEMENT AUTHCURRENCYCODE (#PCDATA)>
<!ELEMENT CREDITSETTLEMENTINDICATOR (#PCDATA)>
<!ELEMENT FUNDINGDATE (#PCDATA)>

**** This is the Ouput Msg dtd that was imported into WMQI

<!ELEMENT GeneralLedgerVoucherCanonical (HeaderElements,LineElements+)>
<!ATTLIST GeneralLedgerVoucherCanonical version CDATA #FIXED "1.0">

<!-- Record Definitions -->

<!ELEMENT HeaderElements (CEVENTCLASSIFICATION?,CEVENTDOCID?,CEVENTDATE?,CEVENTACTION?,CEVENTLINEID?,CSITEID?,CACCOUNTINGPERIOD?,CDESCRIPTION?,CDOCUMENTTYPE?,CREPORTINGACCOUNTINGPERIOD?)>
<!ELEMENT LineElements (CACTIVITY?,CBEGINNINGBFY?,CBUDGETOBJECT?,CCANCELEDBEGINNINGBFY?,CCANCELEDENDBFY?,CCANCELEDFUND?,CCOSTORGANIZATION?,CLEVEL1ORGANIZATION?,CLEVEL2ORGANIZATION?,CENDBFY?,CFUND?,CPROGRAM?,CPROJECT?,CSUBBUDGETOBJECT?,CSUBCOSTORGANIZATION?,CSUBORGANIZATION?,CSUBPROJECT?,CUSERDIMENSION1?,CUSERDIMENSION2?,CUSERDIMENSION3?,CUSERDIMENSION4?,CUSERDIMENSION5?,CACCOUNTINGTEMPLATEID?,CREIMBURSEMENTOBJECTCODE?,CREIMBURSEMENTSUBOBJECTCODE?,CREVENUESOURCE?,CAGREEMENTLINENUMBER?,CAGREEMENTNUMBER?,CREFERENCEDCOMMODITYLINENUMBER?,CREFERENCEDDOCUMENTNUMBER?,CREFERENCEDDOCUMENTTYPE?,CREFERENCEDACCOUNTINGLINENUMBER?,CACCOMPLISHEDDATE?,CACCOUNTINGPERIOD?,CDESCRIPTION?,CLINEAMOUNT?,CTRANSACTIONTYPE?,CVENDORCODE?,CPOSTINGEVENTIDENTIFIER?,CINCREASEDECREASEFLAG?)>

<!-- Field Definitions -->

<!ELEMENT CEVENTCLASSIFICATION (#PCDATA)>
<!ELEMENT CEVENTDOCID (#PCDATA)>
<!ELEMENT CEVENTDATE (#PCDATA)>
<!ELEMENT CEVENTACTION (#PCDATA)>
<!ELEMENT CEVENTLINEID (#PCDATA)>
<!ELEMENT CSITEID (#PCDATA)>
<!ELEMENT CACCOUNTINGPERIOD (#PCDATA)>
<!ELEMENT CDESCRIPTION (#PCDATA)>
<!ELEMENT CDOCUMENTTYPE (#PCDATA)>
<!ELEMENT CREPORTINGACCOUNTINGPERIOD (#PCDATA)>
<!ELEMENT CACTIVITY (#PCDATA)>
<!ELEMENT CBEGINNINGBFY (#PCDATA)>
<!ELEMENT CBUDGETOBJECT (#PCDATA)>
<!ELEMENT CCANCELEDBEGINNINGBFY (#PCDATA)>
<!ELEMENT CCANCELEDENDBFY (#PCDATA)>
<!ELEMENT CCANCELEDFUND (#PCDATA)>
<!ELEMENT CCOSTORGANIZATION (#PCDATA)>
<!ELEMENT CLEVEL1ORGANIZATION (#PCDATA)>
<!ELEMENT CLEVEL2ORGANIZATION (#PCDATA)>
<!ELEMENT CENDBFY (#PCDATA)>
<!ELEMENT CFUND (#PCDATA)>
<!ELEMENT CPROGRAM (#PCDATA)>
<!ELEMENT CPROJECT (#PCDATA)>
<!ELEMENT CSUBBUDGETOBJECT (#PCDATA)>
<!ELEMENT CSUBCOSTORGANIZATION (#PCDATA)>
<!ELEMENT CSUBORGANIZATION (#PCDATA)>
<!ELEMENT CSUBPROJECT (#PCDATA)>
<!ELEMENT CUSERDIMENSION1 (#PCDATA)>
<!ELEMENT CUSERDIMENSION2 (#PCDATA)>
<!ELEMENT CUSERDIMENSION3 (#PCDATA)>
<!ELEMENT CUSERDIMENSION4 (#PCDATA)>
<!ELEMENT CUSERDIMENSION5 (#PCDATA)>
<!ELEMENT CACCOUNTINGTEMPLATEID (#PCDATA)>
<!ELEMENT CREIMBURSEMENTOBJECTCODE (#PCDATA)>
<!ELEMENT CREIMBURSEMENTSUBOBJECTCODE (#PCDATA)>
<!ELEMENT CREVENUESOURCE (#PCDATA)>
<!ELEMENT CAGREEMENTLINENUMBER (#PCDATA)>
<!ELEMENT CAGREEMENTNUMBER (#PCDATA)>
<!ELEMENT CREFERENCEDCOMMODITYLINENUMBER (#PCDATA)>
<!ELEMENT CREFERENCEDDOCUMENTNUMBER (#PCDATA)>
<!ELEMENT CREFERENCEDDOCUMENTTYPE (#PCDATA)>
<!ELEMENT CREFERENCEDACCOUNTINGLINENUMBER (#PCDATA)>
<!ELEMENT CACCOMPLISHEDDATE (#PCDATA)>
<!ELEMENT CLINEAMOUNT (#PCDATA)>
<!ELEMENT CTRANSACTIONTYPE (#PCDATA)>
<!ELEMENT CVENDORCODE (#PCDATA)>
<!ELEMENT CPOSTINGEVENTIDENTIFIER (#PCDATA)>
<!ELEMENT CINCREASEDECREASEFLAG (#PCDATA)>



**** This is the Output XML Msg coming out of the Compute Node mapping


(
(0x1000000)Properties = (
(0x3000000)MessageSet = 'DP6FPGG088001'
(0x3000000)MessageType = 'm_GeneralLedgerVoucherCanonical'
(0x3000000)MessageFormat = ''
(0x3000000)Encoding = 273
(0x3000000)CodedCharSetId = 819
(0x3000000)Transactional = TRUE
(0x3000000)Persistence = FALSE
(0x3000000)CreationTime = GMTTIMESTAMP '2002-06-10 20:53:14.042'
(0x3000000)ExpirationTime = -1
(0x3000000)Priority = 0
(0x3000000)ReplyIdentifier = X'000000000000000000000000000000000000000000000000'
(0x3000000)ReplyProtocol = 'MQ'
(0x3000000)Topic = NULL
)
(0x1000000)MQMD = (
(0x3000000)SourceQueue = 'MELLONBANK_DEPOSITCONFIRMATION'
(0x3000000)Transactional = TRUE
(0x3000000)Encoding = 273
(0x3000000)CodedCharSetId = 819
(0x3000000)Format = 'MQSTR '
(0x3000000)Version = 2
(0x3000000)Report = 0
(0x3000000)MsgType = 8
(0x3000000)Expiry = -1
(0x3000000)Feedback = 0
(0x3000000)Priority = 0
(0x3000000)Persistence = 0
(0x3000000)MsgId = X'414d51204d5153495f53414d504c455fe9fc043d12a00100'
(0x3000000)CorrelId = X'000000000000000000000000000000000000000000000000'
(0x3000000)BackoutCount = 0
(0x3000000)ReplyToQ = ' '
(0x3000000)ReplyToQMgr = 'MQSI_SAMPLE_QM '
(0x3000000)UserIdentifier = 'aphan '
(0x3000000)AccountingToken = X'16010515000000828ba62842c77452235f636b3811000000000000000000000b'
(0x3000000)ApplIdentityData = ' '
(0x3000000)PutApplType = 11
(0x3000000)PutApplName = 'C:\winnt\system32\java.exe '
(0x3000000)PutDate = DATE '2002-06-10'
(0x3000000)PutTime = GMTTIME '20:53:29.470'
(0x3000000)ApplOriginData = ' '
(0x3000000)GroupId = X'000000000000000000000000000000000000000000000000'
(0x3000000)MsgSeqNumber = 1
(0x3000000)Offset = 0
(0x3000000)MsgFlags = 0
(0x3000000)OriginalLength = -1
)
(0x1000010)XML = (
(0x1000000)HeaderElements = (
(0x1000000)CDESCRIPTION = (
(0x2000000) = 'MellonBankInterface. Deposit Number: 458983 Deposit Date: 032202'
)
(0x1000000)CEVENTDOCID = (
(0x2000000) = 'XX_458983_032202_SSSS'
)
(0x1000000)CEVENTCLASSIFICATION = (
(0x2000000) = 'SV'
)
(0x1000000)CEVENTACTION = (
(0x2000000) = 'New'
)
(0x1000000)CSITEID = (
(0x2000000) = 'MELLON'
)
(0x1000000)CDOCUMENTTYPE = (
(0x2000000) = 'CC'
)
)
(0x1000000)LineElements = (
(0x1000000)CREFERENCEDACCOUNTINGLINENUMBER = (
(0x2000000) = '1'
)
(0x1000000)CTRANSACTIONTYPE = (
(0x2000000) = '01'
)
(0x1000000)CPOSTINGEVENTIDENTIFIER = (
(0x2000000) = 'glTransfer'
)
)
)
)


--- This is the ESQL mapping logic I used for the repeating lines mapping. If I only map the header then I don't get an exception.

DECLARE i INTEGER;
SET i = 1;

WHILE i <= CARDINALITY(InputRoot.XML."MellonDepositConfirmationTransaction"."MellonDepositConfirmationLine"[]) DO
SET "OutputRoot"."XML"."LineElements"[i]."CREFERENCEDACCOUNTINGLINENUMBER" = '1';
SET "OutputRoot"."XML"."LineElements"[i]."CTRANSACTIONTYPE" = '01';
SET "OutputRoot"."XML"."LineElements"[i]."CPOSTINGEVENTIDENTIFIER" = 'glTransfer';

SET i = i + 1;
END WHILE;



Thanks,
Alex
Back to top
View user's profile Send private message
AlexeiSkate
PostPosted: Mon Jun 10, 2002 2:22 pm    Post subject: Reply with quote

Centurion

Joined: 10 Apr 2002
Posts: 123

Kiran,

I got the line mapping to work by using the (XML.tag) qualifier in my reference to the LineElements mapping:

SET "OutputRoot".XML.(XML.tag)."LineElements"[i]."CREFERENCEDACCOUNTINGLINENUMBER" = '1';


It's stated in a Redbook that
Quote:
it is a good practice to include the (XML.tag) qualifier, because in a well-formed XML document with an XML document header, the parser may misinterpret your XML message body tag references as being references to attributes of the XML document header.


I guess it means that the XML parser thought that my references to the lineElements tags were for the XML document header when I didn't include the (XML.tag) qualifier.

- Alex
Back to top
View user's profile Send private message
kirani
PostPosted: Mon Jun 10, 2002 3:42 pm    Post subject: Reply with quote

Jedi Knight

Joined: 05 Sep 2001
Posts: 3779
Location: Torrance, CA, USA

That's great!

But, I don't think you are making use of DTD for output message here. In your compute node if you are write
OutputRoot.XML..... it will use self-defining XML instead of XML defined into MRM.

For making use of XML defined into MRM you should set appropriate values to Message properties by writing ..
SET OutputRoot.Properties.MessageDomain ='MRM';
SET OutputRoot.Properties.MessageSet = Your Messageset ID;
SET OutputRoot.Properties.MessageType = Your message ID;
SET OutputRoot.Properties.MessageFormat ='XML';

In your compute node, you should use something like ..

SET OutputRoot.MRM.HeaderElements.CEVENTCLASSIFICATION = 'A';
....

WHILE ...
SET OutputRoot.MRM.LineElements[i].CACTIVITY = something;
....
end while;

Hope this helps.
_________________
Kiran


IBM Cert. Solution Designer & System Administrator - WBIMB V5
IBM Cert. Solutions Expert - WMQI
IBM Cert. Specialist - WMQI, MQSeries
IBM Cert. Developer - MQSeries

Back to top
View user's profile Send private message Visit poster's website
Display posts from previous:   
Post new topic  Reply to topic Page 1 of 1

MQSeries.net Forum Index » WebSphere Message Broker (ACE) Support » How do I do mapping for an element that's repeatable ?
Jump to:  



You cannot post new topics in this forum
You cannot reply to topics in this forum
You cannot edit your posts in this forum
You cannot delete your posts in this forum
You cannot vote in polls in this forum
Protected by Anti-Spam ACP
 
 


Theme by Dustin Baccetti
Powered by phpBB © 2001, 2002 phpBB Group

Copyright © MQSeries.net. All rights reserved.