Method chaining enhancements
Values returned from functions can be used to chain with method calls.
Genero BDL version 3.10 introduced method chained calls like this:
MAIN
    DEFINE s STRING
    LET s = "ABC"
    DISPLAY s.subString(1,2).toLowerCase()
END MAINStarting with version 4.00, it is now possible to chain method calls, with the return value of a
function:
MAIN
    DISPLAY foo().subString(1,2).toLowerCase()
END MAIN
FUNCTION foo() RETURNS STRING
    RETURN "abc"
END FUNCTIONExample using a 
DICTIONARY OF STRING:MAIN
    DISPLAY foo().getLength()
    DISPLAY foo()["abc"].toUpperCase()
END MAIN
FUNCTION foo() RETURNS DICTIONARY OF STRING
    DEFINE dic DICTIONARY OF STRING
    LET dic["abc"] = "xxxx"
    LET dic["def"] = "yyyyyy"
    RETURN dic
END FUNCTIONUsing built-in functions like 
upshift():MAIN
    DISPLAY upshift("abc").getLength()
END MAINUsing 
base.Channel:MAIN
    DISPLAY my_open("file1").readLine()
    DISPLAY my_open("file2").readLine()
END MAIN
FUNCTION my_open(fn STRING) RETURNS base.Channel
    DEFINE ch base.Channel
    LET ch = base.Channel.create()
    TRY
        CALL ch.openFile(fn,"r")
    END TRY
    RETURN ch
END FUNCTION