用友YonBIP 参照开发

1、后端代码

介绍

参照类型不同继承不同Action

树型参照:DefaultTreeRefAction
表型参照:DefaultGridRefAction
树表参照:DefaultTreeRefAction,DefaultGridRefAction。(两次请求,一次请求走树形参照action,一次请求走表形参照action。)

代码示例:

表型参照:

注:我这里sql是作为表使用,所以使用了括号进行拼接

package nccloud.grid.ct.contructionpermit;

import nccloud.framework.web.processor.refgrid.RefQueryInfo;
import nccloud.framework.web.ui.meta.RefMeta;
import nccloud.web.refer.DefaultGridRefAction;

public class ContructionpermitXsHthTreeGrid extends DefaultGridRefAction{
	
	
	public ContructionpermitXsHthTreeGrid() {
		// TODO Auto-generated constructor stub
		super();
	}

	@Override
	public RefMeta getRefMeta(RefQueryInfo arg0) {
		// TODO Auto-generated method stub
		
		RefMeta refmeta = new RefMeta();
		//参照
		refmeta.setCodeField("code");//编码
		refmeta.setNameField("name");//名称
		refmeta.setPkField("id");//主键
		
		refmeta.setTableName(getExtableSql());//表名
		
		//查询的额外字段
		//合同号,合同名称,行号,物料编码,物料名称
		refmeta.setExtraFields(new String[] {"code","name","crowno","wlcode","wlname"});
		
		//参照是否需要多语
		refmeta.setMutilLangNameRef(false);
		
		return refmeta;
	}
	
	
	private String getExtableSql() {
		StringBuffer query = new StringBuffer();
		query.append("( ");
		
		query.append("select b.pk_ct_sale_b id,a.vbillcode code,a.ctname     name,b.crowno,c.code wlcode,c.name wlname \n");
		query.append("from ct_sale_b b \n");
		query.append("inner join ct_sale a on b.pk_ct_sale = a.pk_ct_sale \n");
		query.append("left join bd_material c on c.pk_material = b.pk_material \n");
		query.append("where b.dr = 0 and a.dr = 0 and c.dr = 0");

		
		query.append(" )");

		return query.toString();
	}

}

树形参照:

package nccloud.grid.ct.contructionpermit;

import java.util.Objects;

import nccloud.framework.web.container.SessionContext;
import nccloud.framework.web.processor.refgrid.RefQueryInfo;
import nccloud.framework.web.ui.meta.RefMeta;
import nccloud.framework.web.ui.meta.TreeRefMeta;
import nccloud.web.refer.DefaultTreeRefAction;

public class ProjectdeptTreeRefGrid extends DefaultTreeRefAction{

	@Override
	public TreeRefMeta getRefMeta(RefQueryInfo arg0) {
		
		//获取组织
		String pk_org = arg0.getQueryCondition().get("pk_org");
		
		TreeRefMeta meta = new TreeRefMeta();
		
		//参照
		meta.setCodeField("code");//编码
		meta.setNameField("name");//名称
		meta.setPkField("id");//主键
		meta.setPidField("pk_fatherorg");//父节点主键
		
		meta.setTableName(getExtableSql(pk_org));//表名
		
		//查询的额外字段
		//部门编码,部门名称,所属组织
		meta.setExtraFields(new String[] {"code","name","expid"});
		
		//参照是否需要多语
		meta.setMutilLangNameRef(false);
		
		return meta;
	}

