Existe alguma forma de criar funções de mesmo mudando apenas o tipo(s) do(s) parâmetro(s) passados?? Similar a sobrecarga em Java. Obrigado. Roberto Lopes.
Roberto, A ABL tem algumas extensões OO, pelo que eu vi dá pra sobrecarregar sim. Nunca tentei. Se eu conseguir te mando um exemplo.
Via OO deve ter como. Existe a função dinâmica, não funciona do mesmo jeito, mas pode ser útil. Veja um exemplo: Código: /* Requires a connection to the Sports2000 database. Define data items */ DEFINE VARIABLE funcs AS CHARACTER NO-UNDO EXTENT 5 INITIAL ["firstrec","lastrec","nextrec","prevrec","quitting"]. DEFINE VARIABLE action AS CHARACTER NO-UNDO LABEL "Action" FORMAT "x" INITIAL "N". DEFINE VARIABLE idx AS INTEGER NO-UNDO. DEFINE VARIABLE alldone AS LOGICAL NO-UNDO. FORM WITH FRAME x SIDE-LABELS 2 COLUMNS 1 DOWN COLUMN 25. /* Define user-defined functions */ FUNCTION dispcust RETURNS LOGICAL: DISPLAY Customer EXCEPT Customer.Comments WITH FRAME X SCROLLABLE. END. FUNCTION firstrec RETURNS LOGICAL: FIND FIRST Customer. dispcust(). RETURN yes. END. FUNCTION lastrec RETURNS LOGICAL: FIND LAST Customer. dispcust(). RETURN yes. END. FUNCTION nextrec RETURNS LOGICAL: FIND NEXT Customer NO-ERROR. IF AVAILABLE Customer THEN dispcust(). RETURN AVAILABLE(Customer). END. FUNCTION prevrec RETURNS LOGICAL: FIND PREV Customer NO-ERROR. IF AVAILABLE Customer THEN dispcust(). RETURN AVAILABLE(Customer). END. FUNCTION quitting RETURNS LOGICAL: alldone = yes. RETURN no. END. /* Main routine */ REPEAT WHILE NOT alldone: UPDATE action HELP "Enter F(irst), L(ast), N(ext), P(rior), or Q(uit) to navigate.". idx = LOOKUP(action,"f,l,n,p,q"). IF idx EQ 0 THEN DO: MESSAGE "Enter F(irst), L(ast), N(ext), P(rior), or Q(uit)" VIEW-AS ALERT-BOX. NEXT. END. DISPLAY DYNAMIC-FUNCTION(funcs[idx]) LABEL "Record Found?". END.
Você pode utilizar o mecanismo de sobrecarga de métodos desde que seja um arquivo ".cls" ou seja uma classe. No 4GL básico não. Segue um exemplo do manual Progress USING acme.myObjs.*. USING acme.myObjs.Common.*. USING acme.myObjs.Interfaces.*. CLASS acme.myObjs.CustObj INHERITS CommonObj IMPLEMENTS IBusObj: ... DEFINE PROTECTED TEMP-TABLE ttCustomer NO-UNDO FIELD ... ... /* First version of printObj prints a single copy of a report */ METHOD PUBLIC VOID printObj ( ): OUTPUT TO PRINTER. DISPLAY dtTimestamp. FOR EACH ttCustomer: DISPLAY ttCustomer. END. OUTPUT CLOSE. PublishOutputGenerated("One copy of report sent to printer"). END METHOD. /* Second version of printObj takes an integer parameter representing the number of copies to print. */ METHOD PUBLIC VOID printObj (INPUT piCopies AS INTEGER): DEFINE VARIABLE iCnt AS INTEGER NO-UNDO. OUTPUT TO PRINTER. IF piCopies <> 0 THEN DO iCnt = 1 TO ABS(piCopies): DISPLAY dtTimestamp. FOR EACH ttCustomer: DISPLAY ttCustomer. END. END. OUTPUT CLOSE. PublishOutputGenerated(STRING(piCopies) + " copies of report sent to printer"). END METHOD. ... END CLASS. no site da progress tem os PDFs para baixa... localize o PDF OpenEdge® Development: Object-oriented Programming abraço