Другие примеры вычислений

В этом разделе представлены дополнительные примеры вычислений. В этих примерах 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

В этом примере описывается, как сформировать строку текста, содержащую данные из базы данных 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.