NDemia CashMatic eXtra plugin v.1.2.0
(C) NDemia Ltd, 2012

Компонент расширения (плагин) для NDemia CashMatic: Дополнительные возможности.

1 Назначение NDemia CashMatic eXtra.


Данная программа является компонентом расширения NDemia CashMatic KioskBrowser
(см. http://www.ndemia.com/CashMatic/)

Плагин NDemia CashMatic eXtra предоставляет разработчику приложений NDemia CashMatic некоторые дополнительные возможности, не поддерживаемые на текущий момент в базовом программном продукте:

2 Установка NDemia CashMatic eXtra.


Для использования данной программы требуется установить NDemia CashMatic KioskBrowser версии не ниже 2.7.0:
http://www.ndemia.com/CashMatic/download/release/

Если NDemia CashMatic уже установлен, то загрузите инсталлятор и запустите установку NDemia CashMatic eXtra:
http://www.ndemia.com/CashMatic/plugins/eXtra/Install.eXtra.exe

3 Использование NDemia CashMatic eXtra.


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(), иначе ничего не произойдёт.

4 Удаление (отключение) NDemia CashMatic eXtra.


Программное удаление NDemia CashMatic eXtra plugin в текущей версии не реализовано.
Для удаления вручную нужно удалить папку "\Program Files\NDemia\CashMatic\Plugins\eXtra". Кроме этого, обязательно нужно удалить или отключить загрузку компонента в системном реестре, иначе будет выдаваться сообщение об ошибке запуска NDemia CashMatic KioskBrowser.
Для отключения загрузки компонента нужно удалить раздел реестра HKEY_LOCAL_MACHINE\SOFTWARE\NDemia\CashMatic\Plugins\eXtra (требуется удаление, переименования раздела недостаточно).
Для отключения без удаления раздела реестра достаточно удалить или переименовать параметр CLSID в указанном разделе.