WriteError class: Difference between revisions

From m204wiki
Jump to navigation Jump to search
m (provide content)
No edit summary
 
(2 intermediate revisions by one other user not shown)
Line 1: Line 1:
__NOTOC__
__NOTOC__
<var>WriteError</var> exceptions are thrown by the <var>Close</var>, <var>WriteBlock</var>, <var>WriteRecord</var>, and <var>WriteRecords</var> methods in the [[Dataset class]] if they encounter a full dataset. The problem with this approach is if the dataset fills on your last write or maybe on the Close (since Close flushes buffers and checks pending writes) you might never notice that your dataset filled up. Silently, allowing a dataset to be truncated doesn’t seem like a good idea.
<var>WriteError</var> exceptions are thrown by the <var>Close</var>, <var>WriteBlock</var>, <var>WriteRecord</var>, and <var>WriteRecords</var> methods in the [[Dataset class]] if they encounter a full output <var>Dataset</var> object.  
 
Before the existence of the <var>WriteError</var> exception class, these <var>Dataset</var> methods would cancel the request in this situation. With the exception, the full condition is brought to your attention with an opportunity to take some mitigating action.  
   
   
To create a <var>WriteError</var> exception yourself, you typically use a SOUL <var>[[Exceptions#Using the Throw statement|Throw]]</var> statement with an <var>WriteError</var> <var>[[New_(WriteError_constructor)|New]]</var> constructor. This statement must be issued from within a method, and it can only be caught by the code that calls the method. For example, the following statement throws a <var>WriteError</var> exception:
To create a <var>WriteError</var> exception yourself, you typically use a SOUL <var>[[Exceptions#Using the Throw statement|Throw]]</var> statement with a <var>WriteError</var> <var>[[New_(WriteError_constructor)|New]]</var> constructor. This statement must be issued from within a method, and it can only be caught by the code that calls the method. For example, the following statement throws a <var>WriteError</var> exception:
<p class="code">throw %(WriteError):new(returnCode=%rc)
<p class="code">throw %(WriteError):new(returnCode=%rc)
</p>
</p>
   
   
Remember that you catch an exception with the <var>[[Exceptions#Try and Catch|Catch]]</var> statement. If an exception condition occurs outside a <var>Catch</var> for it, the request is canceled.
Remember that you catch an exception with the <var>[[Exceptions#Try and Catch|Catch]]</var> statement. If an exception condition occurs outside a <var>Catch</var> for it, the request is canceled. Here is a sample testing loop with a <var>Dataset</var> object:
<p class="code">for %i from 1 to 10000
  try
    %ds:writeRecord("This is a test " %i)
  catch writeError to %writeError
    printText {~=%writeError:returnCode}
    loop end
  end try
end for </p>
   
   
The <var>WriteError</var> class is available as of <var class="product">Model 204</var> 7.7.
The <var>WriteError</var> class is available as of <var class="product">Model 204</var> 7.7.
Line 42: Line 52:
</table>
</table>
   
   
==New constructor==
==New constructor==
{{Template:WriteError:New subtitle}}
{{Template:WriteError:New subtitle}}

Latest revision as of 20:41, 17 August 2016

WriteError exceptions are thrown by the Close, WriteBlock, WriteRecord, and WriteRecords methods in the Dataset class if they encounter a full output Dataset object.

Before the existence of the WriteError exception class, these Dataset methods would cancel the request in this situation. With the exception, the full condition is brought to your attention with an opportunity to take some mitigating action.

To create a WriteError exception yourself, you typically use a SOUL Throw statement with a WriteError New constructor. This statement must be issued from within a method, and it can only be caught by the code that calls the method. For example, the following statement throws a WriteError exception:

throw %(WriteError):new(returnCode=%rc)

Remember that you catch an exception with the Catch statement. If an exception condition occurs outside a Catch for it, the request is canceled. Here is a sample testing loop with a Dataset object:

for %i from 1 to 10000 try %ds:writeRecord("This is a test " %i) catch writeError to %writeError printText {~=%writeError:returnCode} loop end end try end for

The WriteError class is available as of Model 204 7.7.

The WriteError methods

The following are the available WriteError class methods.

MethodDescription
NewCreate a new WriteError object
ReturnCodeReturn code from failed write

The methods in the class are described in the subsections that follow. In addition:

ReturnCode property

Return code from failed write (WriteError class)

This ReadOnly property returns a number that indicates the type of error encountered.

Syntax

%number = writeError:ReturnCode

Syntax terms

%number An I/O error return code. The most likely codes are:

4 Permanent I/O error 10 Offload process failed 12 File full condition

writeError A reference to an instance of a WriteError object.

New constructor

Create a new WriteError object (WriteError class)

This Constructor generates an instance of a WriteError exception.

Syntax

%writeError = [%(WriteError):]New( ReturnCode= number)

Syntax terms

%writeError A reference to an instance of a WriteError object.
[%(WriteError):] The class name in parentheses denotes a Constructor.
number A ReturnCode property value that indicates the type of error encountered.