ClientActions – средство передачи информации с сервера приложений на клиентское приложение о том, какие действия на клиентском приложении следует выполнить. Для этого надо создать объект соответствующего класса и добавить его в переданную коллекцию. Если интерфейс скрипта не предусматривает передачи коллекции клиентских действий (например, скрипты задач Task), значит эти действия будет некому выполнять.
Существуют следующие ClientActions (из пространства имен Ultima.Client.Actions):
•CloseFormAction – закрыть текущую форму. Для пользовательской команды данное действие будет проигнорировано;
•EditRecordAction – открыть запись с указанным идентификатором (RecordID) справочника с указанным типом (dictionaryType) для редактирования:
public class EditRecordAction : ClientAction { public EditRecordAction(Type dictionaryType, long recordId) } |
•MessageBoxAction – вывести окно сообщения с текстом (Message) и заголовком (Title):
public class MessageBoxAction : ClientAction { public string Message { get; set; }
public string Title { get; set; } } |
•NewRecordAction — открыть форму для создания новой записи справочника:
public class NewRecordAction : ClientAction { public NewRecordAction(Type dictionaryType, IDictionary<string, object> parameters = null) } |
•NewDocumentAction — открыть форму для создания нового документа:
public class NewDocumentAction : ClientAction { public NewDocumentAction(Type documentType, IDictionary<string, object> parameters = null) } |
•OpenDocumentAction – открыть документ с указанным идентификатором (DocumentID) для редактирования:
public class OpenDocumentAction : ClientAction { public OpenDocumentAction(long documentId) } |
•PrintDictionaryRecordAction(Type dictionaryType, long recordId) – открывает диалог печати одной записи для выбранного типа справочника:
▪dictionaryType – тип справочника, определяет набор печатных форм, доступных для выбора в диалоге печати;
▪recordId – идентификатор записи этого справочника, которую следует вывести на печать;
•PrintDictionaryListAction(Type dictionaryType, long[] records) – открывает диалог печати нескольких записей для выбранного типа справочника:
▪dictionaryType – тип справочника, определяет набор печатных форм, доступных для выбора в диалоге печати;
▪records – список идентификаторов записей этого справочника, которые следует вывести на печать;
•PrintDocumentAction(long docSubtypeId, long documentId) – открывает диалог печати одного документа для выбранного типа документа:
▪docSubtypeId – тип документа, определяет набор печатных форм, доступных для выбора в диалоге печати;
▪documentId – идентификатор документа данного типа, который следует вывести на печать;
•PrintDocumentListAction(Type documentType, long[] documents) – открывает диалог печати нескольких документов для выбранного типа документа:
▪documentType – подтип документа, определяет набор печатных форм, доступных для выбора в диалоге печати;
▪documents – список идентификаторов документов данного типа, которые следует вывести на печать;
•PrintFormPreviewAction(long printFormId, Dictionary<string, object> parameters) – открывает форму предварительного просмотра печатной формы:
▪printFormId – идентификатор печатной формы;
▪parameters – параметры печатной формы;
•PrintTextAction – отправить на печать текст (Text) в кодовой странице (CodePage, значение по умолчанию 1251) на устройство (DeviceName). Для печатаемого документа можно задать название (DocumentName, значение по умолчанию Untitled) и показать окно предварительного просмотра (DistpalyPreview, значение по умолчанию true):
public class PrintTextAction : ClientAction { public string DeviceName { get; set; }
public string DocumentName { get; set; }
public int CodePage { get; set; }
public string Text { get; set; }
public bool DisplayPreview { get; set; } } |
•ReloadRecordAction – перезагрузить текущую запись. Будет перезагружена как форма редактирования, так и списковая форма. Для пользовательской команды данное действие будет проигнорировано;
•SaveFileAction – сохранить (результаты работы скрипта) в файл:
public class SaveFileAction : ClientAction { public SaveFileAction(string fileName, DateTime? lastWriteTime = null, byte[] fileData, bool displayArchiveContents = false)
public SaveFileAction(string fileName, byte[] fileData) : this(fileName, DateTime.Now, fileData)
// Загружает файл для отправки на сторону клиента, // параметр deleteFile отвечает за удаление файла после загрузки. public static SaveFileAction FromFile( string serverFilePath, string clientFilePath = null, bool deleteFile = false) } |
Также сохраняемые файлы можно добавить в zip-архив:
// using Ultima.Client.Actions; // using Ultima.IO.Compression;
var zip = new ZipBuilder() .AddText("Sample.txt", "This is a sample file. Stay awed.") .AddBinary("Sample.dat", new byte[] { 1,2,3,4,5,6,7 }) .AddFile(fileName, delete: true);
clientActions.AddSaveFileAction(zip, displayArchiveContents: true); |
▪AddText – добавляет в архив текстовый файл (имя и содержимое файла передаются в виде строк);
▪AddBinary – добавляет в архив двоичный файл (имя файла передается в виде строки, содержимое – как массив байтов);
▪AddFile – добавляет в архив существующий файл. Если параметр delete установлен в true, после добавления в архив файл будет удален с диска на сервере;
▪displayArchiveContents – при установке значения параметра в true у пользователя отображается диалоговое окно сохранения архива:
•ShowExceptionAction – вывести исключение:
public class ShowExceptionAction : ClientAction { public Exception Exception { get; set; } } |
•ShowTablesAction – вывести табличные данные в форме с элементом управления grid с заголовком (Title, значение по умолчанию – отображаемое название первой таблицы из списка Tables), сопроводительным текстом (Info) и настройками (SettingsSubkey, значение по умолчанию – название первой таблицы из списка Tables). Параметром Tables может быть передано несколько таблиц, каждая из которых будет отображаться на отдельной закладке:
public class ShowTablesAction : ClientAction { public IList<SlimTable> Tables { get; private set; }
public string SettingsSubkey { get; private set; }
public string Title { get; set; }
public string Info { get; private set; } } |
▪Включение/выключение колонок в таблицах управляется свойством SlimColumn.Visible.
▪Колонки, имена которых начинаются с подчеркивания, автоматом помечаются как невидимые.
▪В колонках типа long можно указать DictionaryType. Если это свойство не пустое, записи указанного справочника будут открываться по двойному щелчку мышкой на ячейке с кодом записи.
▪Если не заполнено свойство Title, в качестве заголовка используется свойство SlimTable.Caption из первой таблицы.
▪Значения колонок "ForeColor" и "BackColor" используются для раскраски строчек таблицы. Тут можно использовать стандартные названия цветов типа Red, Maroon или LightCyan, можно HTML-формат #A5C или #AAFF22, а можно целочисленные значения в формате ARGB. Колонки с этими именами форма прячет, независимо от флага Visible.
Примеры использования API ClientActions:
// using Ultima.Client.Actions;
clientActions.Add(new ReloadRecordAction()); |