Реализация методов для работы со строками секций из разметок
Программисту предоставляется возможность добавить новую функциональность в механизмы создания и работы со строками секциями из разметок. Данная возможность реализуется с помощью специального класса с интерфейсом IRowLifeCycleEx
. Интерфейс IRowLifeCycleEx
предоставляет методы, которые вызываются на различных этапах работы со строкой секции:
public interface IRowLifeCycleEx
{
Guid SectionId { get; } (1)
Guid Create(SessionContext sessionContext, RowCreateLifeCycleOptions options); (2)
bool Validate(SessionContext sessionContext, RowValidateLifeCycleOptions options, out List<ValidationResult> validationResults); (3)
void OnSave(SessionContext sessionContext, RowSaveLifeCycleOptions options); (4)
bool CanDelete(SessionContext sessionContext, RowDeleteLifeCycleOptions options, out string message); (5)
void OnDelete(SessionContext sessionContext, RowDeleteLifeCycleOptions options); (6)
}
1 | Идентификатор секции, для строк которой предоставляется реализация интерфейса IRowLifeCycleEx. |
2 | Create — Вызывается при получении разметки создания новой строки секции. |
3 | Validate — Вызывается перед сохранением изменений строки в БД, с возможностью прервать сохранение. |
4 | OnSave — Вызывается при сохранении изменений строки — позволяет добавить дополнительную логику в сохранение строки, но без возможности прервать сохранение. |
5 | CanDelete — Вызывается перед удалением строки секции — позволяет прервать удаление. |
6 | OnDelete — Вызывается при удалении строки секции — позволяет добавить дополнительную логику в удаление строки, но без возможности прервать удаление. |
Указанные методы используются исключительно при выполнении стандартных операций со строками из разметок или с использованием JS WebAPI разметок. В других случаях методы интерфейса IRowLifeCycleEx
не вызываются и не влияют на работу сервера Web-клиента со строками секций.
Следующий код демонстрирует пример реализации класса, в котором определена собственная функция проверки данных строки секции перед сохранением изменений (Validate
).
using System.Collections.Generic;
using DocsVision.BackOffice.CardLib.CardDefs;
using DocsVision.Platform.WebClient;
using DocsVision.WebClientLibrary.ObjectModel.Services.EntityLifeCycle;
using DocsVision.WebClientLibrary.ObjectModel.Services.EntityLifeCycle.Options;
public class RefPartnersCompaniesRowLifeCycle : DefaultRowLifeCycleEx (1)
{
public RefPartnersCompaniesRowLifeCycle()
: base(RefPartners.Companies.ID)
{
}
public override bool Validate(SessionContext sessionContext, RowValidateLifeCycleOptions options, out List<ValidationResult> validationResults)
{
var isValid = base.Validate(sessionContext, options, out validationResults);
var rowData = sessionContext.AdvancedCardManager.GetRowData(options.CardId, RefPartners.Companies.ID, options.RowId);
var companyName = rowData.GetString(RefPartners.Companies.Name);
if (string.IsNullOrEmpty(companyName))
{
isValid = false;
var validationResult = new ValidationResult
{
Message = "Наименование компании не заполнено"
};
validationResults.Add(validationResult);
}
return isValid;
}
}
1 | RefPartnersCompaniesRowLifeCycle наследуется от стандартной реализации интерфейса IRowLifeCycleEx — класса DefaultRowLifeCycle , в котором уже реализованы необходимые методы. Помимо класса DefaultRowLifeCycle с реализацией по умолчанию API включает реализующий интерфейс IRowLifeCycleEx базовый класс BaseRowLifeCycle с абстрактными методами. |
Метод Validate
проверяет строку rowId
на заполненность поля RefPartners.Companies.Name
, и, если данное поле пустое, возвращает ошибку validationResult
.
Полученный тип с интерфейсом IRowLifeCycleEx
нужно добавить в IoC-контейнер в ядре расширения:
public override void InitializeServiceCollection(IServiceCollection services)
{
services.AddTransient<IRowLifeCycleEx, RefPartnersCompaniesRowLifeCycle>();
}
Серверное расширение должно быть опубликовано стандартным образом.