Язык @-формул в LotusDomino R 6.

Функции для работы со списками


@Elements( список )

Область применения: без ограничений.

Возвращает в формате числа количество текстовых, числовых или дата/время элементов (значений) в списке. Для пустой строки и значений типа не список функция возвратит число 0.

Пример 1. Возвращает 4, если поле SalesForce содержит список "Иванов": "Петров": "Сидоров": "Новиков".

@Elements( SalesForce )

Пример 2. Возвращает 2.

@Elements( "Новиков" : "Кузнецов" )

Пример 3. Возвращает 5.

3 + @Elements( "Суворов" : "Нахимов" )

J @Count( список )

Область применения: без ограничений.

Возвращает число элементов в списке, аналогично @Elements, однако, в отличие от последней, для пустой строки и для значений типа не список вернет значение 1, а не 0.

Пример 1. Возвращает 2.



@Count( "Новиков" : "Кузнецов" )

Пример 2. Возвращает 0 для @Elements, и 1 для @Count.

@Elements( "" );

@Count( "" );

@IsMember( строка; список_строк

)

@IsMember( список_строк_1; список_строк_2 )

Область применения: без ограничений.

Возвращает 1 (TRUE), если строка является элементом списка_строк; возвращает 0 (FALSE) в противном случае. Если оба параметра являются списками - возвращает 1, если все элементы списка_строк_1

содержатся в списке_строк_2. Функция учитывает регистр.

Пример 1. Возвращает 1.

@IsMember( "компьютер"; "принтер" : "компьютер" : "монитор" )

Пример 2. Возвращает 0.

@IsMember( "компьютер" : "Notes"; "Notes" : "принтер" : "монитор" )

Пример 3. Возвращает 1, если "Отдел разработок" содержится в списке в поле Department, или 0, если нет.

@IsMember( "Отдел разработок"; Department )

@IsNotMember( строка; список_строк

)

@IsNotMember( список_строк_1; список_строк_2 )

Область применения: без ограничений.

Возвращает 1 (TRUE), если строка не является элементом списка_строк; возвращает 0 (FALSE) в противном случае. Если оба параметра являются списками - возвращает 1, если ни один из элементов списка_строк_1


не содержится в списке_строк_2. Функция учитывает регистр. Обратите внимание, что @IsNotMember тождественно не равна отрицанию функции @IsMember в случае, если два аргумента есть списки.

Пример 1. Возвращает 0.

@IsNotMember( "компьютер"; "принтер" : "компьютер" : "монитор" )

Пример 2. Присваивает полю Dept значение "Маркетинг", если текущий пользователь не указан в списке в поле SalesDepartment; в противном случае присваивает полю Dept - "Сбыт".

FIELD Dept :=  

   @If( @IsNotMember( @UserName; SalesDepartment ); "Маркетинг"; "Сбыт" );

@Member( строка; список_строк

)

Область применения: без ограничений.

Возвращает 0, если строка не содержится в списке_строк; возвращает величину от 1 до N, если строка содержится в списке_строк, причем величина от 1 до N определяется местоположением указанной строки

в списке_строк.

Пример 1. Возвращает 0.

@Member( "Сбыт"; "Финансы" : "Сервис" : "Канцелярия" )

Пример 2. Если значение из поля ReportName содержится в списке из поля RequiredReading 12-м элементом, будет возвращено 12. Если значение из поля ReportName вообще не содержится в списке, возвращается 0.

@Member( ReportName; RequiredReading )

Пример 3. Если имя, возвращаемое функцией @Author, содержится 4-м элементом в поле-списке EditorialBoard, возвращает 4. Если имя не содержится в списке - возвращает 0.

@Member( @Author; EditorialBoard )

@Replace( список_строк; найти; заменить_на )

Область применения: без ограничений.

Ищет в списке_строк значения, указанные в списке найти. Заменяет каждое найденное значение соответствующим значением из списка заменить_на. Возвращает исходный список со всеми произведенными изменениями (если никаких значений из списка найти

в списке_строк не найдено, возвращает список_строк

без изменений).

