PROGRESS 10.1B
Hi, extst a better way (example below) FOR CALL METHOD - object-oriented programming -
WHEN we have METHOD NAME (OR NOT) but instance OR CLASS NAME we'll have IN runtime ?
something LIKE that - injection instance OR creating WITH reflection
(NOW I USE FUNCTION, CALL WITH DYNAMIC-FUNCTION IN PROCEDURE HANDLE, INVOKE() METHOD I USE only FOR VALIDATE syntax)
Mirek
Hi, extst a better way (example below) FOR CALL METHOD - object-oriented programming -
WHEN we have METHOD NAME (OR NOT) but instance OR CLASS NAME we'll have IN runtime ?
something LIKE that - injection instance OR creating WITH reflection
(NOW I USE FUNCTION, CALL WITH DYNAMIC-FUNCTION IN PROCEDURE HANDLE, INVOKE() METHOD I USE only FOR VALIDATE syntax)
Code:
/*
USING pl.pfs.utils.*.
USING pl.pfs.utils2.*.
*/
USING Progress.Lang.Object.
DEF VAR obj1 AS CLASS pl.pfs.utils.Uproc1.
DEF VAR obj2 AS CLASS pl.pfs.utils2.Uproc1.
DEF VAR cPack AS CHAR.
FUNCTION getClassObject RETURN Progress.Lang.OBJECT (cClassTypeName AS CHAR):
DEF VAR sessionObject AS Progress.Lang.Object.
sessionObject = SESSION:FIRST-OBJECT.
DO WHILE VALID-OBJECT(sessionObject) AND sessionObject:GetClass():TypeName <> cClassTypeName:
sessionObject = sessionObject:NEXT-SIBLING.
END.
RETURN sessionObject.
END FUNCTION.
DEF VAR sessionObject AS Progress.Lang.Object.
obj1 = NEW pl.pfs.utils.Uproc1().
/*obj1:checkmethod1("").*/
obj2 = NEW pl.pfs.utils2.Uproc1().
/*obj2:checkmethod1("").*/
cPack = "pl.pfs.utils.Uproc1".
sessionObject = getClassObject(cPack).
RUN runnerMethodForObject(sessionObject, "NAME").
PROCEDURE runnerMethodForObject:
DEF INPUT PARAM obj AS Progress.Lang.Object.
DEF INPUT PARAM methodName AS CHAR.
MESSAGE "IN runner"
VIEW-AS ALERT-BOX INFO BUTTONS OK.
IF obj:GetClass():Package = "pl.pfs.utils" THEN
DO:
IF VALID-OBJECT(obj) THEN
obj1 = CAST(obj,pl.pfs.utils.Uproc1).
ELSE
obj1 = NEW pl.pfs.utils.Uproc1().
CASE methodName:
WHEN "NAME" THEN obj1:checkmethod1("").
END CASE.
END.
IF obj:GetClass():Package = "pl.pfs.utils2" THEN
DO:
IF VALID-OBJECT(obj) THEN
obj2 = CAST(obj,pl.pfs.utils2.Uproc1).
ELSE
obj2 = NEW pl.pfs.utils2.Uproc1().
obj2:checkmethod1("").
CASE methodName:
WHEN "NAME" THEN obj2:checkmethod1("").
END CASE.
END.
END PROCEDURE.
Mirek