Firebird получает все события, имена которых начинаются с & ldquo; something & rdquo; [Дубликат]

if(UI_USER_INTERFACE_IDIOM () == UIUserInterfaceIdiom.pad)
 {
            print("This is iPad")
 }else if (UI_USER_INTERFACE_IDIOM () == UIUserInterfaceIdiom.phone)
 {
            print("This is iPhone");
  }
2
задан Mark 9 July 2012 в 12:30
поделиться

3 ответа

AFAIK, вы не можете передавать параметры, но вы можете получить то, что хотите, с одной из этих идей:

  • Если в вашем клиенте вас интересуют события по конкретным записям, вы можете добавить ID измененной записи и опубликовать это событие. Клиенты регистрируют события, в которых вас интересуют, с использованием конкретных идентификаторов. См. Пример 1.
  • , если ваш интерфейс интересуется всеми изменениями, но вы хотите узнать, какие конкретные записи были изменены, вы можете «пометить» записи как «недавно измененные» (используя другое поле на том же запись или таблица подробностей, например). После уведомления клиента и действия он возвращает или очищает флаг. Этот подход может быть приведен в действие, например, с использованием вспомогательных таблиц для отслеживания отсутствующих записей от конкретных клиентов, это зависит от ваших потребностей.

Пример 1

begin
  if (new.phone_ext <> old.phone_ext) then
    post_event 'phone_ext_changed_'||new.ID;
end

Пример 2

begin
  if (new.phone_ext <> old.phone_ext) then
  begin
    new.recent_ext_change = 1;
    /* or maybe */
    new.last_ext_change = cast('now' as DateTime);
    /* or maybe */
    insert into changed_phone_ext values (gen_id(some_generator, 1), New.ID, 'now');
    /* finally, post the event */
    post_event 'phone_ext_changed_';
  end
end

Я использую оба с успехом в разных приложениях / ситуациях.

5
ответ дан jachguate 18 August 2018 в 21:36
поделиться
  • 1
    Спасибо, точка 2 - это то, что мне нужно. Я думаю, что я буду использовать выделенную таблицу, чтобы предотвратить модификацию самой записи, а затем запросить таблицы с идентификатором для обновления клиентов с необходимыми полями. – Luc Jeanniard 2 December 2010 в 19:41
  • 2
    @jachguate Как я могу отправить new.ID для программирования в качестве аргумента? – Aleksa Ristic 3 October 2017 в 17:10
  • 3
    Я не понимаю ваш вопрос, не могли бы вы рассказать? – jachguate 3 October 2017 в 21:09

Вы можете использовать его следующим образом:

  1. Задайте контекстную переменную в триггере и поместите в нее нужную информацию.

Пример:

Create trigger evento_ai0 for evento
active after insert position 0
AS
BEGIN
 Post_Event 'Evento_inserido';

«Создание контекста variavble»

rdb$set_context('USER_SESSION', 'REGISTRO' , 'Registro inserido: '||new.eve_id);
END
  1. Для захвата сохраненной информации используйте: Select rdb$get_context('USER_SESSION', 'REGISTRO') from rdb$database;
0
ответ дан loki 18 August 2018 в 21:36
поделиться
  • 1
    Это решение работает только в том случае, если событие было отправлено тем же соединением, которое получит событие, в большинстве приложений с несколькими пользователями это не так. – Mark Rotteveel 13 June 2018 в 09:09

Это невозможно. Событие - это только имя, если вы добавляете идентификаторы или другие квалификаторы, оно просто становится другим событием, потому что оно имеет другое имя. При подписке на события вы можете подписаться только по имени, вы не можете использовать подстановочные знаки, и невозможно включить параметры.

События предназначены для простого и дешевого уведомления, а Firebird может даже объединить несколько " сообщений одного и того же события в одно уведомление клиенту, поэтому параметры или значения не поддерживаются.

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

Также подумайте о том, чтобы прочитать статью «Сила событий Firebird» , она немного устарел, но многие из них по-прежнему применяются, поскольку события Firebird не сильно изменились.

0
ответ дан Mark Rotteveel 18 August 2018 в 21:36
поделиться
Другие вопросы по тегам:

Похожие вопросы: