首页 » 技术分享 » U8c笔记

U8c笔记

 

目录

1新增页面

2新增页面单据号怎么配置?

3新建单据号时如果对象没有自己需要的,可以执行下面的sql进行增加

4如果打的补丁中包含uclient中的代码,就需要清除uclient缓存,这样才能重新加载

5页面提示

6页面赋值单据号和取消回退单据号

7按钮

8client端调用查询

9触发显示按钮

10页面赋值

11数据库操作

12自定义项的启用

13u8c生成实体时遇到问题,实体字段写错了,请重启项目后再次生成实体

14 遇到错误

15表体底部合计

16卡片获取选取的行号

17获取登录时间的三种方法或者更多??

18生成自定义id

19后端获取前端登录人等信息


1新增页面

首先使用PowerDesigner创建表,生成pdm文件,(推荐使用右侧的搜索框,比自己找快多了但是需要记住节点名字)在集团账号下二次开发平台→系统管理工具→数据字典管理  导入数据字典,然后系统维护→功能注册,这样就能多一个新的节点,然后分配权限,可能看不到节点(新建节点在进行别的操作时看不到,在自定义菜单恢复一下默认结构),然后在二次开发平台→模板管理→单据模板初始化,在右侧单据模板类型写一个你想要的名字,然后在左侧过滤导入进来的表,(新增下拉框,数据类型选择下拉框,然后类型设置新增即可)

然后保存后在二次开发平台→系统管理工具→功能节点默认模板设置配置模板(自己本地失败次数很多,但是客户测试u8c一次都没有,注意下图红框,尽量不要写ZZ容易和系统内部冲突)

2新增页面单据号怎么配置?

新建单据增加单据号在单据号管理看不到节点,需要去单据类型管理去注册一个

审批流如下配置

 

 

3新建单据号时如果对象没有自己需要的,可以执行下面的sql进行增加

INSERT INTO pub_billcode_obj(DR, METADATAACCESSPATH, OBJNAME, OBJREF, OBJTABLENGTH, PK_BILLCODEOBJ, PK_BILLTYPECODE, RESID, TS) VALUES(0, NULL, '暂估应付标志', '暂估应付标志', NULL, 'smcustomer0000000006', 'customer', '暂估应付标志', '2018-08-07 16:08:36') GO

第六个是pk,不要跟别的重复,第七个是单据类型管理的里的类型代码

4如果打的补丁中包含uclient中的代码,就需要清除uclient缓存,这样才能重新加载

5页面提示

//第一个是frameui,第二个是标题,第三个是显示内容
//弹出提示
MessageDialog.showHintDlg(ui, "更新编码", "更新编码成功");
//判断提示
int showYesNoDlg = MessageDialog.showYesNoDlg(ui, "提示","是否取消作废数据?");
if (showYesNoDlg != UIDialog.ID_YES) {
	return;
}
//页面左下角显示的提示
getFrameUI().showHintMessage("存在作废数据请检查");

6页面赋值单据号和取消回退单据号

IBillcodeRuleService iService=(IBillcodeRuleService)NCLocator.getInstance().lookup(IBillcodeRuleService.class.getName());
// 第一个是单据类型管理里的类型代码,第二个是公司,第三个不用管为null就行,第四个是对象标识管理
// String strCorp =this.getClientEnvironment().getCorporation().getPk_corp();
String strCorp = ClientEnvironment.getInstance().getCorporation().getPrimaryKey();
UserVO user = ClientEnvironment.getInstance().getUser();
String vbillno = iService.getBillCode_RequiresNew("4008", strCorp, null, getObjVO());
getCardPanel().setHeadItem(OrDataHVO.PK_CORP, Global.getCorpPK());
getCardPanel().setHeadItem(OrDataHVO.VBILLNO, vbillno);


public ProductionOriginalDataMainPanel getCardPanel() {
    return (ProductionOriginalDataMainPanel) getMainPanel();
}


private BillCodeObjValueVO objBillCodeVO = null;

