RULE approval_history_contains_approval_elements

(* SCHEMA step_ship_schema; *)
-- ONLY IN AP218
RULE approval_history_contains_approval_elements FOR (object_role,
             applied_group_assignment);

    LOCAL
      t3_set          : SET OF approval := [];
      gr_ass_set      : SET OF applied_group_assignment := [];
      violation       : LOGICAL := FALSE;
      valid_items_set : SET OF approval_item := [];
      t1_set          : SET OF applied_approval_assignment := [];
      first_runs      : LOGICAL := TRUE;
    END_LOCAL;
    gr_ass_set := QUERY ( aga <* applied_group_assignment | ((aga.role.
        name = 'approvals') AND ('approval history' IN which_class(aga.
        assigned_group))) );
    REPEAT i := 1 TO HIINDEX(gr_ass_set) BY 1 WHILE NOT violation;
      t3_set := QUERY ( aga_item <* gr_ass_set[i].items | (
          'STEP_SHIP_SCHEMA.APPROVAL' IN TYPEOF(aga_item)) );
      REPEAT j := 1 TO HIINDEX(t3_set) BY 1;
        t1_set := QUERY ( aga <* bag_to_set(USEDIN(t3_set[j],
            'STEP_SHIP_SCHEMA.' +
            'APPROVAL_ASSIGNMENT.ASSIGNED_APPROVAL')) | (aga.role.name =
            'subject') );
        REPEAT k := 1 TO HIINDEX(t1_set) BY 1;
          IF first_runs AND (SIZEOF(t1_set[k].items) > 0) THEN
            valid_items_set := t1_set[k].items;
            first_runs := FALSE;
          ELSE
            REPEAT l := 1 TO HIINDEX(t1_set[k].items) BY 1;
              violation := t1_set[k].items[l] :<>: valid_items_set[l];
            END_REPEAT;
          END_IF;
        END_REPEAT;
      END_REPEAT;
      first_runs := TRUE;
    END_REPEAT;

  WHERE
    wr1: (NOT violation);

END_RULE;

[Top Level Definitions] [Exit]

Generated by STEP ToolsTM EXPRESS to HTML Converter
on 2007-09-24T12:42:21-04:00