The 2 is the IEN in the multiple. You don't want to
encode the literal
IENm, as you adding values, not accessing existing
ones. Instead, look
into the 'extended IENS' concepts of + and ?. The
use of + requests a
record to be added in the multiple and the ? permits
the value to be
'found' before deciding to add (if the + accompanies
it). While
simplistic, this lets you avoid duplicating entries.
So you might use an IENS of '+9,250' where the 250
is IEN 250 in the
main file and +9 means you are requesting the
addition of an entry in
the multiple. I used 9 to indicate it is just a
placeholder and is only
needed if you want to discover the IEN that was
created for the new
entry in the multiple (the 9 is a subscript in a
returned array of
assigned IENs).
Kevin Toppenberg wrote:
I am trying to wrap my mind around adding data with
multiples. I wonder if someone can help me.
My goal is to enable my scripting system to process
the following request:
<File id="TestMenu" File="OPTION">
<Field id="NAME">TestMenu</Field>
<Field id="MENU TEXT">Test2</Field>
<Field id="CREATOR">Dodd,Norman"</Field>
<Field id="Short Menu Text">Some Short
Text</Field>
<Field id="DELEGABLE">YES</Field>
<Field id="TYPE">menu</Field>
<Field id="MENU/.01">DIUSER</Field>
<Field id="MENU/SYNONYM">FM2</Field>
<Field id="MENU/DISPLAY ORDER">1</Field>
<Field id="MENU/.01">XMMGR</Field>
<Field id="MENU/SYNONYM">X2</Field>
<Field id="MENU/DISPLAY ORDER">1</Field>
</File>
I parse the above into the following structure,
with
this format:
Data(EntryNumber,FieldNum,[SubEntryNumber,FieldNumber])
Data(0,"Entries")=7
Data(0,"File")=19
Data(0,"File","Global")="^DIC(19,"
Data(1,.01)="TestMenu"
Data(1,.01,"MatchThis")=1
Data(2,1)="Test2"
Data(3,3.6)="Dodd,Norman"""
Data(4,10.1)="Some Short Text"
Data(5,13)="YES"
Data(6,4)="menu"
Data(7,10,0,"Entries")=2
Data(7,10,0,"File")=19.01
Data(7,10,1,.01)="DIUSER"
Data(7,10,1,.01,"MatchThis")=1
Data(7,10,1,2)="FM2"
Data(7,10,1,3)=1
Data(7,10,2,.01)="XMMGR"
Data(7,10,2,.01,"MatchThis")=1
Data(7,10,2,2)="X2"
Data(7,10,2,3)=1
I am able to work with the standard
("non-multiple")
fields without any problem. I use FILE^DIE to
stuff a
pre-existing record with the data that I want, or I
use UPDATE^DIE if I need to create a new record. I
do
a search for pre-existing data based on the
"MatchThis" entries, and get an IEN (internal entry
number) of the record to work with.
But now I am working to get the sub-file part
working.
I don't know how to get the IEN of the subfile
entries.
In the above example, I am working with the OPTION
file. Field MENU(#10) is a multiple, meaning that
when I add data to that field, the database really
holds a list of 'pointers' to entries in another
file.
I.e. the MENU sub file number is 19.01. So If I
have
2 'multiple' entries in field 10, then field 10
holds
2 pointers to 2 separate entries in file 19.01. I
suppose these 2 pointers are really IEN's--though
I'm
not sure how to get at them.
So when I go to set up my FDA array to pass to the
database, I need:
- File or subfile number -- Got this OK
- IENS -- I think this is my area of confusion.
(see
below)
- Field# -- field to access -- got this OK
- Value -- got this OK.
Re IENS, the documentation says the following:
An IENS is a comma-delimited list of internal
entry
numbers beginning with the lowest level subentry
and
ending with the top-level entry number. Regardless
of
how many levels exist, a "," is appended to the
end.
For example, to specify subentry 2 in a multiple
for
entry 250, IENS would equal "2,250,". The
corresponding values for the DA() array would be
DA=2
and DA(1)=250 (or D0=250 and D1=2). If you were
referencing the top level of the file, the IENS
would
be "250,"; DA=250 or D0=250.
What I don't understand is "to specify subentry 2
in a
multiple for entry 250, IENS would equal "2,250," "
(The DA explainations don't help me, because I'm
not
used to using the old interface either)
Is this "subentry 2" mean the second subentry of a
specified multiple field, or fieldnumber=2 ?
Also, I think I will need to search to see if the
subentries already exist, and call different
functions
depending on whether I need a new record vs.
stuffing
an old one.
So, to summarize, how would should my FDA look for
the
above data? Can it be done in one call, or would
multiple calls (i.e. separate calls for the
subentries) be needed?
I know this was a long post. Thanks for reading it.
:-)
Thanks.
Kevin
__________________________________
Do you Yahoo!?
New and Improved Yahoo! Mail - 100MB free storage!
http://promotions.yahoo.com/new_mail
-------------------------------------------------------
This SF.Net email is sponsored by BEA Weblogic
Workshop
FREE Java Enterprise J2EE developer tools!
Get your free copy of BEA WebLogic Workshop 8.1
today.
http://ads.osdn.com/?ad_id=5047&alloc_id=10808&op=click
_______________________________________________
Hardhats-members mailing list
[EMAIL PROTECTED]
https://lists.sourceforge.net/lists/listinfo/hardhats-members
--
Greg Kreis Pioneer Data Systems,
Inc.
http://www.PioneerDataSys.com - VistA Training and
Consulting
"Genius is childhood recaptured at will." (Charles
Baudelaire)