You might take a look at Cedarrville's DOWNLOAD utility
ftp://ftp.cedarville.edu/download/download.pdf
Peter Cheney wrote:
Hi Everyone,
Hoping someone can help me here or at least point me in the right direction
please.
I am trying to generate xml output via a retrieve sentence so that a single
valued field is either a) the parent to 3 multi-valued fields, or b) nested
correctly within a parent element along with multi-valued fields.
The sentence is using the TOXML and ELEMENTS keywords. According to the retrieve manual
due to the inclusion of the ELEMENTS keyword the output is element-centric.
I think what I need to do is specify attribute-centric output for just the few dictionary
items listed below. According to the manual this is called Mixed Mode. Can
this be done in a mapping file?
Also can I use a file other than XML to store a custom mapping file? If so how do I
do this? (Why? Because some genius designed our app to use the XML file for other
data as well and as a consequence it gets cleared out regularly.)
Will a mapping file allow me to customise how the dictionary items are output
and can this output be nested as desired below?
I've already made an association called PENDING_AUTHS for the three MV'd fields
AUTH_NUMBER, AUTH_DATE, AUTH_AMOUNT and these are all converted but in the
element centric mode thus:
FILENAME2
_ID9/_ID
REPAY_AMOUNT538.99/REPAY_AMOUNT
NEXT_DUE02 SEP 2012/NEXT_DUE
AUTH_TOTAL99.00/AUTH_TOTAL
PENDING_AUTHS_MV
AUTH_NUMBER123456/AUTH_NUMBER
AUTH_DATE22/01/13/AUTH_DATE
AUTH_AMOUNT40.00/AUTH_AMOUNT
/PENDING_AUTHS_MV
PENDING_AUTHS_MV
AUTH_NUMBER654321/AUTH_NUMBER
AUTH_DATE23/01/13/AUTH_DATE
AUTH_AMOUNT59.00/AUTH_AMOUNT
/PENDING_AUTHS_MV
If I change the dictionary item AUTH_TOTAL from S to M and add it to the
association then I get that repeated within the PENDING_AUTHS node, the first
one has the data and the remainder are empty like this:
FILENAME2
_ID9/_ID
REPAY_AMOUNT538.99/REPAY_AMOUNT
NEXT_DUE02 SEP 2012/NEXT_DUE
PENDING_AUTHS_MV
AUTH_TOTAL99.00/AUTH_TOTAL
AUTH_NUMBER123456/AUTH_NUMBER
AUTH_DATE22/01/13/AUTH_DATE
AUTH_AMOUNT40.00/AUTH_AMOUNT
/PENDING_AUTHS_MV
PENDING_AUTHS_MV
AUTH_TOTAL/
AUTH_NUMBER654321/AUTH_NUMBER
AUTH_DATE23/01/13/AUTH_DATE
AUTH_AMOUNT59.00/AUTH_AMOUNT
/PENDING_AUTHS_MV
So I tried to wrap this a basic subroutine but I couldn't get that to work
either since I couldn't work out the correct syntax of the array to return. Is
there a place that documents this? Everything I tried just mangled the data.
Ideally what I'd like to get is something like this:
FILENAME2
_ID9/_ID
REPAY_AMOUNT538.99/REPAY_AMOUNT
NEXT_DUE02 SEP 2012/NEXT_DUE
AUTHS TOTAL=99.00
AUTH NUMBER=123456 DATE=22/01/13 AMOUNT=40.00/AUTH
AUTH_NUMBER=654321 DATE=23/01/13 AMOUNT=59.00/AUTH
/AUTHS
or even this would do:
FILENAME2
_ID9/_ID
REPAY_AMOUNT538.99/REPAY_AMOUNT
NEXT_DUE02 SEP 2012/NEXT_DUE
PENDING_AUTHS_MV
TOTAL99.00/TOTAL
AUTH
AUTH_NUMBER123456/AUTH_NUMBER
AUTH_DATE22/01/13/AUTH_DATE
AUTH_AMOUNT40.00/AUTH_AMOUNT
/AUTH
AUTH
AUTH_NUMBER654321/AUTH_NUMBER
AUTH_DATE23/01/13/AUTH_DATE
AUTH_AMOUNT59.00/AUTH_AMOUNT
/AUTH
/PENDING_AUTHS_MV
Not really fussy about the element names. Just wondering if I can achieve the
correct element structure/nesting if I employ a mapping to create a mixed mode
xml document?
Any tips for where to start with the mapping? Do I need to specify all map
elements or can I leave out unwanted ones to their system defaults? Will this
map affect all xml output in the same file or just those dictionary items
specifically in the map?
Many thanks in advance,
Cheers
Peter
Dictionary items
PENDING_AUTHS
2 lines long.
: P
0001: PH
0002: AUTH_NUMBER AUTH_DATE AUTH_AMOUNT
Bottom at line 2.
: EX
AUTH_TOTAL
SELECTed record name = AUTH_TOTAL.
This is a Type I Descriptor last compiled on 05/02/13 at 09:49.
20 lines long.
: L7
0001: I
0002: EXTRACT(RAISE(TRANS(FILENAME1,ACCOUNT,10,X)),1,1,1)
0003: MD2
0004: Total▒Auths.
0005: 15R
0006: S
0007:
: EX
AUTH_NUMBER
SELECTed record name = AUTH_NUMBER.
This is a Type I Descriptor last compiled on 05/02/13 at 10:24.
20 lines long.
: L7
0001: I
0002: EXTRACT(RAISE(TRANS(FILENAME1,ACCOUNT,11,X)),1,0,0)
0003:
0004: Auth.▒Number
0005: 10R
0006: M
0007: PENDING_AUTHS
: EX
AUTH_DATE
SELECTed record name = AUTH_DATE.
This is a Type I Descriptor last compiled on 05/02/13 at 10:24.
20 lines long.
: L7
0001: I
0002: EXTRACT(RAISE(TRANS(FILENAME1,ACCOUNT,12,X)),1,0,0)
0003: D2/
0004: Auth.▒Date
0005: 8R
0006: M
0007: PENDING_AUTHS
: EX
AUTH_AMOUNT
SELECTed record name = AUTH_AMOUNT.
This is a Type I Descriptor last compiled on 05/02/13 at 10:24.
20 lines long.
: L7
0001: I
0002: EXTRACT(RAISE(TRANS(FILENAME1,ACCOUNT,13,X)),1,0,0)
0003: MD2
0004: Auth.▒Amount
0005: 12R
0006: M