U8C单据相关知识点总结

U8C单据相关知识点总结

增加单据按钮

继承AddAction类重写execute()方法:点击该按钮的时候会执行相关动作

@Override
	public void execute() throws Exception {
		super.execute();		
		TrUI ui = (TrUI) this.getFrameUI();	
		//设置当前单据的值
		ui.getBillCardPanel().setHeadItem(SpectacleFramesVO.PK_CORP, PubEnv.getPk_corp()); // 默认当前公司
		//点击增加按钮的时候表体增加一行数据
		//setBodyValueAt(单元格显示的内容,表体第几行,表体行的单元格字段)
		ui.getBillCardPanel().setBodyValueAt("镜框颜色", 0, LensVO.LENS_COLOR);
		//表体增行
		ui.getBillCardPanel().getBillModel().addLine();
	}

前台校验

@Override
	public boolean validate() throws ValidationException {
		return super.validate();
	}

插入一行数据

//row为在表体第几行下面插入一行
ui.getBillCardPanel().getBillModel().insertRow(row);

判断是否为卡片

ui.getBillCardPanel().isShowing()

弹窗 (在哪个UI进行弹窗,弹窗标题,弹窗内容),会阻止程序继续进行

MessageDialog.showErrorDlg(frameUI, "错误", "不能在首行插入行");

显示在单据UI左下角

getFrameUI().showHintMessage("确认完毕");

卡片状态下获取选中的表体行

int row = ui.getBillCardPanel().getBillTable().getSelectedRow();

获取当前单据状态

ui.getDataModel().getState().getCurrentState()

获取卡片状态下表头的具体字段的值

//ForecastMainVO.VOPERATORID   =   表头具体字段名
ui.getBillCardPanel().getHeadItem(ForecastMainVO.VOPERATORID)

获取当前单据的值

  1. 第一种,从主面板获取

AgVatMainPanel mainMgrPanel = (AgVatMainPanel) (ui.getMainPanel());// 获取主面板
//必须用HRAggVO ,不能用AggForecastMainVO,否则造成系统卡死
HRAggVO agg = (HRAggVO)getMainPanel().getData();//聚合VO
ForecastMainVO cta=(ForecastMainVO)agg.getParentVO();//获取表头的VO

获取卡片状态单据的表体具体行的数据

int[] row = mainMgrPanel.getBillCardPanel().getBillTable()
					.getSelectedRows();//卡片状态,当前表体有几行
ForecastSubVO namesa = (ForecastSubVO) mainMgrPanel
						.getBillCardPanel()
						.getBillModel()
						.getBodyValueRowVO(row[j],   //第几行
								ForecastSubVO.class.getName());	//表体VO
							

2.从卡片面板获取卡片数据

//获取表头数据 -表头绑定的vo类的全路径名
SpectacleFramesVO headerValueVO = (SpectacleFramesVO)frameUI.getBillCardPanel().getBillData().getHeaderValueVO("u8c.vo.so.SpectacleFramesVO");
//获取表体数据  -表体绑定的vo类表名和全路径名
frameUI.getBillCardPanel().getBillData().getBodyValueVOs(tableCode, bodyVOName)
		
		

列表获取选中行

// 获取选中行
int selectedRow = ((MyMainPanel) getMainPanel()).getSelectedRow();
//获取选中行的聚合VO
HRAggVO [] s = (HRAggVO[]) mainMgrPanel.getMainBillListPanel().getData();
//获取表头VO
TmApplyMainVO cta = (TmApplyMainVO) s[selectedRow].getParentVO();
//获取表体VO
TmApplySubVO[] bt = (TmApplySubVO[])s[selectedRow].getChildrenVO();

设置列表面板数据

//列表面板-->  第一个表头选择表体是不是也跟着被选中,第二个参数是否开启一键全选,一键取消全选
BillListPanel listpanelon = new BillListPanel(true,true);
//设置列表的表头数据
listpanelon.getHeadBillModel().setBodyDataVO((SaleorderHVO[]) list.toArray(new SaleorderHVO[0]));
//设置列表的表体数据
listpanelon.getBodyBillModel().setBodyDataVO((SaleorderBVO[]) vo.toArray(new SaleorderBVO[0]));

获取已有的列表面板

private Component getListPanelOn() throws Exception {
		// 加载模板
		// listpanelon.loadTemplet("104002", "", ClientEnvironment.getInstance()
		// .getUser().getPrimaryKey(), ClientEnvironment.getInstance()
		// .getCorporation().getPrimaryKey());
		IBillTemplateQry templetService = NCLocator.getInstance().lookup(
				IBillTemplateQry.class);
		IUAPQueryBS bsDao = (IUAPQueryBS) NCLocator
				.getInstance().lookup(
						IUAPQueryBS.class.getName());
		//根据节点编码查询单据模板主键
//		String sql = "select pk_billtemplet from pub_billtemplet where nodecode ='10229002'";
//		String TemplateId = (String) bsDao.executeQuery(sql,
//					new ColumnProcessor());
		listpanelon.setListData(new BillListData(templetService
				.findTempletData("so000000000saleorder")));//so000000000saleorder为单据模板主键
}

