コンテンツにスキップ

SAORIモジュールとしての華和梨

華和梨はSHIORI規格の準AIモジュールですが、同時にSAORI規格モジュールでもあります。SAORIモジュールとして使うと、

  • 華和梨Phase 7から移行する際、新旧スクリプトを同時に使える
  • 他の栞を使用している場合でも、華和梨の欲しい機能だけを使える

といったメリットがあります。

華和梨をSAORIとして使うとき、次の3つのことに注意します。

引数の受け取り

華和梨がSAORIとして呼ばれた時、System.Callback.OnSaoriExecuteエントリを評価します。他のコールバックエントリと同様、所属する全ての単語を評価します。この時、SAORIモジュールに与えられた引数は、System.Request.*以下、System.Request.Argument0、System.Request.Argument1等のエントリに存在します。

引数が何個あるか等を知りたい場合、listtreeコマンドを使い、

listtree arguments System.Request

として、argumentsエントリを調べると知ることが出来ます。

戻り値の引渡し

戻り値を返したい時はコミュニケートと同様、System.Response.*エントリ群を使います。SAORI規格に従って、戻り値は、System.Response.Resultに書き込みます。以下、System.Response.Value0、System.Response.Value1、System.Response.Value2等のエントリに補助情報を書き込みます。

ステータス

戻り値を返すには、実はこれだけでは不十分です。System.Resoposeエントリに、ステータスを書き込む必要があります。このステータスコードを見て、SAORIモジュールを呼び出した側は処理の成功/失敗を判断する為、必須情報です。主なステータスコードは次の通りです。

ステータス 意味
200 引数を正しく理解し、戻り値を書き込んだ
204 引数は正しく理解したが、戻り値がない
400(省略時デフォルト) 理解できない引数が来た

なお、System.Callback.OnSaoriExecuteの評価結果は、ステータスと無関係です。この点が他のコールバックエントリと違いますので、注意が必要です

System.Callback.OnSaoriExecute : $(
    if $[ ${System.Request.Argument0} == "処理1" ] $(
        SAORI処理1;
    ) else if $[ ${System.Request.Argument0} == "処理2" ] $(
        SAORI処理2;
  );

# SAORI処理をわざわざ関数にする必然性はないのだが…
# 新機軸に見慣れて貰うために、あえて関数で記述した。
# 普通にエントリとして書いても何の問題もない。
# 引数はSystem.Request.*に存在し、関数の引数として与える必要がないから。

=kis
function SAORI処理1 $(
    if $[ ${System.Request.Argument1} == "貢物" ] $(
        # Resultのみ返す例
        setstr System.Response.Result "うむ、よろしい!";
        setstr System.Response 200;
    ) else $(
        # ResultとValue*を併用する例
        setstr System.Response.Result "貢物はどうした!";
        setstr System.Response.Value0 "文句";
        setstr System.Response.Value1 "不満";
        setstr System.Response.Value2 $(date %y%m%d);
        setstr System.Response 200;
    );
);

function SAORI処理2 $(
    if $[ ${System.Request.Argument1} == "1" ] $(
        # Resultなしだが正常終了の例
        setstr System.Response 204;
    ) else $(
        # 異常終了の例
        setstr System.Response 400;
    );
);
=end