编辑或删除时,改写实体的字段值使用哪些handler?

编辑或删除时,改写实体的字段值使用哪些handler?是否有相关在线的文档?

你好,能详细说一下吗?不是很懂你想要什么handler?

比如删除某条数据,我采用编码方式修改某个字段的值

你好,我写了个简单的例子:

  1. 实体 Order,带有 isDel 字段表示是否删除:
     @JmixEntity
     @Table(name = "DEMO_ORDER")
     @Entity(name = "demo_Order")
     public class Order implements HasDelFlag {
         @JmixGeneratedValue
         @Column(name = "ID", nullable = false)
         @Id
         private UUID id;
     
         @InstanceName
         @Column(name = "NAME")
         private String name;
     
         @Column(name = "IS_DEL")
         private Boolean isDel = false;
     
         public String getName() {
             return name;
         }
     
         public void setName(String name) {
             this.name = name;
         }
     
         public Boolean getIsDel() {
             return isDel;
         }
     
         public void setIsDel(Boolean isDel) {
             this.isDel = isDel;
         }
     
         public UUID getId() {
             return id;
         }
     
         public void setId(UUID id) {
             this.id = id;
         }
     
     }
    
  2. 列表界面中,修改数据加载器,仅加载未删除的数据:
     <data readOnly="true">
         <collection id="ordersDc"
                     class="com.company.demo.entity.Order">
             <fetchPlan extends="_base"/>
             <loader id="ordersDl">
                 <query>
                     <![CDATA[select e from demo_Order e where e.isDel=false]]>
                 </query>
             </loader>
         </collection>
    
  3. 列表界面中,修改表格的 RemoveAction,去掉 type 属性,并添加 caption 属性:
    <groupTable id="ordersTable"
             width="100%"
             dataContainer="ordersDc">
     <actions>
         <action id="create" type="create"/>
         <action id="edit" type="edit"/>
         <action id="remove" caption="删除"/> 
     </actions>
    ...
    
  4. 在界面控制器中,添加下列代码:
     @Autowired
     protected Dialogs dialogs;
     @Autowired
     private GroupTable<Order> ordersTable;
     @Autowired
     private DataManager dataManager;
     @Autowired
     private CollectionLoader<Order> ordersDl;
    
     @Subscribe("ordersTable.remove")
     public void onOrdersTableRemove(Action.ActionPerformedEvent event) {
         // 获取表格中选中的数据
         var orders = ordersTable.getSelected();
    
         if (orders.isEmpty()) {
             return;
         }
    
         dialogs.createOptionDialog()
                 .withCaption("删除数据")
                 .withMessage("请确认要删除 " + orders.size() + " 条数据")
                 .withActions(
                         // 用户点击确认标记删除
                         new DialogAction(DialogAction.Type.OK)
                                 .withHandler(e -> markDataAsRemoved(orders)
                                 ),
                         new DialogAction(DialogAction.Type.CANCEL))
                 .show();
     }
    
     private void markDataAsRemoved(Set<Order> orders) {
         // 用 setDiscardSaved(true) 提高效率。
         var context = new SaveContext().setDiscardSaved(true);
    
         orders.forEach(o->{
             o.setIsDel(true);
             context.saving(o);
         });
         // 同时保存多个
         dataManager.save(context);
         // 最后,重新加载表格数据
         ordersDl.load();
     }
    

感谢感谢