Лояльность для BPMSoft

  1. Главная
  2. Документы
  3. Лояльность для BPMSoft
  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 Нет