Author: reinhard
Date: 2009-10-15 16:32:44 -0500 (Thu, 15 Oct 2009)
New Revision: 9972
Modified:
trunk/gnue-forms/src/GFObjects/GFBlock.py
trunk/gnue-forms/src/GFObjects/GFEntry.py
Log:
Behave as reasonable as possible if there is no resultset behind the block.
Modified: trunk/gnue-forms/src/GFObjects/GFBlock.py
===================================================================
--- trunk/gnue-forms/src/GFObjects/GFBlock.py 2009-10-15 13:12:49 UTC (rev 9971)
+++ trunk/gnue-forms/src/GFObjects/GFBlock.py 2009-10-15 21:32:44 UTC (rev 9972)
@@ -25,6 +25,7 @@
Classes making up the Block object.
"""
+from gnue.common.apps import errors
from gnue.common.datasources import GConditions
from gnue.common.definitions import GParser
from gnue.common import events
@@ -354,14 +355,15 @@
self.__resultset = event.resultSet
- recno = self.__resultset.getRecordNumber()
- if recno == -1:
- self.__scrolling_blocked = True
- try:
- if not self.__resultset.firstRecord():
- self.__resultset.insertRecord(self._lastValues)
- finally:
- self.__scrolling_blocked = False
+ if self.__resultset is not None:
+ recno = self.__resultset.getRecordNumber()
+ if recno == -1 and self.editable in ('Y', 'new'):
+ self.__scrolling_blocked = True
+ try:
+ if not self.__resultset.firstRecord():
+ self.__resultset.insertRecord(self._lastValues)
+ finally:
+ self.__scrolling_blocked = False
self.__current_record_changed(True)
@@ -682,6 +684,9 @@
if self.mode == 'query':
return
+ if self.__resultset is None:
+ return
+
if self.__resultset.isFirstRecord():
return
@@ -704,6 +709,9 @@
if self.mode == 'query':
return False
+ if self.__resultset is None:
+ return
+
if self.__resultset.isFirstRecord():
return False
@@ -731,6 +739,9 @@
if self.mode == 'query':
return False
+ if self.__resultset is None:
+ return
+
if self.__resultset.isLastRecord():
if self.autoCreate and self.get_record_status() != 'empty' and \
not self.editable in('update', 'N'):
@@ -756,6 +767,9 @@
if self.mode == 'query':
return
+ if self.__resultset is None:
+ return
+
if self.__resultset.isLastRecord():
return
@@ -778,6 +792,9 @@
if self.mode == 'query':
return
+ if self.__resultset is None:
+ return
+
# If record_number is negative, move relative to last record
if record_number < 0:
record_number += self.__resultset.getRecordCount()
@@ -804,6 +821,9 @@
@param count: the number of records to move from the current record.
"""
+ if self.__resultset is None:
+ return
+
record_number = self.__resultset.getRecordNumber() + count
record_number = max(record_number, 0)
@@ -826,6 +846,9 @@
if self.mode == 'query':
return False
+ if self.__resultset is None:
+ return
+
# First, convert the fieldname/value pairs to column/value pairs.
cond = {}
for (fieldname, value) in params.iteritems():
@@ -892,7 +915,10 @@
Return the number of records in this block.
"""
- return self.__resultset.getRecordCount()
+ if self.__resultset is not None:
+ return self.__resultset.getRecordCount()
+ else:
+ return 0
# -------------------------------------------------------------------------
@@ -988,6 +1014,9 @@
Return True if the current record is the first one in the result set.
"""
+ if self.__resultset is None:
+ return True
+
return self.__resultset.isFirstRecord()
# -------------------------------------------------------------------------
@@ -997,6 +1026,9 @@
Return True if the current record is the last one in the result set.
"""
+ if self.__resultset is None:
+ return True
+
return self.__resultset.isLastRecord()
@@ -1058,6 +1090,8 @@
elif self.mode == 'init':
self.__initializing_record[field.field] = value
+ elif self.__resultset is None:
+ raise NoDataInBlockError(self)
else:
self.processTrigger('Pre-Change')
field.processTrigger('Pre-Change')
@@ -1087,6 +1121,9 @@
if self.mode == 'query':
return
+ if self.__resultset is None:
+ raise NoDataInBlockError(self)
+
self._focus_out()
self.__resultset.insertRecord(self._lastValues)
@@ -1109,6 +1146,9 @@
if self.mode == 'query':
return
+ if self.__resultset is None:
+ raise NoDataInBlockError(self)
+
self._focus_out()
self.__resultset.duplicateRecord(exclude=exclude, include=include)
@@ -1126,6 +1166,9 @@
if self.mode == 'query':
return
+ if self.__resultset is None:
+ raise NoDataInBlockError(self)
+
self.__resultset.current.delete()
if self._form.get_focus_block() is self:
@@ -1141,6 +1184,9 @@
if self.mode == 'query':
return
+ if self.__resultset is None:
+ raise NoDataInBlockError(self)
+
self.__resultset.current.undelete()
if self._form.get_focus_block() is self:
@@ -1202,6 +1248,9 @@
@param parameters: Function parameter dictionary.
"""
+ if self.__resultset is None:
+ raise NoDataInBlockError(self)
+
# Remember the current record; the record pointer is not reliable
# between postAll and requeryAll!
current = self.__resultset.current
@@ -1225,6 +1274,9 @@
user, for example to make gnue-appserver recalculate calculated fields.
"""
+ if self.__resultset is None:
+ raise NoDataInBlockError(self)
+
self._dataSourceLink.postAll()
self._dataSourceLink.requeryAll(False)
@@ -1252,6 +1304,9 @@
@returns: list of dictionaries (one per record)
"""
+ if self.__resultset is None:
+ return []
+
result = []
if not fieldnames:
fields = self._fieldMap.values()
@@ -1368,6 +1423,9 @@
if self.mode == 'query':
newRecord = 0
newRecordCount = 1
+ elif self.__resultset is None:
+ newRecord = 0
+ newRecordCount = 0
else:
newRecord = self.__resultset.getRecordNumber()
newRecordCount = self.__resultset.getRecordCount()
@@ -1434,6 +1492,10 @@
record_number = 1
record_count = 1
record_status = 'QRY'
+ elif self.__resultset is None:
+ record_number = 0
+ record_count = 0
+ record_status = 'NUL'
else:
record_number = self.__resultset.getRecordNumber()+1
record_count = self.__resultset.getRecordCount()
@@ -1670,3 +1732,14 @@
'datasource': source,
'block': block.name},
block._url, block._lineNumber)
+
+# =============================================================================
+
+class NoDataInBlockError(errors.ApplicationError):
+ """
+ There is no data in this block loaded.
+ """
+ def __init__(self, source, block):
+ message = u_("There is no data in block '%(block)s'")
+ errors.ApplicationError.__init__(self, message % {
+ 'block': block.name})
Modified: trunk/gnue-forms/src/GFObjects/GFEntry.py
===================================================================
--- trunk/gnue-forms/src/GFObjects/GFEntry.py 2009-10-15 13:12:49 UTC (rev 9971)
+++ trunk/gnue-forms/src/GFObjects/GFEntry.py 2009-10-15 21:32:44 UTC (rev 9972)
@@ -111,7 +111,8 @@
def _is_navigable_(self, mode):
- return self.navigable and self._block.navigable and not self.hidden
+ return self.navigable and self._block.navigable \
+ and self._block.get_record_count() > 0 and not self.hidden
# -------------------------------------------------------------------------
lmpx.com only provides a reader for public news (NNTP) servers. It is not
affiliated with the servers or forums shown here and is not responsible for
the content of articles, which is written by their respective authors.