calling methods

mirekpa

New Member
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)



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
 
Top