G. The ABF Demo Program : 4GL Code for the Sample Application : EmpTasks Frame
 
Share this page                  
EmpTasks Frame
The EmpTasks Frame shown in the following figure demonstrates how you can use 4GL to retrieve, manipulate,
and update data in the database.
The initial menu operation, GetEmployee, queries the database based on values entered into fields by the user and displays a submenu of operations to manipulate the retrieved data.
This is the 4GL source code file for the frame:
/*
 * Emptasks.osq
 *
 * View and Update Employee information and
 * Tasks assignments.
 *
 */

initialize (resp = c3, curr_field = c32, fnkey=i4)=
begin
        mode query;
        today = date('now');
        callproc timer_on(secs=15);
end
GetEmployee, key frskey4 = 
Begin
  emptasks = select name, title, manager, hourly_rate
        from emp
        where qualification(name=name,title=title,
            manager=manager, hourly_rate=hourly_rate)
    tasktable = select distinct *
         from tasks 
        where name=:name
        order by task
    begin
        initialize =
        begin
            callproc sum_hours(hourly_rate);
            redisplay;
        end
        field hourly_rate, field tasktable.hours =
        begin
            callproc sum_hours(hourly_rate);
            redisplay;
            resume next;
        end
        'Next', key frskey4 = 
        begin
            message 'Retrieving next Employee.';
            next;
            callproc sum_hours(hourly_rate);
            redisplay;
        end
        DeleteEmp = 
        Begin
         resp = prompt 'Type "y" to delete '+name+'.'
                with style=popup;
            if lowercase(left(resp,1)) = 'y' then
             callproc del_emp(empname = name);
             next;
            else
             message 'Employee not deleted.';
             sleep 2;
            endif;
            redisplay;
        end
        RemoveTask =     
        Begin
            inquire_forms field emptasks
                 (curr_field = name);
            if curr_field = 'tasktable' then
                callproc rem_task(person = name,
                    proj = tasktable.project,
                    job = tasktable.task);
                deleterow tasktable;
                callproc sum_hours(hourly_rate);
            else
                message 'Place cursor on task'
                            + ' to be deleted'
                with style=popup;

            endif;
        end
        UpdateEmp =     
        Begin
            message 'Updating ' + name + ' .  .  .  ';
                update emp e set
                    name = :name,
                    title = :title,
                    manager = :manager,
                    hourly_rate = :hourly_rate
                    where :name =
                    any (select name from tasks t 
                        where t.name = e.name);
                    unloadtable tasktable 
                begin
                    update tasks set hours =
                    :tasktable.hours
                where :tasktable.task = task and
                    :name = name and
                    :tasktable.project = project;
                end;
            commit;
        end
        'Help', key frskey1 =
        begin
            help_forms (subject = 'EmpTasks Frame',
            file = 'USER:[JOE.ABFDEMO]EMPTASKS.HLP');
        end
        '4GL', key frskey16 = 
        begin
            callproc timer_off();
            helpfile 'EmpTasks Frame'
                'USER:[JOE.ABFDEMO]EMPTASKS.OSQ';
            callproc timer_on(secs=15);
        end
        'Quit', key frskey3 = 
        begin
            endloop;
        end
        on timeout =
        begin
            today = date('now');
        end
    end;
    clear field all;
    set_forms field " (blink(tot_hours)=0); /* turn off
        blinking */
    today = date('now');
    redisplay;
end
field 'title', field 'manager' =
begin
    if lowercase(title) = 'help' or lowercase(manager) = 
        'help' then
        inquire_forms field "
            (curr_field=name);
        if curr_field = 'title' then
            title = callframe list 
                (list.info = 'Titles';
            list.vals = select distinct val = title
                    from titles order by val);
    else
            manager = callframe list 
                (list.info = 'Managers';
            list.vals = select distinct val = manager
                    from managers order by val);
        endif;
    endif;
    resume next;
end
key frskey2 =
begin
    inquire_forms field "
            (curr_field=name);
    if curr_field = 'title' then
        title = callframe list 
            (list.info = 'Titles';
        list.vals = select distinct val = title
                from titles order by val);
    else
        manager = callframe list 
            (list.info = 'Managers';
        list.vals = select distinct val = manager
                from managers order by val);
    endif;
    resume next;
end
'4GL', key frskey16 = 
begin
    callproc timer_off(); 
    helpfile 'EmpTasks Frame 4GL'
     'USER:[JOE.ABFDEMO]EMPTASKS.OSQ';
    callproc timer_on(secs=15);
end
'Help', key frskey1 =
begin
  help_forms(subject = 'Employee Task Assignments Frame',
  file = 'USER:[JOE.ABFDEMO]EMPTASKS.HLP');
end
'Quit', key frskey3 = 
begin
    callproc timer_on(secs=2);
    return;
end
on timeout =
begin
    today = date('now');
end