[Top][All Lists]
[Date Prev][Date Next][Thread Prev][Thread Next][Date Index][Thread Index]
r5832 - trunk/gnue-appserver/src
From: |
johannes |
Subject: |
r5832 - trunk/gnue-appserver/src |
Date: |
Wed, 26 May 2004 03:27:54 -0500 (CDT) |
Author: johannes
Date: 2004-05-26 03:27:53 -0500 (Wed, 26 May 2004)
New Revision: 5832
Modified:
trunk/gnue-appserver/src/geasInstance.py
trunk/gnue-appserver/src/geasSession.py
Log:
Added OnChange-, OnValidate- and OnDelete-Events (bound procedures)
Modified: trunk/gnue-appserver/src/geasInstance.py
===================================================================
--- trunk/gnue-appserver/src/geasInstance.py 2004-05-25 17:36:18 UTC (rev
5831)
+++ trunk/gnue-appserver/src/geasInstance.py 2004-05-26 08:27:53 UTC (rev
5832)
@@ -243,7 +243,13 @@
if record is None or record.getField (u'gnue_id') != __value:
raise PropertyValueError, (propertydef.fullName, value)
+ for proc in self.__classdef.procedures.values ():
+ if proc.gnue_name.upper () == 'ONCHANGE':
+ self.call (proc, {'propertyName': propertydef.fullName},
+ {'oldValue': self.__getValue (propertyname),
+ 'newValue': __value})
+
self.__record.putField (propertydef.column, __value)
# ---------------------------------------------------------------------------
@@ -259,11 +265,12 @@
# Call a procedure
# ---------------------------------------------------------------------------
- def call (self, proceduredef, params):
+ def call (self, proceduredef, params, namespace = None):
# TODO: This should run in a separate process so that a segfaulting
# procedure doesn't kill appserver.
# (needs to be implemented as an option in gnue-common)
+ checktype (namespace, [types.NoneType, types.DictType])
# Create a session object which with the actual session id
sess = Session.Session (self.__session.sm, self.__session.id)
@@ -290,8 +297,12 @@
cx.description = proceduredef.gnue_comment
# the object itself
- cx.bindObject ('self', obj, Object.Object)
+ cx.bindObject ('self', obj)
+ if namespace is not None:
+ for (key, value) in namespace.items ():
+ cx.bindObject (key, value)
+
# language interface, session functions
cx.bindFunction ('find', sess.find)
cx.bindFunction ('setcontext', sess.setcontext)
@@ -332,6 +343,10 @@
value = self.__record.getField (prop.column)
if value is None:
raise PropertyValueError (prop.fullName, None)
+
+ for proc in self.__classdef.procedures.values ():
+ if proc.gnue_name.upper () == 'ONVALIDATE':
+ self.call (proc, None)
# ---------------------------------------------------------------------------
Modified: trunk/gnue-appserver/src/geasSession.py
===================================================================
--- trunk/gnue-appserver/src/geasSession.py 2004-05-25 17:36:18 UTC (rev
5831)
+++ trunk/gnue-appserver/src/geasSession.py 2004-05-26 08:27:53 UTC (rev
5832)
@@ -307,11 +307,20 @@
def __newInstance (self, classdef):
- table = classdef.table
- record = self.__connection.insertRecord (table)
- return geasInstance.geasInstance (self, self.__connection, record,
- classdef)
+ table = classdef.table
+ record = self.__connection.insertRecord (table)
+ instance = geasInstance.geasInstance (self, self.__connection, record,
+ classdef)
+ # FIXME: this is way too late since the dbdriver doesn't store newly
created
+ # instances; but since forms calls 'createNewRecord' to often, we leave
+ # this event 'uncalled' for now
+ # for proc in classdef.procedures.values ():
+ # if proc.gnue_name.upper () == 'ONINIT':
+ # instance.call (proc, None)
+
+ return instance
+
# ---------------------------------------------------------------------------
# Load data from the database backend
# ---------------------------------------------------------------------------
@@ -362,11 +371,18 @@
classdef = self.__getClassdef (classname)
+ for objectId in obj_id_list:
+ instance = self.__findInstance (classdef, objectId, [])
+ for proc in classdef.procedures.values ():
+ if proc.gnue_name.upper () == 'ONDELETE':
+ instance.call (proc, None)
+
for object_id in obj_id_list:
self.__connection.deleteRecord (classdef.table, object_id)
if self.__dirtyInstances.has_key (object_id):
del self.__dirtyInstances [object_id]
+
# ---------------------------------------------------------------------------
# Call a procedure of business objects
# ---------------------------------------------------------------------------
[Prev in Thread] |
Current Thread |
[Next in Thread] |
- r5832 - trunk/gnue-appserver/src,
johannes <=