Tuesday, February 25, 2014

Правила

Первое правило относительно правил. ОКл не принимает XML в Unicode. Только ANSI.
Сообщение об ошибке: 
Content is not allowed in prolog.

Friday, January 31, 2014

Ограничения на вычисления в формах

При задании формы можно сделать поля вычисляемыми.
Для этого надо ...
Однако возможность вычислений ограничена.
В частности нельзя использовать поля типа дата.
Решается проблема внедрением в страницу кода на JavaScript.
Скрипт нужно поместить в поле INSTRUCTIONS.
Однако,  в инструкции к разделу не может быть больше 2000 символов, так что с программированием особенно не развернешься.

Пример:
http://en.wikibooks.org/wiki/OpenClinica_User_Manual/AgeField

Sunday, January 26, 2014

Полностью удалить пациента или форму

Так чтобы духу их не было.
Тут придется работать на уровне базы данных, в веб-интерфейсе этого нет.
Как это сделать - здесь:
https://community.openclinica.com/removing-crf-andor-subject-completely
(надо зарегистрироваться и залогиниться на форумай ОпК, чтобы видеть запись.

Чтобы полностью очистить базу, надо с помощью PGAdmin удалить базу данных openclinica. При следующем старте программы база будет создана заново. Пароль администратора будет переустановлен.

Еще о случайных числах в идентификаторе формы.

Я уже писал, что случайные цифры в идентификаторах это плохо. Например тем, что если мы захотим использовать формы на другом сервере, то называться там они будут по другому и соответственно придется менять правила, к ним относящиеся.
Как выясняется OpenClinica может добавлять случайные числа к идентификатору в неожиданных ситуациях.
Например, я создаю форму с именем CONDITIONAL_INPUT, программа создает идентификатор F_CONDITIONAL_  Имя формы можно потом поменять, а идентификатор - нет.
Положим, потом я захотел создать форму CONDITIONAL_INPUT_2, так вот для нее OID будет уже что-то вроде F_CONDITIONAL_1587, то есть вылезают те самые нежелательные случайные числа.
А надо было называть форму N2_CONDITIONAL_INPUT, меняя начало, а не конец, и все было бы в порядке.

Простейшая логика в форме

Классический пример - спрятать поле с вопросом о беременности, если пациент мужчина.
Делается это просто. Допустим у нас есть две переменные: Sex с возможными заначениями 1,2 и Pregnant. Тогда в описании переменной Pregnant в поле ITEM_DISPLAY_STATUS пишем
HIDE а в SIMPLE_CONDITIONAL_DISPLAY список из трех элементов, разделенных запятой:
Sex,2,Поле должно быть пустым.
На первом месте управляющая переменная, на втором - ее значение, при котором наше поле будет выведено на экран, и третье - сообщение об ошибке, если при сохранении в поле будет занчение, а показано оно быть не должно.
Как может получиться такая ошибка? Например, пришел к нам пациент, мы решили, что он женщина, о чем сделали соответствующую запись в форме, на вопрос о беременность ответили Нет. А потом выяснили, что пациент у нас мужчина. Меняем пол на М, вопрос о беременности должен исчезнуть, но там у нас уже есть ответ, значит, чтобы не было ошибки нужно его убрать.
Тут возникает небольшая проблема с полем типа Select, решение описано здесь.

Подобную логику можно применять к нескольким полям, можно делать вложение (поле появляется при определенном условии и в зависимости от его значения появляется следующее)
Работает внутри одной группы элементов.

Более сложная логика описывается Правилами, об этом поговорим отдельно.

Null в элементе ввода Select

Игода бывает нужно предоставить пользователю оставить поле пустым (в частности, это может понадобиться при управлении доступом к полям, об этом в следующей заметке). В случае с селектом это не всегда просто. В OpenClinica какой-то элемент уже будет выбран. При задании параметров визита можно установить значенит для отсутствующих данных (вроде N/A или Нет информации), они будут добавлены во все селекты в форме, но прграмма будет их воспринимать именно как некое значение, а не Null.
Решение у этой проблемы такое: в эксельном файле параметров формы надо задать величину DEFAULT_VALUE - Null.  Тогда в селекте появится строка Null и система будет ее трактовать именно как пустую. Например если сделать это поле обязательным, то она будет ругаться при попытке сохранить его с пустым значением.
Единственно неприятно так это то, что в форме так и будет написано - Null. Это во-первых не по-русски, а во вторых потребует дополнительных пояснений для пользователей далеких от программирования. Можно ли сделать, чтобы вместо ненужного слова была пустая строка, я пока не знаю.

Добавление.
Все гораздо проще:
RESPONSE_OPTIONS_TEXT RESPONSE_VALUES_OR_CALCULATIONS
,Yes,No ,1,0

И будет вам пустая строка.

А еще можно вставить любой текст в DEFAULT_VALUE, например: (введите что-нибудь)
Будет работать так же, как Null