A Clarion limitation of PROP and PROPLIST is you cannot get to the #FIELD() or FROM(Q) at runtime. A template like yours could generate User Defined properties (added 10/27/2015 in C10.11975) with that information. E.g. given this LIST:
LIST,AT(9,7,668,179),USE(?BrowseEmpTypes),FROM(Queue:Browse)
#FIELDS(TYP:Code,TYP:Desc,TYP:NormalHrsPerDay,TYP:CertifiedPersonnel,TeacherSub,TYP:TrsJobCategory)
Template can generate these properties
?BrowseEmpTypes{'#Field',1}='TYP:Code'
?BrowseEmpTypes{'#Field',2}='TYP:Desc'
?BrowseEmpTypes{'#Field',3}='TYP:NormalHrsPerDay'
?BrowseEmpTypes{'#Field',4}='TYP:CertifiedPersonnel'
?BrowseEmpTypes{'#Field',5}='TeacherSub'
?BrowseEmpTypes{'#Field',6}='TYP:TrsJobCategory'
?BrowseEmpTypes{'#FldUse',1}=Address(TYP:Code)
?BrowseEmpTypes{'#FldUse',2}=Address(TYP:Desc)
?BrowseEmpTypes{'#FldUse',3}=Address(TYP:NormalHrsPerDay)
?BrowseEmpTypes{'#FldUse',4}=Address(TYP:CertifiedPersonnel)
?BrowseEmpTypes{'#FldUse',5}=Address(TeacherSub)
?BrowseEmpTypes{'#FldUse',6}=Address(TYP:TrsJobCategory)
?BrowseEmpTypes{'#From'}='Queue:Browse'
?BrowseEmpTypes{'#FromUse'}=Address(Queue:Browse)
Might need to know the Parents:
?BrowseEmpTypes{'#FieldParent',3}='TYP:Record'
?BrowseEmpTypes{'#FldParentUse',3}=ADDRESS(TYP:Record)
I tested the above code showing a message:
Message(?BrowseEmpTypes{'#Field',4} &'<9>'& ?BrowseEmpTypes{'#FldUse',4} & |
'||'&?BrowseEmpTypes{'#From'} &'<9>'& ?BrowseEmpTypes{'#FromUse'} )
The UDFs are nice because the scope is for any code that can see the Window so beyond the main any Routines and Classes. If we can agree on the {‘Names’} then any template or class code can use them. A name of {"#FIELD"} seems obvious and logical. I think we need the USE Address to be able to assign an ANY and operate on the variable.
So just an idea…