Лояльность

  1. Главная
  2. Документы
  3. Лояльность
  4. API процессинга покупок
  5. Пользовательские обработчики customFields

Пользовательские обработчики customFields

Пользовательские обработчики customFields вызываются на стороне BPMSoft.

При создании, обновлении покупки и при создании возврата, после первичного сохранения в базу, но до вызова обработчиков событийного слоя объектов BPMSoft осуществляется вызов пользовательcких обработчиков customFields.

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

Перейти в конфигуратор и создать исходный код в пользовательском пакете

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

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

Пример запроса purchase/confirm

Пример обработки покупки

using System;
using System.Collections.Generic;
using Newtonsoft.Json.Linq;
using Samarasoft.Loyalty.BpmOnline.Services.CustomFieldService;
using Terrasoft.Core.Entities;

namespace Terrasoft.Configuration
{
    public class PurchaseCreateCustomFieldsHandler: IPurchaseCustomFieldHandler
    {
        public void OnCreated(Entity purchase, Dictionary<string, object> customFields)
        {
            if (customFields.TryGetValue("giftCards", out var result))
            {
                if (result is JArray jObject)
                {
                    var giftCards = jObject.ToObject<GiftCardDto[]>();
                    if (giftCards != null)
                    {
                        var contactColumnValueName = purchase.Schema.Columns.FindByName("Contact").ColumnValueName;
                        var contactId = purchase.GetTypedColumnValue<Guid>(contactColumnValueName);
                        foreach (var card in giftCards)
                        {
                            var cardSchema = purchase.UserConnection.EntitySchemaManager.GetInstanceByName("UsrGiftCards");
                            var cardEntity = cardSchema.CreateEntity(purchase.UserConnection);
                            cardEntity.UseAdminRights = false;
                            cardEntity.SetDefColumnValues();
                            cardEntity.SetColumnValue("UsrName", card.UsrName);
                            cardEntity.SetColumnValue("UsrCertificateHolderId", contactId);
                            cardEntity.SetColumnValue("UsrCertPurchaseId", purchase.PrimaryColumnValue);
                            cardEntity.SetColumnValue("UsrCertificateStateId", card.UsrCertificateState);

                            cardEntity.Save(false);
                        }
                    }
                    
                }
            }
        }

        public void OnUpdated(Entity purchase, Dictionary<string, object> customFields)
        {
 }

    public class GiftCardDto
    {
        public Guid UsrCertificateState { get; set; }
        public string UsrName { get; set; }
    }
 }

Результат

Пример запроса purchase/refund

Пример обработки возврата

using System;
using System.Collections.Generic;
using Newtonsoft.Json.Linq;
using Samarasoft.Loyalty.BpmOnline.Services.CustomFieldService;
using Terrasoft.Core.Entities;

namespace Terrasoft.Configuration
{     
    public class RefundCreateCustomFieldsHandler: IRefundCustomFieldHandler
    {
        public void OnCreated(Entity refund, Dictionary<string, object> customFields)
        {
            if (customFields.TryGetValue("giftCards", out var result))
            {
                if (result is JArray jArray)
                {
                    var giftCards = jArray.ToObject<GiftCardDto[]>();
                    if (giftCards != null)
                    {
                        foreach (var card in giftCards)
                        {
                            var cardSchema = refund.UserConnection.EntitySchemaManager.GetInstanceByName("UsrGiftCards");
                            var cardEntity = cardSchema.CreateEntity(refund.UserConnection);
                            cardEntity.UseAdminRights = false;
                            cardEntity.SetDefColumnValues();
                            cardEntity.SetColumnValue("UsrName", card.UsrName);
                            cardEntity.SetColumnValue("UsrCertRefundId", refund.PrimaryColumnValue);
                            cardEntity.SetColumnValue("UsrCertificateStateId", card.UsrCertificateState);

                            cardEntity.Save(false);
                        }
                    }
                    
                }
            }
        }
    }

    public class GiftCardDto
    {
        public Guid UsrCertificateState { get; set; }
        public string UsrName { get; set; }
    }
}

Результат

В классе, реализующем интерфейс IPurchaseCustomFieldHandler должны быть реализованы методы OnCreated и OnUpdated.

Был ли данный материал полезен вам? Да 1 Нет