Community

Создание параметра со списком значений из Базы Данных на станции сканирования

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

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

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

Чтобы иметь возможность управлять выпадающим списком значений регистрационного параметра, необходимо сперва создать параметр нужного типа. Затем, используя событие «После создания пакета» найти нужный регистрационный параметр по его имени и добавить в выпадающий список нужные строки.

Скрипт может быть примерно такой:

//Имя регистрационного параметра в который нужно поместить список из базы данных
var propertyName = "List";
for(var i = 0; i < scriptitems.item(0).batchinfo.registrationproperties.count;="">
{
var property = ScriptItems.Item(0).BatchInfo.RegistrationProperties.Item(i);
if(property.Name == propertyName)
{
//Нельзя создать пустой список значений, потому сначала надо очистить его, а потом добавлять новые строки
property.PossibleValues.DeleteAll();

//строка подключения и текст запроса к БД
var query = GetSQLQuery();
var connectionString = GetSqlStr();

//Получаем массив из БД. Тут может быть метод получения возможных значений из любого источника
var stringArray = GetStringArrayFromBD(connectionString, query);
if(stringArray != null)
{
for(var j = 0; j < stringarray.length;="">
{
//Добавляем строку к списку возможных значений регистрационного параметра
property.PossibleValues.Add(stringArray[j]);
}
}
}
}


//Запрос к базе данных. В данном примере в качестве списка значений мы получим список имен пользователей комплекса FlexiCapture10 и их идентификаторы.
function GetSQLQuery()
{
return "SELECT [Name] + ':' + Ltrim(Str([Id])) as [NAME] FROM [dbo].[Principal]";
}

//Возвращает строку подключения к БД. Нужно подставить вместо SERVER_NAME, DATA_BASE_NAME, USER_NAME и *****, нужные значения
function GetSqlStr()
{
return "Data Source = SERVER_NAME;Initial Catalog=DATA_BASE_NAME;User ID=USER_NAME;Password=*****;Provider=SQLOLEDB";
}

//Получаем список из запроса к базе данных
function GetStringArrayFromBD(connectionString, query)
{
var stringArray = new Array();

var connection = new ActiveXObject("ADODB.Connection");
var rs = new ActiveXObject("ADODB.Recordset");
try
{
//Открываем соединение с БД
connection.Open(connectionString);
var sqlText = query;
rs.Open(sqlText, connection);
if(!rs.eof)
{
rs.MoveFirst();
while (!rs.eof)
{
var Record = String(rs.fields.item("NAME"));
stringArray.push(Record);
rs.MoveNext();
}
return stringArray;
}
else
{
return null;
}
}
catch(e)
{
ShowMessage(e.message, "Ошибка при обращении к БД:");
}
finally
{
//Обязательно пытаемся закрыть соединение
try
{
rs.Close();
connection.Close();
}
catch(ex)
{
ShowMessage(e.message, "Ошибка при закрытии набора данных:");
return null;
}
}
}

//Выводит сообщение пользователю
function ShowMessage(message, title)
{
var myMsgBox=new ActiveXObject("wscript.shell");
myMsgBox.Popup(message, 0, title, 0);
delete myMsgBox;
}

В скрипте следует заполнить параметры подключения к Базе данных и повесить его на событии «После создания пакета». Для пакета создать параметр с именем «List» и списком выпадающих значений.
0

Comments

0 comments

Please sign in to leave a comment.