Janus SOAP ULI V7.8 changes: Difference between revisions

From m204wiki
Jump to navigation Jump to search
m (Created page with "{{Hierarchy header}} The following sections describe changes in the Janus SOAP ULI in this release. ==New arguments for Record class ToXmlDoc method== The ToXmlDoc method i...")
 
mNo edit summary
Line 1: Line 1:
{{Hierarchy header}}
{{Hierarchy header}}


The following sections describe changes in the [[Janus SOAP ULI]]
The following sections describe changes in the [[Janus SOAP User Language Interface|Janus SOAP ULI]]
in this release.
in this release.


==New arguments for Record class ToXmlDoc method==
==New arguments for Record class ToXmlDoc method==
The ToXmlDoc method in the Record class has the following new
The [[ToXmlDoc]] method in the Record class has the following new
arguments:
arguments:
<dl>
<dl>
Line 12: Line 12:
specifies whether to use the base codepage
specifies whether to use the base codepage
translation table when creating the XmlDoc.
translation table when creating the XmlDoc.
See the description of the <tt>CodepageTable=False|True</tt> argument in [[Janus SOAP XmlDoc API V7.8 changes#LoadFromRecord subroutine in XmlDoc and XmlNode classes|LoadFromRecord subroutine in XmlDoc and XmlNode classes]].
For more details, see the description of the <tt>CodepageTable=False|True</tt> argument in [[Janus SOAP XmlDoc API V7.8 changes#LoadFromRecord subroutine in XmlDoc and XmlNode classes|LoadFromRecord subroutine in XmlDoc and XmlNode classes]].
   
   
Note that this argument was actually introduced in version 7.6 of
Note that this argument was actually introduced in version 7.6 of
Line 22: Line 22:
XmlDoc with base64 encoding. Such values are base64 encoded if AllowNull is <tt>False</tt>.
XmlDoc with base64 encoding. Such values are base64 encoded if AllowNull is <tt>False</tt>.
   
   
See the description of the <tt>AllowNull=</tt> argument in [[Janus SOAP XmlDoc API V7.8 changes#NewFromRecord shared function in XmlDoc class|NewFromRecord shared function in XmlDoc class]].
For more information, see the description of the <tt>AllowNull=</tt> argument in [[Janus SOAP XmlDoc API V7.8 changes#NewFromRecord shared function in XmlDoc class|NewFromRecord shared function in XmlDoc class]].
   
   
Note that this argument was actually introduced in version 7.7 of the ''Sirius Mods''.
Note that this argument was actually introduced in version 7.7 of the ''Sirius Mods''.
</dl>
</dl>
==Field references in CurrentRecord methods==
==Field references in Record class CurrentRecord methods==
For methods declared with a CurrentRecord attribute, it was the case under ''Sirius Mods'' 7.7 that field references were an exception
For methods declared with a CurrentRecord attribute, it was the case under ''Sirius Mods'' 7.7 that field references were an exception to the following rule:
to the following rule:
<br>
<br>
''Statements within the method definition, even a CurrentRecord method call, may reference the record without having to be wrapped inside a record For loop.''
''Statements within the method definition, even a CurrentRecord method call, may reference the record without having to be wrapped inside a record For loop.''
Line 52: Line 51:
The BadJournal exception class reports
The BadJournal exception class reports
errors in CCAJRNL or CCAJLOG datasets or streams, including naming errors.
errors in CCAJRNL or CCAJLOG datasets or streams, including naming errors.
The New method of the Journal system class is the
The [[New]] method of the [[Journal]] system class is the
system method that automatically throws a BadJournal exception.
system method that automatically throws a BadJournal exception.
   
   
Line 90: Line 89:
</pre>
</pre>
   
   
The methods of the class are described in the following subsections.
The methods of the BadJournal class are described in the following subsections.
===New constructor===
===New constructor===
This constructor generates an instance of a BadJournal exception.
This constructor generates an instance of a BadJournal exception.
Line 117: Line 116:
</dl>
</dl>
==New SelectionCriterion methods: IsNull and IsNotNull==
==New SelectionCriterion methods: IsNull and IsNotNull==
These shared methods take no parameters and create a new SelectionCriterion object.
These shared methods take no parameters and create a new [[SelectionCriterion]] object.
The methods provide control for Null objects in the collection you are searching.
The methods provide control for Null objects in the [[collection]] you are searching.
They also let you determine whether a collection contains items that are objects,
They also let you determine whether a collection contains items that are objects,
because they cancel the request if the collection being searched contains
because they cancel the request if the collection being searched contains
Line 151: Line 150:
</pre>
</pre>
<ol>
<ol>
<li>The Arraylist class FindNextItem method, which throws an exception
<li>The Arraylist class [[FindNextItem]] method, which throws an exception
if its selection criterion
if its selection criterion
matches no item, fails in the Try clause below when it tests the Null object item.
matches no item, fails in the Try clause below when it tests the Null object item.
Line 173: Line 172:
you can use an IsNotNull criterion to bypass Null items:
you can use an IsNotNull criterion to bypass Null items:
<pre>
<pre>
     try  %t = %al:findNextItem(AND(isNotNull, eq(x,1)))
     try  %t = %al:findNextItem(AND(isNotNull, EQ(x,1)))
       printtext found t
       printtext found t
       printtext {~} = {%t:x}
       printtext {~} = {%t:x}
Line 189: Line 188:
include them:
include them:
<pre>
<pre>
     try  %t = %al:findNextItem(OR(isNull, eq(x,1)))
     try  %t = %al:findNextItem(OR(isNull, EQ(x,1)))
       printtext found t
       printtext found t
       printtext {~} = {%t:x}
       printtext {~} = {%t:x}
Line 213: Line 212:
<pre>
<pre>
     %t = %al:findNextItem(isNotNull)
     %t = %al:findNextItem(isNotNull)
     %t = %al:findNextItem(AND(isNotNull, eq(x,0)))
     %t = %al:findNextItem(AND(isNotNull, EQ(x,0)))
</pre>
</pre>
   
   

Revision as of 00:59, 10 December 2010

{{#hierarchy-top:}}

The following sections describe changes in the Janus SOAP ULI in this release.

New arguments for Record class ToXmlDoc method

The ToXmlDoc method in the Record class has the following new arguments:

CodepageTable= bool
This Boolean argument, which defaults to False, specifies whether to use the base codepage translation table when creating the XmlDoc. For more details, see the description of the CodepageTable=False|True argument in LoadFromRecord subroutine in XmlDoc and XmlNode classes. Note that this argument was actually introduced in version 7.6 of the Sirius Mods.
AllowNull= bool
The value of this Boolean argument, which defaults to False, is copied to the AllowNull property of the XmlDoc created by ToXmlDoc. The XmlDoc's AllowNull property, in turn, determines whether field values that contain the X'00' character are stored in the XmlDoc with base64 encoding. Such values are base64 encoded if AllowNull is False. For more information, see the description of the AllowNull= argument in NewFromRecord shared function in XmlDoc class. Note that this argument was actually introduced in version 7.7 of the Sirius Mods.

Field references in Record class CurrentRecord methods

For methods declared with a CurrentRecord attribute, it was the case under Sirius Mods 7.7 that field references were an exception to the following rule:
Statements within the method definition, even a CurrentRecord method call, may reference the record without having to be wrapped inside a record For loop.

Under Sirius Mods 7.8, field references are no longer an exception to this rule. You may reference a record field from within a method declared with CurrentRecord without being inside a record For loop.

For example, for the field COLOR, the For Record currentRecord and End For statements containing the print COLOR statement in the method definition below may be discarded under Sirius Mods 7.8:

    local subroutine (Record in file myproc):printField currentRecord in file myproc
       for record currentRecord
           print COLOR
       end for
    end subroutine

New exception class: BadJournal

The BadJournal exception class reports errors in CCAJRNL or CCAJLOG datasets or streams, including naming errors. The New method of the Journal system class is the system method that automatically throws a BadJournal exception.

The following example shows a Try and Catch of a Journal class, New method, exception. An invalid journal name is specified to generate the BadJournal exception:

    Begin
 
    %sl        is object stringlist
    %rc        is float
    %journal   is object journal
    %bdjrnl    is object BadJournal
 
    try printtext {~} is: {%journal = new('OLD~RNL')}
      catch BadJournal to %bdjrnl
      Print 'Failure!!! Reason code is: ' %bdjrnl:reasonCode
    end try
 
    %rc = %sl:appendJournalData( -
              Options='MAXIO=1000 WIDTH=138 ST AA USER', -
              Threads='*', Journal=%journal)
    Print %rc
    Print %sl:count
    %sl:print
 
    End

The Stringlist AppendJournalData method does not cancel if its Journal parameter is null. The request result shows the reason code (ReasonCode property value) stored in the exception object:

    %journal = new('OLD~RNL') is: Failure!!! Reason code is: 1
    0
    0

The methods of the BadJournal class are described in the following subsections.

New constructor

This constructor generates an instance of a BadJournal exception. As shown below, the optional argument of the New method is a setting of the ReasonCode property.

New constructor syntax

  [%bdJrnl =] [%(BadJournal):] New(ReasonCode=num)

ReasonCode property

This readOnly property returns a numeric reason code that indicates the cause of the BadJournal exception.

ReasonCode syntax

  %rc = %bdJrnl:ReasonCode

Possible reason codes are:

1
Either the dataset or stream name is invalid, or the journal is invalid.
2
The dataset or stream is empty.
3
The journal was created with a different Model 204 version than the current Online.
4
A merged journal is invalid.

New SelectionCriterion methods: IsNull and IsNotNull

These shared methods take no parameters and create a new SelectionCriterion object. The methods provide control for Null objects in the collection you are searching. They also let you determine whether a collection contains items that are objects, because they cancel the request if the collection being searched contains non-object (intrinsic type) items.

An IsNull criterion selects a collection item if the item is a Null object; an IsNotNull criterion selects an item objects if it is not Null.

The syntax of the methods follows:

  %selc = IsNull

  %selc = IsNotNull

The examples below test a variety of searches against arraylist %al of objects of class T:

    class T
      public
        variable x is float
      end public
    end class
 
    %al is arraylist of object t
    %t  is object t
    %t1 is object t
    %t2 is object t
 
    %t1 = null
    %t2 = new
    %al = list(%t1, %t2)
  1. The Arraylist class FindNextItem method, which throws an exception if its selection criterion matches no item, fails in the Try clause below when it tests the Null object item. The method's exception is not thrown because the test failure prevents the method from completing its search:
        try  %t = %al:findNextItem(EQ(x,1))
           printtext found t
           printtext {~} = {%t:x}
        catch itemNotFound
           printText None!
        end try
    

    The result is:

        CANCELLING REQUEST: MSIR.0750: Class ARRAYLIST, function
           FindNextItem: reference to null object in line xx
    

    To complete this request without cancellation, you can use an IsNotNull criterion to bypass Null items:

        try  %t = %al:findNextItem(AND(isNotNull, EQ(x,1)))
           printtext found t
           printtext {~} = {%t:x}
        catch itemNotFound
           printText None!
        end try
    

    The search finds no matching items, so the Catch clause above catches the method's ItemNotFound exception, and the result is:

        None!
    
  2. Instead of bypassing Null items, you might instead want the search to include them:
        try  %t = %al:findNextItem(OR(isNull, EQ(x,1)))
           printtext found t
           printtext {~} = {%t:x}
        catch itemNotFound
           printText None!
        end try
    

    The Null item is found, but the Try clause PrintText invocation of %t:x fails, and the result is:

        CANCELLING REQUEST: MSIR.0561: Text output:
           reference to null object in line xx
    

    If you want to search exclusively for the next Null item in a collection, you can simply use this:

        %t = %al:findNextItem(isNull)
    
  3. To successfully locate the non-Null item in %al, you could use either of the following method calls in the Try clause:
        %t = %al:findNextItem(isNotNull)
        %t = %al:findNextItem(AND(isNotNull, EQ(x,0)))
    

    Thanks to the change in the EQ criterion in the second call above, the result of trying either of these searches is:

        found t
        %t:x=0
    

{{#hierarchy-bottom:}}