/**
* 对象标识管理
* 
* @return
*/
public BillCodeObjValueVO getObjVO() {
    if (this.objBillCodeVO == null) {
        this.objBillCodeVO = new BillCodeObjValueVO();
        // 第一个是对象标识管理的对象,第二个是对象编码(从前台登录用户获取的)
        this.objBillCodeVO.setAttributeValue("公司",ClientEnvironment.getInstance().getCorporation().getPrimaryKey());
    }
    return this.objBillCodeVO;
}

//以下是在ProductionOriginalDataMainPanel写的方法
/**
* 设置卡片状态头的某一字段的值
* 
* @param strKey
* @param Value
*/
public void setHeadItem(String strKey, String Value) {
    getBillCardPanel().setHeadItem(strKey, Value);
}

/**
* 获取卡片状态头的某一字段的值
* 
* @param strKey
* @param Value
*/
public BillItem getHeadItem(String strKey) {
    return getBillCardPanel().getHeadItem(strKey);
}


---------------------------------------------------------------------------------------
//取消回退单据号


private IBillcodeRuleService autoCodeService;
	private IBillcodeRuleQryService autoCodeQry;

	public ButtonCancelAction(FrameUI frameUI) {
		super(frameUI);
	}

	@Override
	public void execute() throws Exception {
		returnvbillno();
		super.execute();
		
	}

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

	/**
	 * 在自动编码的情况下,新增取消时,退回已经申请的客商编码
	 */
	private void returnvbillno() {
		BillItem headItem = getCardPanel().getHeadItem("vbillno");
		String vbillno = headItem.getValueObject()==null?null:headItem.getValueObject().toString();
		String pk_or_data_h=getCardPanel().getHeadItem("pk_or_data_h")==null?null:getCardPanel().getHeadItem("pk_or_data_h").getValueObject().toString();
		if(StringUtils.isBlank(pk_or_data_h)){
			BillCodeObjValueVO valueVO = new BillCodeObjValueVO();
			valueVO.setAttributeValue("公司", ClientEnvironment.getInstance()
					.getCorporation().getPrimaryKey());
			String m_loginPkCorp = ClientEnvironment.getInstance().getCorporation()
					.getPk_corp();
			// 公司主键,单据类型,单据编码,新增时对象管理的标识
			try {
				getAutoCodeService().returnBillCodeOnDelete(m_loginPkCorp, "4008",
						vbillno, valueVO);
			} catch (BusinessException e) {
				Logger.error(e.getMessage(), e);
			}
		}
		
	}

	public ProductionOriginalDataMainPanel getCardPanel() {
		return (ProductionOriginalDataMainPanel) getMainPanel();
	}
	

	public IBillcodeRuleService getAutoCodeService() {
		if (this.autoCodeService == null) {
			this.autoCodeService = ((IBillcodeRuleService) NCLocator
					.getInstance().lookup(IBillcodeRuleService.class.getName()));
		}
		return this.autoCodeService;
	}

	public IBillcodeRuleQryService getAutoCodeQry() {
		if (this.autoCodeQry == null) {
			this.autoCodeQry = ((IBillcodeRuleQryService) NCLocator
					.getInstance().lookup(IBillcodeRuleQryService.class));
		}
		return this.autoCodeQry;
	}

7按钮

ButtonReg按钮注册,ButtonStateReg按钮显示规则,xxxui按钮显示,绑定事件,按钮排序

8client端调用查询

//NCLocator.getInstance().lookup()这个方式可以调用所有的接口,而且不区分前后端
IUAPQueryBS iIVOPersistence = (IUAPQueryBS) NCLocator.getInstance().lookup(IUAPQueryBS.class.getName());
String sql  = "";
Map map = (Map) iIVOPersistence.executeQuery(sql, new MapProcessor());

9触发显示按钮

getFrameUI().getBtnManager().setButtonEnabled( new int[]{ButtonReg.UPDATECODE}, true, true);

10页面赋值

//子表赋值start
((MainBillMgrPanel) getMainPanel()).getBillModel("pd_or_data_b").setBodyDataVO(body);
//子表赋值end


