Пример вычислений окон

В этом разделе представлены некоторые примеры вычислений окон с описанием их работы. Кроме того, во-первых, существует расширенная версия предложения требований и соответствующего шаблона вычисления с заполнителями. Его можно использовать для выполнения некоторых обычных задач.

Когда для TRIGGER_FIELD в TRIGGER_OBJECT установлено значение VALUE, необходимо изменить СВОЙСТВО TARGET в значение true/false.

Вычисление, которое соответствует этому предложению требования:

Копировать
import System
static def GetAttributeValue(Incident):
    PropertyState = false
    if TRIGGER_OBJECT.TRIGGER_FIELD != null and TRIGGER_OBJECT.TRIGGER_FIELD._Title == 'VALUE':
        PropertyState = true
    return String.Format(":SetPROPERTY(TARGET, {0});", PropertyState)

Замена заполнителей из предложения требования и последующее добавление TRIGGER_FIELD на панель Зависимости в редакторе вычислений даст вам нужное вычисление. Мы также рекомендуем вам заменить все ссылки на "PropertyState" более описательным именем переменной.

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

Для этих вычислений очень важны отступы, которые устанавливает области действий функций. Поэтому если вы скопируете примеры из этого документа, убедитесь в том, что вы сделаете правильные отступы во время вставки в редактор вычислений.

Использование в случае необходимости переустановки значений

В следующем примере представлено дополнение примера, который был приведен в разделе Установка вычислений окон, где поле Воздействие, которое было необязательным, становится обязательным, когда поле Срочность получает значение Срочно. Если поле не "очищено" (значение – null) или для него установлено другое значение, тогда поле Воздействие вновь становится необязательным.

Требование:

Когда для Срочность установлено значение Срочно, необходимо изменить SetMandatory для Воздействие в значение true.

Здесь поле переключателя – Срочность, целевой атрибут – Воздействие, а функция окна – :SetMandatory(,).

Правильная структура для вычисления окна:

  • Сначала нужно определить переменные, которые указывают значение true или false для функции окна
  • Затем создать команду, которая изменяет переменную после выбора соответствующего значения
  • И, наконец, получить значение функции окна с использованием переменной для установки значения параметра – true/false

Например:

Копировать
import System
static def GetAttributeValue(Incident):
    MandatoryUrgency = false
    if Incident._IncidentUrgency != null and Incident._IncidentUrgency._Title == 'Срочно':
        MandatoryUrgency = true
    return String.Format(":SetMandatory(_Impact, {0});", MandatoryUrgency)

Третья, четвертая и последняя строки имеют один отступ; пятая строка имеет два отступа.

Третья строка создает переменную MandatoryUrgency и устанавливает ее значение false. Это наиболее распространенное значение, используемое по умолчанию.

В четвертой строке выполняется тест для проверки установки поля Срочность в значениеСрочно (Incident._IncidentUrgency._Title == 'Срочно'). Помните, что перед тем, как вычисление сможет протестировать значение атрибута Incident._IncidentUrgency._Title, необходимо проверить, что значение объекта атрибута не равно null (Incident._IncidentUrgency != null).

Если значение в четвертой строке равно true, и поле Срочность также не равно null и имеет значение Срочно, тогда пятая строка будет выполнена и установит значение переменной MandatoryUrgency равным true.

В конце будет выполнена шестая строка, и установлен атрибут вычисления. Поскольку речь идет о переменной, необходимо создать возвращаемую строку, использующую функцию String.Format. В этой форме строки String.Format("function(атрибут, {0});", переменная) параметр {0} заменяется переменной во время создания строки и с получением :SetMandatory(_Impact,MandatoryUrgency);. По умолчанию MandatoryUrgency имеет значение false, поэтому поле Воздействие не является обязательным. Однако, если установить для поля Срочность значение Срочно, тогда будут выполнены указанные условия, и будет выполнена пятая строка. Тогда для переменной MandatoryUrgency будет установлено значение true, что сделает поле Воздействие обязательным.

Заметьте, что третья и пятая строки используют один знак равенства =, а в четвертой строке он двойной, ==.
= означает "приравнять к", а == означает "это равно?"

Обновление двух полей в одном вычислении

В следующем примере показано, как можно обновить два поля с помощью одного вычисления, наподобие того, как это было сделано в предыдущем примере. В этом примере поля Элемент конфигурации и Тип элемента конфигурации отображаются только, если поле Категория имеет значение Оборудование.

Требование:

Когда поле Категория имеет значение Оборудование, необходимо изменить SetHidden для Элемент конфигурации AND Тип элемента конфигурации на значение false.

Это скажет нам, что поле-переключатель – это Категория, целевые атрибуты – это Элемент конфигурации AND Тип элемента конфигурации, а функция окна – это :SetHidden(,).

