File: eaf_n_cst_itemchanged.sru
Size: 10978
Date: Tue, 22 Jan 2008 23:40:37 +0100
$PBExportHeader$eaf_n_cst_itemchanged.sru
forward
global type eaf_n_cst_itemchanged from n_cst_component
end type
end forward

global type eaf_n_cst_itemchanged from n_cst_component
end type
global eaf_n_cst_itemchanged eaf_n_cst_itemchanged

type variables
Long                       row
Long                       currentrow
String                     data

//0   pass
//1   don't pass and do not allow focus to change
//2   don't pass and allow focus to change
//-1  don't need to execute
//1   need to execute
Long                       returncode = 0

// if it is executed from creating meta file
Boolean                    ib_metadatamode = false
String                     is_requestedcolumns
String                     is_linkedcolumns
String                     is_setitemcolumns[]

n_datastore                idw_requestor

n_cst_helperservice        ui_nvo_helper

n_cst_argumentservice      inv_argument

string                     is_returnsyntax
end variables
forward prototypes
public function integer aftermasterconfirm ()
public function any getitem (string as_column)
public function any getlinkedcolumnvalue (string as_column, ref any aa_value)
public function boolean iscolumnexist (string columnname)
public function long itemchanged (ref n_cst_datasetattrib anv_datasetattrib)
public function integer itemchanged (string as_column, string as_data)
public function long masterconfirm (ref n_cst_datasetattrib anv_datasetattrib)
public function integer setitem (string colname, any columnvalue)
public subroutine setlinkedcolumns (string as_linkedcolumns)
public subroutine setrequestedcolumns (string as_requestedcolumns)
public subroutine setreturncode (long retcode)
public subroutine setreturnsyntax (string as_syntax)
end prototypes

public function integer aftermasterconfirm ();//No action
return 0
end function

public function any getitem (string as_column);constant string METHOD_NAME = "GetItem ( )"

String ls_data, ls_coltype
Any la_ret

if inv_argument.GetArgument(as_column, ls_data) = 1 then
   ls_coltype = idw_requestor.Describe(as_column + ".coltype")
   la_ret = ui_nvo_helper.StringToAny(ls_coltype, ls_data)
else
   la_ret = idw_requestor.GetItemAny(currentrow, as_column)
   if IsNull(la_ret) then
      AddError(METHOD_NAME, "Failed to get argument " + as_column)
   end if
end if

return la_ret
end function

public function any getlinkedcolumnvalue (string as_column, ref any aa_value);constant string METHOD_NAME = "GetLinkedColumnValue( )"

String ls_data, ls_coltype

if inv_argument.GetArgument(as_column, ls_data) = 1 then
   // Hard code the datatype
   choose case as_column
      case "trdate"
         ls_coltype = "datetime"
      case "yea", "mon", "reference_id"
         ls_coltype = "long"
      case "trnqy1", "taxrate"
         ls_coltype = "decimal"
      case else
         ls_coltype = "string"
   end choose
   aa_value = ui_nvo_helper.StringToAny(ls_coltype, ls_data)
else
   AddError(METHOD_NAME, "Failed to get value of linked column " + as_column)
end if

return 1
end function

public function boolean iscolumnexist (string columnname);return idw_requestor.iscolumnexist(columnname)
end function

public function long itemchanged (ref n_cst_datasetattrib anv_datasetattrib);constant string METHOD_NAME = "Itemchanged (REF anv_datasetattrib)"

inv_log.traceLog (METHOD_NAME, "")

String                              ls_row
String                              ls_runtimeerror
String                              ls_column
String                              ls_document
String                              ls_rowstatus
string                              ls_setitemcolumns
long                                ll_row
n_cst_classdefinitionservice        lnvo_classdefinitionservice

