В этом разделе представлены дополнительные примеры вычислений. В
этих примерах dataObject используется для представления объекта,
для которого выполняются вычисления. Не забудьте оставить первые
две строки вычисления так, как есть в диалоге редактора
формул:
import Система
static def GetAttributeValue(dataObject):
Многие из этих примеров используют атрибуты, которых не будет в вашей базе данных Service Desk. Для использования этих примеров нужно создать требуемые атрибуты или изменить примеры для атрибутов, которые есть в вашей базе данных.
age = DateTime.Сейчас.Год -
dataObject.DateOfBirth.Год
возраст-- if DateTime.Сейчас.Месяц <
dataObject.DateOfBirth.Месяц или (DateTime.Сейчас.Месяц ==
dataObject.DateOfBirth.Месяц и DateTime.Сейчас.День <
dataObject.DateOfBirth.день)
return age
Это вычисление содержит переменную с именем
age, которая определяется вычитанием года в DateOfBirth для
пользователя из текущего года. Дополнительный год вычитается, если
день рождения пользователя в этом году (если месяц дня рождения еще
не наступил или соответствует ему, но текущий день предшествует дню
рождения).
age-- значит "вычесть 1 из age".
Один знак = означает - "приравнять это к", два знака == значит -
"это равно"
end = DateTime.Сейчас
end = dataObject.EndDate if dataObject.EndDate != null
los = end.Год - dataObject.StartDate.Год
los-- if end.Месяц < dataObject.StartDate.Месяц или (end.Месяц == dataObject.StartDate.Месяц и end.День < dataObject.StartDate.День)
return los
Переменная end устанавливается в значение
текущей даты, если только запись пользователя имеет атрибут EndDate
(EndDate - на равен null), и тогда он устанавливается в значение
EndDate для пользователя. Тогда переменная los вычисляется
вычитанием StartDate из переменной end; дополнительный год
вычитается, если EndDate - это год, предшествующий StartDate.
!= означает "не равно"
В этом вычислении используется коллекция "Заказы", связанная с dataObject, и нам нужно найти последнюю дату заказа (OrderDate) для любого элемента в коллекции. (Можно использовать функцию коллекции TPS Max(" "), однако в этом примере приведены некоторые полезные концепции.)
lastOrderDate = null
для порядка в dataObject.Заказы:
if lastOrderDate == null or lastOrderDate < заказ.OrderDate:
lastOrderDate = заказ.OrderDate
return lastOrderDate
В первой строке переменная lastOrderDate
установлена в значение - null. (Помните что один символ = означает
"приравнять это к", два символа == означает - "это равно".)
Вторая строка создает цикл для коллекции dataObject.Заказы,
используя переменную order. Предварительная часть вычисления
последовательно выполняется для каждого объекта в коллекции.
Имейте в виду, что третья строка имеет один префикс для указания
того, что она относится ко второй строке. В третьей строке
говорится, что если переменная lastOrderDate имеет значение
null (только первый раз, так как мы установили значение строки 1
равным - null), или если ее значение меньше значения объекта для
OrderDate, тогда...
в четвертой строке переменная lastOrderDate будет иметь
значение OrderDate для текущего объекта в коллекции.
В этом случае вычисление вернется в третью строку к следующему
объекту коллекции и снова выполнит тест для проверки, если текущее
значение lastOrderDate равно null (что теперь уже не так),
или если оно меньше значения OrderDate для следующего объекта в
коллекции. Если оно меньше значения OrderDate для этого объекта,
тогда для lastOrderDate устанавливается новое
значение.
Когда вычисление рассмотрит все объекты в коллекции, в последней
строке будет возвращено значение, установленное для
lastOrderDate.
В предыдущем примере мы изучили выполнение арифметических вычислений и создание цикличных вычислений для всех объектов в коллекции. В этом примере мы объединим обе техники сложения результатов вычислений, выполненных для объектов в коллекции.
Это вычисление определяет общую стоимость коллекции объектов, в которой каждый объект имеет свою стоимость за единицу и значение для количества единиц. Стоимость каждого объекта в коллекции исчисляется умножением числа единиц на стоимость элемента. Общая стоимость затем определяется сложением стоимости всех объектов. Это выполняется посредством определения стоимости первого объекта, затем добавления ее к стоимости второго объекта и т.д. для всех объектов в вычислении.
объект коллекции | количество | стоимость единицы | стоимость | |||
dataObject | Элемент 1 | 2 | 3 | 6 | ||
Элемент 2 | 1 | 4 | 4 | |||
Элемент 3 | 3 | 3 | 9 | |||
19 | общая стоимость |
стоимость = 0
для элемента в dataObject.Элементы:
стоимость = стоимость + (элемент.Количество * элемент.UnitCost)
return стоимость
В первой строке переменная стоимость имеет
значение - 0.
Вторая строка создает цикл для коллекции объектов
dataObject.Элементы с использованием переменной
элемент.
В третьей строке (с префиксом) задается равенство переменной
стоимость текущему значению плюс результат умножения
атрибута "Количество" на значение атрибута UnitCost. Затем третья
строка повторяется для всех объектов в коллекции - каждый цикл
выполняется вычисление для нового объекта в коллекции, а именно
добавляется стоимость нового объекта к общей стоимости.
Когда вычисление рассмотрит все объекты в коллекции, в последней
строке будет возвращено значение, установленное для переменной
стоимость.
Данное вычисление является развитием предыдущего примера. В нем определяется общее значение для коллекции заказов, в которой каждый заказ содержит ряд элементов. В этом примере стоимость - это сумма коллекции коллекций
объект коллекции | объект подколлекции | количество | стоимость единицы | стоимость | |||
заказ | dataObject_1 | Элемент 1_1 | 2 | 3 | 6 | ||
Элемент 1_2 | 1 | 4 | 4 | ||||
Элемент 1_3 | 3 | 3 | 9 | ||||
dataObject_2 | Элемент 2_1 | 2 | 4 | 8 | |||
Элемент 2_2 | 3 | 2 | 6 | ||||
Элемент 2_3 | 4 | 1 | 4 | ||||
37 | общая стоимость |
стоимость = 0
для порядка в dataObject.Заказы:
для элемента в order.Элементы:
стоимость = стоимость + (item.UnitCost * item.Количество)
return стоимость
В первой строке переменная стоимость имеет
значение - 0.
Вторая строка (с префиксом) создает цикл для коллекции
dataObject.Заказы, используя переменную заказ.
Вторая строка (с двойным префиксом) создает цикл для коллекции
dataObject.Заказы, используя переменную элемент.
В третьей строке (с тройным префиксом) задается равенство
переменной стоимость текущему значению плюс результат
умножения атрибута "Количество" на значение атрибута UnitCost.
Затем четвертая строка повторяется для всех объектов в коллекции
dataObject.Элементы - каждый цикл выполняет вычисление для нового
объекта в коллекции, а именно добавляется стоимость нового объекта
к общей стоимости.
Когда вычисление рассмотрит все объекты в первой подколлекции
заказа, оно переместится ко элементам второй подколлекции и
повторит в ней четвертую строку для каждого объекта.
Когда вычисление рассмотрит все объекты в верхней коллекции
dataObject.Элементы, в последней строке будет возвращено значение,
установленное для переменной cost.
В этом примере описывается, как сформировать строку текста, содержащую данные из базы данных Service Desk.
return String.Format("Привет {0}, последнее обновление - {1}", dataObject.RaiseUser.Заголовок, dataObject.LastUpdateUser.Заголовок)
String.Format(" ", {0}, {1}. функция возвращает
строку, где параметры 0}, {1} и т.д определяют, откуда получить
данные для использования в строке. Имейте в виду, что параметры
начинаются с {0}. В примере вычисления {0} заменяется именем
создавшего пользователя (dataObject.Создавший
пользователь.Заголовок), а {1} заменяется именем пользователя,
последним обновившего запись (dataObject.Последний обновивший
пользователь.Заголовок).
Например, если событие было создано Gill Bond, а последний раз
сохранено Jane Green, строка будет выглядеть так: Привет Gill
Bond, последнее обновление - Jane Green.