Копировать
import System
static def GetAttributeValue(Incident):
    HideCI = true
    if Incident.Category != null and Incident.Category.FullName == 'Оборудование':
        HideCI = false
    return String.Format(":SetHidden(ConfigurationItemType,{0});:SetHidden(ConfigurationItem,{1});", HideCI, HideCI)

Третья, четвертая и шестая строки имеют один отступ; пятая строка имеет два отступа. Длинная шестая строка отображается отдельно в редакторе вычислений.

Третья строка устанавливает для переменной HideCI значение true.

Четвертая строка проверяет, что Категория не равна null и имеет значение Оборудование.

Если четвертая строка равна true, тогда будет выполнена пятая строка, и для HideCI будет установлено значение false.

Наконец, будет выполнена шестая строка и установлено значение атрибута вычисления в значение String.Format(":SetHidden(ConfigurationItemType,{0});:SetHidden(ConfigurationItem,{1});", HideCI, HideCI). По умолчание значение HideCI равно true, поэтому поля ConfigurationItemType и ConfigurationItem будут скрытыми. Однако, если установить для поля Категория значение Оборудование, тогда будут выполнены указанные условия, и будет выполнена пятая строка. Это затем установит для переменной HideCI значение false, и тогда поля ConfigurationItemType и ConfigurationItem станут видимыми.

Когда используется функция String.Format для возврата одной или более функций, которые используют переменные, необходимо указать переменные в функции в виде чисел в фигурных скобках, а затем добавить переменные. Например:

String.Format("function(атрибут, {0});function(атрибут, {1});function(атрибут, {2});", переменная 0, переменная 1, переменная 2)

:SetHidden также отображает и скрывает метку, связанную с целевым атрибутом. Однако вы не можете использовать :SetHidden для статических меток, добавляемых из дерева Параметры в Диспетчере окон.

Использование различных функций с одним переключателем

В предыдущих примерах результатом всегда была одна функция окон: изменение обязательного состояния одного или более полей или изменение состояния скрытия. В этом примере представлено, как можно обновить две различные функции с помощью одного вычисления. Этот пример является дополнением предыдущего, где поля Элемент конфигурации и Тип элемента конфигурации отображались, если поле Категория имеет значение Оборудование, но теперь также поле Тип элемента конфигурации будет сделано обязательным.

Требование:

Когда Категория имеет значение Оборудование, необходимо установить SetHidden для Элемент конфигурации AND Тип элемента конфигурации значение false AND изменить SetMandatory для Тип элемента конфигурации на значение true.

Это говорит нам, что поле переключатель – это Категория, целевые атрибуты – это Элемент конфигурации и Тип элемента конфигурации, а функции окна – это :SetHidden(,) и SetMandatory(,).

Копировать
import System
static def GetAttributeValue(Incident):
    HideCI = true
    MandatoryCI = false
    if Incident.Category != null and Incident.Category.FullName == 'Оборудование':
        HideCI = false
        MandatoryCI = true
    return String.Format("return String.Format(":SetHidden(ConfigurationItemType,{0});:SetHidden(ConfigurationItem,{0});:SetMandatory(ConfigurationItemType,{1});", HideCI, MandatoryCI)", HideCI, HideCI, MandatoryCI)

Третья, четвертая, пятая и восьмая строки имеют один отступ; шестая и седьмая строки имеют по два отступа. Длинная восьмая строка отображается отдельно в редакторе вычислений.

В третьей строке для переменной HideCI устанавливается значение true – по умолчанию нужно, чтобы поля Элемент конфигурации и Тип элемента конфигурации были скрыты.

В четвертой строке для переменной MandatoryCI устанавливается значение true – по умолчанию нужно, чтобы поле Тип элемента конфигурации было обязательным.

Если результат в пятой строке равен true, тогда будут выполнены шестая и седьмая строки, и для HideCI будет установлено значение false, а для MandatoryCI значение true. Выполняются обе эти строки, так как в вычислении они имеют одинаковый отступ.

Наконец, длинная восьмая строка выполняется и передает значение HideCI двум первым функциям, а значение MandatoryCI передается третьей функции.

Так как вы передаете одну переменную первым двум функциям, восьмую строку можно перезаписать следующим образом:
return String.Format(":SetHidden(ConfigurationItemType,{0});:SetHidden(ConfigurationItem,{0});:SetMandatory(ConfigurationItemType,{1});", HideCI, MandatoryCI)

Использование различных функций, основанных на значениях одного переключателя

В этом примере показано, как вы можете использовать различные функции в зависимости от значения, выбранного в атрибуте-переключателе. Если для Приоритет установлено значение Высокая, тогда поле Причина становится обязательным и изменяемым; если для Приоритет установлено значение Низкая, тогда поле Причина становится необязательным и только для чтения; иначе поле Причина остается в состоянии по умолчанию.

