The standard implementation for Offline is one in which a user would install Offline and then may also need to manually configure the parameters via the config.js files previously discussed. In an Agile implementation, however, the process is quite different. In an Agile implementation of Offline, the user would receive a template script file from Synactive. Following pre-determined guidelines, the user would then fill in the template with his or her specific data.
Master and Addendum Records Offline is structured as follows. Each transaction is defined as a Master Record. Under the Master Records are Addendums - transactions that are subordinate to the transaction. For example, a Work Order transaction will have subordinate transactions such as 'Parts'. The overall architecture of a given transaction will look like the following example:
Each Master and Addendum record will contain the following elements:
- Name: The name of the screen. The name should also function as the screen's title.
- Screen: Defines the navigation schema.
- tcode: The SAP transaction code.
- Pattern: Defines the pattern of the screen.
- Master: Used only in configuration screens. It specifies for which transaction the given configuration screen is defined.
Navigation Schema
The navigation for Agile implementations of Offline are as follows:
- Each Master Record and Addendum record that contains a table control will also have a change screen.
- Each master and Addendum transaction will have an Add screen.
- Each downloaded record will have a record ID generated for it (aside from TID).
- Record ID will be used for the following:
- The record will be retrieved based on the record id.
- Multiple levels of Addendums will be linked together by record id.
- New record id is generated only when user performs a "Save - generic" action
- Record id should be used to delete records of a master transaction which can exists in other master transactions. The only way to do this is to create record id of a particular transaction as a foreign key of the other transaction. (TBD) See the following examples:
Delivery-Materials: Material list created as an Addendum in sales order transaction can be put one by one in delivery. Therefore any material that is deleted from a sales order, has to be deleted from delivery. * Shipping-Delivery: One shipment can contain multiple deliveries. If a delivery is deleted from a shipment, corresponding sales order also should be deleted.
- For each transaction users can define pushbuttons under the 'screen' definition to navigate within the given transaction application.
- Each pushbutton defined under the 'Screen' definition will execute a default function. The default functions are as follows:
- BTN_ADD_MASTER: Adds a new Master Record.
- BTN_ADD_ADDENDUM: Creates a new Addendum record
- BTN_CHANGE_MASTER: Changes a Master Record
- BTN_CHANGE_ADDENDUM: Changes the Addendum record
- BTN_DISPLAY_ADDENDUM: Displays the Addendum record.
- BTN_DELETE_MASTER: Deletes a Master Record. All the corresponding Addendum records will also be deleted (See: usage of record ID)
- BTN_DELETE_ADDENDUM: Deletes an Addendum record. If that particular Addendum is a master of another Addendum, then the chain records also will be deleted. (See: usage of record ID)
- BTN_LIST_ADDENDUM: Navigates to the list screen of Addendum transaction.
- BTN_LIST_MASTER: Navigates to the list screen of master transactions.
- The pushbuttons for 'Delete' and 'Change' will only be definable for screens where a table control exists. Screens without table controls do not have these pushbuttons. If users try to define the 'Delete' and 'Change' pushbuttons for screens without table controls, Offline will return an error
See the example is for a Work Order management example as shown below:
////////////////////////////////////////////////////////////////////// //////// // // // Demo Work Order Transaction File // // // // (C) 2005 - 2006 Synactive Inc - www.synactive.net // // // // History: // // Version 3.0 Little JavaScript Programming Skill Needed ////////////////////////////////////////////////////////////////////// //////// // Version 3.0 ////////////////////////////////////////////////////////////////////// //////// //Application Description g_WorkOrderAppDesc = {}; //MasterRecord Description g_WorkOrderAppDesc.MasterRecord = {}; //Addendum Description //The number of {} in array means how many Addendums //you want to attach to the MasterRecord g_WorkOrderAppDesc.Addendum = [{}, {}]; g_WorkOrderAppDesc.Addendum[0] = [{}]; //Config Description //The number of {} in array means how many configs //you want to attach to the Application g_WorkOrderAppDesc.Config = [{}]; //Application Name g_WorkOrderAppDesc.Name = "Work Order"; //Application Pattern - Use APPLICATION_PATTERN_MASTER_ADDENDUM //for Master-Addendum type application g_WorkOrderAppDesc.Pattern = APPLICATION_PATTERN_MASTER_ADDENDUM; //Master Record Screen Captions - 4 screens defined here seperated by '|' g_WorkOrderAppDesc.MasterRecord.Name = "Process Order";
g_WorkOrderAppDesc.MasterRecord.Screen = "Process Order|Add Order|Change Order|Display Order|Delete Order";
g_WorkOrderAppDesc.MasterRecord.Screen = [ {type:SCR_PUSHBUTTON,label:'@17@Create Order',fieldname:"SYNADDWO",fcode:SCRTYPE_ADD_MODE,screen:"Create Order"}, {type:SCR_PUSHBUTTON,label:'@17@Change Order',fieldname:"SYNCHANGEWO",fcode:SCRTYPE_CHANGE_MODE,screen:"Change Order"}, {type:SCR_PUSHBUTTON,label:'@17@Display Order',fieldname:"SYNDISPWO",fcode:SCRTYPE_DISPLAY_MODE,screen:"Display Order"}, {type:SCR_PUSHBUTTON,label:'@17@Delete Order',fieldname:"SYNDELWO",fcode:SCRTYPE_DELETE_MODE,screen:"Delete Order"}, {type:SCR_ONAPPKEY,keylabel:'@18@Confirm Time',fcode:SCRTYPE_ADDENDUM_MODE,screen:"Time"},
{type:SCR_PUSHBUTTON,label:'Parts Management',fieldname:"SYNPARTSMGMT",fcode:SCRTYPE_ADDENDUM_MODE,screen:"Parts"} ]; // Master Record Transaction Code definition g_WorkOrderAppDesc.MasterRecord.TCode = "wkdr"; // MasterRecord Synchronization option g_WorkOrderAppDesc.MasterRecord.SyncType = SYNC_BOTH; // Master Record Database and Screen Definition
g_WorkOrderAppDesc.MasterRecord.Elements = [
//Label Text for FieldName Definition Display width for Field length Should the field Should this control Is this field Is this field
//EDIT control edit control and show in table use the same line shared in Addendum a hidden field?
//table column control? as its preceding control? transaction?
{type:SCR_GROUPBOX,label:"Order Details",columns:2,border:true, groupid:"grp1",position:{row:0,col:0},fieldname:"grp1"},
{type:SCR_GROUPBOX, label:"Other Information",columns:2,border:true,groupid:"grp2",position:{row:6,col:0},fieldname:"grp2"},
{label:"Order",fieldname:"g_wo_no",displaywidth:8,fieldlength:10,showintable:1,sharedfield:1,downloadkey:1,key:1,groupid:"grp1"},
{label:"Activity",fieldname:"g_wo_activity",displaywidth:8,fieldlength:10,showintable:1,sharedfield:2,downloadkey:1,groupid:"grp1"},
{label:"Location",fieldname:"g_wo_location",displaywidth:10,fieldlength:30,showintable:1,groupid:"grp1"},
{label:"Time",fieldname:"g_wo_time",displaywidth:8,fieldlength:10,showintable:1,groupid:"grp1"},
{label:"Status",fieldname:"g_sys_status_info",displaywidth:10,fieldlength:30,hidden:1,groupid:"grp2"},
{label:"Info_2",fieldname:"g_order_info_second",displaywidth:8,fieldlength:10, groupid:"grp2"},
{label:"Info_3",fieldname:"g_order_info_third",displaywidth:10,fieldlength:30,groupid:"grp2"},
{label:"Grp_Info",fieldname:"g_planner_group_info",displaywidth:8,fieldlength:10,groupid:"grp2"},
{label:"Grp_Div", fieldname:"g_planner_group_info_div",displaywidth:4,fieldlength:10,groupid:"grp2"},
{label:"Ctr_Info",fieldname:"g_Mn_Wk_ctr_info",displaywidth:8,fieldlength:10,groupid:"grp2"},
{label:"Ctr_Div",fieldname:"g_Mn_Wk_ctr_info_div",displaywidth:4,fieldlength:10,groupid:"grp2"},
{label:"Per_Info",fieldname:"g_person_responsible_info",displaywidth:10,fieldlength:30,groupid:"grp2"},
{label:"Per_Div", fieldname:"g_person_responsible_info_div",displaywidth:10,fieldlength:10,groupid:"grp2"},
{label:"Ntf_Info",fieldname:"g_notification_info",displaywidth:8,fieldlength:10,groupid:"grp2"},
{label:"Pri_Info",fieldname:"g_primary_accType_info",displaywidth:3,fieldlength:10,groupid:"grp2"},
{label:"Equipment", fieldname:"g_Equipment_info",displaywidth:8,fieldlength:20, groupid:"grp2"} ]; // Master Record Configuration Screen Definition // Addendum Name g_WorkOrderAppDesc.Config[0].Name = "Configuration"; // Config Screen Definition g_WorkOrderAppDesc.Config[0].Screen = "@11@Configure"; // Config Table Transaction Code g_WorkOrderAppDesc.Config[0].TCode = "conf"; // Master table for Config g_WorkOrderAppDesc.Config[0].Master = "wkdr"; // Config Pattern Defintion g_WorkOrderAppDesc.Config[0].Pattern = CONFIG_PATTERN_NORMAL_STYLE; // Config Database and Screen Definition g_WorkOrderAppDesc.Config[0].Elements = [ //Default value for this field {type:SCR_GROUPBOX, label:"Work Order Download Criteria",columns:2,border:true,groupid:"grp1",position:{row:0, col:0},fieldname:"grp1"}, {label:"Work order", displaywidth:10,fieldlength:10,fieldname:"g_cf_wo",defaultvalue:"", groupid:"grp1"}, {label:"Plant",displaywidth:10,fieldlength:10,fieldname:"g_cf_plant",defaultvalue:"1000", groupid:"grp1"}, {label:"Work Center",displaywidth:10,fieldlength:10,fieldname:"g_cf_ctr",defaultvalue:"MECHANIK",groupid:"grp1"}, {label:"Functional Location",displaywidth:10,fieldlength:10,fieldname:"g_cf_floc",defaultvalue:"",groupid:"grp1"}, {label:"Equipment",displaywidth:10,fieldlength:10,fieldname:"g_cf_equno",defaultvalue:"",groupid:"grp1"}, {label:"Order Type",displaywidth:10,fieldlength:10,fieldname:"g_cf_otype",defaultvalue:"PM01",groupid:"grp1"}, {label:"To", displaywidth:10,fieldlength:10,fieldname:"g_cf_otype2",defaultvalue:"", groupid:"grp1"}, {label:"Download Rows",displaywidth:10,fieldlength:10,fieldname:"g_cf_dlrows",defaultvalue:"10",groupid:"grp1"}, {label:"From Date",displaywidth:10,fieldlength:10,fieldname:"g_cf_frdate",defaultvalue:"01.04.2003",lookupfieldinfo:"calendar",groupid:"grp1"}, {label:"To Date",displaywidth:10,fieldlength:10,fieldname:"g_cf_todate",defaultvalue:"",lookupfieldinfo:"calendar",groupid:"grp1"} {type:SCR_LABEL,label:"MM/DD/YYYY",position:{row:8,col:31}} ]; //Addendum Name g_WorkOrderAppDesc.Addendum[0].Name = "Parts"; // Addendum Screen Definition g_WorkOrderAppDesc.Addendum[0].Screen = "@17@Add Parts|Enter Add Part|Change Part|Display Part"; g_WorkOrderAppDesc.Addendum[0].Screen = [ {type:SCR_PUSHBUTTON, label:'@17@Create Part',fieldname:"SYNADDWO",fcode:SCRTYPE_ADD_MODE, screen:"Create Part"}, {type:SCR_PUSHBUTTON, label:'@17@Change Part',fieldname:"SYNCHANGEWO",fcode:SCRTYPE_CHANGE_MODE, screen:"Change Part Info"}, {type:SCR_PUSHBUTTON, label:'@17@Display Part',fieldname:"SYNDISPWO",fcode:SCRTYPE_DISPLAY_MODE, screen:"Display Part Info"}, {type:SCR_PUSHBUTTON, label:'Serial',fieldname:"SYNPARTSMGMT",fcode:SCRTYPE_ADDENDUM_MODE, screen:"Serial"} ]; // Addendum Transaction Code g_WorkOrderAppDesc.Addendum[0].TCode = "iw32"; // Addendum Pattern Defintion g_WorkOrderAppDesc.Addendum[0].Pattern = ADDENDUM_PATTERN_TABLE_STYLE; // Addendum Synchronization option g_WorkOrderAppDesc.Addendum[0].SyncType = SYNC_UPLOAD; // Master Record Database and Screen Definition g_WorkOrderAppDesc.Addendum[0].Elements = [ // The number set here to the number set in Master Record. {type:SCR_GROUPBOX,label:"Part Information",columns:1,border:false,groupid:"grp1", position:{row:0,col:0},fieldname:"grp1"}, {label:"Order",fieldname:"g_wo_no",displaywidth:8,fieldlength:10,sharedfield:1,key:1,groupid:"grp1"}, {label:"Part_No",fieldname:"g_part_no",displaywidth:8,fieldlength:10,key:2,showintable:1,groupid:"grp1"}, {label:"Part_Info",fieldname:"g_part_no_info",displaywidth:8,fieldlength:10,showintable:1,groupid:"grp1"}, {label:"Part_Qty_Info",fieldname:"g_part_no_qty_info",displaywidth:8,fieldlength:20,showintable:1, groupid:"grp1"} ]; g_WorkOrderAppDesc.Addendum[1].Name = "Time"; g_WorkOrderAppDesc.Addendum[1].Screen = "@15@Confirm Time"; g_WorkOrderAppDesc.Addendum[1].TCode = "iw41"; g_WorkOrderAppDesc.Addendum[1].Pattern = ADDENDUM_PATTERN_NORMAL_STYLE; g_WorkOrderAppDesc.Addendum[1].SyncType = SYNC_UPLOAD; g_WorkOrderAppDesc.Addendum[1].Elements = [ {type:SCR_GROUPBOX, label:"Confirm Time",columns:1,border:true,groupid:"grp1",position:{row:0,col:0},fieldname:"grp1"}, {label:"Order",fieldname:"g_wo_no",displaywidth:5,fieldlength:10,sharedfield:1,key:1,groupid:"grp1"} // The defined element will be used in screen only and will not be saved in database
{label:"Activity",fieldname:"",displaywidth:5,fieldlength:10,sharedfield:2,screenonly:1}, {label:"WKCenter",fieldname:"g_work_center_info",displaywidth:5,fieldlength:10,groupid:"grp1"}, {label:"Per_Info",fieldname:"g_personnel_no_info",displaywidth:5,fieldlength:10,groupid:"grp1"}, {label:"Act_WK_Info",fieldname:"g_actual_work_info",displaywidth:5,fieldlength:10, groupid:"grp1"}, {label:"Act_WK_Info_2",fieldname:"g_actual_work_info_second",displaywidth:5,fieldlength:10,groupid:"grp1"}, {label:"Act_TP_Info",fieldname:"g_activity_type_info",displaywidth:5,fieldlength:10, groupid:"grp1"}, {label:"Rem_WK_Info",fieldname:"g_remaining_work_info",displaywidth:5,fieldlength:10,groupid:"grp1"}, // Specify the control will be shown as a different control in Status Screen Table { label:"Opr_CO_Info",fieldname:"g_operation_complete_info",displaywidth:3,fieldlength:3,columntype:CTRL_TABLE_CHECKBOX,groupid:"grp1"} ]; g_WorkOrderAppDesc.Addendum[0][0].Name = "Serial"; // Addendum Screen Definition g_WorkOrderAppDesc.Addendum[0].Screen = "@17@Add Parts|Enter Add Part|Change Part|Display Part"; g_WorkOrderAppDesc.Addendum[0][0].Screen = [ {type:SCR_PUSHBUTTON,label:'@17@Create Serial',fieldname:"SYNADDWO",fcode:SCRTYPE_ADD_MODE,screen:"Create Serial"}, {type:SCR_PUSHBUTTON,label:'@17@Change Serial',fieldname:"SYNCHANGEWO",fcode:SCRTYPE_CHANGE_MODE,screen:"Change Serial"}, {type:SCR_PUSHBUTTON, label:'@17@Display Serial',fieldname:"SYNDISPWO",fcode:SCRTYPE_DISPLAY_MODE,screen:"Display Serial"} ]; // Addendum Transaction Code g_WorkOrderAppDesc.Addendum[0][0].TCode = "iw35"; // Addendum Pattern Defintion g_WorkOrderAppDesc.Addendum[0][0].Pattern = ADDENDUM_PATTERN_TABLE_STYLE; // Addendum Synchronization option g_WorkOrderAppDesc.Addendum[0][0].SyncType = SYNC_UPLOAD; // Master Record Database and Screen Definition g_WorkOrderAppDesc.Addendum[0][0]. Elements = [ {type:SCR_GROUPBOX,label:"Group Label",columns:1,border:false,groupid:"grp1",position:{row:0,col:0},fieldname:"grp1"}, {label:"Order",fieldname:"g_wo_no",displaywidth:8,fieldlength:10,sharedfield:1,key:1,groupid:"grp1"}, {label:"Part No",fieldname:"g_part_no",displaywidth:8,fieldlength:10,showintable:1,sharedfield:2,key:2,groupid:"grp1"}, {label:"Serial Info",fieldname:"g_serial_info",displaywidth:10,fieldlength:40,showintable:1,key:3,groupid:"grp1"} ]; // Create the application from the application description we defined above g_WorkOrderApp = SR3ApplicationFramework.createApplication(g_WorkOrderAppDesc); // Customer Logic