S
Simon L. Prinsloo
Guest
This could also be achieved by a slightly enhanced version of reflection access to annotations (see community.progress.com/.../reflection_-_support_for_annotations) , in the line of a Progress-defined enum like this: @RCODE( { Type="Serializable-UserDefinedInfo" } , [ FieldName1="value2" [, FieldName2="value2" [, ...] ] ] ) Where Serializable-UserDefinedInfo is a user defined type that must be serializable, with only primitive typed properties taking part in serialization, and can be retrieved as a Progress.Lang.Object using RCODE-INFO:CUSTOM-INFO. Example: /* Acme/Rcode/Info.cls */ CLASS Acme.Rcode.Info SERIALIZABLE: DEFINE PUBLIC PROPERTY MajorVersion AS INT GET. SET. DEFINE PUBLIC PROPERTY MinorVersion AS INT GET. SET. DEFINE PUBLIC PROPERTY PatchLevel AS INT GET. SET. DEFINE PUBLIC PROPERTY BuildNo AS INT GET. SET. DEFINE PUBLIC PROPERTY Version AS STRING GET(): RETURN SUBSTITUTE("&1.&2.&3 Build &4", MajorVersion, STRING(MinorVersion,"99"), STRING(PatchLevel,"999"), BuildNo). END GET. DEFINE PUBLIC PROPERTY CopyRight AS CHARACTER INIT "Acme Inc. (2016)" NO-UNDO GET. DEFINE PUBLIC PROPERTY Data AS CHARACTER GET. SET. @Hidden(). DEFINE PUBLIC PROPERTY TechInfo AS CHARACTER GET. SET. END. /* Demo1.p */ @RCODE(Type="Acme.Rcode.Info", MajorVersion="3", MinorVersion="1", Build="@Build"). .... /* Demo2.p */ @RCODE(Type="Acme.Rcode.Info", MajorVersion="3", MinorVersion="1", PatchLevel="3", TechInfo="SHA1,fa302427d99c59b01114ac23f44a44f1", Build="@Build", Data="Tickets 1231, 1292 and 1278"). .... /* Test.p */ iBuild = getNextBuild(). COMPILE Demo1.p BUILD=VALUE(iBuild) SAVE. COMPILE Demo2.p BUILD=VALUE(iBuild) SAVE. RCODE-INFO:FILE-NAME = "Demo1.p". MESSAGE CAST(RCODE-INFO:CUSTOM-INFO, Acme.Rcode.Info):Version . RCODE-INFO:FILE-NAME = "Demo2.p". MESSAGE CAST(RCODE-INFO:CUSTOM-INFO, Acme.Rcode.Info):Version . /* OUTPUT */ 3.01.000 Build 7214 3.01.003 Build 7214 An additional bonus would be if you could right-click the r-code in Windows Explorer and go to Properties to find an additional "RCode" tab listing the custom properties. Example: Browse to RCode Folder -> Right Click Demo2.r -> Properties Go to the RCode tab. See this: Major Version: 3 Minor Version: 1 Patch Level: 0 Version: 3.01.003 Build 7214 Copy Right: Acme Inc. (2016) Data: Tickets 1231, 1292 and 1278
Continue reading...
Continue reading...