目录
3新建单据号时如果对象没有自己需要的,可以执行下面的sql进行增加
4如果打的补丁中包含uclient中的代码,就需要清除uclient缓存,这样才能重新加载
13u8c生成实体时遇到问题,实体字段写错了,请重启项目后再次生成实体
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笔记,转载请注明来源!