File: n_ds_cgibase.sru
Size: 7783
Date: Sat, 08 Dec 2007 15:38:28 +0100
$PBExportHeader$n_ds_cgibase.sru
$PBExportComments$Base Simple Datastore
forward
global type n_ds_cgibase from datastore
end type
end forward

global type n_ds_cgibase from datastore
event pbw_setlistretrievearguments ( )
event pbw_setdetailretrievearguments ( )
event pbw_setdetailwebproperties ( )
event pbw_setlistwebproperties ( )
event pbw_setdetailinitialvalues ( )
event htmlcontextapplied pbm_dwnhtmlcontextapplied
event pbw_postdetailhtmlcontextapplied ( string as_action )
event pbw_postlisthtmlcontextapplied ( string as_action )
event pbw_prelisthtmlgen ( )
event pbw_predetailhtmlgen ( )
end type
global n_ds_cgibase n_ds_cgibase

type variables

public string #ListDataObject
public string #DetailDataObject
public string #leadingHTML="<html><body>"
public string #trailingHTML="</body></html>"

any      __a_argvalue[20]
string   __s_argname[20]
string   __s_argtype[20]

string is_sqlerrtext



end variables

forward prototypes
public function string of_invokemethod (string as_method)
public function long of_setargument (integer ai_position, any aa_value)
public function string of_detaildata ()
public function long of_getarguments ()
public function string of_listdata ()
public function string of_detailinsertrow ()
end prototypes

public function string of_invokemethod (string as_method);
CHOOSE CASE as_method
   CASE "of_listdata";           RETURN of_listdata ()
   CASE "of_detaildata" ;        RETURN of_detaildata ()
   CASE "of_detailinsertrow" ;   RETURN of_detailinsertrow ()
   CASE ELSE ;             RETURN "Error in '" + Classname  ( This ) + "'<br />Method '" + as_method +"' unknown" 
END CHOOSE

end function

public function long of_setargument (integer ai_position, any aa_value);__a_argvalue[ai_position] = aa_value
return 1
end function

public function string of_detaildata ();
long ll_return
any la_emtpy[]
string ls_error=""

/* assign dataobject and retrieve */
This.dataobject = #DetailDataObject

This.event pbw_setdetailwebproperties( )

This.SetTransObject(SQLCA)

// Reset and get Retrieval Arguments 
__a_argvalue =  la_emtpy

This.Event pbw_setdetailretrievearguments( )

ll_return = This.Retrieve ( &
            __a_argvalue[1],  __a_argvalue[2],  __a_argvalue[3],  __a_argvalue[4],  __a_argvalue[5], &
            __a_argvalue[6],  __a_argvalue[7],  __a_argvalue[8],  __a_argvalue[9],  __a_argvalue[10], &
            __a_argvalue[11], __a_argvalue[12], __a_argvalue[13], __a_argvalue[14], __a_argvalue[15], &
            __a_argvalue[16], __a_argvalue[17], __a_argvalue[18], __a_argvalue[19], __a_argvalue[20] ) 

