当前位置: 首页 > 知识库问答 >
问题:

oracle apex穿梭节省取消选举

郑茂勋
2023-03-14

我使用的是Apex 4.2.4和Oracle 11g。我有一个邮件列表应用程序,在那里我维护多个邮件列表。给定的收件人可能属于一个或多个列表。我在用Apex穿梭机来维护名单。所有邮件收件人的来源都在表中:mail_recipition。mail_recipition中有四个重要字段:

  • prim_key
  • first_name
  • last_name
  • 电子邮件地址

另一个表存储给定邮件列表的选定收件人:mail_recipient_category:mail_recipient_category中的重要字段有:

  • prim_key
  • Recipient_fkey(存储mail_recipition表中的prim_key)
  • 类别
  • merge_check

页面上有两个显示项。类别下拉列表(P31_email_list)和穿梭列表(P31_email_list_assignments)P31_email_list_assignments的LOV为:

Select last_name || ', ' || first_name || ' -- ' || email_address, prim_key from mail_recipient
order by 1;

穿梭源的PL/SQL函数体是:

declare
  emp_list  apex_application_global.vc_arr2;
  i                   number := 1;
begin
  for r in (Select mr.last_name || ', ' || mr.first_name || ' -- ' || mr.email_address, mr.prim_key
            From mail_recipient mr left outer join 
              mail_recipient_category mrc
            On mr.prim_key = mrc.recipient_fkey
            Where  mrc.category = :P31_EMAIL_LIST)
  loop
    emp_list(i) := r.prim_key;
    i := i + 1;
  end loop;
  return APEX_UTIL.TABLE_TO_STRING(emp_list, ':');
end;

还有一个单页进程来更新数据库表mail_recipient_category。在计算和验证之后,在提交时执行该流程。开始

MERGE INTO MAIL_RECIPIENT_CATEGORY ss
USING (
    Select
        shuttle.column_value shuttle_st
      , db.recipient_fkey db_st
    from
        table(string_to_coll(:P31_email_list_assignments)) shuttle
          left outer join mail_recipient_category db
            on shuttle.column_value = db.recipient_fkey
           and db.category = :P31_email_list) t
on  (ss.recipient_fkey = t.db_st
and ss.category = :P31_email_list    
    )
when matched
then
    update
    set
        ss.merge_check = ss.merge_check
    delete
    where
        t.shuttle_st is null and ss.category = :P31_email_list
--        t.shuttle_st is null

  when not matched 
  then
    insert
      (recipient_fkey, category)
    values
      (t.shuttle_st, :P31_email_list);
end;

穿梭机工作良好,从左到右装载和保存项目。我的问题是取消选择项目从右侧到左侧的航天飞机。将邮件收件人从右侧移到左侧后,当我按下提交按钮时,邮件不会离开穿梭机的右侧,处理过程也不会从mail_recipient_category表中删除该行。
感谢您在这方面的帮助。

共有1个答案

何涵畅
2023-03-14

在与一位非常有经验的同事一起工作后,我们确定页面流程出了问题。具体地说,Merge语句的Delete子句似乎对这个穿梭不起作用。我们最后在页面进程的Merge语句之后添加了一个单独的Delete语句。
我还删除了mail_recipient_category表,现在使用更有意义的名称mail_recipient_list。穿梭字段名为(p31_email_list_assignments)。

工作航天飞机LOV定义代码为:

Select last_name || ', ' || first_name || ' -- ' || email_address, prim_key 
From mail_recipient
order by 1;

工作穿梭机源代码是:

declare
  mail_list  apex_application_global.vc_arr2;
  i                   number := 1;
begin
  for r in (Select mr.last_name || ', ' || mr.first_name || ' -- ' || mr.email_address, mr.prim_key
            From mail_recipient mr left join 
              mail_recipient_list mrl
            On mr.prim_key = mrl.recipient_fkey
            Where  mrl.list = :P31_EMAIL_LIST)
  loop
    mail_list(i) := r.prim_key;
    i := i + 1;
  end loop;
  return APEX_UTIL.TABLE_TO_STRING(mail_list, ':');
end;

提交页面后的工作流程代码为:

Begin
Merge Into MAIL_RECIPIENT_LIST mrl
Using (
    Select
        shuttle.column_value shuttle_cv
      , db.recipient_fkey db_rfk
    From
        table(string_to_coll(:P31_email_list_assignments)) shuttle
          left outer join mail_recipient_list db
            on shuttle.column_value = db.recipient_fkey
           and db.list = :P31_email_list) t
On  (mrl.recipient_fkey = t.db_rfk
And  mrl.list = :p31_email_list    
    )
When Matched
Then
    Update
    Set
        mrl.merge_check = mrl.merge_check
--    Delete
--      Where
--      t.shuttle_cv is null

When Not Matched 
  Then
    Insert
      (recipient_fkey, list)
    Values
      (t.shuttle_cv, :P31_email_list);

/* The commented-out delete clause of the Merge statement never worked with this shuttle.
   The following delete statement will every time this page process is called
*/
Delete from MAIL_RECIPIENT_LIST 
Where instr(':' || :P31_email_list_assignments || ':',':' || recipient_fkey || ':') = 0  
And list = :P31_email_list;
end;

我希望有人发现这有用。

 类似资料:
  • 基础用法 Transfer 的数据通过 data 属性传入。数据需要是一个对象数组,每个对象有以下属性:key 为数据的唯一性标识,label 为显示文本,disabled 表示该项数据是否禁止转移。目标列表中的数据项会同步到绑定至 v-model 的变量,值为数据项的 key 所组成的数组。当然,如果希望在初始状态时目标列表不为空,可以像本例一样为 v-model 绑定的变量赋予一个初始值。 <

  • Transfer 穿梭框 基础用法 :::demo Transfer 的数据通过 data 属性传入。数据需要是一个对象数组,每个对象有以下属性:key 为数据的唯一性标识,label 为显示文本,disabled 表示该项数据是否禁止转移。目标列表中的数据项会同步到绑定至 value 的变量,值为数据项的 key 所组成的数组。当然,如果希望在初始状态时目标列表不为空,可以像本例一样为 valu

  • Transfer 穿梭框 基础用法 Transfer 的数据通过 data 属性传入。数据需要是一个对象数组,每个对象有以下属性:key 为数据的唯一性标识,label 为显示文本,disabled 表示该项数据是否禁止转移。目标列表中的数据项会同步到绑定至 v-model 的变量,值为数据项的 key 所组成的数组。当然,如果希望在初始状态时目标列表不为空,可以像本例一样为 v-model 绑定

  • 经过了之前众多的实践,版本库中已经积累了很多次提交了,从下面的命令可以看出来有14次提交。 $ git rev-list HEAD | wc -l 14 有很多工具可以研究和分析Git的历史提交,在前面的实践中已经用过很多相关的Git命令进行查看历史提交、查看文件的历史版本、进行差异比较等。本章除了对之前用到的相关Git命令作以总结外,还要再介绍几款图形化的客户端。 2.8.1. 图形工具:gi

  • 如何修改angular穿梭框的总数统计,只显示角色下面的数据,怎么修改统计数据方法。 <nz-transfer

  • 本文向大家介绍vue按需引入element Transfer 穿梭框,包括了vue按需引入element Transfer 穿梭框的使用技巧和注意事项,需要的朋友参考一下 Transfer 穿梭框 按需引入Transfer 编辑main.js 安装transform-vue-jsx 插件 编辑 .babelrc文件 安装相应插件 总结 以上所述是小编给大家介绍的vue按需引入element Tra