Layers

Base procedural code is auto-generated to achieve a layered architecture. Client developers can then override or overtake the base implementation to do their own logic. There is no need to redefine the parameters. The parameters from the base procedure are used.

Example: Entity Update

// Base
procedure EntityUpdate<WorkOrder> {

   parameter Record Structure(WorkOrder);

   execute {
      saveAndSend Record;
   }
}

@Override 
procedure EntityUpdate<WorkOrder> {

   variable WoAddr Structure(WorkOrderAddress);

   execute {
      fetch Record.AddressRef into WoAddr;
      set Record.AddressDetail = [WoAddr.AddressLine1 + WoAddr.AddressLine2];
      super(Record);
   }
}

Example: Function

// Base
procedure Function<GetWoAddress> Text {
   parameter WoNo Number;
}

@Overtake 
procedure Function<GetWoAddress> Text {

   variable Wo Structure(WorkOrder);

   execute {
      fetch WorkOrder i where [ i.WoNo = WoNo ] into Wo; 
      return [Wo.AddressLine1 + Wo.AddressLine2];
   }
}

Example: Action

// Base
procedure Action<ChangeWoAddress> {
   parameter WoNo Number;
   parameter NewAddress Text;
   execute {
      performAction;
   }
}

@Override
procedure Action<ChangeWoAddress> {

   variable Wo Structure(WorkOrder);

   execute {
      super(WoNo, NewAddress);

      fetch WorkOrder i where [ iWoNo = WoNo ] into Wo;
      set Wo.AddressDetail = NewAddress;
      saveLocal Wo
   }
}