/* Now let's perfrom the Action */
string ls_context
string ls_action
cgienv.of_getParamValue( #DetailDataObject+'_action', ls_action )
If len ( ls_action ) > 0 then 
   cgienv.of_getParamValue( #DetailDataObject+'_context', ls_context )
   /* This performs an Update, if action is Update */
   log.of_addmessage( 9 , "SetHTMLAction....on "+ String(RowCount())+ "rows.")
   log.of_addmessage( 9 , "Action is " + ls_action )
   ll_return = This.setHTMLAction( ls_action, ls_context)
   If ll_return < 0 Then
      ls_error = is_sqlerrtext + '<br />'
      log.of_addmessage( 9 , "Failure in SetHTMLAction. Return was "+String(ll_Return)+'<br />')
      log.of_addmessage( 9 , "HTMLAction: " + ls_action+'<br />')
      log.of_addmessage( 9 , "HTMLContext: "+ls_context+'<br />')
      log.of_addmessage( 9 , "HTMLContext: "+sqlca.SQLErrText+'<br />')
   Else
      This.EVENT pbw_postdetailhtmlcontextapplied ( ls_action )
      Choose Case ls_action
         Case "DeleteRow"
            ll_return = This.Update ()
      End Choose
   End If   
End If

/* Generate HTML page to return */
This.EVENT pbw_predetailhtmlgen ()

return &
      #leadingHTML + &
      ls_error +&
      This.Object.DataWindow.data.HTML +&
      #trailingHTML 

end function

public function long of_getarguments ();String ls_empty[20]

// Initialize instance array
__s_argname = ls_empty
__s_argtype = ls_empty

string ls_table_arguments
long ll_pos_tab
long ll_arg_start = 1 
long ll_i = 0

ls_table_arguments =  this.Describe("Datawindow.Table.Arguments")

IF ls_table_arguments = "!" Then Return -1

ll_pos_tab = Pos ( ls_table_arguments , "~t" )

do while ll_pos_tab > 0
   ll_i++
   __s_argname[ll_i] = Mid ( ls_table_arguments , ll_arg_start, ll_pos_tab - ll_arg_start  )
   ll_arg_start = Pos ( ls_table_arguments , char(10) , ll_pos_tab + 1 )
   if ll_arg_start > 0 then 
      __s_argtype[ll_i] = Mid ( ls_table_arguments , ll_pos_tab + 1 , ll_arg_start - ll_pos_tab - 1)
      ll_arg_start++
      ll_pos_tab = Pos ( ls_table_arguments , "~t" ,  ll_arg_start )
   else
      __s_argtype[ll_i] = Mid ( ls_table_arguments , ll_pos_tab + 1 )
      ll_pos_tab = 0 
   end if
loop

return ll_i
end function

public function string of_listdata ();
long ll_return
any la_emtpy[]

/* Create datastore, assign dataobject, and retrieve */
This.dataobject = #ListDataObject

This.event pbw_setlistwebproperties( )

This.SetTransObject(SQLCA)

// Reset and get Retrieval Arguments 
__a_argvalue =  la_emtpy

This.Event pbw_setlistretrievearguments( )

ll_return = This.Retrieve ( &
            __a_argvalue[1],  __a_argvalue[2],  __a_argvalue[3],  __a_argvalue[4],  __a_argvalue[5], &
            __a_argvalue[6],  __a_argvalue[7],  __a_argvalue[8],  __a_argvalue[9],  __a_argvalue[10], &
            __a_argvalue[11], __a_argvalue[12], __a_argvalue[13], __a_argvalue[14], __a_argvalue[15], &
            __a_argvalue[16], __a_argvalue[17], __a_argvalue[18], __a_argvalue[19], __a_argvalue[20] ) 

/* Now let's perfrom the Action */
string ls_context
string ls_action
cgienv.of_getParamValue( #ListDataObject+'_action', ls_action )
If len ( ls_action ) > 0 then 
   log.of_addmessage( 1,  ls_Action)
   cgienv.of_getParamValue( #ListDataObject+'_context', ls_context )
   /* This performs an Update, if action is Update */
   log.of_addmessage( 1 , "SetHTMLAction....on "+ String(RowCount())+ "rows.")
   ll_return = This.setHTMLAction( ls_action, ls_context)
   If ll_return < 0 Then
      log.of_addmessage( 1 , "Failure in SetHTMLAction. Return was "+String(ll_Return))
   Else
      This.EVENT pbw_postlisthtmlcontextapplied ( ls_action )

      If ls_action = "Update" Then 
         // This is done because of a change for a foreign key forces also to reselect foreign key's table data values.
         // A change of a catagoiy-Id implies that also the category text needs to be refreshed and send back
         ll_return = This.Retrieve ( &
               __a_argvalue[1],  __a_argvalue[2],  __a_argvalue[3],  __a_argvalue[4],  __a_argvalue[5], &
               __a_argvalue[6],  __a_argvalue[7],  __a_argvalue[8],  __a_argvalue[9],  __a_argvalue[10], &
               __a_argvalue[11], __a_argvalue[12], __a_argvalue[13], __a_argvalue[14], __a_argvalue[15], &
               __a_argvalue[16], __a_argvalue[17], __a_argvalue[18], __a_argvalue[19], __a_argvalue[20] ) 
      End if
   End If   
End If

/* Generate HTML page to return */
This.EVENT pbw_prelisthtmlgen ()

return &
      #leadingHTML + &
      This.Object.DataWindow.data.HTML +&
      #trailingHTML 

end function

public function string of_detailinsertrow ();/*  Assign dataobject and insert row */
This.dataobject = #DetailDataObject

This.event pbw_setdetailwebproperties( )

This.SetTransObject(SQLCA)

This.InsertRow(0)

This.Event pbw_setdetailinitialvalues( )

This.Modify ( "b_delete.Enabled='no' b_update.Text='Save'")

/* Generate HTML page to return */
This.EVENT pbw_predetailhtmlgen ()

return &
      #leadingHTML + &
      This.Object.DataWindow.data.HTML +&
      #trailingHTML 

end function

on n_ds_cgibase.create
call super::create
TriggerEvent( this, "constructor" )
end on

on n_ds_cgibase.destroy
TriggerEvent( this, "destructor" )
call super::destroy
end on

event dberror;This.is_sqlerrtext = sqlerrtext
end event