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 # ------------------------------------------------------------------------- _______________________________________________ commit-gnue mailing list commit-gnue@gnu.org http://lists.gnu.org/mailman/listinfo/commit-gnue