ICode9

精准搜索请尝试: 精确搜索
首页 > 其他分享> 文章详细

NC客开入门与代码示例(导入开发)

2021-06-30 09:30:36  阅读:197  来源: 互联网

标签:拦截器 客开 示例 int NC 导入 vo 开发 new


一、导入功能实现逻辑

  NC63以上,留下了可以客户开发的重要节点,功能注册,在这个节点,你甚至可以开发一个节点,今天我们要讲的导入既是最基础的类的结合体,但是也是NC甲方公司最常用的功能,下面我们就先分析一下开发的代码逻辑。

  代码逻辑很简单,拦截器+excel相关实现类,这些都是系统内置的类,首先我来介绍下拦截器,与spring的拦截器很像,在xml加一个按钮监听,绑到功能注册,下面是一段示例

<?xml version="1.0" encoding="UTF-8"?>
<beans xmlns="http://www.springframework.org/schema/beans"
	xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance"
	xsi:schemaLocation="http://www.springframework.org/schema/beans
	http://www.springframework.org/schema/beans/spring-beans.xsd">
	
<bean class="nc.ui.pubapp.plugin.action.InsertActionInfo">
    <property name="actionContainer" ref="actionsOfList" />
    <property name="actionType" value="notedit"/>
    <property name="target" ref="printActionGroup"/>
    <property name="pos" value="after"/>
    <property name="action" ref="tidaiping"></property> <!-- 注册按钮的action-->
  </bean>  
  	<bean id="tidaiping" class="nc.ui.so.m5x.excel.action.ImportAction">
  	   
		<property name="model" ref="ManageAppModel" />
	</bean> 

  绑定了按钮之后我们就要进行导入代码的开发,我们先要调用Dlg类,弹出框给用户选择excel文件

JComponent parent = this.getModel().getContext().getEntranceUI();
ExcelImportDlg dlg = new ExcelImportDlg(parent);
 String path = dlg.getExcelPath(ExcelParameter.IMPORT);
		
		if (path == null) {
			return;
		}
		String filetype = "xls";

		File file = new File(path);
		if (file.getPath().endsWith("xlsx")) {
			filetype = "xlsx";
		}

  获取到excel的输入流,将数据放入sheet类

InputStream istream = new FileInputStream(file);

		Workbook wb = operator.read(istream, filetype);
		// 获取Excel两个页签
		Sheet sheet = wb.getSheetAt(0);
		Sheet sheet1 = wb.getSheetAt(1);
		List data = new ArrayList();
		List updata = new ArrayList();
		int lastrow = sheet.getLastRowNum();
		int lastrow1 = sheet1.getLastRowNum();

		boolean flag = false;
		for (int j = 4, m = 0; j <= lastrow; j++, m++) {
			BuyLargessHVO  hvo = new BuyLargessHVO();
			List insblist = new ArrayList();
			List upblist = new ArrayList();
			Row row = sheet.getRow(j);
			String cprioritycode  = null;
			
				if (flag == false) {
                //获取第一行
                String mcode = row.getCell(0)
									.getStringCellValue();
                //第一页为表头,第二页为表体,表头表体互相连接
                boolean flagno = false;
					
					List binslist = new ArrayList();
					List <BuyLargessBVO> bupdlist= new ArrayList();
					for (int i = 4; i <= lastrow1; i++) {
						// 设置订单表体信息
						BuyLargessBVO bvo = new BuyLargessBVO();
						
						Row row1 = sheet1.getRow(i);
						int bodyno=0;
						int headno =0;
						try{
							
							 bodyno = Integer.valueOf(row1.getCell(0).toString());
						}catch(Exception e){
							 bodyno =(int) row1.getCell(0).getNumericCellValue();
						}
						try{
							
							headno = Integer.valueOf(row.getCell(0).toString());
						}catch(Exception e){
							headno =(int) row.getCell(0).getNumericCellValue();
						}
						
						
						// 确定表头表体对应关系
						if (bodyno == headno) {
							flagno = true;
						} else {
							flagno = false;
						}
						// 如果表体序号和表头相同则将表体这行数据的Cbillid和表头的Cbillid同步 
                        //(建立对应关系)
						if (flagno == true) {
                           String dbegdate  = row1.getCell(1)
											.getStringCellValue();
                          }
             }

将表头表体放到vo中,NC开发基本上是把表头set进vo.parent,表体,set进vo.children,最后将vo放进List中,访问接口

BuyLargessVO vo = new BuyLargessVO();
					vo.setParentVO(hvo);
vo1.setChildrenVO((CircularlyAccessibleValueObject[]) binslist.toArray(new BuyLargessBVO[binslist.size()]));

接口是需要录日志,然后慢慢debug的,一般的接口都是maintain开头或者结尾的类,查找一下就行,按照他的要求封装vo后,传参调用就行,不行的话,只能自己写接口,然后增删改查。

  代码骨架大概就是这样了,类全是nc原生的,我就是把他们聚到一起,然后开发,需要的就是一点点经验就能开发了,需要的话我会在下一个文章发出来,基本上改一改model还有按钮位置就能用,有问题的可以反馈,包教包会。

标签:拦截器,客开,示例,int,NC,导入,vo,开发,new
来源: https://blog.csdn.net/sugerc/article/details/118353373

本站声明: 1. iCode9 技术分享网(下文简称本站)提供的所有内容,仅供技术学习、探讨和分享;
2. 关于本站的所有留言、评论、转载及引用,纯属内容发起人的个人观点,与本站观点和立场无关;
3. 关于本站的所有言论和文字,纯属内容发起人的个人观点,与本站观点和立场无关;
4. 本站文章均是网友提供,不完全保证技术分享内容的完整性、准确性、时效性、风险性和版权归属;如您发现该文章侵犯了您的权益,可联系我们第一时间进行删除;
5. 本站为非盈利性的个人网站,所有内容不会用来进行牟利,也不会利用任何形式的广告来间接获益,纯粹是为了广大技术爱好者提供技术内容和技术思想的分享性交流网站。

专注分享技术,共同学习,共同进步。侵权联系[81616952@qq.com]

Copyright (C)ICode9.com, All Rights Reserved.

ICode9版权所有