Error Handling
This section provides information on three topics concerning the handling of errors for a data source: error catching, error reporting, and error raising.
Error Catching
Errors can be caught through error sink objects using a similar technique to the one described for IliTable objects. See the addErrorSink and removeErrorSink member functions. Note that all errors raised by the underlying table object are forwarded to the data source error sinks. In addition, the data source itself can raise specific errors.
The following example shows how a data source should be set up in order to catch and report errors:
IliDataSource* ds;
...
// Set up an error sink.
IliErrorList errors;
ds->addErrorSink(&errors);
// Act on the data source.
ds->gotoRow(10);
ds->setValue(“NAME”, IliValue(“Smith”));
ds->validate();
...
ds->removeErrorSink(&errors);
// Check for errors.
if (errors.getErrorsCount() > 0) {
ds->reportErrors(errors);
}
Error Reporting
Errors are reported through an instance of the IliErrorReporter class. The setErrorReporter member function can be used to provide a custom error reporter.
The following example shows how the error reporter of a data source can be redefined:
class MyErrorReporter: public IliErrorReporter {
public:
virtual void reportErrors (IlvDisplay* dpy,
IlvAbstractView* anchor,
const IliErrorList& errors) const {
for (IlInt i = 0; i < errors.getErrorsCount(); ++i) {
IlvPrint(“Error: %s”, errors.at(i).getMessage());
}
}
};
 
int main(int argc, char** argv) {
IliDataSource* ds;
...
MyErrorReporter* rep = new MyErrorReporter;
ds->setErrorReporter(rep);
...
}
Error Raising
Errors can be raised within a validation callback such as ValidateRow, PrepareUpdate or PrepareInsert. In such cases, the dontValidateRow member function should be called to stop the validation process and errors can be raised by calling the addErrorMessage member function. For more information on Error Messages, see Error Messages.
Published date: 05/24/2022
Last modified date: 02/24/2022