[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
[quote user="Peter Judge"] Nothing obvious. The datatype conversion is causing the AVM problems. I got some data by doing having the same data-relation you have in the last example ? 1 2 3 define dataset debtors for tmp-debtor, tmp-stexob data-relation for tmp-debtor, tmp-stexob relation-fields ( stexob_key_value, key_value ) . And I changed the before-fill-stexob procedure to ? 1 2 3 4 5 6 7 8 9 10 11 12 13 procedure before- fill -stexob: define input parameter dataset for debtors. data-source dsstexob: fill-where-string = "where stexob.key_value = " + quoter ( tmp-debtor.debtor ). message 'before-fill-stexob' skip tmp-debtor.debtor data-source dsstexob: query : prepare-string view-as alert-box . end procedure . and all the data was loaded: ? 1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 www.w3.org/.../XMLSchema-instance"> one two Note that it is NOT nested. If you add the NESTED qualifier to the DATA-RELATION statement you will see errors along the lines of Failed to auto-prepare an automatic fill query. (11981) This is because the field types are mismatched (I suspect). [/quote] As soon as the query is nested (with matching data types) the child records are not considered part of their parent... but... relooking at the code, of the /first/ example - the part missing is the parent key not being filled. So for creating a dataset based on the database, the following seems to do the trick: /* "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 tmp-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 tmp-stexob serialize-name "stexob" field key_value as char serialize-hidden field seqnr_stexob as int xml-node-type "attribute" field descr as char index ttix is unique primary key_value seqnr_stexob. /* dataset */ define dataset debtors for tmp-debtor, tmp-stexob data-relation for tmp-debtor, tmp-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 tmp-debtor:handle:attach-data-source( data-source dsdebtor:handle ). buffer tmp-debtor:handle:set-callback-procedure( "after-row-fill", "after-row-fill-debtor" ). buffer tmp-stexob:handle:attach-data-source( data-source dsstexob:handle ). buffer tmp-stexob:handle:set-callback-procedure( "before-fill", "before-fill-stexob" ). /* fill */ dataset debtors:fill(). procedure after-row-fill-debtor: define input parameter dataset for debtors. tmp-debtor.stexob_key_value = string( debtor.debtor ). end procedure. procedure before-fill-stexob: define input parameter dataset for debtors. data-source dsstexob:fill-where-string = substitute( "where stexob.key_value = &1", quoter( tmp-debtor.debtor ) ). end procedure. /* display result */ def var lcc as longchar no-undo. dataset debtors:handle:write-xml( "longchar", lcc, true ). message string( lcc ) view-as alert-box. I will have to kick this code around a bit more to see if it is really doing what I want. Getting to this stage I have had various moments that I thought I had it figured but then something went wrong again. Thank you both for the comments.

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