	private String getExtableSql(String pk_org) {
		
		//获取集团pk
		String pk_group = SessionContext.getInstance().getClientInfo().getPk_group();//前端
		
		StringBuffer query = new StringBuffer();
		query.append("( ");
		
		query.append("SELECT case when dept.pk_fatherorg = '~' or dept.pk_fatherorg is null then dept.pk_dept \n");
		query.append("else v.pk_vid end pk_fatherorg, \n");
		query.append("dept.code, dept.name, dept.pk_vid id, dept.pk_org expid \n");
		query.append("FROM org_dept_v dept \n");
		query.append("LEFT JOIN ( \n");
		query.append("  SELECT pk_vid,pk_dept dept FROM org_dept_v \n");
		query.append("  WHERE pk_group = '"+pk_group+"' \n");
		
		if(!Objects.equals(pk_group, pk_org) && pk_org != null) {
			query.append(" and pk_org = '"+pk_org+"' \n");
		}
		
		query.append("  AND enablestate = 2 \n");
		query.append("  ) v ON v.dept = dept.pk_fatherorg \n");
		query.append("WHERE dept.pk_group = '"+pk_group+"' \n");
		query.append("AND dept.vstartdate = NVL ( \n");
		query.append("  (SELECT max (a.vstartdate) vstartdate \n");
		query.append("  FROM org_dept_v a \n");
		query.append("  WHERE vstartdate <= TO_CHAR(CURRENT_DATE, 'YYYY-MM-DD') || ' 23:59:59' \n");
		query.append("  AND a.pk_dept = dept.pk_dept ), \n");
		query.append("  (SELECT min (a.vstartdate) vstartdate \n");
		query.append("  FROM org_dept_v a \n");
		query.append("  WHERE vstartdate > TO_CHAR(CURRENT_DATE, 'YYYY-MM-DD') || ' 23:59:59' \n");
		query.append("  AND a.pk_dept = dept.pk_dept ) ) \n");
		query.append("AND dept.enablestate = 2 ");

		
		if(!Objects.equals(pk_group, pk_org) && pk_org != null) {
			query.append(" and dept.pk_org = '"+pk_org+"' \n");
		}
		
		query.append(" )");

		return query.toString();
	}

	@Override
	public String getOrderSql(RefQueryInfo refQueryInfo, RefMeta refMeta) {
		// TODO Auto-generated method stub
		return " order by code ";
	}
	
	
	
}

鉴权文件

<?xml version="1.0" encoding="UTF-8" standalone="no" ?>
<actions>
	<action>
		<name>ct.contructionpermit.ContructionpermitXsHthTreeGrid</name>
		<lable>项目合同号参照</lable>
		<clazz>nccloud.grid.ct.contructionpermit.ContructionpermitXsHthTreeGrid</clazz>
	</action>
	<action>
		<name>ct.contructionpermit.ProjectdeptTreeRefGrid</name>
		<lable>项目参与部门</lable>
		<clazz>nccloud.grid.ct.contructionpermit.ProjectdeptTreeRefGrid</clazz>
	</action>
</actions>
<?xml version="1.0" encoding="UTF-8" standalone="no" ?>
<authorizes>
	<authorize>
		<appcode>*</appcode>
		<actions>
			<action>ct.contructionpermit.ContructionpermitXsHthTreeGrid</action>
		</actions>
		<actions>
			<action>ct.contructionpermit.ProjectdeptTreeRefGrid</action>
		</actions>
	</authorize>
</authorizes>

2、前端代码

文件名必须是index.js

refType: 'grid',//参照类型 grid/tree/gridtree

refName: '销售合同号',//参照名称的多语码

refcode: 'nccloud.grid.ct.contructionpermit.ContructionpermitXsHthTreeGrid',//后端绝对路径

placeholder: '销售合同号',//默认提示多语码

queryGridUrl: '/nccloud/ct/contructionpermit/ContructionpermitXsHthTreeGrid.do',//接口

isMultiSelectedEnabled: true,//是否多选 默认false单选

showHistory: false//鼠标聚焦显示历史数据 默认true显示

表型参照:

import { high } from 'nc-lightapp-front';

const { Refer } = high

export default function (props = {}) {
    var conf = {
        refType: 'grid',
        refName: '销售合同号',
        refcode: 'nccloud.grid.ct.contructionpermit.ContructionpermitXsHthTreeGrid',
        placeholder: '销售合同号',
        queryGridUrl: '/nccloud/ct/contructionpermit/ContructionpermitXsHthTreeGrid.do',
        isMultiSelectedEnabled: true,
        columnConfig: [
            {
                code: ["code","name","crowno","wlcode","wlname"],
                name: ["合同号","合同名","行号","物料编码","物料名称"]
            }
        ]
    }
    return <Refer {...Object.assign(conf,props)}/>
}

树形参照:

import { high } from 'nc-lightapp-front';

const { Refer } = high

export default function (props = {}) {
    var conf = {
        refType: 'tree',
        refName: '项目参与部门',
        refcode: 'nccloud.grid.ct.contructionpermit.ProjectdeptTreeRefGrid',
        placeholder: '项目参与部门',
        queryTreeUrl: '/nccloud/ct/contructionpermit/ProjectdeptTreeRefGrid.do',
        isMultiSelectedEnabled: true,
        columnConfig: [
            {
                code: ["code","name","expid"],
                name: ["编码","名称","组织"]
            }
        ]
    }
    return <Refer {...Object.assign(conf,props)}/>
}

