Sun N1 Service Provisioning System 5.2 XML スキーマリファレンスガイド

<return> ステップ

<return> ステップ要素を使用すると、現在のブロックの実行を停止し、オプションとして returns 値を呼び出し側ステップに返すことができます。<return> ステップ要素は、次の要素内だけに出現できます。

installuninstall、または call ブロック宣言内に returns=true 属性が存在する場合は、ブロック定義の実行パスごとに、対応する捕捉されていない <raise> または <return> ステップが必須になります。

<return> ステップはブロック内の任意の場所に出現でき、通常は Java return 文のセマンティクスの後に続きます。ブロックの複雑さによっては、すべての実行パスが確実に値を返すように、2 つ以上の <return> ステップが必要になります。return に続いて追加ステップが示される場合は、チェックインエラーがスローされます。ただし、<return> ステップが <try> ブロック内に出現し、追加ステップが対応する <finally> ブロックで囲まれている場合を除きます。<raise> ステップが捕捉されておらず、現在のブロックスコープ内で処理される場合に限り、実行パスが <raise> ステップで終了することもあります。ブロックで returns 属性が指定されていなくても <return> ステップをブロック内で使用できますが、その場合は返す値を指定してはいけません。<return> ステップで値が指定されていても、returns 属性がそのブロックに指定されていないと、チェックインエラーが発生します。

<return> ステップの属性

<return> ステップには、String 型の属性値が 1 つあります。この値は戻り値です。値が指定されていない場合、ブロックは値が返されずにステップ実行されます。


例 2–4 <try> および <finally> ブロックでの <return> ステップの使用

次の例は、<try> および <finally> ブロック内の <return> ステップを示しています。値 b が返されます (Java の場合と同様)。


<try>
    <block>
        <return value="a"
    </block>
    <catch/>
    <finally>
         <return value="b">
    </finally>
</try>


例 2–5 条件付きでの <return> ステップの使用

条件付きで使用される <return> ステップの例を、次に示します (分かりやすいよう行番号を追加)。var1 true の場合、5 行目の <return> ステップによってブロックの残りのブロックがスキップされます。8 行目と 9 行目はまったく実行されません。var1true ではない場合は、9 行目の <return> ステップが、ブロック内で実行される最後のステップになります。


1. <control name = "blah" returns="true">
2.   <varList>
3.   <var name="var1" default="val1"/>
4.   <var name="var2" default="val2"/>
5.   </varList>
6.   <if>
7.      <condition><istrue value=":[var1]"/></condition>
8.      <then>
9.         <return value=":[var2]">
10.     </then>
11.  </if>
12.  <assign varName="var2" value="new value"/>
13.  <return value=":[var2]"/>
14.</control>


例 2–6 <try> ブロック内での条件付きの <return> ステップの使用

一方、次の例は、<try> ブロック内での <return> ステップの条件付きの使用を示しています。var1true かどうかにかかわらず、15 行目が実行される最後の行になります。


1. <control name="blah" returns="true">
2.   <varList>
3.   <var name="var1" default="val1"/>
4.   <var name="var2" default="val2"/>
5.   </varList>
6.   <try>
7.      <block>
8.          <if>
9.              <condition><istrue value=":[var1]"/></condition>
10.             <then>
11.                 <return value=":[var2]">
12.             </then>
13.         </if>
14.         <assign varName="var2" value="new value"/>
15.         <return value=":[var2]"/>
16.     </block>
17.  <catch/>
18.  <finally>
19.      <pause delaySecs="5"/>
20.  </finally>
21.   </try>
22.</control>


例 2–7 inlineSubplan 内での <return> ステップの使用

次の例は、inlineSubplan または execSubplan 本体の <SimpleSteps> 内にある <return> ステップを示しています。制御は、inlineSubplan または execSubplan を呼び出す一連のステップ内の次の行に戻ります。4 行目の <return> ステップのあとの、次のステップは 7 行目です。


1. <complexSteps>
2.   <inlineSubplan>
3.       <simpleSteps>
4.           <return/>
5.       </simpleSteps>
6.   </inlineSubplan>
7.   <inlineSubplan>
8.       <simpleSteps>
9.            <pause delaySecs="1"/>
10.      </simpleSteps>
11.  </inlineSubplan>
12.</complexSteps>