单据转换,自定义比较符脚本过滤原创
金蝶云社区-吴锐雄
吴锐雄
3人赞赏了该文章 231次浏览 未经作者许可,禁止转载编辑于2024年01月02日 16:03:50

在单据转换过程中,如果使用到自定义比较符,会触发脚本方法。

即AbstractFilterContantParser的getScriptFilter方法。



以订单(源单)和入库单(目标单)为例。

配置自定义比较符和单据转换。

1.日期字段,过滤今年的数据

创建自定义比较符如下图,有几个需要注意的地方:

适用类型,指的是控件类型,创建了比较符之后,还需要再对应的控件中添加这个自定义比较符才会生效。

应用,只有应用中的页面,才能使用这个自定义比较符。

解析类,派生自AbstractFilterContantParser,通过java代码实现自定义比较符的业务逻辑。

image.png


ThisYearFilterContantParser这个类的类路径,要填在在自定义比较符的解析类上。

代码如下:

import kd.bos.entity.filter.AbstractFilterContantParser;
import kd.bos.entity.filter.FilterContantParserArgs;
import java.text.SimpleDateFormat;
import java.util.Calendar;

/**
 * 自定义比较符:今年
 */
public class ThisYearFilterContantParser extends AbstractFilterContantParser {

    @Override
    protected QFilter getQFilter(FilterContantParserArgs filterContantParserArgs) {
        return null;
    }

    @Override
    protected String getScriptFilter(FilterContantParserArgs filterContantParserArgs) {
        String fieldName = filterContantParserArgs.getFieldName();

        Calendar calendar = Calendar.getInstance();
        calendar.set(Calendar.DAY_OF_YEAR, 1);
        calendar.set(Calendar.HOUR_OF_DAY, 1);
        calendar.set(Calendar.MINUTE, 1);
        calendar.set(Calendar.SECOND, 1);
        calendar.set(Calendar.MILLISECOND, 0);

        // 使用逗号隔开
        SimpleDateFormat format=new SimpleDateFormat("yyyy,MM,dd");

        String strScript = String.format("%s >= DATE(%s)", fieldName, format.format(calendar.getTime()) );
        return strScript;
    }


}


2.源单中,日期字段绑定自定义比较符。(新建源单、目标单的步骤略过,请自行搜索其他文章

image.png


3.单据转换关系中,配置自定义比较符

(1)配置关联实体

image.png


(2)配置目标单按条件取值

image.png


条件为自定义比较符"今年"

image.png


取值公式是,在源单的“订单日期”的基础上日期增加1天:

image.png

上述取值公式用到了“日期增减”函数:

image.png

效果

image.png



image.png

赞 3