//子表行操作start
int selectedRow = ((ProductionOriginalDataMainPanel) getMainPanel()).getSelectedRow();
OrDataBVO body=(OrDataBVO)getCardPanel().getBillModel("pd_or_data_b").getBodyValueRowVO(selectedRow, OrDataBVO.class.getName());
body.setTmrkzjb_zf("1");
getCardPanel().getBillModel("pd_or_data_b").setBodyRowVO(body, selectedRow);

/**
* 
* @param tableCode
* @return
*/
public BillModel getBillModel(String tableCode) {
    return getBillCardPanel().getBillModel(tableCode);
}


public ProductionOriginalDataMainPanel getCardPanel() {
    return (ProductionOriginalDataMainPanel) getMainPanel();
}
//子表行操作end

//获取页面子表数据start
public FrameUI ui;

public ButtonUpdatecodeAction(FrameUI frameUI1) {
    super(frameUI1);
    this.ui = frameUI1;
}
HRAggVO data = (HRAggVO) ui.getMainPanel().getData();
OrDataBVO[] childrenVO = (OrDataBVO[]) data.getChildrenVO();
//获取页面子表数据end
//主表赋值参照单据号

11数据库操作

//不需要返回值的方法
private IPersistenceDAO persistenceDao = new PersistenceDAO();
String sql = "";
persistenceDao.executeNoResultSQL("U8cloud", sql);


//根据实体返回数据的方法
String sql = " 1=1 ";
sql += " and pk_selfset" + "='" + selfsetvo.getPk_selfset() + "'";
//此方法实体必须是supervo的子类,否则会报错
List<SelfSetColumnVO> list = (List) iIVOPersistence.retrieveByClause(SelfSetColumnVO.class, sql);
//有返回值的方法
IUAPQueryBS iIVOPersistence = (IUAPQueryBS) NCLocator.getInstance().lookup(IUAPQueryBS.class.getName());
String sql = "";
Map map = (Map) iIVOPersistence.executeQuery(sql, new MapProcessor());
//ArrayProcessor 数组处理器,返回一个对象数组,结果集中只有一行数据,其中结果集中每一列对应数组的一个元素。
//ArrayListProcessor 数组集合处理器,返回一个ArrayList集合,集合中的每一个元素是一个数组,每个数组对应结果集中的一行数据,其中结果集中每一列对应数组的一个元素。
//MapProcessor HashMap处理器,返回一个HashMap, 结果集中只有一行数据,其中结果集合中每一列的列名和列值对应HashMap的一个关键字和相应的值。
//MapListProcessor HashMap集合处理器,返回一个ArrayList集合,集合中的每一个元素是一个HashMap,每个HashMap对应结果集中的一行数据, 其中结果集合中每一列的列名和列值对应HashMap的一个关键字和相应的值。
//BeanProcessor 值对象处理器,返回一个JavaBean,结果集中只有一行数据,该处理器能自动把结果集中的值按列的名称映射到javaBean中,如:结果集中有名称为”name”的字段,那么只要该java对象中有getName()方法就能把结果集合中”name”对应的值映射到对象中。
//BeanListProcessor值对象集合处理器,返回一个ArrayList集合,集合中的每一个元素是一个javaBean,每个javaBean对应结果集合中一行数据,其中每个JavaBean中的数据映射关系和BeanProcess同理。还有ColumnProcessor ,BeanMappingListProcessor ,BeanMappingProcessor几个类
// 前台数据访问
//使用IVOPersistence服务组件,进行增删改操作;
//使用IUAPQueryBS服务组件,进行查询操作。
//后台数据访问 
//使用BaseDAO工具类,进行单表对象的CRUD操作;
//使用PersistenceManager,进行单表对象的CRUD操作。

12自定义项的启用

基本档案→定义自定义项→引用自定义项

13u8c生成实体时遇到问题,实体字段写错了,请重启项目后再次生成实体