Если список заменить_на короче списка найти, то элементы из списка найти, не имеющие соответствующих элементов в списке заменить_на, будут заменены в исходном списке на пустые строки. Это свойство может быть использовано для удаления элементов из списка. В этом случае список заменить_на задается пустым; сначала все элементы из списка найти заменяются на пустые, а затем функция @Trim() удаляет пустые элементы из полученного списка.



Пример 1. Domino просматривает исходный список и, как только значение в исходном списке содержится в списке "найти", он заменяет это значение соответствующим значением из списка "заменить_на". В этом примере только "Оранжевый" в исходном списке будет заменен на "Черный". Результат будет выглядеть следующим образом: "Красный" : "Черный" : "Желтый" : "Зеленый".

@Replace( "Красный" : "Оранжевый" : "Желтый" : "Зеленый";

         "Оранжевый" : "Синий";

         "Черный" : "Коричневый" )

Пример 2. Удаляет из списка в поле Categories все элементы, входящие во второй список. Если исходно в поле Categories был список "Брянск" : "Барнаул" : "Ростов" : "Смоленск", @Replace вернет "Брянск" :  "" : "" : "Смоленск", а @Trim - "Брянск" : "Смоленск". Это результат присваивается полю Categories.

FIELD Categories := @Trim( @Replace( Categories;

                        "Ростов" : "Барнаул"; "" ));

@Subset( список; число )

Область применения: без ограничений.

Если число положительное, возвращает указанное число значений, считая от начала списка. Для положительного числа

большего, чем длина списка – возвращается исходный список. При нулевом значении числа генерируется ошибка «The second argument to @Subset must not be zero» (Второй аргумент @Subset не должен быть равен нулю). Если число

отрицательное, возвращает указанное число значений, считая от конца списка. Для отрицательного числа, модуль которого большего, чем длина списка

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

Пример 1. Возвращает "Краков" : "Новосибирск".

@Subset( "Краков" : "Новосибирск" : "Франкфурт" : "Токио"; 2 )



Пример 2. Возвращает "Новосибирск" : "Франкфурт" : "Токио".

@Subset( "Краков" : "Новосибирск" : "Франкфурт" : "Токио"; -3 )

Пример 3. Возвращает "Краков" : "Новосибирск" : "Франкфурт", если в поле BranchOffices находится список "Краков" : "Новосибирск" : "Франкфурт" : "Токио" : "Сингапур" : "Сидней".

@Subset( BranchOffices; 3 )

@Unique                                      @Unique( список_строк )

Область применения: без ограничений.

При вызове функции без параметра возвращает случайным образом сгенерированную уникальную строку. При вызове с параметром список_строк, удаляет из него повторяющиеся значения. Учитывает регистр. В документации сказано, что функция не поддерживается в Web-приложениях. Однако как в первом, так и во втором варианте синтаксиса @Unique работает в Web (возможно не во всех контекстах).

Пример 1. Может возвратить строку типа "SERR-42VQRW".

@Unique

Пример 2. Возвращает "красный" : "зеленый" : "синий".

@Unique( "красный" : "зеленый" : "синий" : "зеленый" :

"красный" )

Пример 3. Возвращает "красный" : "зеленый" : "синий" : "Зеленый".

@Unique( "красный" : "зеленый" : "синий" : "Зеленый" :

"красный" )

@Keywords( список_строк_1; список_строк_2

)

@Keywords( список_строк_1; список_строк_2;

                          строка_разделитель

)

Область применения: без ограничений. При использовании с третьим параметром может возвращать некорректный результат.

Возвращает список, состоящий из всех тех элементов списка_строк_2, которые содержатся "в качестве слов" в списке_строк_1. Если ни один из элементов второго списка не содержится "в качестве слов" в первом, то возвращается пустая строка. Функция учитывает регистр.



