Всем привет! Сегодня хочу представить Вашему вниманию перевод полезной статьи. Речь пойдет о спецификациях поиска. Не знаю какие еще умные слова написать от себя, поэтому приступлю непосредственно к переводу.

Я копался в логах после совершения нескольких разных типов запросов в Siebel через пользовательский интерфейс и через код чтобы поправить один дефект. При этом я узнал о Siebel много вещей, о которых до этого не имел понятия. Чтобы упростить понимание для остальных, я написал этот небольшой пост, поясняющий основы.

Если вы уже знаете все, что описано в абзаце «Базовые понятия», то смело спускайтесь к абзацу «Как убрать спецификацию поиска из объектов Siebel во время выполнения».

Базовые понятия

Спецификация поиска — это просто выражение, которое Siebel вставляет в условие WHERE каждый раз когда делает запрос в базу данных. Но Siebel следует некоторым правилам, когда решает как включить эти условия в секцию WHERE. Эти правила можно глобально разделить на две группы:

  • User Search Spec (Пользовательская спецификация поиска),
  • Named Search Spec (Названная спецификация поиска) .

User Search Spec

  • Это запрос, который вызывается из пользовательского интерфейса, то есть когда пользователь делает запросы в апплетах, используя предопределенные запросы (например, указывает значение конкретного поля или временной интервал и т.д.);
  • Пользовательская спецификация поиска также вызывается в серверных скриптах когда используется метод SetSearchSpec или SetSearchExpr в объекте BusComp. (Эти методы не объявлены для апплета или каких-либо других  объектов UI уровня, но могут быть использованы в них через предварительно полученный объект BusComp конкретного апплета);
  • Это выражение уничтожается или очищается использованием метода ClearToQuery() объекта BusComp.

Named Search Spec

  • Эти спецификации поиска имеют название, связанное с ними, которые выступает в роли идентификатора, потому что эти спецификации поиска никогда не очищаются (ни через UI, ни через ClearToQuery()) и остаются в силе до тех пор пока текущий объект BusComp остается в памяти;
  • Через скрипты эта спецификация поиска устанавливается через метод SetNamedSearch(sName, sSearchExpr) и объявляется только для объекта BusComp;
  • Названная спецификация поиска фактически включена во все запросы, которые выполняет Siebel;
  • Они также устанавливаются когда заполняется атрибут «Search Specification» объектов Siebel (апплетов, бизнес компонент, линков и пиклистов)
  • Не смотря ни на что Named Search Spec включается (если она задана для БК) в условии WHERE во всех запросах данного БК;
  • Стоит также отметить, что NamedSearch определен только для объектов BusComp, то есть если даже NamedSearch получен из спецификации поиска апплета, линка и т.д., он всегда вызывается только из соответствующего БК, на котором данный конкретный объект основан (например, апплет «foo» основан на БК «Bar», поэтому спецификация поиска у апплета «foo» будет вызвана, как NamedSearchSpec из «Bar»).

Как убрать спецификацию поиска из объектов Siebel во время выполнения

Теперь большой вопрос: если «Named Search Spec» не может быть сброшена или очищена через ClearToQuery(), то как же ее сбросить или очистить?

  • Она может быть очищена вызовом метода SetNamedSearch с указанием имени спецификации поиска в первом параметре и пустой строкой («») во втором параметре, например: currBC.SetNamedSearch(«Test», «»);
  • Это также значит, что если мы знаем название Named Search Spec, которая вызывается если на объекте установлен атрибут Search Specification, то мы фактически можем очистить ее.

Ниже перечислены названия спецификаций поиска для разных объектов:

  • Для апплетов «Applet Search Spec Named Search»
  • Для линков «Link Search Spec Named Search»
  • Для пилкистов «PickListSearch»
  • Для бизнес компонент «System Search»
  • Для областей видимости «VisibilitySearch»

Следовательно, в любой момент времени  если нам нужно убрать, например, спецификацию поиска апплета для некоторых целей, все, что нам нужно сделать — вызвать метод SetNamedSearch с первым параметром «Applet Search Spec Named Search» и вторым параметром «».

Пример:

Ссылка на оригинал статьи.