Для этого вычисления требуется атрибут с полем Имя, имеющим значение _reason, которое добавляется для объекта Инцидент.

Требование:

Когда Приоритет имеет значение Высокая, необходимо изменить значение SetMandatory для Причина на значение true AND  SetReadOnly для Причина значение false; когда Приоритет имеет значение Низкая, необходимо изменить SetReadOnly для Причина на значние true AND SetMandatory для Причина на значение false.

Здесь поле переключателя – Приоритет, целевой атрибут – Причина, а функции окна – SetMandatory(,) и SetReadOnly(,). Также можно написать:

В других случаях необходимо установить SetMandatory и SetReadOnly для Причина значение false.

Здесь значение по умолчанию полей SetMandatory и SetReadOnly для Причина равно false.

Копировать
import System
static def GetAttributeValue(Incident):
    MandatoryReason = false
    ReadOnlyReason = false
    if Incident.Priority != null and Incident.Priority.Title == 'Высокая':
        MandatoryReason = true
    elif Incident.Priority != null and Incident.Priority.Title == 'Низкая':
        ReadOnlyReason = true
    return String.Format(":SetMandatory(_reason, {0});:SetReadOnly(_reason, {1});", MandatoryReason, ReadOnlyReason)

Третья, четвертая, пятая, седьмая и девятая строки имеют один отступ; шестая и восьмая строки имеют по два отступа. Длинная девятая строка отображается отдельно в редакторе вычислений.

В третьей строке для переменной MandatoryReason устанавливается значение false – по умолчанию нужно, чтобы поле Причина было необязательным.

В четвертой строке для переменной ReadOnlyReason устанавливается значение false – по умолчанию нужно, чтобы поле Причина было только для чтения.

Если результатом пятой строки является true, и поле Приоритет имеет значение Высокая, тогда выполняется шестая строка и устанавливает для поля MandatoryReason значение true.

Если в пятой строке результат НЕ РАВЕН true, тогда выполняется седьмая строка. Строки elif ("else if") выполняются только, когда предшествующие строки имеют результат false. Если результатом этой строки является true, и поле Приоритет имеет значение Низкая, тогда выполняется восьмая строка и устанавливает для поля ReadOnlyReason значение true.

Наконец, выполняется девятая строка с использованием набора значений MandatoryReason и ReadOnlyReason.

Это значит, что по умолчанию данные MandatoryReason и ReadOnlyReason имеют значение false, и поле Причина не будет обязательным и не будет только для чтения. Однако если поле Приоритет имеет значение Высокая, тогда MandatoryReason имеет значение true (пятая и шестая строки), хотя ReadOnlyReason все еще имеет значение false, поэтому поле Причина будет обязательным, но не только для чтения. Если поле Приоритет имеет значение Низкая, тогда ReadOnlyReason имеет значение true (восьмая и девятая строки), хотя MandatoryReason имеет значение false, поэтому поле Причина будет только для чтения, но необязательным.

Использование дат в вычислениях

В этом примере поле Причина станет обязательным, если в поле Требуется дата будет указана дата в течение семи дней от текущей даты.

Для этого вычисления требуются атрибуты с полями Имя, имеющими значения _reason и _daterequired, которые добавляются для объекта Инцидент. Помните, что не нужно обновлять одно и тоже поле с помощью нескольких вычислений.

Требование:

Когда поле Требуется дата будет установлено в течении 7 дней после сегодняшней даты, необходимо изменить значение SetMandatory и Причина на true.

Здесь поле переключателя – Требуется дата, целевой атрибут – Причина, а функция окна – :SetMandatory(,).

Копировать
import System
static def GetAttributeValue(Incident):
    MandatoryReason = false
    if Incident._daterequired != null and Incident._daterequired < DateTime.Today.AddDays(7):
        MandatoryReason = true
    return String.Format(":SetMandatory(_reason,{0});", MandatoryReason)

Третья, четвертая и последняя строки имеют один отступ; пятая строка имеет два отступа.

В третьей строке создается переменная MandatoryReason и для нее устанавливается значение false – по умолчанию нужно, чтобы поле Причина было необязательным.

Четвертая строка использует метод .Net с именем .AddDays для определения, если значение поля Требуется дата меньше, чем дата сегодня плюс 7. Если это так, тогда будет выполнена пятая строка, и для MandatoryReason будет установлено значение true.

Затем шестая строка создаст соответствующую функцию SetMandatory.

Для получения дополнительной информации об использовании в вычислениях методов .Net см. web-сайт Сообщества поддержки Ivanti.