TGrp GROUP,TYPE
LIKE(AFile:Record)
END
AClsProc PROCEDURE(TGrp pGrp)
CODE
IF NOT pGrp.AField
Do Something with some fields
ELSE
Do Something with other fields
END
RETURN
You can loop through the group field with WHO(), then get at the data via WHAT(). But maybe it would be better to pass FILE, so you have access to blobs/memos. You can use PROP:Value and/or PROP:Record (if you want the actual record).
No blobs or memos. Only need to access current contents of the passed table buffer. Buffer would be from one of three SQL tables (ie Views) that have the exact same structure.
There’s no problem passing a type’d group and accessing the fields by name, even in an empty member class.
But since you want to access the current buffer of the file
Do you wish to pass the values of the current buffer
or are you expecting to see changes in passed object as the file buffer changes?
Exactly what I first thought. Error is: Label in prototype not defined.
Obviously, as a standalone file, the class, which will be used in only 2 of 40 dlls, is not seeing the file definitions in the data dll.
It’s a scope thing. You can define a type GROUP in your class to use in prototype. As long as it’s structured like your record, you should be OK passing your record to it.
Understand the scope thing as the problem. Given the number of fields in the group, I was hoping for a simple way to keep the group in sync with the dct defined record. In my original post I tried to show my typed group attempts.
I keep a file, gtRec.inc which has one row like the following for each table
gtRec_PRJ GROUP(PRJ:Record),TYPE,PRE(gtPRJ); END
In a ctYada.inc
INCLUDE('gtREC.inc'),ONCE
ctYada CLASS,TYPE,MODULE('ctYada.clw'),LINK('ctYada')
Project_Init PROCEDURE(*gtREC_Prj xPRJ, BOOL xReportAsShown)
END
in ctYada.CLW
MEMBER()
INCLUDE('ctYada.inc'),ONCE
MAP
END
ctYada.Project_Init PROCEDURE(*gtREC_Prj xPRJ, BOOL xReportAsShown)
CODE
IF xPRJ.SomeField
! do stuff
END
As I think about this, it’s likely that the INCLUDE(‘gtRec.inc’) will fail inside of a MEMBER() module
you’d need a MEMBER(‘MyProgram’) at which point you can see the global scope and could directly access the file buffers. Now that said, I find it quite useful to pass *gtRec_XXX around
If it’s not an issue to keep your class as generic, put the appropriate module name in the MEMBER() statement, then it will have scope of your app’s stuff.
Generated file? Could come in handy elsewhere too.
This was easy to try. Compiled without error on this class but ended up bringing errors in another global class (ie Icetips Task Manager). No idea why but well worth testing further.
Interestingly I had a similar need - the need to work on tables while the structure of the table was either unknown, or little known, and the declaration of the table was out of scope.
It’s straight-forward to do, passing the Record around as a Group, or indeed passing the File structure around, and then using prop:record to assign the record to a &group.
The class grew because I wanted to do other related things, and that became the MyTable class.