Cha*_*tin 5 reflection rpgle ibm-midrange
我希望我能用RPGLe做一些反思.通过反思,我的意思是:'在运行时确定对象功能的过程或机制.'
想象一下,你有这个数据结构:
D DS_Format DS Qualified Based(pDS_Format)
D Type 20I 0 Inz(1)
D Label 50A Inz('myLabel')
D Description 5000A Inz('myDescription')
Run Code Online (Sandbox Code Playgroud)
使用反射api,我可以这样做:
Reflection_ListSubfields(DS_Format);
Run Code Online (Sandbox Code Playgroud)
=>返回此数组:{'Type','Label','Description'}
然后,我可以这样做:
Reflection_GetSubfield(DS_Format : 'Label'); => return 'myLabel'
Run Code Online (Sandbox Code Playgroud)
我希望我也可以这样做:
Reflection_GetSubfieldType(DS_Format : 'Label'); => return 'A'
Reflection_GetSubfieldLength(DS_Format : 'Label'); => return 50
Reflection_GetSubfieldPrecision(DS_Format : 'Type'); => return 0
Run Code Online (Sandbox Code Playgroud)
有了这个,我希望我可以做这样的事情(有一些小工作):
SerializeXml(DS_Format); //I build xml with one line of code !
Run Code Online (Sandbox Code Playgroud)
得到:
<DS_Format>
<Type>1</Type>
<Label>myLabel</Label>
<Description>myDescription</Description>
</DS_Format>
Run Code Online (Sandbox Code Playgroud)
与DeserializeXml(myXml)相反;
反思会帮助我建立真正酷的apis.有什么办法吗?
我一直在考虑其中的一些概念,并且可能有解决办法。(我现在没有时间写完整的答案并充实细节,但等你看到有一些希望;-)尽管有些人可能认为这是一种作弊。)
基本概念是这样的:如果您定义了一个具有所需格式的表(如果您的日期结构允许 DS 进行外部定义),那么使用嵌入式 SQL,您可以描述该表或查询 SYSCOLUMNS 来获取字段定义,最好是在过程中。
诚然,这与反思不同,但可以达到相同的效果。人们可能只会在有限的情况下这样做。我相信其他人会指出各种各样的问题,但这里的重点是这是可能的。