设置列表面板某一字段可编辑同样适用于卡片

//参数为该字段对应的字段名
BillItem headItem = listpanelon.getHeadItem("ntotalnum");
headItem.setEnabled(true);
//获取该字段对应的输入框面板
nc.ui.pub.beans.UIRefPane component = (nc.ui.pub.beans.UIRefPane)headItem.getComponent();
//获取面板上的输入框
UITextField uiTextField = component.getUITextField();

获取列表面板选中的表头数据

ForecastHzbVO[] vos = (ForecastHzbVO[]) listpanelon.getHeadBillModel()
				.getBodySelectedVOs(ForecastHzbVO.class.getName());

返回到列表面板

			AgVatUI ui = (AgVatUI) this.getFrameUI();
			AgVatMainPanel mainPanel = (AgVatMainPanel) (ui.getMainPanel());// 获取主面板
			//清除数据
			mainPanel.clearView();
			//展示页面 -->列表页面
			mainPanel.show("LIST_PANEL");
			mainPanel.setMainPanelEnabled(false);

			int iSelectRowIndex = mainPanel.getMainBillListPanel()
					.getHeadSelectedRow();
			if (iSelectRowIndex != -1) {
				mainPanel.getMainBillListPanel().setHeadSelectedRow(-1, -1);
				mainPanel.getMainBillListPanel().setHeadSelectedRow(
						iSelectRowIndex, iSelectRowIndex);
			}
		/*
		设置回滚状态
		getDataModel().setRollBackState(getDataModel().getCurrentState());
		**/
		//  设置单据状态  8是STATE_LINE_SELECTED    0是STATE_INIT
		getDataModel().setCurrentState(iSelectRowIndex != -1 ? 8 : 0);
		super.execute();

设置主面板可见不可见

ui. getMainPanel().setMainPanelEnabled(true);//可见

获取登录信息

 String userID = InvocationInfoProxy.getInstance().getUserId();//获取当前系统登录用户
 String groupId =  InvocationInfoProxy.getInstance().getGroupId()//获取当前系统登录组织
 String corpId = PubEnv.getPk_corp()//获取当前系统登陆公司
 

发送消息

CommonMessageVO msgVO=new CommonMessageVO(); 
				/** 消息内容 */
msgVO.setMessageContent("销售["+ClientEnvironment.getInstance().getUser()
		.getUserName()+"]已提交forecast单据"+cta.getCcode()+",待PM审核");
/** 接收人pk   ->代码在下面 */
UserNameObject[] cno=ipti.queryMsgUsers("'602'");//审核角色
msgVO.setReceiver(cno);
/** 发送人PK   sm_user.cuserid */			
msgVO.setSender(ClientEnvironment.getInstance().getUser().getPrimaryKey());
/** 发送时间 */
msgVO.setSendDataTime(PubEnv.getServerTime());		
/** 标题 */
msgVO.setTitle("销售["+ClientEnvironment.getInstance().getUser()
		.getUserName()+"]已提交forecast单据"+cta.getCcode()+",待PM审核");
/**单据类型*/
msgVO.setBilltype("FORE");
/**消息优先级*/	
msgVO.setPriority( MessagePriority.PRI_NORMAL);
IPFMessage ipf = (IPFMessage) NCLocator
		.getInstance()
		.lookup(IPFMessage.class.getName());
ipf.insertCommonMsg(msgVO);

接收人角色查询----根据角色code查询具体人员

public UserNameObject[] queryMsgUsers(String role_code) throws BusinessException {
		try {
			BaseDAO dao = new BaseDAO();
			String sql = "select distinct sm_user.cuserid pk, sm_user.user_code code, sm_user.user_name name, sm_user.pk_corp pkcorp "; 
			sql =sql+" from sm_user inner join sm_user_role on sm_user.cuserid = sm_user_role.cuserid ";
			sql =sql+" inner join  sm_role on sm_role.pk_role=sm_user_role.pk_role where  role_code in ("+role_code+")";
			UserNameObject[] itemVOs =new UserNameObject[]{};
			ArrayList<UserNameObject> itemvos = new ArrayList<UserNameObject>();
			UserNameObject bvo = null;
			List list = (List)dao.executeQuery(sql, new ArrayListProcessor());
			for (int i = 0; i < list.size(); i++) {
				Object[] arry = (Object[])list.get(i);
				bvo=new UserNameObject(arry[2].toString());
				bvo.setUserPK(arry[0].toString());
				bvo.setUserCode(arry[1].toString());
				bvo.setUserName(arry[2].toString());
				bvo.setPkcorp(arry[3].toString());
				itemvos.add(bvo);
			}
			return (UserNameObject[]) itemvos.toArray(new UserNameObject[0]);
			//return (UserNameObject[]) list.toArray(new UserNameObject[list.size()]);
		} catch (Exception e) {
			// TODO Auto-generated catch block
			e.printStackTrace();
			return null;
		}
	}

