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 { getset; }

 

 public string DocumentName { getset; }

 

 public int CodePage { getset; }

 

 public string Text { getset; }

 

 public bool DisplayPreview { getset; }

}

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 у пользователя отображается диалоговое окно сохранения архива:

SaveFileArchive

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 { getprivate set; }

 

 public string SettingsSubkey { getprivate set; }

 

 public string Title { getset; }

 

 public string Info { getprivate 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());