Cumulocity CEL Проверьте, существует ли событие - PullRequest
0 голосов
/ 24 октября 2019

Я пытаюсь реализовать, что если я отправлю Событие A, оно создаст новое Событие B, если оно не существует. Если событие B уже существует, оно должно обновить его.

Я попытался создать счетчик, который подсчитывает события, но он не работает. Также кажется, что «не существует» должно быть реализовано, но я не получаю его на работу.

Заранее спасибо Привет

1 Ответ

0 голосов
/ 28 октября 2019

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

Один из подходов заключается в создании вашего собственного «ключа» следующим образом:

insert into 
   CreateEvent 
select 
   "testtype" as type, 
    part.event.source as source, 
    "testext" as text,
    {
     "mycustomkey" , "customValue",
     } as fragments
from EventCreated; 

Здесь мы создаем событие с пользовательским key => «mycustomkey» с помощьюcustom value => "customValue".

Затем, когда создается новое событие, вы можете использовать предложение "where" , чтобы узнать:вам нужно создать новое событие или обновить другое событие.

// create a new event if the firstEvent function return an event which  
// the "mycustomkey" key if different to "customValue"
insert into 
   CreateEvent 
select 
   "testtype" as type, 
    part.event.source as source, 
    "testext" as text,
    {
     "mycustomkey" , "customValue",
     } as fragments
from EventCreated e
where getString(cast(
      findFirstEventByFragmentTypeAndType("mycustomkey", "testtype"), 
      com.cumulocity.model.event), 
      "mycustomkey") != "customValue";

Здесь просто обновляется событие, если функция if firstEvent возвращает событие, которое "mycustomkey" если равно "customValue"

insert into 
   EventUpdated 
select 
   "testtype" as type, 
    part.event.source as source, 
    "testext" as text,
    {
     "mycustomkey" , "customValue",
    } as fragments,
    cast(findFirstEventByFragmentTypeAndType("mycustomkey", 
    "testtype"), com.cumulocity.model.event), "mycustomkey").getId() as 
     id
from EventCreated e
where getString(cast(
      findFirstEventByFragmentTypeAndType("mycustomkey", "testtype"), 
      com.cumulocity.model.event), 
      "mycustomkey") = "customValue";

Для этого решения необходимо, чтобы "customValue" знали об этом, а также функция findFirstEventByFragmentTypeAndType предполагает, что она возвратит нужное вам событие. Мы можем улучшить это решение, купив вызов другой функции, такой как findOneEventByFragmentType , findEventByFragmentTypeAndSourceAndTimeBetweenAndType и т. Д. (Вы можете найти дополнительную информацию здесь ) и найти нужное событие, используяФункция javascript, такая как:

 insert into 
   CreateEvent 
select 
   "testtype" as type, 
    part.event.source as source, 
    "testext" as text,
    {
     "mycustomkey" , "customValue",
     } as fragments
from EventCreated e
where findTheCorrectEvent(
    findEventByFragmentTypeAndSourceAndTimeBetweenAndType(
    "mycusto mkey", "source", datefrom, dateTo).toJSON(),
    "customValue") = true;

 insert into 
   EventUpdated 
select 
   "testtype" as type, 
    part.event.source as source, 
    "testext" as text,
    {
     "mycustomkey" , "customValue",
     } as fragments
from EventCreated e
where findTheCorrectEvent(
    findEventByFragmentTypeAndSourceAndTimeBetweenAndType(
    "mycusto mkey", "source", datefrom, dateTo).toJSON(),
    "customValue") = false;

create expression Boolean findTheCorrectEvent(evens, "customValue") [ 
   var result = _findTheCorrectEvent(events, "customValue")
   function _findTheCorrectEvent(events, referenceKey){
      var _events = JSON.parse(events)
      var result = false
      _events.forEach(function(event){
          if(event.mycustomkey === referenceKey) result = true
      })
      return result
  }
  result
];

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

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

Надеюсь, это поможет вам.

Удачи!

...