Пример использования интерфейсов 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.
|