Строка_разделитель содержит один или более символов, используемых для разделения слов в списке_строк_1. Например, " .," означает, что слова разделяются пробелом, запятой или точкой. В варианте с двумя параметрами для разделения слов используются символы из строки «?. ,!;:[](){}"<>» (символы: знак вопроса, точка, пробел, запятая, восклицательный знак, точка с запятой, двоеточие, открывающие и закрывающие квадратные, круглые и фигурные скобки, двойные кавычки и символы больше, меньше).

В случае, если искомое слово из списка_строк_2

стоит самым первым словом в любом элементе списка_строк_1, и задана строка_разделитель, то возвращается пустая строка. Для коррекции поведения функции в данном случае необходимо предварить ключевое слово в списке_строк_1 одним из символов из строки_разделителя

(см. примеры 4 и 5). Аналогичное поведение будет и если не указать третий параметр или использовать в качестве его пустую строку.

Пример 1. Возвращается "Harvard" : "Yale" : "UCLA".

@Keywords(

   "EPA Head speaks at Harvard,Yale" :

   "UCLA Chancellor Retires" :

   "Ohio State wins big game" :

   "Reed and University of Oregon share research facilities" ;

      "Harvard" : "Brown" : "Stanford" : "Yale" : "Vassar" : "UCLA" )

Пример 2. Возвращается пустая строка.

@Keywords(

   "EPA Head speaks at Harvard,Yale" :

   "UCLA Chancellor Retires" :

   "Ohio State wins big game" :

   "Reed and University of Oregon share research facilities" ;

       "harvard" : "brown" : "stanford" : "vassar" : "ucla2" )

Пример 3. Возвращается "Yale".

@Keywords(

   "EPA Head speaks at Harvard,Yale" :

   "UCLA Chancellor Retires" :

   "Ohio State wins big game" :

   "Reed and University of Oregon share research facilities";



       "Harvard" : "Brown" : "Stanford" : "Yale" : "UCLA"; "," )

Пример 4. Возвращается пустая строка.

@Keywords(

      " Mary Halen, Director of Sales" :

      "Sally Hall, VP of Marketing":

      "Joe Halzy, Order entry";

         "Joe":"Sally";" ,")

Пример 5. Исправленный пример 4, возвращается "Joe".

@Keywords(

      "Mary Halen, Director of Sales" :

      "Sally Hall, VP of Marketing":

      ",Joe Halzy, Order entry";

         "Joe":"Sally";" ,")

J @Compare( список_строк1; список_строк2

                          [; флаги] )

