Написание скриптов на языке C#


Содержание

Введение

Для расширения функциональности в ПО  Comindware Platform предусмотрены инструменты написания и использования скриптов на языке C#. ПО позволяет внедрять C#-скрипты при настройке различных сущностей и функций приложения.

Возможности использования C#-скриптов

ПО позволяет использовать C#-скрипты при настройке следующих сущностей и функций:

Входные и выходные данные C#-скрипта

Скрипт оформляется как public class с предопределённым именем Script. При выполнении скрипта вызывается метод public static Main этого класса. Скрипт компилируется при сохранении настраиваемой сущности.

Перед компиляцией тело скрипта помещается в уникальное пространство имён (namespace) во избежание интерференции между скриптами. Для удобства разработчика в том же пространстве имён автоматически создаётся вспомогательный класс коротких синонимов для обращения к API вида:

static class Api {
  public static Comindware.TeamNetwork.Api.PublicServices TeamNetwork;
  public static Comindware.Process.Api.IPublicServices Process;
  
public static Comindware.Platform.Api.IPublicServices Base;
}

Если скомпилировать скрипт не удалось, выводятся предупреждение и детализированное описание ошибок компиляции в области «Журнал действий и ошибок»  в информационной панели.

Перекомпиляция и проверка её успешности происходят каждый раз при сохранении, проверке или публикации сущности, в которую внедрён скрипт.

Описание скриптов для различных сущностей

Шаблон любого типа → Кнопка → Скрипт операции

Заготовка скрипта

public class Script {
public static UserCommandResult Main (UserCommandContext userCommandContext, Comindware.Entities entities) {
// Тело скрипта
}
}

Входные данные

UserCommandContext userCommandContext {
string[] ObjectIds, // массив ID выбранных записей в списке
// (пустой массив, если записи не выбраны)
// или массив из одного элемента с ID записи на форме
string
[] SelectedIds, // массив ID записей, выбранных в таблице на форме
// (пустой массив, если записи не выбраны)
string CurrentUserId, // ID аккаунта текущего пользователя
string DocumentTemplateId, // ID шаблона, к которому относится команда
dateTime CurrentRequestTime, // дата и время текущего запроса
bool ExportAsPdf, // флаг экспорта в PDF
string FileName, // имя файла при выгрузке данных по шаблону экспорта
DatasetQuery Query // список, с которого произошел запуск операции
},
Comindware.Entities entities // используется для доступа к данным шаблонов записей

Выходные данные

UserCommandResult {
bool Success, // флаг успешного завершения операции
bool Commited, // флаг необходимости коммита операции
enum UserCommandResultType ResultType, // тип возвращаемого результата.
// В зависимости от значения производятся действия:
// DataChange — обновление данных
// Notificate — сообщение пользователю
// Navigate — переход на страницу
// File — скачивание файла

// набор данных для перехода на другую страницу

UserCommandNavigationResult NavigationResult {
string Title, // заголовок
string ObjectId, // ID объекта
string ContainerId, // ID контейнера
ContextType Context // тип отображения
// Undefined, Void, Any, Task, Case, Record, Process, List, Form, Page, Container
  },

// объект выгружаемого файла

UserCommandFileResult File {
string Name, // имя файла
string Type,
byte[] Content // тело файла
  },

// сообщение об окончании операции
UserCommandMessage[] Messages {
    
enum Severity, // уровень важности сообщения
// SeverityLevel (Critical, Fatal, Low, Major, None, Normal)

string Text
}
}

Шаблон процесса → Задача-выполнение сценария → Скрипт задачи

Заготовка скрипта

public class Script {
  public static void Main(Comindware.Process.Api.Data.ScriptContext context, Comindware.Entities entities) {
  // Тело скрипта
  }
}

Входные данные

Comindware.Process.Api.Data.ScriptContext context {
  string ProcessID, // ID процесса
  string BusinessObjectID, // ID объекта

},
Comindware.Entities entities // используется для доступа к данным шаблонов записей

Выходные данные

void 
// Возвращаемые параметры отсутствуют

Шаблон процесса → Пользовательская задача → Вычисление заголовка задачи

Заготовка скрипта

public class Script {
  public static string Main(Comindware.Process.Api.Data.ScriptContext context, Comindware.Entities entities) {
  // Тело скрипта
  
}
}

Входные данные

Comindware.Process.Api.Data.ScriptContext context {
  
string ProcessID, // ID процесса
string BusinessObjectID, // ID объекта
},
Comindware.Entities entities // используется для доступа к данным шаблонов записей

Выходные данные

string 
// Заголовку задачи присваивается возвращённое строковое значение

Шаблон процесса → Пользовательская задача → Вычисление исполнителей задачи

Заготовка скрипта

