3.1 Дополнительные параметры для прикладных скриптов.
NDemia CashMatic eXtra plugin предоставляет прикладному скрипту возможность использовать дополнительные параметры, сохраняемые в системном реестре
Windows - произвольное количество параметров с произвольными именами и произвольными значениями.
При установке
NDemia CashMatic eXtra plugin в Панели управления
NDemia CashMatic добавляется вкладка
"Дополнительные параметры".

На этой странице размещается таблица дополнительных параметров, которые доступны прикладному скрипту. Пользователь имеет возможность создавать, изменять и удалять любые параметры (любые имена с любыми значениями).
Эти параметры хранятся в системном реестре
Windows в разделе
HKEY_CURRENT_USER\Software\NDemia\CashMatic\Plugins\eXtra\Session Props
Параметры хранятся как
REG_SZ. Допускается также создание параметров типа
REG_DWORD, но прикладной скрипт получает
REG_DWORD как строку (десятичное беззнаковое целое). При изменениях параметров через Панель управления
NDemia CashMatic все
REG_DWORD преобразуются в
REG_SZ.
Параметры отображаются в переменные платёжного сеанса (т.е. доступны через
CashMatic.Session.GetProp(<Имя>)) (см.
http://ndemia.com/CashMatic/u-home/PG/session/SessionObjProps.php).
Параметры прочитываются из реестра при вызове
CashMatic.Session.Reset() или
CashMatic.Session.Event("eXtra.UpdateProps").
Прикладной скрипт может изменять значение дополнительного параметра внутри платёжного сеанса через вызов
CashMatic.Session.AddProp(<Имя>, <Значение>), но при следующем прочтении реестра все параметры восстанавливаются на значения, сохранённые в реестре.
Изменения данных в системном реестре Windows могут выполняться как через Панель управления NDemia CashMatic, так и любыми другими способами - например, через редактор реестра (regedit), или из других программ.
Изменения данных в системном реестре
Windows могут выполняться как через Панель управления
NDemia CashMatic, так и любыми другими способами - например, через редактор реестра (
regedit), или из других программ.
Прикладной скрипт имеет возможность изменить постоянное значение дополнительного параметра, это делается следующим вызовом (функция-образец для
javascript):
function eXtraSetProp(name, value)
//name – имя параметра
//value – значение параметра (пустое значение удаляет параметр из реестра)
{
if(name) //доступны только непустые имена
{
CashMatic.Session.AddProp("eXtra.Name", name);
CashMatic.Session.AddProp("eXtra.Value", value);
CashMatic.Session.Event("eXtra.SetProp");
//если изменение выполнено, то значение «eXtra.Name» должно вернуться пустым
if(CashMatic.Session.GetProp("eXtra.Name"))
throw new Error("eXtra not installed");
}
}
Имеется возможность отключить вкладку Панели управления
NDemia CashMatic "Дополнительные параметры". Для этого в разделе реестра
HKEY_CURRENT_USER\Software\NDemia\CashMatic\Plugins\eXtra
нужно создать ненулевое значение
REG_DWORD "Control Disabled"
3.2 Доступ к переменным среды из прикладного скрипта.
NDemia CashMatic eXtra Plugin предоставляет прикладному скрипту доступ к переменным среды (переменным окружения, environment variables) процесса
KioskBrowser.exe.
см.
Переменная среды Windows (Википедия).
Функция-образец получения значения переменной среды из
javascript:
function eXtraGetEnv(name)
//name — имя переменной среды
{
if(name) //доступны только непустые имена
{
CashMatic.Session.AddProp("eXtra.Name", name);
CashMatic.Session.Event("eXtra.GetEnv");
//если значение получено, то значение «eXtra.Name» должно вернуться пустым
if(CashMatic.Session.GetProp("eXtra.Name"))
throw new Error("eXtra not installed");
return CashMatic.Session.GetProp("eXtra.Value"); //возвращается значение переменной среды
}
}
Функция-образец изменения значения переменной среды из
javascript:
function eXtraPutEnv(name, value)
//name – имя переменной среды
//value – значение переменной среды
{
if(name) //доступны только непустые имена
{
CashMatic.Session.AddProp("eXtra.Name", name);
CashMatic.Session.AddProp("eXtra.Value", value);
CashMatic.Session.Event("eXtra.PutEnv");
//если изменение выполнено, то значение «eXtra.Name» должно вернуться пустым
if(CashMatic.Session.GetProp("eXtra.Name"))
throw new Error("eXtra not installed");
}
}
3.3 Запись в лог-файл из прикладного скрипта.
NDemia CashMatic eXtra plugin предоставляет прикладному скрипту возможность записывать текстовые сообщения (строки) в лог-файл. От скрипта требуется только предоставление текста строки - плагин добавляет номер строки и метку времени.
Нумерация строк ведётся от запуска программы, время записывается до миллисекунд (с точностью обычного времени
Windows).
По умолчанию лог-файлы записываются в папке
\Program Files\NDemia\CashMatic\Logs\Script
Запись из скрипта в лог-файл выполняется следующим вызовом:
CashMatic.Session.AddProp("eXtra.LogText", <Текст>);
CashMatic.Session.Event("eXtra.LogWrite");
//если запись выполнена, то значение "eXtra.LogText" должно вернуться пустым.
Функция-образец для записи в лог-файл из
javascript:
function eXtraDebugLog(text)
{
CashMatic.Session.AddProp("eXtra.LogText", text);
CashMatic.Session.Event("eXtra.LogWrite");
if(CashMatic.Session.GetProp("eXtra.LogText"))
throw new Error("eXtra not installed");
}
Формат лог-файлов: плоский текст, 8 бит, кодировка
Windows, переносы строк -
CR LF (
OD OA), размер файла не лимитирован.
В одну строку можно записать до 32К текста - если текст окажется длиннее, он будет обрезан, с указанием в логе точной длины до обрезания.
Переносы строк внутри записываемого текста разрешены, но никак особо не обрабатываются - запись в логе будет состоять из нескольких строк, при этом номер строки и метка времени будут записаны только в начале (в первой строке).
Можно изменить пути и шаблон имени лог-файлов - см.
HKEY_CURRENT_USER\Software\NDemia\CashMatic\Plugins\eXtra
параметр
"Script LogPath"
При первой установке выставляется значение:
%ProgramFiles%\NDemia\CashMatic\Logs\Script\DebugLog *.txt
здесь звёздочка означает место подстановки текущей даты в формате
"(ГГГГ-ММ-ДД)".
Лог-файл открывается на запись в режиме совместимого чтения (
FILE_SHARE_READ).
Открытие файла происходит непосредственно перед первой записью, после этого файл остаётся открытым до завершения программы или до первой записи с другой датой. (Возможно, в будущих версиях детали этого механизма могут измениться, просьба сообщать
NDemia о необходимости или нежелательности каких-либо изменений)
3.4 Запись текстовых файлов из прикладного скрипта.
NDemia CashMatic eXtra plugin предоставляет прикладному скрипту возможность записывать текстовые файлы.
В текущей версии существуют следующие особенности и ограничения:
- записывается только файл целиком (добавление в существующий файл не поддерживается);
- записывается только текст, только 8-битное представление в кодировке Windows (скрипт предоставляет обычную текстовую строку, кодировка конвертируется плагином);
- чтение файла не реализовано;
- ранее существующий файл всегда перезаписывается;
- несуществующий путь всегда создаётся (делается попытка создания);
- на время записи файл открывается на запись в режиме совместимого доступа (shared read|write|delete), т.е. другие программы в принципе могут получить доступ к файлу до окончания записи;
- не делается попыток разведения конфликта доступа к файлу - если в момент записи файл недоступен, то вбрасывается исключение (exception);
- в случае ошибок записи прикладной скрипт не получает уточнённой диагностики - только общий признак успеха, либо при ошибках вбрасывается исключение (exception) с человекочитаемым текстом, разъясняющим проблему.
Возможно, в будущих версиях детали этого механизма могут измениться, просьба сообщать
NDemia о необходимости или нежелательности каких-либо изменений.
Полное имя файла (включающее путь) может содержать подстановки переменных окружения (
environment variables), например,
%ProgramFiles%,
%UserProfile%,
%SystemDrive% и т.п.
Имя файла должно задаваться либо абсолютно, либо относительно папки данных
NDemia CashMatic:
(
Windows XP:)
\Documents and Settings\<ИмяПользователя>\Application Data\NDemia\CashMatic
(
Windows Vista,
Windows 7:)
\Users\<ИмяПользователя>\AppData\Roaming\NDemia\CashMatic
В любом случае, вызывающий скрипт имеет возможность узнать реальное имя файла, который был записан.
Запись в текстовый файл выполняется следующим вызовом:
CashMatic.Session.AddProp("eXtra.FileName", <ИмяФайла>);
CashMatic.Session.AddProp("eXtra.FileText", <ЗаписываемыйТекст>);
CashMatic.Session.Event("eXtra.FileWrite");
//если запись выполнена, то
// 1. значение "eXtra.FileText" должно вернуться пустым.
// 2. значение "eXtra.FileName" содержит полное (включающее путь) имя записанного файла.
Функция-образец для записи в текстовый файл из
javascript:
function eXtraWriteFile(filename, text)
{
CashMatic.Session.AddProp("eXtra.FileName", filename);
CashMatic.Session.AddProp("eXtra.FileText", text);
CashMatic.Session.Event("eXtra.FileWrite");
if(CashMatic.Session.GetProp("eXtra.FileText"))
throw new Error("eXtra not installed");
filename = CashMatic.Session.GetProp("eXtra.FileName");
return filename;
}
3.5 Выполнение команд и приложений из прикладного скрипта.
NDemia CashMatic eXtra plugin предоставляет прикладному скрипту возможность выполнять команды и приложения, как с ожиданием, так и без ожидания завершения, как в видимых, так и в скрытых окнах.
Функция-образец вызова команды или приложения из
javascript:
function eXtraExecute(command, wait, hide)
//command – выполняемая команда, включая возможные параметры командной строки
//wait — если истина, то ждать завершения вызываемого процесса (в этом случае вызываемый процесс должен выполниться быстро, на время ожидания экран KioskBrowser полностью блокируется)
//hide – если истина, то команда должна быть выполнена в скрытом окне (без отображения на экране)
{
if(command)
{
CashMatic.Session.AddProp("eXtra.Command", command);
CashMatic.Session.AddProp("eXtra.Wait", wait? Wait : ""); //значение «ложь» должно быть преобразовано в пустую строку
CashMatic.Session.AddProp("eXtra.Hide", hide? Hide : ""); //значение «ложь» должно быть преобразовано в пустую строку
CashMatic.Session.Event("eXtra.Execute");
//если команда выполнена, то значение «eXtra.Command» должно вернуться пустым
if(CashMatic.Session.GetProp("eXtra.Command"))
throw Error("eXtra not installed");
return CashMatic.Session.GetProp("eXtra.Result"); //при истинном значении параметра wait возвращается код завершения вызываемого процесса, иначе — пустая строка.
}
}
3.6 Завершение приложения NDemia CashMatic KioskBrowser по команде прикладного скрипта.
NDemia CashMatic eXtra plugin предоставляет прикладному скрипту возможность завершить работу основного приложения
NDemia CashMatic KioskBrowser.
Закрытие приложения выполняется следующим вызовом:
CashMatic.Session.Reset();
CashMatic.Terminal.Event("eXtra.Terminate");
//ВНИМАНИЕ: используется объект Terminal, не Session.
Во времени вызов
CashMatic.Terminal.Event("eXtra.Terminate") должен быть сделан после вызова
CashMatic.Session.Reset() (или после запуска программы) и обязательно
до вызова
CashMatic.Session.Start(), иначе ничего не произойдёт.