Область применения: нельзя использовать в формулах навигатора.

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

  • 0 - если соответствующие элементы списков эквивалентны с точки зрения флагов;


  • 1 – если элемент первого списка больше второго;


  • (–1) – если второй список больше первого.


  • Флаги также представляют собой список, элементы которого могут принимать следующие значения:

    • [CASESENSITIVE] (значение по умолчанию) и [CASEINSENSITIVE] - сравнение идет, соответственно, в режиме "чувствительном" или безразличном к регистру. Не допускается совместное использование обеих флагов;


    • [ACCENTSENSITIVE] (значение по умолчанию) и [ACCENTINSENSITIVE] - сравнение идет, соответственно, в режиме "чувствительном" или безразличном к диакритическим знакам (accent, диакритический знак - знак, который в ряде языков ставится над буквой, ниже буквы или “пересекает” букву для того, чтобы обозначить ее особое звучание). Не допускается совместное использование обеих флагов;


    • [PITCHSENSITIVE]

      (значение по умолчанию) и [PITCHINSENSITIVE] - сравнение идет, соответственно, в режиме "чувствительном" или безразличном к системе сортировки символов языка. Имеет смысл только для двухбайтовых кодировок восточных языков (таких как японский, корейский, упрощенный и классический китайский). Не допускается совместное использование обеих флагов.




    • Не совсем ясно, почему нельзя использовать эту функцию в контексте формул навигатора. Из опыта – она в них работает (правде, возможно не во всех случаях).

      Пример 1. Возвращается 0 : 0.

      @Compare("One":"Two";"onE":"tWo";[CaseInsensitive])

      Пример 2. Возвращается так же 0 : (-1), т. к. "One" < " Two ".

      @Compare("One";"One":"Two"))

      J @Sort( список; флаги; формула

      )

      Область применения: нельзя использовать в формулах навигатора.

      Функция осуществляет сортировку списка и возвращает отсортированный список. Функция может быть применена текстовым, дата/время и числовым спискам. Возвращаемое значение зависит от типа первого параметра функции.

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

      • [Ascending] (значение по умолчанию) и [Descending]

        - для сортировки, соответственно, по возрастанию и убыванию. Не допускается совместное использование обеих флагов;


      • [CaseSensitive] (значение по умолчанию) и [CaseInsensitive]

        для сортировки, соответственно, с учетом или без учета регистра. Не допускается совместное использование обеих флагов;


      • [AccentSensitive] (значение по умолчанию) и [AccentInsensitive]

        для сортировки, соответственно, с учетом или без учета к диакритическим знакам. Не допускается совместное использование обеих флагов;


      • [PitchSensitive] (значение по умолчанию) и [PitchInsensitive]

        для сортировки, соответственно, с учетом или без учета к системе сортировки символов языка. По поводу назначения предыдущих четырех флагов см. пояснения к функции @Compare стр. 107. Не допускается совместное использование обеих флагов;


      • [CustomSort] в этом случае порядок сортировки определяется третьим параметром. Перекрывает действие любого другого флага.


      • При конфликте флагов, для определения действующего порядка сортировки будет использоваться последнее значение для взаимоисключающих значений. Например, если второй параметр функции определен как [Descending] : [PitchInsensitive] : [Ascending], то это реально соответствует флагу [PitchInsensitive] : [Ascending].



        Параметр формула необязателен для всех случаев, за исключением использования флага [CustomSort]. В этом случае формула задает собственный порядок сортировки. В рамках формулы для генерации ссылок на сравниваемые элементы значений списка используются временные переменные $A и $B. Если по условиям сортировки необходимо чтобы элемент $A стоял в результирующем списке перед элементом $B, то формула должна вернуть 1 (True), для того чтобы $B стоял раньше $A формула должна вернуть 0 (False). Если формула вернет значение отличное от числового типа – генерируется сообщение об ошибке: «Incorrect data type for operator or @Function: Number expected» (Некорректный тип данных для оператора или @функции: ожидается число).

        При сортировке значений элементов из списка типа дата-время, если элемент не содержит временную компоненту, то данный элемент эквивалентен любому элементу с той же датой и любым временным значением. Например, значения [12.12.2001], [12.12.2001 12:20:32] и [10.12.2001 – 01.01.2002] с точки зрения @Sort эквивалентны.

        Если используется сортировка Unicode, то в рамках функции @Sort нельзя использовать следующие флаги и их комбинации:

        • [PITCHINSENSITIVE];


        • [CASESENSITIVE] : [ACCENTINSENSITIVE].


        • Подробнее о сортировка Unicode можно прочитать по адресу: http://oss.software.ibm.com/icu/

          Пример 1. Возвращает -15 : 4 : 6 : 12 : 21.

          @Sort(21 : 6 : (-15) : 12 : 4);

          Пример 2. Возвращает 21 : 12 : 6 : 4 : -15.

          @Sort(21 : 6 : (-15) : 12 : 4; [Descending]);

          Пример 3. Сортирует список следующим образом: сначала все нечетные числа в порядке возрастания, затем все четные числа в порядке возрастания. Возвращает окно с текстом «-15~7~7~21~4~6~6~12».

          a := 21 : 7 : 6 : (-15) : 12 : 6 : 4 : 7;

          b := @Sort(a; [CustomSort];

          @If( @Modulo($A; 2) = 0;

                 @If( @Modulo($B; 2) = 0;

                        @If( $A >= $B ; 1; 0)

                 ;1);

                    @If( @Modulo($B; 2) = 0; 0;

                        @if($A >= $B; 1; 0))

          ));

          @Prompt([Ok]; "Sort list"; @Implode(@Text(b) ; "~"))


          Содержание раздела