关于pickerField控件指定打开的界面

我重写了一个UserBrowse来替代系统自带的用户列表界面。实体还是使用的系统自带的对象。我在使用pickerField控件去选择用户的时候,如何让他弹出的是我写的UserBrowse而不是系统默认的那个呢?有没有什么全局设置

这是扩展界面最基本的功能:

如果在screens.xml中注册一个新界面,新界面使用与父界面相同的标识符,这样新界面就会代替旧界面。

<screen id="sec$User.browse"
        template="com/sample/sales/gui/extuser/extuser-browse.xml"/>
<screen id="sec$User.lookup"
        template="com/sample/sales/gui/extuser/extuser-browse.xml"/>

我试试看,我用的7.2,报错如下:
DevelopmentException: Unable to create screen sec$User.lookup with type FRAGMENT. If the screen is defined as @UiController make sure it is not present in legacy screens.xml

还有别的招吗?

我猜你用了这个com.haulmont.cuba.gui.builders.LookupBuilder#withScreenClass
这个方法要求使用新的 controller 定义方式:

@Route(path = “login”, root = true)
@UiDescriptor(“login-screen.xml”)
@UiController(“login”)
public class LoginScreen extends Screen {

但是 Security 下面的这几个 Screen 都是旧的定义方式,你需要用 com.haulmont.cuba.gui.builders.LookupBuilder#withScreenId

我是在XML里直接用metaClass=“sec$User”,我用新API重写了UserBrowse

   @Subscribe("accountPicker.lookup")
   public void onAccountPickerLookup(Action.ActionPerformedEvent event) {
          screenBuilders.lookup(accountPicker)
          //.withScreenClass(UserLookup.class)
          .withScreenId("sec$User.lookup")
          .build()
          .show();
}

descriptor:

   <form id="form" dataContainer="orderDc">
       <column id="accountCol" width="350px">
           <pickerField id="accountPicker" property="account">
               <actions>
                   <action id="lookup"/>
                   <action id="show" icon="PICKERFIELD_OPEN" caption="Show"/>
               </actions>
           </pickerField>
       </column>
   </form>

手动打开,你如果改写了就可以用 withScreenClass

用代码的方式可以了,谢谢!