public class Script {          
  public static IEnumerable<string> Main(Comindware.Process.Api.Data.ScriptContext context, Comindware.Entities entities) {
// Тело скрипта
}
}

Входные данные

Comindware.Process.Api.Data.ScriptContext context {         
string ProcessID, // ID процесса
string BusinessObjectID // ID объекта
},
Comindware.Entities entities // используется для доступа к данным шаблонов записей

Выходные данные

IEnumerable<string>
// Скрипт должен вернуть список ID аккаунтов

Шаблон процесса → Пользовательская задача → Вычисление продолжительности задачи

Заготовка скрипта

public class Script  {         
public static TimeSpan Main (Comindware.Process.Api.Data.ScriptContext context, Comindware.Entities entities) {
// Тело скрипта
}
}

Входные данные

Comindware.Process.Api.Data.ScriptContext context {
string ProcessID, // ID процесса
string BusinessObjectID, // ID объекта
},
Comindware.Entities, // используется для доступа к данным шаблонов записей

Выходные данные

TimeSpan 
// Продолжительности задачи присваивается возвращённое значение длительности

Шаблон процесса → Любой элемент диаграммы → Сценарии на входе и выходе → Изменение значений атрибутов скриптом

Заготовка скрипта

public class Script {
public static string // string, int, decimal, dateTime, bool, TimeSpan или IEnumerable<string>
Main(string ObjectID, [Comindware.Entities entities]) {
// Тело скрипта
}
}

Входные данные

string ProcessID, // ID записи,
Comindware.Entities entities // необязательный аргумент, используется для доступа к данным шаблонов записей

Выходные данные

stringint, decimaldateTime, TimeSpan, bool, IEnumerable<string> 
// Атрибуту присваивается возвращённое значение соответствующего типа

Шаблон процесса → Развилка «или/или» → Вычисление условий выбора потоков

Заготовка скрипта

public class Script {
public static bool Main(Comindware.Process.Api.Data.ScriptContext context, Comindware.Entities entities) {
// Тело скрипта
}
}

Входные данные

Comindware.Process.Api.Data.ScriptContext context {
string ProcessID, // ID процесса
string BusinessObjectID, // ID объекта
},
Comindware.Entities entities // используется для доступа к данным шаблонов записей

Выходные данные

bool
// Если скрипт вернул true, токен идёт по этому потоку управления

Шаблон процесса → Конечное событие и промежуточное событие → Вычисление продолжительности процесса

Заготовка скрипта

public class Script {         
public static TimeSpan Main (Comindware.Process.Api.Data.ScriptContext context, Comindware.Entities entities) {
// Тело скрипта
}
}

Входные данные

Comindware.Process.Api.Data.ScriptContext context {
string ProcessID, // ID процесса
string BusinessObjectID, // ID объекта
},
Comindware.Entities entities // используется для доступа к данным шаблонов записей

Выходные данные

TimeSpan 
// Продолжительности процесса присваивается возвращённое значение длительности

Шаблон процесса → Конечное событие-отправка сообщения и промежуточное событие-отправка сообщения → Тип сообщения → Вычисление экземпляра процесса, в который отправляется сообщение

Заготовка скрипта

public class Script { 
  public static void Main(Comindware.Process.Api.Data.ScriptContext context, Comindware.Entities entities) {
// Тело скрипта
}
}

Входные данные

Comindware.Process.Api.Data.ScriptContext context {
string ProcessID, // ID процесса
string BusinessObjectID, // ID объекта
},
Comindware.Entities entities // используется для доступа к данным шаблонов записей

Выходные данные

string 
// Скрипт должен вернуть ID экземпляра процесса

Шаблон процесса → Конечное событие-отправка сообщения и промежуточное событие-отправка сообщения → Вычисление значения атрибута сообщения

Заготовка скрипта

public class Script {
  public static string Main(Comindware.Process.Api.Data.ScriptContext context, Comindware.Entities entities) {
// Тело скрипта
}
}

Входные данные

Comindware.Process.Api.Data.ScriptContext context {
  
string ProcessID, // ID процесса
string BusinessObjectID // ID объекта
},
Comindware.Entities entities // используется для доступа к данным шаблонов записей

Выходные данные

stringnumberdateTime, TimeSpan, bool 
// Атрибуту присваивается возвращённое строковое значение

Пространство используемых библиотек

Во всех пользовательских C#-скриптах ПО позволяет подключать перечисленные ниже библиотеки и использовать их публичные классы.

API для взаимодействия с Comindware Platform

Системные библиотеки и классы .Net Framework

Вспомогательные библиотеки и классы



Номер Статьи: 4864
Размещено: Tue, Aug 8, 2023
Последнее обновление: Fri, Mar 21, 2025

Online URL: https://kb.comindware.ru/article/napisanie-skriptov-na-yazyke-c-4864.html