0

入力として与えられたステータスに従ってレコードの数を返すビジネス サービスを作成しようとしています。
「ステータス」フィールドは静的選択リスト フィールドです。以下は私の Siebel eScript です。

function getRecordsCount (Inputs, Outputs)
{
    var count=0;
    try
    { 
        var bo = TheApplication().GetBusObject(Inputs.GetProperty("boname"));
        var bc = bo.GetBusComp(Inputs.GetProperty("bcname"));
        var LOVText = TheApplication().InvokeMethod("LookupValue",Inputs.GetProperty("lovType"),Inputs.GetProperty("Status"));
        with (bc)
        {     

            ClearToQuery();
            SetSearchSpec("Status","\'"+LOVText+"\'");
            ExecuteQuery(ForwardOnly);
            count = CountRecords();
        }
      bc = null;
      bo = null;
    }
    catch (e)
    {
        throw (e);
    }
    finally
    {
        Outputs.SetProperty("Count",count);
    }
}
4

1 に答える 1

1

ピックリストの作成方法によっては、代わりに次の仕様を使用する必要がある場合があります。

bc.SetSearchSpec("Status", "='" + status + "'");

視認性の問題も考えられます。コードを実行しているユーザーは、これらの 210 レコードを表示できない可能性があります。これを使用してそれを解決できます:

bc.SetViewMode(AllView);

何が起こっているのかを確認したい場合は、専用のシック クライアントでSQL スプール トレースを有効にして、実行中の実際のクエリを確認するか、任意のサービス リクエスト アプレットに移動して、次の構文を使用して自分自身にクエリを実行できます[Status] = 'Active'。または( LookupValue が返すものに[Status] = 'ActiveLovText'置き換えます)。ActiveLovText


また、コードで改善できる点がいくつかあります。

  • この場合、一重引用符をエスケープする必要はありません。"'"結構です。
  • 例外をキャッチして再度スローしても、何もしていません。これらの行を削除することもできます。
  • countPropertySetの値をブロックに格納しているfinallyため、変数が初期化される前でもアクセスできます。初期値で宣言するか、SetProperty行を別の場所に配置してください。
  • 一方、finallyや などの使用済みオブジェクトをクリアするには、ブロックを使用する必要がbcありboます。つまりtry、例外がある場合は実行されません。その場合は問題になるわけではありませんが、常に良い習慣です。

これらすべてを考慮すると、コードは次のようになります。

function ReturnStatusCount (Inputs, Outputs)
{
    var bo:BusObject;  // Remove the ":BusObject" and ":BusComp" parts if
    var bc:BusComp;    // they give you any trouble
    try {
        var status = Inputs.GetProperty("Status");
        var lovText = TheApplication().InvokeMethod("LookupValue", Inputs.GetProperty("lovType"), status);
        bo = TheApplication().GetBusObject(Inputs.GetProperty("boname"));
        bc = bo.GetBusComp(Inputs.GetProperty("bcname"));
        bc.ClearToQuery();
        bc.SetViewMode(AllView);
        bc.SetSearchSpec("Status", "='" + status + "'");  // status, or lovText maybe
        bc.ExecuteQuery(ForwardOnly);
        Outputs.SetProperty("Count", bc.CountRecords());
    } finally {
        bc = null;
        bo = null;
    }
}
于 2016-10-04T11:52:45.533 に答える