字段写错了,在数据字典修改了,生成工具并没有修改,重启项目后才被修改,因为启动项目时读取了数据库的数据字段,然后缓存下来了,所以即使是启动后数据库修改了,但是还是以前的数据字段。(一定要保证数据库的字段类型能在pdm字段类型中找到,varchar和nvarchar,坑很大,字段类型找不到的生成vo的时候就会跳过!!!)

14 遇到错误

java.lang.RuntimeException: Failed to set property: tmrkzjb_sdzt on bean: nc.vo.OrDataHVO with value:0
    at nc.vo.pub.BeanHelper.setProperty(BeanHelper.java:190)
    at nc.vo.pub.SuperVO.setAttributeValue(SuperVO.java:217)
    at nc.ui.pub.bill.BillModel.getValueChangeVector(BillModel.java:2276)
    at nc.ui.pub.bill.BillModel.getBodyValueChangeVOs(BillModel.java:1597)
    at nc.ui.pub.bill.BillData.getBodyValueChangeVOs(BillData.java:1228)
    ...
    
Caused by: java.lang.IllegalArgumentException: argument type mismatch
    at sun.reflect.NativeMethodAccessorImpl.invoke0(Native Method)
    at sun.reflect.NativeMethodAccessorImpl.invoke(NativeMethodAccessorImpl.java:39)
    at sun.reflect.DelegatingMethodAccessorImpl.invoke(DelegatingMethodAccessorImpl.java:25)
    at java.lang.reflect.Method.invoke(Method.java:592)
    at nc.vo.pub.BeanHelper.setProperty(BeanHelper.java:185)
    ... 27 more

第一种可能是字段类型写的不对,

第二个下拉框,自己写的时候不要选择返回索引,也会报这个错

15表体底部合计

@Override
protected void initialize() {
    super.initialize();
    // 列表卡片表体增加合计栏
    MainBillMgrPanel mainMgrPanel = (MainBillMgrPanel) getMainPanel();
    MainBillListPanel mainBillListPanel = mainMgrPanel.getMainBillListPanel();
    mainBillListPanel.getBillListPanel().getChildListPanel().setTotalRowShow(true);
    MainBillCardPanel mainBillCardPanel = mainMgrPanel.getMainBillCardPanel();
    mainBillCardPanel.getBillCardPanel().getBodyPanel().setTotalRowShow(true);
    //列表表头合计
    MainBillMgrPanel mainMgrPanel = (MainBillMgrPanel) getMainPanel();
    MainBillListPanel mainBillListPanel = mainMgrPanel.getMainBillListPanel();
    mainBillListPanel.getBillListPanel().getParentListPanel().setTotalRowShow(true);
    //表头多选	
    mainBillListPanel.setHeadMultiSelected(true);

}

16卡片获取选取的行号

MainBillMgrPanel mainMgrPanel = (MainBillMgrPanel) getMainPanel();

MainBillCardPanel mainBillCardPanel = mainMgrPanel.getMainBillCardPanel();

BillCardPanel billCardPanel = mainBillCardPanel.getBillCardPanel();

int[] selectedRows = billCardPanel.getBillTable().getSelectedRows();

17获取登录时间的三种方法或者更多??

UFDate businessDate = ClientEnvironment.getInstance().getBusinessDate();
UFDate date = ClientEnvironment.getInstance().getDate();
UFDate logDate = Global.getLogDate();

18生成自定义id

SELECT 'insert into sm_userandclerk values (0,''0001'','''+bd_psnbasdoc.pk_psnbasdoc+'''
,''00011210AABB'+(select RIGHT(100000000 + CONVERT(bigint, ABS(CHECKSUM(NEWID()))), 8))+''',''2019-06-25 16:40:54'','''+sm_user.cuserid+''')
go'
from bd_psnbasdoc ,sm_user where bd_psnbasdoc.mobile=sm_user.user_code and bd_psnbasdoc.pk_psnbasdoc not
in (select pk_psndoc from sm_userandclerk)

19后端获取前端登录人等信息

InvocationInfoProxy.getInstance()

 

转载自原文链接, 如需删除请联系管理员。

原文链接:U8c笔记,转载请注明来源!

0