Skip to Main Content

Bredcrumb

What to check?

Validate data (client-side)

Validate data (client-side)

We set some (client-side) validations. Try them out by breaking the following rules:

  1. Cost must be less than Budget
  2. Budget must be between 100 and 15000
Validations are defined as custom JavaScript functions using Enhanced Grid Pros "setValidationFunction" function.

code of the js validation function
let ucGrid = $("#ucGrid_GRID_VALIDATION_DATA").ucGrid("instance");


//validate "COST" (to be less than Budget)
let validateColCost = function(newCost, row) {
    let budget = ucGrid.getValue(row, "BUDGET");
    apex.debug.log(`validateColCost - newCost: ${newCost}, budget: ${budget}`);
    
    if(Number.parseFloat(newCost) > Number.parseFloat(budget)) {
        return "Cost must be less or equal to Budget.";
    }
};

ucGrid.setValidationFunction("COST", validateColCost);



//validate "BUDGET" (to be between 100 and 15000)
function validateColBudget(newValue, row) {
    apex.debug.log(`validateColBudget - newValue: ${newValue}`);
    if(Number.parseFloat(newValue) < 100 || Number.parseFloat(newValue) > 15000) {
        return "Budget must be between 100 and 15000.";
    }
}

ucGrid.setValidationFunction("BUDGET", validateColBudget);



// just logging changes on the ACTIVE column
function validateColActive(newValue, row) {
    console.log("validateColActive", "newValue:", newValue, "row:", row);
}

ucGrid.setValidationFunction("ACTIVE", validateColActive);

Validate data (server-side)

Validate data (server-side)

We set some (server-side) validations. Try them out by breaking the following rules:

  1. End date must be greater than start date
  2. Rows with Status "Closed" can not be changed
Validations are defined in a custom database procedure.
It can be found inside the "uc_grid_examples" package in the "my_validation_proc" procedure or here:

code of the validation procedure
PROCEDURE my_validation_proc(p_crud_request IN OUT NOCOPY UC_GRID_CRUD_REQUEST_T)
AS
    l_id            NUMBER;
    l_status        VARCHAR2(30 BYTE);
    l_start_date_str    VARCHAR2(100);
    l_end_date_str      VARCHAR2(100);     
    l_start_date    DATE;
    l_end_date      DATE;
    
    l_date_formatmask VARCHAR2(10 char) := 'DD.MM.YYYY';
BEGIN
    l_id          := p_crud_request.get_value('ID');
    l_status      := p_crud_request.get_value('STATUS');
    l_start_date_str  := p_crud_request.get_value('START_DATE');
    l_end_date_str    := p_crud_request.get_value('END_DATE');
    
    if l_start_date_str is not null
    then 
        -- set custom Format mask 
        l_start_date := to_date(l_start_date_str, l_date_formatmask);
    end if;
    
    if l_end_date_str is not null
    then 
        -- set custom Format mask 
        l_end_date := to_date(l_end_date_str, l_date_formatmask);
    end if;        
    
    CASE p_crud_request.crud_request
        WHEN 'DELETE' THEN
            
            --no validations done on DELETE
            NULL;
        
        WHEN 'UPDATE' THEN
            
            if (l_status = 'Closed') then
                p_crud_request.add_exception(p_column_name    => 'STATUS'
                                            ,p_exception_text => 'Change is not possible for "Closed" status.');
            end if;
            
            if (l_start_date IS NOT NULL AND l_end_date IS NOT NULL AND l_end_date <  l_start_date) then
                p_crud_request.add_exception(p_column_name    => 'END_DATE'
                                            ,p_exception_text => 'End date must be greater than start date!');
            end if;

        WHEN 'INSERT' THEN
        
            --no validations done on INSERT
            NULL;

    END CASE;
        
END my_validation_proc;

Save data

Save data

Saving is done with a custom database procedure.
It can be found inside the "uc_grid_examples" package in the "my_proc" procedure or below.

code of the save procedure
PROCEDURE my_proc(p_crud_request IN OUT NOCOPY UC_GRID_CRUD_REQUEST_T)
AS
    l_id            NUMBER;
    l_project       NUMBER; --FK
    l_parent        NUMBER;
    l_task_name     VARCHAR2(255 BYTE);
    l_status        VARCHAR2(30 BYTE);
    l_active        VARCHAR2(1 BYTE);
    l_assigned_to   VARCHAR2(30 BYTE);
    l_cost          NUMBER;
    l_budget        NUMBER;
    l_start_date_str    VARCHAR2(100);
    l_end_date_str      VARCHAR2(100);     
    l_start_date    DATE;
    l_end_date      DATE;
    
    l_date_formatmask VARCHAR2(10 char) := 'DD.MM.YYYY';
BEGIN
    l_id          := p_crud_request.get_value('ID');
    l_project     := p_crud_request.get_value('PROJECT');
    l_parent      := p_crud_request.get_value('PARENT_TASK');
    l_task_name   := p_crud_request.get_value('TASK_NAME');
    l_status      := p_crud_request.get_value('STATUS');
    l_active      := p_crud_request.get_value('ACTIVE');
    l_assigned_to := p_crud_request.get_value('ASSIGNED_TO');
    l_cost        := p_crud_request.get_value('COST');
    l_budget      := p_crud_request.get_value('BUDGET');
    l_start_date_str  := p_crud_request.get_value('START_DATE');
    l_end_date_str    := p_crud_request.get_value('END_DATE');
    
    if l_start_date_str is not null
    then 
        -- set custom Format mask 
        l_start_date := to_date(l_start_date_str, l_date_formatmask);
    end if;
    
    if l_end_date_str is not null
    then 
        -- set custom Format mask 
        l_end_date := to_date(l_end_date_str, l_date_formatmask);
    end if;               


    CASE p_crud_request.crud_request
        WHEN 'DELETE' THEN

            DELETE UC_GRID_TASKS
             WHERE id = l_id;

        WHEN 'UPDATE' THEN
        
            UPDATE UC_GRID_TASKS
               SET PROJECT = l_project,
                   PARENT_TASK = l_parent,
                   TASK_NAME = l_task_name,
                   STATUS = l_status,
                   ACTIVE = l_active,
                   ASSIGNED_TO = l_assigned_to,
                   START_DATE = l_start_date,
                   END_DATE = l_end_date,
                   COST = l_cost,
                   BUDGET = l_budget
             WHERE id = l_id;

        WHEN 'INSERT' THEN
        
            INSERT INTO UC_GRID_TASKS (PROJECT, PARENT_TASK, TASK_NAME, STATUS, ACTIVE, ASSIGNED_TO, START_DATE, END_DATE, COST, BUDGET )
                 VALUES (l_project, l_parent, l_task_name, l_status, l_active, l_assigned_to, l_start_date, l_end_date, l_cost, l_budget)
            RETURNING ID INTO l_id;
                        
            p_crud_request.set_value('ID', l_id);
            
    END CASE;

END my_proc;

Validation data