Oracle apex 在Select2多值选择列表中重新选择项目

Oracle apex 在Select2多值选择列表中重新选择项目,oracle-apex,Oracle Apex,我在Apex上使用插件Select2 我有这样的场景: 我有三张桌子:房间、硕士生和地图生室 一个房间可以有许多学生 创建房间时,用户可以选择多个学生(使用MASTER_student中的Select2) 当用户编辑房间时,先前选择的学生将显示在Select2项目中(通过MAP\u student\u ROOM选择的项目),以便用户可以删除或添加更多学生 如何实现第4点,项目选择2值列表为MASTER\u STUDENT,但默认由MAP\u STUDENT\u ROOM选择 我找到了这个,但我不

我在Apex上使用插件Select2

我有这样的场景:

  • 我有三张桌子:房间、硕士生和地图生室
  • 一个房间可以有许多学生
  • 创建房间时,用户可以选择多个学生(使用MASTER_student中的Select2)
  • 当用户编辑房间时,先前选择的学生将显示在Select2项目中(通过MAP\u student\u ROOM选择的项目),以便用户可以删除或添加更多学生
  • 如何实现第4点,项目选择2值列表为MASTER\u STUDENT,但默认由MAP\u STUDENT\u ROOM选择


    我找到了这个,但我不知道如何应用它。

    我不熟悉Select2插件。
    您是否考虑过使用内置弹出式LOV,因为APEX 19.1现在允许多种选择。

    无论您使用的是Select2插件还是内置弹出式LOV,问题都是一样的。在ROOM上有一个表单,它试图考虑一个不属于ROOM表的项(其值存储在MAP\u STUDENT\u ROOM中)。诀窍是在页面加载期间正确填充项目,以便项目能够正确显示当前分配的学生

    如何配置项目的源?如果不是,则将类型设置为SQL查询(返回冒号分隔值)。假设页面上有房间的主键项(例如P1_ID),请输入如下查询:

    select student_id
    from MAP_STUDENT_ROOM
    where room_id = :P1_ID
    
    然后将Used设置为Always,替换会话状态中的任何现有值

    这将使项目在页面加载时正确显示。但是,在提交页面时,您仍然需要弄清楚如何将值正确映射回map_STUDENT_ROOM表。您需要添加一些逻辑,首先从文件室(P1_ID)中删除不在选择中的行(例如P1_分配的学生)。您可以使用来帮助:

    然后可以插入选定区域中但尚未在房间中的行

    insert into map_student_room (
      room_id,
      student_id
    )
    select :P1_ID,
      column_value
    from apex_string.split_number(:P1_ASSIGNED_STUDENTS, ':')
    where column_value not in (
      select student_id
      from map_student_room
      where room_id = :P1_ID
    )
    
    我还没有测试过这段代码,但它应该能让人理解这些要点


    另一种选择是使用交互式网格,而不是值列表项。这是一个经典的主/细节场景,学生可以在表单区域下方添加和删除(通常仅在创建后进行)。

    您使用的是什么版本的APEX?如果您转到项目的“源”,是否会看到名为“表单区域”的设置?如果是,它设置为什么?另外,在加载和提交时如何处理页面?您使用的是自动行处理还是手动PL/SQL?这是可行的。。以前,我已经设置了默认值,但我没有设置“习惯于始终”,而是替换会话状态中的任何现有值,以便不会重新选择选择列表。。哦,对于删除或插入,我使用“apex_string.split”从项中获取值。。谢谢你的解决方案。。
    insert into map_student_room (
      room_id,
      student_id
    )
    select :P1_ID,
      column_value
    from apex_string.split_number(:P1_ASSIGNED_STUDENTS, ':')
    where column_value not in (
      select student_id
      from map_student_room
      where room_id = :P1_ID
    )