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

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