📄 jb4-1-8-5.htm
字号:
<p><font size="2"> . 包含在解析中的原始DataSet </font></p>
<p><font size="2"> . 已被过滤以便显示仅受影响行的临时DataSet</font></p>
<p><font size="2"> .已经产生的Exception </font></p>
<p><font size="2"> .一个ErrorResponse对象<br>
<br>
错误事件处理器的任务是: </font></p>
<p><font size="2"> . 检查Exception </font></p>
<p><font size="2"> . 决定如何继续</font></p>
<p><font size="2"> . 将这一决定传送回解析管理器。这一决定利用下列ErrorResponse响应中的一种进行通信: </font></p>
<p><font size="2"> . about() 指示解析管理器停止所有解析。</font></p>
<p><font size="2"> . retry() 指示解析管理器重新执行最后的操作。</font></p>
<p><font size="2"> . ignore() 指示解析管理器忽略错误,并继续进行下去。<br>
<br>
如果事件处理器抛出一个DataSetException,它将被作为一个ResolverResponse.about( )来对待。另外,它触发上述的错误事件,传递用户的Excepti on。 <br>
<br>
<b><font color="#000080">
Using resolver events</font></b><br>
<br>
使用解析器事件有关解析器事件的例子可参考ResolverEvent.jpr和你的JBuilder安装目录下的samples\DataExpress\ResolverEvents子目录中的有关文件。在ResolverEvent应用程序中, </font></p>
<p><font size="2"> . 一个被绑定至JDataStore数据库示例中的Customer表的网格。 </font></p>
<p><font size="2"> . Save Change按钮生成一个用于控制解析过程的定制QueryResolver对象。<br>
<br>
在运行应用程序的过程中,你必须注意以下几点: </font></p>
<p><font size="2"> . 禁止行删除。任何删除数据行的尝试都被无条件禁止。这演示了dele tingRow事件的使用。 </font></p>
<p><font size="2"> . 仅当用户来自于United States (美国) 时才允许进行行插入。如果当前用户不来自 U . S,那么这一过程将被终止。这个例子演示了deletingRow事件和abort ( )的ResolverResponse的使用。 </font></p>
<p><font size="2"> . 通过向一个ListControl中添加用户名称的旧的和新的数值,可以实现行更新。这范例说明了在解析过程中如何读取新的信息和以前的信息。<br>
<br>
<b><font color="#000080">
Writing a custom data resolver</font></b><br>
<br>
编写定制数据解析器这部分主要讨论定制数据解析器,以及它们是如何被用作为TableDataSet的解析器和源于TableDataSet的任意DataSet。实现的主要方法是resolveData( )。这种方法将修改收集到StorageDataSet中,并且将这些变化解析回数据源中。为了将数据修改解析回数据源中, <br>
<br>
1) 在解析过程中,确认对于提供者中的修改, StorageDataSe被阻塞( blocked)。这可以通过调用以下方法实现:</font></p>
<p><font size="2"> . ProviderHelp.startResolution(dataSet,true);</font></p>
<p><font size="2"> . ProviderHelp.endResolution(dataSet); </font></p>
<p><font size="2"> 重要将下列所有各项放置于这两种方法的调用之间。<br>
<br>
2) 通过为每一个将插入、删除和修改的行创建一个DataSetView,来对数据的变更进行定位。利用下列方法调用可以完成这项工作: . StorageDataSet.getInsertedRows(DataSetView ) ; . StorageDataSet.getDeletedRows(DataSetView ) ; . StorageDataSet.getUpdatedRows(DataSetView ) ; <br>
特别需要注意的是: </font></p>
<p><font size="2"> . 插入行中可以包含有删除行(但不能被解析)。</font></p>
<p><font size="2"> . 删除行中可以包含有插入行(但不能被解析)。 </font></p>
<p><font size="2"> . 修改行中可以包含有删除行和插入行(但不能被作为修改处理)。 <br>
<br>
3) 在数据解析完毕后,或者如果在解析过程中出现异常,关闭每一个DataSetViews。如果DataSetViews没有被关闭,那么StorageDataSet中仍保存着对它的引用,并且这一查看将永远不会被当做无用信息而收集起来。<br>
<br>
<font color="#000080"><b>
Handing resolver errors</b></font><br>
<br>
处理解析器错误有多种方法可以处理错误,然而必需告知D a t a S e t来改变已修改行的状态。为了做到这一点: </font></p>
<p><font size="2"> 1) 修改每一行,以便它被标记为ROwStatus.PENDING_RESOLVED:。用这种方法标记当前行的程序代码为:</font></p>
<p> <font size="2"> DataSet.markPendingStatus(true); </font></p>
<p><font size="2"> 对每一正在被解析的插入行、删除行和修改行都要调用这一方法。</font></p>
<p><font size="2"> 2) 调用下列方法中的一种或多种以重新设置RoStatus.PENDING_RESOLV ED位。调用哪种方法取决于错误处理途径。 </font></p>
<p><font size="2"> . markPendingStatus(false);</font></p>
<p><font size="2"> markPendingStatus方法复位当前行。</font></p>
<p><font size="2"> . resetPendingStatus(boolean resolved); </font></p>
<p><font size="2"> 这种resetPendingStatus方法复位DataSet中的所有行。 </font></p>
<p><font size="2"> .resetPendingStatus(long internalRow, boolean resolved); </font></p>
<p><font size="2"> 这种resetPendingStatus方法复位指定的有internalRow标示符的行。</font></p>
<p> <font size="2"> 3) 对数据源实际所作修改的行,利用resetPendingStatus方法中的一种,复位resolved参数为true。</font></p>
<p><font size="2"> 当PENDING_RESOLVED位复位时,所有行还将保存着记录修改的状态。行必须复位和解析,以便将: </font></p>
<p><font size="2"> . INSERTED&UPDAED行改为LOADED状态。 </font></p>
<p><font size="2"> . 从DataSet中删除DELETED行。</font></p>
<p><font size="2"> 没有进行的行修改将清除PENDING_RESOLVED位,然而这些变化还要被记录在DataSet中。</font></p>
<p><font size="2"> 如果有任何错误发生,一些解析器会选择放弃所有修改。实际上,它是 QueryDataSet的默认性能。另外一些解析器会选择提交某些修改,并将为错误信息保留失败的修改。 <br>
<br>
<font color="#000080"><b>解析主从关系</b></font></font></p>
<p><font size="2">
主从解析过程存在着一些需要考虑的问题。如果数据源有完整性引用规则,那么 DataSet必须按一定的次序来解析。当使用JDBC时,JBuilder提供了SQLResolutionManager类。这种类保证了主数据集在从数据集解析其插入行数据之前解析出它的插入行数据,并且保证了从数据集在主数据集删除行被解析前解析出它的删除行数据。更多的有关解析主从关系的信息,参见“在主从关系中保存修改” 部分。</font></p>
</BODY>
</HTML>
⌨️ 快捷键说明
复制代码
Ctrl + C
搜索代码
Ctrl + F
全屏模式
F11
切换主题
Ctrl + Shift + D
显示快捷键
?
增大字号
Ctrl + =
减小字号
Ctrl + -