是否可以在firebird事件中使用参数:POST_EVENT'event_name'+ string args?

Luc*_*ard 2 events firebird

我有一个触发器,可以检测字段PHONE_EXT和POST事件的变化.我想发布带有事件的Phone_ID,以便在客户端中使用此ID.这可能吗?怎么样?

CREATE TRIGGER tr2 FOR employee
ACTIVE AFTER UPDATE POSITION 0
AS
BEGIN
    IF (new.PHONE_EXT <> old.PHONE_EXT) THEN
          POST_EVENT 'phone_ext_changed'; <-- I would like to pass a string parameter with record ID
END
Run Code Online (Sandbox Code Playgroud)

jac*_*ate 5

AFAIK,您无法传递参数,但您可以通过以下方法之一获得所需内容:

  • 如果在您的客户端中您对特定记录的事件感兴趣,您可以附加更改记录的ID并发布该事件.客户使用感兴趣的特定ID注册感兴趣的事件.见例1.
  • 如果您的前端对所有更改感兴趣但您想知道哪些特定记录已更改,则可以将这些记录"标记"为"最近更改"(例如,使用同一记录中的其他字段或详细信息表).在客户端通知和操作后,它将恢复或清除该标志.例如,可以使用辅助表来跟踪特定客户端的丢失记录,这取决于您的需求.

例1

begin
  if (new.phone_ext <> old.phone_ext) then
    post_event 'phone_ext_changed_'||new.ID;
end
Run Code Online (Sandbox Code Playgroud)

例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
Run Code Online (Sandbox Code Playgroud)

我在不同的应用程序/情况下成功使用它们.