try
   
   lnvo_classdefinitionservice = create n_cst_classdefinitionservice

   anv_datasetattrib.inv_argumentservice.GetArgument("column", ls_column)
   if ls_column = "" then
      addError(METHOD_NAME, "Invalid column argument, value is empty")
      return -1
   end if
      
   if lnvo_classdefinitionservice.iseventdefined(ClassName(this), ls_column) then
      anv_datasetattrib.inv_argumentservice.GetArgument("row", ls_row)
      if ls_row = "" or not IsNumber(ls_row) then
         addError(METHOD_NAME, "Invalid row argument")
         return -1
      else
         row = Long(ls_row)
      end if
   
      anv_datasetattrib.inv_argumentservice.GetArgument("data", data)
      
      idw_requestor = anv_datasetattrib.ids_working
      idw_requestor.InsertRow(0)
      currentrow = 1
      
      anv_datasetattrib.inv_argumentservice.GetArgument("rowstatus", ls_rowstatus)
      if Lower(ls_rowstatus) = "datamodified" then
         idw_requestor.SetItemStatus(1, 0, Primary!, DataModified!)
      else
         idw_requestor.SetItemStatus(1, 0, Primary!, NewModified!)
      end if
      
      anv_datasetattrib.inv_argumentservice.ToXML(ls_document)
      inv_argument.initialize(ls_document)
      this.TriggerEvent(ls_column)
   end if
   
   // set return columns
   for ll_row = 1 to UpperBound(is_setitemcolumns)
      if ls_setitemcolumns <> "" then ls_setitemcolumns += ","
      ls_setitemcolumns += is_setitemcolumns[ll_row]
   next
   if ls_setitemcolumns <> "" then
      inv_messaging.Add("setitemcolumns", ls_setitemcolumns)
   end if
   
   // set return syntax
   inv_messaging.add("returnsyntax", is_returnsyntax)

   // set return code
   inv_messaging.Add("returncode", String(returncode))
   
catch ( RuntimeError re )
   
   ls_runtimeerror = "Runtime Error:" + inv_constants.CRLF + inv_constants.CRLF
   ls_runtimeerror += "Error Code: " + string(re.number) + inv_constants.CRLF
   ls_runtimeerror += "Object: " + re.objectName + inv_constants.CRLF
   ls_runtimeerror += "Class: " + re.class + inv_constants.CRLF
   ls_runtimeerror += "Function/Event: " + re.routineName + inv_constants.CRLF
   ls_runtimeerror += "Line: " + string(re.line) + inv_constants.CRLF
   
   addError( METHOD_NAME, "Runtime Error: " + ls_runtimeerror )
   
   return -1
   
finally
   
   anv_datasetattrib.inv_messaging.append( inv_messaging )
   
   if IsValid(lnvo_classdefinitionservice) then
      destroy lnvo_classdefinitionservice
   end if
   
end try

return 1
end function

public function integer itemchanged (string as_column, string as_data);constant string METHOD_NAME = "Itemchanged ()"

inv_log.traceLog (METHOD_NAME, "")

String ls_data
Long ll_ret, ll_returncode
String                              ls_runtimeerror
n_cst_classdefinitionservice        lnvo_classdefinitionservice

try

   ll_ret = 0
      
   if idw_requestor.iscolumnexist(as_column) then
      lnvo_classdefinitionservice = create n_cst_classdefinitionservice
      if lnvo_classdefinitionservice.iseventdefined(ClassName(this), as_column) then
         // Save current status
         ls_data = data
         ll_returncode = returncode
         
         // Trigger Itemchanged
         data = as_data
         this.TriggerEvent(as_column)
         ll_ret = returncode
         
         // Restore
         returncode = ll_returncode
         data = ls_data
      end if
   end if

catch ( RuntimeError re )
   
   ls_runtimeerror = "Runtime Error:" + inv_constants.CRLF + inv_constants.CRLF
   ls_runtimeerror += "Error Code: " + string(re.number) + inv_constants.CRLF
   ls_runtimeerror += "Object: " + re.objectName + inv_constants.CRLF
   ls_runtimeerror += "Class: " + re.class + inv_constants.CRLF
   ls_runtimeerror += "Function/Event: " + re.routineName + inv_constants.CRLF
   ls_runtimeerror += "Line: " + string(re.line) + inv_constants.CRLF
   
   addError( METHOD_NAME, "Runtime Error: " + ls_runtimeerror )
   
   return -1
   
finally
   
   if IsValid(lnvo_classdefinitionservice) then
      destroy lnvo_classdefinitionservice
   end if
   
end try

return ll_ret
end function

public function long masterconfirm (ref n_cst_datasetattrib anv_datasetattrib);constant string METHOD_NAME = "MasterConfirm (REF anv_datasetattrib)"

inv_log.traceLog (METHOD_NAME, "")

String                              ls_runtimeerror
String                              ls_document
Long                                ll_ret

try
   
   anv_datasetattrib.inv_argumentservice.ToXML(ls_document)
   
   inv_argument.initialize(ls_document)
   
   idw_requestor = anv_datasetattrib.ids_working
   
   ll_ret = aftermasterconfirm()
      
catch ( RuntimeError re )
   
   ls_runtimeerror = "Runtime Error:" + inv_constants.CRLF + inv_constants.CRLF
   ls_runtimeerror += "Error Code: " + string(re.number) + inv_constants.CRLF
   ls_runtimeerror += "Object: " + re.objectName + inv_constants.CRLF
   ls_runtimeerror += "Class: " + re.class + inv_constants.CRLF
   ls_runtimeerror += "Function/Event: " + re.routineName + inv_constants.CRLF
   ls_runtimeerror += "Line: " + string(re.line) + inv_constants.CRLF
   
   addError( METHOD_NAME, "Runtime Error: " + ls_runtimeerror )
   
   return -1
   
finally
   
   anv_datasetattrib.inv_messaging.append( inv_messaging )
   
end try

return ll_ret
end function

public function integer setitem (string colname, any columnvalue);constant string METHOD_NAME = "SetItem (string, any)"

String   ls_runtimeerror
Long     ll_rc

try
   if idw_requestor.iscolumnexist(colname) then
      
      idw_requestor.SetItem(currentrow, colname, columnvalue)
      
      inv_messaging.Add(colname, String(columnvalue))
      
      is_setitemcolumns[UpperBound(is_setitemcolumns) + 1] = colname
      
      ll_rc = 1
   else
      ll_rc = 0
   end if
   
catch ( RuntimeError re )
   
   ls_runtimeerror = "Runtime Error:" + inv_constants.CRLF + inv_constants.CRLF
   ls_runtimeerror += "Error Code: " + string(re.number) + inv_constants.CRLF
   ls_runtimeerror += "Object: " + re.objectName + inv_constants.CRLF
   ls_runtimeerror += "Class: " + re.class + inv_constants.CRLF
   ls_runtimeerror += "Function/Event: " + re.routineName + inv_constants.CRLF
   ls_runtimeerror += "Line: " + string(re.line) + inv_constants.CRLF
   
   addError( METHOD_NAME, "Runtime Error: " + ls_runtimeerror )
   
   ll_rc = -1
   
finally
   
   
end try

return ll_rc
end function

public subroutine setlinkedcolumns (string as_linkedcolumns);if as_linkedcolumns <> "" and not IsNull(as_linkedcolumns) then
   if Pos("," + is_linkedcolumns + "," ,  "," + as_linkedcolumns + ",") = 0 then
      if is_linkedcolumns <> "" then
         is_linkedcolumns += ","
      end if
      is_linkedcolumns += as_linkedcolumns
   end if
end if
end subroutine

public subroutine setrequestedcolumns (string as_requestedcolumns);if as_requestedcolumns <> "" and not IsNull(as_requestedcolumns) then
   if Pos("," + is_requestedcolumns + "," ,  "," + as_requestedcolumns + ",") = 0 then
      if is_requestedcolumns <> "" then
         is_requestedcolumns += ","
      end if
      is_requestedcolumns += as_requestedcolumns
   end if
end if
end subroutine

public subroutine setreturncode (long retcode);returncode = retcode
end subroutine

public subroutine setreturnsyntax (string as_syntax);if is_returnsyntax <> "" then
   is_returnsyntax += "|"
end if

is_returnsyntax += as_syntax

return
end subroutine

on eaf_n_cst_itemchanged.create
call super::create
end on

on eaf_n_cst_itemchanged.destroy
call super::destroy
end on

event constructor;call super::constructor;ui_nvo_helper = create n_cst_helperservice

inv_argument = create n_cst_argumentservice

end event

event destructor;call super::destructor;if IsValid(ui_nvo_helper) then destroy ui_nvo_helper

destroy inv_argument
end event