Terrasoft Platform SDK > Примеры > Файлы > IDatasetExample.js
СодержаниеИндекс
IDatasetExample.js
Send Feedback

Пример использования интерфейсов IDataset и IDataField.

Описание

Пример демонстрирует возможности использования свойств и методов интерфейсов IDataset и IDataField

 

В результате выполнения скрипта, будет создан новый сервис перечисления, значениями которого заменяются значения поля "Пол" карточки контакта.Также создается запись справочника стран, и название страны подставляется в качестве значения по умолчанию в карточку контакта. Карточка контакта с внесенными изменениями выводится на экран. 

 

Также скрипт реализует загрузку в поле набора данных информации из файла. Для корректной работы скрипта необходимо, чтобы на диске <с:\> существовал файл с расширением <.txt>. 

 

Для того чтобы просмотреть результаты работы кода примера, необходимо сохранить исходный код в файл IDatasetExample.js и запустить его на исполнение.

Исходный код
//-----------------------------------------------------------------------------
// Файл IDatasetExample.js
//-----------------------------------------------------------------------------
// В данном примере рассмотрено использование интерфейсов IDataset, IDataField.
//-----------------------------------------------------------------------------
//@ Start Example

// Создание соединения с базой данных и объектов для хранения данных
var Connector = new ActiveXObject('TSDskObjectLibrary.DskConnector');
var ScriptUtils = new ActiveXObject('TSObjectLibrary.ScriptUtils');
var Script = new ActiveXObject('TSObjectLibrary.Script');
var ServiceInfo = new ActiveXObject('TSObjectLibrary.ServiceInfo');

// Признак сохранения или удаления сервиса из базы данных без подтверждения действия
    var sdoaSave = 1;

// Функция вывода сообщения 
function ShowMessage(Str) {
    for (var i = 1; i < arguments.length; i++ ) {
        Str = Str.replace(new RegExp('%' + i), arguments[i]);
    }
  WScript.Echo(Str);
}

if (Connector.Login("Пример использования интерфейсов IDataset и IDataField")) {

	var Services = Connector.Services;
	ScriptUtils.Connector = Connector;
	
	// Вывод информации о количестве сервисов конфигурации
	ShowMessage("Количество сервисов: %1", Services.InformationsCount);

	ServiceInfo = Services.InformationsByUSI('enm_CustomerEnum');

	// Создание сервиса 'enm_CustomerEnum'
	if (ServiceInfo == ScriptUtils.EmptyValue) {

		ShowMessage("Добавление сервиса перечисления");

		// Создание сервиса перечисления и добавление его элементов
		Enum = Services.CreateItem('Enum');
		Enum.USI = 'Common\\enm_CustomerEnum';
		Enum.Caption = "Пользовательское перечисление";
		for (i = 0; i < 5; i++) {
			EnumItem = Enum.CreateItem();
			EnumItem.ID = Connector.GenGUID();
			EnumItem.Caption = "Заголовок элемента перечисления № " + i;
			EnumItem.Code = 'Code' + i;
			Enum.Add(EnumItem);
		}

		// Сохранение сервиса перечисления в базу
		if (Services.SaveItem(Enum, sdoaSave)) {
			// Обновление информации о сервисах
			Services.LoadItemsInfo();
			ShowMessage("Количество сервисов: %1", Services.InformationsCount);
		} else {
			ShowMessage("Cервис перечисления не сохранен");
		}
	} else {
	    // В базе уже существует требуемое перечисление
	    // Создание экземпляра сервиса  перечисления
	    Enum = Services.GetNewItemByUSI('enm_CustomerEnum');
	}
	
	// Создание записи справочника стран, для подстановки значения в карточку контакта
	// Вывод отображаемого значение поля типа справочник
	CountryDataset = Services.GetNewItemByUSI('ds_Country');
	CountryDataset.Append();
	var CountryID = Connector.GenGUID();
	CountryDataset.Values('ID') = CountryID;
	CountryDataset.Values('Name') = "Страна";
	CountryDataset.Post();

	// Установка значений по умолчанию, для отображения в карточке контакта
	var DefaultValues = new ActiveXObject('Scripting.Dictionary');
		DefaultValues.Add('OwnerID', Connector.CurrentUser.ID);
		DefaultValues.Add('CountryID', CountryID);

	// Создание сервиса окна методом GetSingleItemByUSI для его открытия в модальном режиме
	var EditWindow = Services.GetSingleItemByUSI('wnd_ContactEdit');
	EditWindow.Attributes('DefaultValues') = DefaultValues;
	EditWindow.Attributes('RecordID') = '';

	// Подмена перечисления для поля 'Пол'
	ShowMessage("Изменяем перечисление для поля 'Пол' ");
	EditWindow.ComponentsByName('cbGender').DatasetLink = ScriptUtils.EmptyValue;
	EditWindow.ComponentsByName('dlData').Dataset.Open();
	EditWindow.ComponentsByName('dlData').Dataset.DataFields.ItemsByName('GenderID').Enum = Enum;
	EditWindow.ComponentsByName('cbGender').DatasetLink = EditWindow.ComponentsByName('dlData');
	EditWindow.ComponentsByName('cbGender').DataFieldName = 'GenderID';
	EditWindow.ComponentsByName('edtAccountName').IsEnabled = false;

	// Отображение окна
	EditWindow.Prepare();
	EditWindow.ShowModal();

	// Удалeние созданного перечисления
	Services.DeleteItem('Common\\enm_CustomerEnum', sdoaSave);
	
	// Загрузка файла в поле набора данных
	FilesDataset = Services.GetNewItemByUSI('ds_Files');
    var FileName  = ScriptUtils.CreateObject('TSObjectLibrary.Value');
	if (ScriptUtils.PromptForFileName(FileName, '*.txt', '*.txt', "Выбор файла для загрузки в базу данных", 'С:\\', false)) {
		
		// Открытие набора данных в режиме добавления записи
		FilesDataset.Append();
		
		// Установка идентификатора создаваемой записи
		var FileID = Connector.GenGUID();
		FilesDataset.Values('ID') = FileID;
		FilesDataset.Values('Link') = FileName.Value;
		
		// Загрузка выбранного файла 
		BlobDataField = FilesDataset.DataFields.ItemsByName('FileData');
		BlobDataField.LoadFromFile(FileName.Value);
		
		// Вывод содержимого файла
		ShowMessage("Содержимое поля набора данных типа 'BLOB':\n" + BlobDataField.Value);
		
		//Сохранение записи
		FilesDataset.Post();
		
	}
}
//@ End Example
Copyright (с) Terrasoft 2002-2012.