3、数据库脚本

CODE:参照编码。不可重复

METADATANAMESPACE:模块名。

METADATATYPENAME:元数据实体名

PK_REFINFO:主键,不可重复。

REFCLASS:后端类全路径。

REFPATH:前端参照路径(不带 .js)

REFTYPE:参照类型。(1:表型参照)

RESID:多语id。(可设为空)

RESIDPATH:多语路径。(可设为空)

TS:时间戳。

INSERT INTO bd_refinfo(code, dr, isTreelazyLoad, isneedpara, isspecialref, layer, metadatanamespace, metadatatypename, mobilerefpath, modulename, name, para1, para2, para3, pk_country, pk_industry, pk_refinfo, refclass, refpath, refsystem, reftype, reserv1, reserv2, reserv3, resid, residpath, ts, wherepart, workflowConditionUseUnitOrg) VALUES ('xshth', 0, 'Y', null, null, null, 'ct', null, null, 'ct', '销售合同号', null, null, null, null, null, '0001Z01000000001BVAA', 'nccloud.grid.ct.contructionpermit.ContructionpermitXsHthTreeGrid', 'ct/reportapproval/contructionpermit/refer/index', null, 1, null, null, null, '~', '~', '2022-02-19 13:11:28', null, null);

4、参照过滤

例如:只能查看当前组织下的数据,需要获取当前组织的pk_org主键

新增时,需要过滤,找到对应卡片态源码里面的afterEvent方法

在里面看情况添加(我是原有的编辑后里面成功回写的setDeptPsnRefCond方法里面加的条件)

在setDeptPsnRefCond方法里面添加我的代码,我参照使用的是自定义项5,当前台触发def5就将pk_org传递到后端action里面

后端代码获取pk_org,作为参数拼接到sql里面,完整代码在上面

5、效果图

表型多选参照:

树形多选参照:

注:多选参照,后台保存会自动用“,”拼接

保存成功后,前端多选显示的问题,需要手动将节点的列表查询,卡片查询的actin进行修改

前端显示取的值是在display,需要手动改代码

常见问题:

开发环境显示正常,出补丁测试环境不显示

1、注意模板,配置

2、检查前端编译后的文件是否是index.js,默认编译是hash码,要在同级配置config.js关掉hash,再出补丁上测试

  • 19
    点赞
  • 8
    收藏
    觉得还不错? 一键收藏
  • 打赏
    打赏
  • 3
    评论
用友U8是一款集成化的企业管理软件系统,其中BOM(Bill Of Materials,物料清单)是其核心模块之一。通过用友U8 BOM开发,可以实现企业对物料清单的管理、控制和优化。 首先,用友U8 BOM开发可以帮助企业建立完整的物料清单库,包括原材料、半成品和成品等不同类型的物料。通过输入物料的相关信息,如名称、编码、规格、供应商等,系统可以自动进行分类和归档,为企业进行供应链管理提供便利。 其次,用友U8 BOM开发还可以实现物料清单的版本控制和更新。对于企业来说,物料清单的版本管理非常重要,可以避免因为版本混乱而引发的生错误或成本增加。通过U8 BOM开发,企业可以轻松地查看和管理不同版本的物料清单,确保生过程的准确性和一致性。 此外,用友U8 BOM开发还可以实现对物料清单的优化和升级。在实际生过程中,企业可能会遇到物料的质量问题、供应链延误等情况,通过U8 BOM开发,企业可以及时调整和优化物料清单,以提高生效率和质量,降低成本。 总之,用友U8 BOM开发为企业提供了一个强大的物料清单管理工具,可以帮助企业实现物料清单的分类、版本控制和优化等功能。通过应用该系统,企业可以实现物料管理的高效性和可追溯性,提升生效率和质量,进而增强企业的竞争力和可持续发展能力。

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论 3
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包

打赏作者

键可不冷

你的鼓励将是我创作的最大动力

¥1 ¥2 ¥4 ¥6 ¥10 ¥20
扫码支付:¥1
获取中
扫码支付

您的余额不足,请更换扫码支付或充值

打赏作者

实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值