9.2. Технологии

9.2.1. Java REGEXP

Регулярные выражения позволяют гибко описывать шаблоны строк.

Описание строк осуществляется путём подстановки определённых макросов, обозначающих части строки либо символы определённого типа.

Например:

(342) - это символы 342 следующие один за другим;
3\d2 - это 3 затем любая цифра и 2;
((342)|(559)) - последовательность симоволов 342 либо 559;
44[2-8] - строки 442, 443, 444, 445, 446, 447, 448.

Расшифровка некоторых макросов:

а-b - на этом месте может располагаться симовол от a до b (в таблице символов);
[abc] - на этом месте может располагаться любой из символов a, b либо c;
abc - последовательное расположение символов a, b, c;
((abc)|(def)) - на этом месте последовательно располагаются abc либо def, () - группа символов.

Ссылки:

9.2.2. XSLT 2.0

XSLT - язык, основанный на формате XML. Его назначение - трансформация XML дерева с данными в какой-либо результирующий формат. Например: TXT, XHTML (HTML документ, соответсвующий правилам формата XML). Трансформация производится XSLT процессором.

Версия 2.0 является существенным расширением версии 1.0, ключевые изменения можно посмотреть здесь: http://www.xmlhack.ru/texts/02/xslt20/xslt20.html

В XSLT шаблоне различаются просто теги, которые без изменений перейдут в результирующий документ и управляющие теги для процессора с префиксом xslt. Пример фрагмента XSLT документа:

<tbody>
  <xsl:for-each select="bills/bill">
  <xsl:variable name="uid" select="@uid"/>
  <tr>
   <td nowrap="nowrap"><xsl:value-of select="@number"/></td>
   <td><xsl:value-of select="@create_dt"/></td>
   <td><xsl:value-of select="@pay_dt"/></td>
   <td nowrap="nowrap"><xsl:value-of select="@summ"/></td>
   <td nowrap="nowrap">
    <xsl:choose>
     <xsl:when test="@status=0">не оплачен</xsl:when>
     <xsl:otherwise>оплачен</xsl:otherwise>
    </xsl:choose>
   </td>
   <td>
     <xsl:choose>
     <xsl:when test="$uid=-1">создан Вами</xsl:when>
     <xsl:otherwise>создан администратором</xsl:otherwise>
    </xsl:choose>
  < /td>

Здесь форматируется XHTML документ, при этом используются стандартые HTML теги (tr, td) и управляющие теги поцессора (xsl:choose, xsl:value-of). Рассмотрим несколько XSLT директив, встречающихся в приведенном фрагменте: <xsl:for-each select="bills/bill"> - для каждого узла bills/bill исходного дерева XML данных выполнить то что указано до </xsl:for-each>

<xsl:variable name="uid" select="@uid"/> - создать переменную uid и присвоить ей значение из атрибута uid текущего узла bill

<xsl:value-of select="@number"/> - вставить значение атрибута number текущего элемента bill

<xsl:choose> - условный оператор, аналог case либо if-else, внутри могу быть несколько <xsl:when> условий и действие по умолчанию <xsl:otherwise> Ниже приведены ссылки на руководства по XSLT. Язык разметки XSLT тесно завязан с языком XPath - языком выборки данных в XML деревьях. XSLT процессор "Saxon HE" используемый в BGCRM поддерживает спецификации XSLT и XPath версий 2.0 и 2.0.

9.2.3. JEXL

JEXL - язык условий. Используется для написания в конфигурации макросов условных выражений. Помимо операторов, описание которых доступно по ссылке в конце раздела, язык поддерживает обращение к функциям Java - объектов, переданных на вход обработчика в зависисимости от условий. Для вызова функции Java объекта необходимо ввести название объекта в контексте, точку и непосредственно вызов функции.

Пример использования выражения:

processCreateLink.1.title=Проект (Уфа)
processCreateLink.1.processTypeId=9260
processCreateLink.1.linkType=processDepend
processCreateLink.1.checkExpression=1 =~ processParam.addressCityIds( 90 ) and process.getStatusId() == 39
processCreateLink.1.copyParams=90,89,238
processCreateLink.1.copyLinks=1

В данном случае создание связанного процесса будет доступно только для процессов в статусе с кодом 39 и с наличием адреса в параметре с кодом 90 с городом 1.

В JEXL процессор всегда передаются объекты:

u - статический контекст объекта ru.bgcrm.Utils - возможность вызова статических функций;
su - статический контекст объекта org.apache.commons.lang.StringUtils - возможность вызова статических функций;
сu - статический контекст объекта org.apache.commons.collections.CollectionUtils - возможность вызова статических функций.

Дополнительные объекты передаются в зависимости от места использования.

Ссылки:

9.2.4. Log4j

Log4j - библиотека логирования для Java. Настройка логирования производится в файле log4j.properties, изменение файла можно производить при работающем приложении. Вид файла при установке системы:

log4j.rootLogger=INFO, file

log4j.logger.ru.bgcrm=INFO, file
log4j.additivity.ru.bgcrm=false

log4j.appender.stdout=org.apache.log4j.ConsoleAppender
log4j.appender.stdout.Target=System.out
log4j.appender.stdout.layout=org.apache.log4j.PatternLayout
log4j.appender.stdout.layout.ConversionPattern=%d{MM-dd/HH:mm:ss} %5p [%t] %c{1} - %m%n

log4j.appender.file=org.apache.log4j.RollingFileAppender
log4j.appender.file.layout=org.apache.log4j.PatternLayout
log4j.appender.file.layout.ConversionPattern=%d{MM-dd/HH:mm:ss} %5p [%t] %c{1} - %m%n
log4j.appender.file.File=./log/bgcrm.log
log4j.appender.file.Append=true
log4j.appender.file.BufferedIO=false
log4j.appender.file.BufferSize=1024
log4j.appender.file.MaxBackupIndex=5
log4j.appender.file.MaxFileSize=10MB

Сообщения в логе разделяются на уровни (в порядке возрастания): DEBUG, INFO, WARN, ERROR, FATAL. По-умолчанию настроен уровень INFO, т.е. выводятся информационные и ошибочные сообщения (INFO, FATAL, ERROR), отладка не выводится. Вывод осуществляется в файл log/bgcrm.log, который обрезается на размере 10МБ с созданием отдельных файлов.

Для включения вывода отладочной информации необходимо установить:

log4j.logger.ru.bgcrm=DEBUG, file

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

Ссылки: