[progress Communities] [progress Openedge Abl] Forum Post: Re: Dataset With Custom Fill...

  • Thread starter Thread starter Stefan Drissen
  • Start date Start date
Status
Not open for further replies.
S

Stefan Drissen

Guest
Grrrr.... second message was on the initial longchar... but nearly there... The combination of data-relation and parent-id-relation on the same two buffers is messing up the read-xml. With only the parent-id-relation, the recids of the parent are filled, but when there is also a data-relation, the recids of the parent are /not/ filled. If the header data type fixed field is not serialized, the data-relation import fails to find the children. So back to keeping two variants on the dataset for read / write - the trick to getting the data out needs to be reversed for getting the data in (ie add a dummy key field to the child instead of to the parent). Some additional processing will be required to get the dataset back into the database: /* "database" tables */ define temp-table debtor field debtor as int64 field name as char index ttix is unique primary debtor. define temp-table stexob field key_value as char field seqnr_stexob as int field descr as char index ttix is unique primary key_value seqnr_stexob. create debtor. assign debtor.debtor = 1 debtor.name = "one". create stexob. assign stexob.key_value = string( debtor.debtor ) stexob.seqnr_stexob = 1 stexob.descr = "1.1". create stexob. assign stexob.key_value = string( debtor.debtor ) stexob.seqnr_stexob = 2 stexob.descr = "1.2". create debtor. assign debtor.debtor = 2 debtor.name = "two". create stexob. assign stexob.key_value = string( debtor.debtor ) stexob.seqnr_stexob = 1 stexob.descr = "2.1" . /* temp-tables */ define temp-table otmp-debtor serialize-name "debtor" field debtor as int64 xml-node-type "attribute" field name as char field stexob_key_value as char serialize-hidden index ttix is unique primary debtor. define temp-table otmp-stexob serialize-name "stexob" field key_value as char xml-node-type "attribute" field seqnr_stexob as int xml-node-type "attribute" field descr as char index ttix01 is primary unique key_value seqnr_stexob. /* dataset */ define dataset odebtors serialize-name "debtors" for otmp-debtor, otmp-stexob data-relation for otmp-debtor, otmp-stexob relation-fields ( stexob_key_value, key_value ) foreign-key-hidden nested . define data-source dsdebtor for debtor keys ( debtor ). define data-source dsstexob for stexob keys ( key_value, seqnr_stexob ). buffer otmp-debtor:handle:attach-data-source( data-source dsdebtor:handle ). buffer otmp-debtor:handle:set-callback-procedure( "after-row-fill", "after-row-fill-debtor" ). buffer otmp-stexob:handle:attach-data-source( data-source dsstexob:handle ). buffer otmp-stexob:handle:set-callback-procedure( "before-fill", "before-fill-stexob" ). /* fill */ dataset odebtors:fill(). procedure after-row-fill-debtor: define input parameter dataset for odebtors. otmp-debtor.stexob_key_value = string( debtor.debtor ). end procedure. procedure before-fill-stexob: define input parameter dataset for odebtors. data-source dsstexob:fill-where-string = "where stexob.key_value = string( otmp-debtor.debtor )" . end procedure. /* display result */ def var lccout as longchar no-undo. dataset odebtors:handle:write-xml( "longchar", lccout, true ). message string( lccout ) view-as alert-box. /* and now import it again */ define temp-table itmp-debtor serialize-name "debtor" field debtor as int64 xml-node-type "attribute" field name as char index ttix is unique primary debtor. define temp-table itmp-stexob serialize-name "stexob" field debtor as int64 xml-node-type "attribute" field seqnr_stexob as int xml-node-type "attribute" field descr as char field key_value as char serialize-hidden index ttix01 is primary unique debtor seqnr_stexob. define dataset idebtors serialize-name "debtors" for itmp-debtor, itmp-stexob data-relation for itmp-debtor, itmp-stexob relation-fields ( debtor, debtor ) foreign-key-hidden nested . dataset idebtors:handle:read-xml( "longchar", lccout, "empty", ?, ? ). for each itmp-stexob: itmp-stexob.key_value = string( itmp-stexob.debtor ). end. def var lccin as longchar no-undo. dataset idebtors:handle:write-xml( "longchar", lccin, true ). message string( lccin ) skip lccin = lccout view-as alert-box. Now let's see how long I can kick at this... :-)

Continue reading...
 
Status
Not open for further replies.
Back
Top