0

我想用预设的 fts 过滤器字符串打开一个浏览屏幕。

我有一个带有文本字段的窗口:

openWindow('some-browse-screen', WindowManager.OpenType.NEW_TAB, [ftsSearchString: searchTextField.rawValue])

并且想要使用来自文本字段的输入作为浏览屏幕的预设值:

@Inject
Filter filter

@Override
void init(Map<String, Object> params) {
    super.init(params)

    if (params.ftsSearchString) {
       //I need a method like that:
       filter.ftsFilterInput.setSearchParam(params.ftsSearchString)
    }
}

我有什么可能做到这一点?

4

1 回答 1

1

如果您定义“FTS 条件”并将过滤器设置为该屏幕的默认值,您可以按照与任何其他条件相同的方式预设条件参数的值:通过在过滤器的 UI 中找到参数名称并setParamValue()在代码:

public class CustomerBrowse extends AbstractLookup {

    @Inject
    private Filter filter;

    @WindowParam
    private String searchTerm;

    @Override
    public void ready() {
        if (!Strings.isNullOrEmpty(searchTerm))
            filter.setParamValue("fts56832", searchTerm);
    }
}

如果你有defaultMode="fts",即过滤器默认在 FTS 模式下,只有一个参数,它会更复杂。显示搜索词的组件没有公共 API,因此您必须FilterDelegateImpl在项目中覆盖并访问ftsSearchCriteriaField受保护的字段。我认为最简单的方法是覆盖该setParamValue()方法:

package com.company.sample.web.filter;

import com.haulmont.cuba.gui.components.filter.FilterDelegateImpl;

public class SampleFilterDelegate extends FilterDelegateImpl {

    public static final String FTS_SEARCH_TERM = "_FTS_SEARCH_TERM_";

    @Override
    public void setParamValue(String paramName, Object value) {
        if (paramName.equals(FTS_SEARCH_TERM) && ftsSearchCriteriaField != null) {
            ftsSearchCriteriaField.setValue(value);
            searchBtn.action.actionPerform(); //to run the search
        } else {
            super.setParamValue(paramName, value);
        }
    }
}

该类必须注册web-spring.xml为原型 bean:

<bean id="cuba_FilterDelegate" 
      scope="prototype"  
      class="com.company.sample.web.filter.SampleFilterDelegate"/>

然后您可以按照与上述相同的方式设置初始值,但传递预定义的参数名称:

public class CustomerBrowse extends AbstractLookup {

    @Inject
    private Filter filter;

    @WindowParam
    private String searchTerm;

    @Override
    public void ready() {
        if (!Strings.isNullOrEmpty(searchTerm))
            filter.setParamValue(SampleFilterDelegate.FTS_SEARCH_TERM, searchTerm);
    }
}   
于 2018-03-01T11:05:46.777 回答