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',或[Status] = 'ActiveLovText'(替换ActiveLovTextLookupValue 返回的任何内容)。


此外,您可以在代码中改进一些内容:

  • 在这种情况下,无需转义单引号。"'"很好。
  • 如果你捕捉到一个异常并再次抛出它,你什么都不做。您也可以删除这些行。
  • 您将countPropertySet 中的值存储在一个finally块中,甚至在变量初始化之前就可以访问该块。要么用初始值声明它,要么将你的SetProperty行放在其他地方。
  • 另一方面,您应该使用finally块来清除使用过的对象,例如bcbo。你在你的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 回答