2016-09-30 4 views
0
.

. Я пытаюсь создать бизнес-сервис, который вернет количество записей (действий) в бизнес-компоненте Action в соответствии со статусом, указанным как Input к нему.
Поле «Статус» является полем статического выбора. Поэтому, если я предоставляю «Актив» в качестве входных данных, он должен возвращать некоторое количество (в моем случае 210) в качестве вывода. Но для каждого входного результата равен нулю (0). В чем может быть проблема? Ниже представлен мой Siebel eScript.Siebel eScript: метод CountRecords() дает результат «0» для каждого входа. Значение

function ReturnStatusCount (Inputs, Outputs) 
{ 
    var status=""; 
    var count; 
    try 
    { 
     status=Inputs.GetProperty("Status"); 
     var bo = TheApplication().GetBusObject("Action"); 
     var bc = bo.GetBusComp("Action"); 
     var LOVText = TheApplication().InvokeMethod("LookupValue","EVENT_STATUS",status); 
     with (bc) 
     {  

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

ответ

1

В зависимости от того, как построен ваш Picklist, вам, возможно, придется использовать эту спецификацию вместо:

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

Она также может быть проблема видимости. Пользователь, выполняющий код, может не иметь видимости для этих 210 записей. Вы можете решить, что с помощью этого:

bc.SetViewMode(AllView); 

Если вы хотите быть уверены в том, что происходит, вы можете enable the SQL spool tracing в вашем выделенном толстом клиенте и проверить фактический запрос его выполнения ... или, вы можете пойти любой апплет запроса обслуживания и запросите себя, используя синтаксис [Status] = 'Active', или [Status] = 'ActiveLovText' (заменяя ActiveLovText на то, что возвращает LookupValue).


Кроме того, есть несколько вещей, которые вы могли бы улучшить в вашем коде:

  • В этом случае нет необходимости, чтобы избежать ваших одиночных кавычек. "'" в порядке.
  • Если вы поймаете исключение и просто выбросите его снова, вы ничего не делаете. Вы могли бы просто удалить эти линии.
  • Вы сохраняете значение count в свойстве PropertySet в блоке 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", "EVENT_STATUS", status); 
     bo = TheApplication().GetBusObject("Action"); 
     bc = bo.GetBusComp("Action"); 
     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; 
    } 
} 
+0

Спасибо! Проблема была в viewMode. Большая помощь :) – Pie