Прикладные решения

Прикладные решения

Простая и быстрая разработка прикладных решений.

Шаблоны для быстрого создания новых сущностей и полей сущностей

На нашем сайте вы найдете готовые примеры реализации всех частей приложения: моделей, событий, операций, действий, фильтров, нумераторов, форм, виджетов.

Простой и ясный код

Запросы к БД, составляющие 50% прикладного кода, пишутся на Linq и выглядят лаконичней SQL.

Все задачи по взаимодействию прикладного кода с пользователем, БД, кэшированием, безопасностью и другими важными, но не профильными для бизнеса вещами взяла на себя платформа.

В системе есть богатый API для прикладной разработки.

XML комментарии

XML комментарии из кода попадают в систему как название сущностей, полей и других объектов. Например:

Code Snippet
  1. ///<summary>
  2. /// Операционные дни
  3. ///</summary>
  4. [HierarchyRoot]
  5. [Id(«19C4245B-4DF8-460E-0000-000000000000″)]
  6. public partial class OperatingDay : DocumentBase, IWithRevision
  7. {
  8.     ///<summary>
  9.     /// Открыл
  10.     /// Пользователь, создавший операционный день
  11.     ///</summary>
  12.     [Field(Nullable = false)]
  13.     [Id(«00000000-0000-0000-9D6C-E34DD7D025FF»)]
  14.     public User EmployeeOpen { get; set; }

По такому классу у вас в системе появится документ, который будет называться “Операционные дни”. У него будет не обязательное поле “Открыл” с подсказкой по наведению “Пользователь, создавший операционный день”.

Вычисляемые поля

В платформе есть возможность добавить к документу поле, которое не будет хранится в базе данных, но будет “вытягивать” дополнительную информацию по уже имеющимся данным. Например, в документе Договор есть поле Юридическое лицо и “виртуальное” поле “Адрес юр.лица”.

Code Snippet
  1. public partial class MyDocument : DocumentBase
  2. {
  3.     /// Выражение, по которому “вытягивается” вычисляемое поле
  4.     protected static Expression<Func<MyDocument, string>> Cont = a => a.Contragent.Address.FullAddress;
  5.     ///<summary>
  6.     /// Юридическое лицо
  7.     /// Поле-ссылка на справочник юридических лиц
  8.     ///</summary>
  9.     [Field]
  10.     public JuridicalPerson Contragent { get; set; }
  11.     ///<summary>
  12.     /// Адрес юр. лица
  13.     /// Виртуальное (вычисляемое) поле, отображающее полный адрес юридического лица
  14.     ///</summary>
  15.     [VirtualField(«Cont»)]
  16.     [Id(«00000000-0000-0000-BBE3-ED380003A0B1″)]
  17.     public string Address { get; set; }
  18. }

 

Нумераторы

При создании документа его поля должны предзаполняться по какому-то алгоритму. Готовое решение — нумератор. Это специальный код, заполняющий значение по умолчанию для поля сущности.

Примеры использования: текущая дата, текущий пользователь, номер по порядку. Однажды разработанный нумератор можно использовать для различных документов.

Заполнятор :)

А если нужно предзаполнить несколько полей сущности связанным общим алгоритмом? Default-ы (заполняторы) — готовый шаблон для этой возможности.  Входными данными для алгоритма являются данные о пользователе, о том, из какого места системы он пытается создать документ, и т.д.

Например: можно разработать Default, который будет заполнять поля Документа аналогично ранее выделенному элементу в системе. Своеобразный способ «клонировать»  документ.

 

События форм

Позволяет добавить динамическое поведение для веб форм без знания JavaScript.

Нравится WEB 2.0, но пугает JavaScript? Создавайте интерактивные формы на C# с интуитивно понятным кодом.

Предположим, у вас на форме есть три поля: количество, цена и сумма. Вам нужно вычислять одно значение в зависимости от другого.

<Пример>

При этом отладку можно проводить прямо в VS для C# кода.

 События сущности

Вы можете обработать события создания, изменения и удаления сущностей, чтобы определить набор бизнес-правил, проверяющих корректность изменений. Для разных групп пользователей можно установить разный набор проверок.

Например, при сохранении Договора проверить корректность заполнения  ИНН и проверить, что данная организация не находится в «черном списке».

 

 Workflow документа

Рабочий процесс над документом можно создавать и изменять прямо из интерфейса. На каждое действие можно назначить права доступа и обработку из кода.

Похожие рабочие процессы можно создавать наследованием от основного процесса.

Сложная фильтрация из кода

Мы считаем, что пользователь должен видеть в списках только то, что может реально выбрать.  Если пользователь выбирает сперва отдел, потом сотрудника, то в выпадающем списке он видит только сотрудников выбранного отдела. А если сперва сотрудника, то отдел он вообще может не выбирать, он должен заполниться автоматически.

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

Разработка деревьев навигации, кнопок и контекстных меню

Разработка действий (кнопок)

Кнопка — это класс, указывающий месторасположение, входящие параметры и доступные действия (всё вместе это называется контекст)

Например, кнопка на гриде имеет доступ до выделенных записей грида, всех записей грида и т.п.

Кнопка на форме — до текущего элемента сущности, отображаемого на форме. Пример кнопки:

Code Snippet
  1. ///<summary>
  2. /// Копировать
  3. /// Кнопка копирует значение SysName в поле Name и переводит его в верхний регистр
  4. ///</summary>
  5. [Icon(ExtIcon.Edit)]
  6. [Id(«236B2DB4-ABF9-43BA-B95E-9CB8BA55AB67″)]
  7. public class SimpleAction : IAction<IFormContext<SomeEntity>>
  8. {
  9.    public void Execute(IFormContext<SomeEntity> context)
  10.     {
  11.         var item = context.Item;
  12.         item.Name = item.SysName.ToUpper();
  13.         context.ShowMsgBox(«Выполнили изменение поля Name»);
  14.         context.Refresh();
  15.     }
  16. }

Кнопки могут декларативно (через атрибут) и  программно (реализация интерфейса) конфигурироваться. Могут задаваться статические и динамические доступности/видимости/наименования и иконки.