共用Edit界面,如何动态控制dl加载

共用Edit界面,如何动态控制dl加载:

  1. 编辑,使用编辑数据加载
  2. 克隆,传入一个数据对象
    是不是动态控制dataLoadCoordinator ?
 <facets>
        <dataLoadCoordinator auto="true" id="dataLoadCoordinator"/>
    </facets>
  1. 编辑就正常操作。
  2. 克隆:
@Subscribe("clone")
public void onCloneClick(final Button.ClickEvent event) {

    if(ordersTable.getSelected().isEmpty()){
        return;
    }
    
    var clone = clone(ordersTable.getSelected().iterator().next());

    screenBuilders.editor(Order.class,this)
            .editEntity(clone)
            .build()
            .show();
}

再方法里讲clone对象改了值,到了编辑界面还是没有的,应该是根据id重新加载了

clone的方法里要新建对象的:

Order clone(Order order){
    var o  = dataManager.create(Order.class);
    o.setName("cloned order");
    o.setOrderType(order.getOrderType());
    o.setTypeCode(order.getTypeCode());
    return o;
}

不能原来的对象改个id传过去吗

原来的改个id,还是原来的对象;Jmix的 Entity 除了你看到的实体字段外,还有一些JPA的元数据:

你要是不想手动设置,可以用 MetaDataTools.deepCopy() 之后,再设置新 id:

var o =  metadataTools.deepCopy(order);
o.setId(UUID.randomUUID());

我重新给了id 用datamanager.save会保存成新的记录吧?

试试就知道了

image

  1. 直接给新的id
    2.var o = metadataTools.deepCopy(order);
    o.setId(UUID.randomUUID());
    save(o)

这两种方式都不行

image

仔细看看错误:String 无法转为 sql.Clob 类型,这个错跟换id关系不大

确认了,改id保存就可以。
错误是studio将数据库字段VARCHAR2(4000)生成实体的时候带了@Lob注解,去掉就可以了