Перейти к содержимому

SDK (Portal.EventReceiver.Sdk)

SDK (Portal.EventReceiver.Sdk)

C# SDK для разработки Event Receiver. Контракт: backend/src/Portal.EventReceiver.Sdk/IEventReceiver.cs.

Runtime Worker инжектирует IReceiverApi — см. backend/src/Portal.Application/EventReceivers/EventReceiverApiHost.cs.

Интерфейс обработчика

using Portal.EventReceiver.Sdk;
public sealed class MyHandler : IEventReceiver
{
public async Task<object?> HandleAsync(
EventContext context,
IReceiverApi api,
CancellationToken cancellationToken = default)
{
var listId = context.Details.GetProperty("listId").GetString();
var itemId = context.Details.GetProperty("item").GetProperty("id").GetString();
var item = await api.Lists.GetItemAsync(listId!, itemId!, cancellationToken);
api.Log.Info("Updated item", itemId);
return new { ok = true };
}
}

EventContext

ПолеОписание
EventNameИмя события (listItem.updated и т.д.)
DetailsДанные события (listId, item, user)
ReceiverConfigConfig привязки из UI (listId, note)
UserПользователь, инициировавший событие
PayloadПолный JSON задания

Receiver API (IReceiverApi)

ОбъектМетодОписание
ListsGetAsync, GetFieldsAsync, GetItemAsync, GetItemsAsyncСписки и элементы
CreateItemAsync, UpdateItemAsyncСоздание/изменение (с проверкой прав)
NodesGetAsyncУзел
JobsEnqueueAsyncПоставить задание в очередь
LogInfo, Warn, ErrorЛогирование Worker

Права выполняются от имени пользователя из context.User.

Шаблон проекта

Окно терминала
cd backend
dotnet new install ./templates/portal-eventreceiver
dotnet new portal-eventreceiver -n MyHandler -o ../../packages/my-handler

Пример: packages/event-receiver-examples/list-change-handler.