S
Stefan Drissen
Guest
OpenEdge 11.5.1 x64 I'm attempting to massage some data from the database into a dataset but am running into a wall. The child table has different datatypes than the parent, so I thought that providing an alternative fill-where-string should get the data: /* "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. create stexob. assign stexob.key_value = string( debtor.debtor ) stexob.seqnr_stexob = 2. create debtor. assign debtor.debtor = 2 debtor.name = "two". create stexob. assign stexob.key_value = string( debtor.debtor ) stexob.seqnr_stexob = 1. /* temp-tables */ define temp-table tmp-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 tmp-stexob serialize-name "stexob" field debtor_recid as recid 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 parent-id-relation for tmp-debtor, tmp-stexob parent-id-field debtor_recid . 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-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 before-fill-stexob: define input parameter dataset for debtors. data-source dsstexob:fill-where-string = "where stexob.key_value = string( 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. The problem is that none of the child records are retrieved. In a different attempt I have added the character key value to the parent and filled that in an after-row-fill procedure: /* "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. create stexob. assign stexob.key_value = string( debtor.debtor ) stexob.seqnr_stexob = 2. create debtor. assign debtor.debtor = 2 debtor.name = "two". create stexob. assign stexob.key_value = string( debtor.debtor ) stexob.seqnr_stexob = 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 index ttix is unique primary debtor. define temp-table tmp-stexob serialize-name "stexob" field debtor_recid as recid 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 ) . 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 ). /* fill */ dataset debtors:fill(). procedure after-row-fill-debtor: define input parameter dataset for debtors. tmp-debtor.stexob_key_value = string( 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. Am I missing something obvious?
Continue reading...
Continue reading...