Другие примеры вычислений
В этом разделе представлены дополнительные примеры вычислений. В этих примерах dataObject используется для представления объекта, для которого выполняются вычисления. Не забудьте оставить первые две строки вычисления так, как есть в диалоге редактора формул:
import System
static def GetAttributeValue(dataObject):
Многие из этих примеров используют атрибуты, которых не будет в вашей базе данных. Для использования этих примеров нужно создать требуемые атрибуты или изменить примеры для атрибутов, которые есть в вашей базе данных.
Сравнение текущего и создавшего пользователей
import System
static def GetAttributeValue(Incident):
if Incident.RaiseUser == null:
return 'Создавший пользователь – null'
if Incident.GetCurrentUserName().ToLower() == Incident.RaiseUser.Name.ToLower():
return 'создано текущим пользователем'
return 'CurrentUser=' + Incident.GetCurrentUserName() + ' RaiseUser=' + Incident.RaiseUser.Name
Первое равно нулю, если команда использует условие RaiseUser для инцидента, и равно Создавший пользователь – null, если это имеет значение true.
Если данное положение неверно, во-вторых, выполняется команда, которая проверяет, если текущий пользователь является тем же, что и создавший пользователь. Если это так, тогда команда возвращает создано текущим пользователем.
.ToLower() – используется в строке для перевода записей на нижний регистр.
Если ни одна из записей не соответствует, будет выполнена последняя строка, которая возвратит отдельные значения CurrentUser и RaiseUser.
Вычисление возраста пользователя
возраст = DateTime.Now.Year - dataObject.DateOfBirth.Year
возраст-- if DateTime.Now.Month < dataObject.DateOfBirth.Month or (DateTime.Now.Month == dataObject.DateOfBirth.Month and DateTime.Now.Day < dataObject.DateOfBirth.Day)
return возраст
Это вычисление содержит переменную с именем возраст, которая определяется вычитанием года в DateOfBirth для пользователя из текущего года. Дополнительный год вычитается, если день рождения пользователя в этом году (если месяц дня рождения еще не наступил или соответствует ему, но текущий день предшествует дню рождения).
возраст-- значит "вычесть 1 из возраст".
Один знак = означает - "приравнять это к", два знака == значит - "это равно"
Вычисление продолжительности обслуживания пользователя
end = DateTime.Now
end = dataObject.EndDate if dataObject.EndDate != null
los = end.Year - dataObject.StartDate.Year
los-- if end.Month < dataObject.StartDate.Month or (end.Month == dataObject.StartDate.Month and end.Day < dataObject.StartDate.Day)
return los
Переменная end устанавливается в значение текущей даты, если только запись пользователя имеет атрибут EndDate (EndDate - на равен null), и тогда он устанавливается в значение EndDate для пользователя. Тогда переменная los вычисляется вычитанием StartDate из переменной end; дополнительный год вычитается, если EndDate - это год, предшествующий StartDate.
!= означает "не равно"
Вычисление самой последней даты в коллекции
В этом вычислении используется коллекция "Заказы", связанная с dataObject, и нам нужно найти последнюю дату заказа (OrderDate) для любого элемента в коллекции. (Можно использовать функцию коллекции Framework Max(" "), однако в этом примере приведены некоторые полезные концепции.)
lastOrderDate = null
for order in dataObject.Orders:
if lastOrderDate == null or lastOrderDate < order.OrderDate:
lastOrderDate = order.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
for item in dataObject.Items:
стоимость = стоимость + (item.Quantity * item.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
for order in dataObject.Orders:
for item in order.Items:
стоимость = стоимость + (item.UnitCost * item.Quantity)
return стоимость
В первой строке переменная стоимость имеет значение - 0.
Вторая строка (с отступом) создает цикл для коллекции dataObject.Orders, используя переменную order.
Вторая строка (с двойным отступом) создает цикл для коллекции dataObject.Items, используя переменную item.
В третьей строке (с тройным отступом) задается равенство переменной стоимость текущему значению плюс результат умножения атрибута "Количество" на значение атрибута UnitCost. Затем четвертая строка повторяется для всех объектов в коллекции dataObject.Items - каждый цикл выполняет вычисление для нового объекта в коллекции, а именно добавляется стоимость нового объекта к общей стоимости.
Когда вычисление рассмотрит все объекты в первой подколлекции заказа, оно переместится ко элементам второй подколлекции и повторит в ней четвертую строку для каждого объекта.
Когда вычисление рассмотрит все объекты в верхней коллекции dataObject.Items, в последней строке будет возвращено значение, установленное для переменной стоимость.
Создание текста, содержащего данные из базы данных
В этом примере описывается, как сформировать строку текста, содержащую данные из базы данных.
return String.Format("Здравствуйте {0}, последнее обновление было сделано {1}", dataObject.RaiseUser.Title, dataObject.LastUpdateUser.Title)
String.Format(" ", {0}, {1}. функция возвращает строку, где параметры {0}, {1} и т.д определяют, откуда получить данные для использования в строке. Имейте в виду, что параметры начинаются с {0}. В примере вычисления {0} заменяется именем создавшего пользователя (dataObject.RaiseUser.Title), а {1} заменяется именем пользователя, последним обновившего запись (dataObject.LastUpdateUser.Title).
Например, если инцидент был создан Gill Bond, а последний раз сохранен Jane Green, строка будет выглядеть так: Здравствуйте Gill Bond, последнее обновление было сделано Jane Green.