卡片状态下表体变颜色

int r = BillUtil.getBillItemIndex(ui.getBillCardPanel().getHeadItems(), SpectacleFramesVO.FRAMES_COLOR);
 //变成什么颜色   ,  selectedRow->选中行   ,  选中行的第几个字段
ui.getBillCardPanel().getBillModel().setBackground(Color.red, selectedRow, 1);

参考链接
表体变色

取其精华,去其糟粕

标题u8c中的upm定义

<?xml version="1.0" encoding="UTF-8"?>
<!---->
<module name="hrlb">
  <public>
    <component priority="0" singleton="true" remote="true" tx="CMT" supportAlias="true">
      <interface>u8c.itf.hr.lb.INewPayTotalInfo</interface>
      <implementation>u8c.impl.lb.lb_011.NewPayTotalInfoImpl</implementation>
    </component>
  </public>
</module>


参数介绍

属性名称属性作用
name组件的名称,如果没配,默认为第一个接口的名称,如果没有接口,为实现类的名称
singleton组件级别是否为单例,默认为true
remote组件是否未远程组件,默认为false,远程组件必须要有接口
tx事务属性, NONE表示没有事务,CMT表示容器管理的事务,BMT表示Bean管理的事务
cluster标志组件的集群属性,默认为NORMAL,表示不是集群组件,SP表示为运行于主节点,其它表示与某个服务运行在同一个节点
tx事务属性, NONE表示没有事务,CMT表示容器管理的事务,BMT表示Bean管理的事务
cluster标志组件的集群属性,默认为NORMAL,表示不是集群组件,SP表示为运行于主节点,其它表示与某个服务运行在同一个节点
supportAlias默认为false,表示是否能够按照接口进行查找组件
priority组件的属性,按照JavaBean的规范
accessProtected接口在系统中是否受保护,即是否校验token。需要改底层代码,请设置accessProtected=“false”
public可以被NCLocator查找到,支持所有component组件属性
private私有组件只能被当前组件所部署的模块通过ComponentContext查找到,私有组件没有remote、tx属性,其余component组件属性都支持
singleton设置为true的时候有并发风险,单例模式

生成主键和单据号

最简单的办法,调用用友的类
------------------------------------------------
import nc.jdbc.framework.generator.SequenceGenerator;

IdGenerator idGenerator = new SequenceGenerator();
System.out.println(idGenerator.generate());

算法分析:
--------------------------------------------------
PK=4(集团编码)+2(数据源ID)+14(流水号)

4(集团编码)=select groupno from org_group where code='集团代码'
2(数据源ID)=自己运行sysConfig.bat,看标识ID
14(流水号)=select idnumber from PUB_OID where pk_corp='集团编码',注意这个idnumber是基础流水号
基础流水号+1,通过一些转换,就生成了流水号,主要是限制每位流水号字符在0~9|A-Z之间.
//生成单据号			
IBillcodeManage iBillcodeManage = (IBillcodeManage)NCLocator
					.getInstance().lookup(IBillcodeManage.class.getName());
//(单据类型,pk_group,pk_org,单据VO)
String standardCode = iBillcodeManage
					.getBillCode_RequiresNew("6113", pk_fa, pk_fa, new StapplyVO());
  • 0
    点赞
  • 1
    收藏
    觉得还不错? 一键收藏
  • 1
    评论
u8 单据列表是指在U8 软件中,用于管理和展示各类单据的一个功能模块。扩展单据列表则是对该功能模块进行进一步的扩展和定制,以满足用户特定需求。 首先,扩展单据列表可以通过添加新的字段来增加显示信息。用户可以根据自己的需要,在列表中添加自定义字段,如客户名称、单据类型、预计交货时间等,以便更好地查看和筛选单据。这样一来,用户在浏览单据列表时,可以更清晰地了解每个单据的详细信息,也可以方便地根据特定字段进行排序和搜索。 其次,扩展单据列表还可以提供更多的筛选条件。例如,用户可以根据日期范围、单据状态、制单人等条件进行筛选,以便快速找到所需的单据。这种扩展功能可以帮助用户更高效地进行单据管理,节省时间和精力。 此外,扩展单据列表还可以引入一些统计和分析功能。用户可以根据某些关键指标或者自定义指标,对单据进行统计和分析。例如,用户可以查看某一时间段内的销售额统计、采购金额排名等信息,以便更好地了解和评估业务状况。 最后,扩展单据列表还可以提供更多的操作和导出选项。例如,用户可以在列表中进行快速编辑、删除、复制等操作,以便对单据进行必要的修改和处理。同时,用户还可以将单据列表导出为Excel 或者PDF 等格式文件,方便进行打印、归档和分享。 总之,扩展单据列表是为了进一步满足用户的需求,提供更多个性化和定制化的功能。通过添加字段、增加筛选条件、引入统计分析和提供更多操作选项,用户可以更方便地管理和处理各类单据,提高工作效率。

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

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

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

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

余额充值