UDN-企业互联网技术人气社区

板块导航

浏览  : 10888
回复  : 34

[RIA] #妈妈再也不用担心我的学习#NC6单据编辑事件图文教程

[复制链接]
朔风飞扬的头像 楼主
发表于 2015-9-23 16:27:33 | 显示全部楼层 |阅读模式
本帖最后由 朔风飞扬 于 2015-9-23 16:33 编辑


大家壕!

本期给大家带来了热乎的《NC6单据编辑事件图文教程》,作为教程,图文并茂那是必须的!


logo.jpg

话说上次有一位新晋攻城狮问到我,要做一个单据编辑事件需要怎么做?


     我一听,So easy~
     于是就有了今天这篇教程
     闲话不多说,本教程以单据子表某字段编辑后赋值到主表字段为例,给大家介绍单据编辑事件的前世今生~
     
     首先,找到NC工程中组件client端,如图:

图001.png

     展开client的结构,找到handler包,如图:

图002.png

     在handler包中,你需要一个触发字段编辑事件的handler类。
     如果已经有对应的handler类,就不用创建了。如果没有你需要的类,那还是得自己动手丰衣足食~
     比如本例中,眼尖的同学已经发现了handler包的AceBodyAfterEditHandler,没有错!就是它了!

图003.png

     它还有兄弟类AceBodyBeforeEditHandler,类名已经森森的粗麦了他们!
     显然它俩分别负责的是子表字段编辑后/编辑前的事件处理。。。

     既然找到了管事儿的Handler类,我们先看看它肚子里头都有什么东东!
     一番开肠破肚之后,我们轻轻一看:
图004.png

     嚯,好一片白茫茫大地真干净!看来还是得动手……
     然而程序猿不怕远征难!几分钟后我就把它修整完毕:

图005.png

ShowUpableBillForm是神马鬼!?其实它是我们单据的卡片编辑界面

图006.png

案例使用的单据是使用UAP-Studio单据生成向导生成的。

而向导会给我们指定它为默认的卡片编辑界面!

我们看看client包中XML界面装配文件里它的英姿~


  1. <bean id="billFormEditor" class="<font color="blue">nc.ui.pubapp.uif2app.view.ShowUpableBillForm</font>" init-method="initUI">
  2.         <property name="model" ref="manageAppModel"></property>
  3.         <property name="templateContainer" ref="templateContainer" />
  4.         <property name="showOrgPanel" value="true" />
  5.          <!-- 是否自动增行 -->
  6.         <property name="autoAddLine" value="false" />
  7.         <!-- 表体行操作按钮注册,与表体右键菜单保持一致 -->
  8.         <property name="bodyLineActions">
  9.             <list>
  10.                 <!-- 提供了一组默认实现 -->
  11.                 <bean class="nc.ui.pubapp.uif2app.actions.BodyAddLineAction" />
  12.                 <bean class="nc.ui.pubapp.uif2app.actions.BodyInsertLineAction" />
  13.                 <bean class="nc.ui.pubapp.uif2app.actions.BodyDelLineAction" />
  14.                 <bean class="nc.ui.pubapp.uif2app.actions.BodyCopyLineAction" />
  15.                 <bean class="nc.ui.pubapp.uif2app.actions.BodyLineEditAction" />         
  16.             </list>
  17.         </property>
  18.     </bean>
复制代码
     
     看到这里大家应该明白了:
     Handler类中ShowUpableBillForm的声明是为了将卡片编辑界面作为编辑动作的参数传递。
     且让我们来看看这位BillForm是怎么派上用场的:

  1.     /**
  2.          * 表体编辑后事件
  3.          */
  4.     @Override
  5.     public void handleAppEvent(CardBodyAfterEditEvent e) {
  6.         
  7.         if(e.getTableCode().equals("property_admin")){
  8.                 <font color="blue">Property_AdminEditHandler</font> bodyeditHandler = new Property_AdminEditHandler();
  9.                 bodyeditHandler.afterEdit(e, billform);
  10.         }
  11.         
  12.     }
复制代码

     仔细看完上图的同学是不是又有疑问了?
     莫急,原来在Handler类中,我们需要实例化字段编辑后事件的对应动作类,并在handlerAppEvent方法中把参数传递给这位Property_AdminEditHandler,就如上图所示的那样!

二、Property_AdminEditHandler
     这我们自己创建的编辑后处理类,它负责处理AceBodyAfterEditHandler分派的具体字段编辑后业务,我们可以先看看这位长工的长相:
图009.png

     有图有真相!这位小哥眉清目秀,一看就是专门干活的!只有afterEdit一个方法,显然术业有专攻!
     那么我们看看这位小哥是如何修炼的:

  1. public class Property_AdminEditHandler {

  2.         public void afterEdit(CardBodyAfterEditEvent e,ShowUpableBillForm  billform) {
  3.                 <font color="blue">//获取表体编辑字段</font>
  4.                 BillCardPanel cardPanel = e.getBillCardPanel();

  5.             <font color="blue">//获取当前编辑单据表体VO数据</font>
  6.             AggPropertyVO vo = (AggPropertyVO) billform.getValue();
  7.             PropertyadminVO[] propertyadminVOS = (PropertyadminVO[]) vo.getChildren(PropertyadminVO.class);
  8.             
  9.             //表体更新后,获取所有表体数据,按照条件筛选赋值到表头字段

  10.             UFDate date = null;
  11.             int row = 0;
  12.             for(int i = 0;i<propertyadminVOS.length;i++){
  13.                     if(i==0){
  14.                             date = propertyadminVOS[i].getRant_end_date();
  15.                     }
  16.                     UFDate endDate = propertyadminVOS[i].getRant_end_date();
  17.                     if(endDate!=null && endDate.compareTo(date) > 0){
  18.                             date = endDate;
  19.                             row = i;
  20.                     }
  21.             }
  22.            <font color="blue"> //将需要赋值到主表字段的值进行赋值</font>
  23.             String billing_id = propertyadminVOS[row].getBilling_id();
  24.             if(billing_id!=null){
  25.                     cardPanel.getHeadItem(ProtertyVO.BILLING_ID).setValue(billing_id);
  26.             }
  27.         }
  28. }
复制代码

     看来这位小哥的活计很简单,只需要获取子表编辑的字段值,再赋值到主表相应的字段,原来是位搬运工!不过大家千万不要小瞧这位搬运工,它兢兢业业的时候是介样的:
图011.png

     看来小哥还是靠得住,我们只需要把字段编辑后的业务处理逻辑放心的交给它就行啦!

三、上户口!
     我们得打开client包中的界面装配XML文件,看看这位小哥是不是黑户!

图012.png

     找到事件监听的部分,细细瞧来
图013.png

     原来人家是有户口本的

     PS:大家如果自己创建了Handler类的话,在这里需要注册一下,并且把参数也配置上!

     好了,到这里单据编辑后事件就完成了,大家只需要进行:
《重启中间件-清理客户端缓存-启动客户端》这三大剑招
     即可见到编辑后事件了!

     看来下回再有人问我:把编辑事件关进单据分几步?

     可以大声告诉他:分!三!步!


表体编辑后事件.rar

641.27 KB, 下载次数: 90

售价: 10 U币  [记录]

发表于 2015-9-23 16:46:30 来自手机 | 显示全部楼层
呦,不错噢
来自: 微社区
使用道具 举报

回复

发表于 2015-9-23 19:57:24 来自手机 | 显示全部楼层
有没有实施前端的案例教学
来自: 微社区
点评 ( 1 ) 收起 / 展开点评

朔风飞扬 2015年09月24日 11:40 详情 回复

不明白你说的是什么意思

使用道具 举报

回复

朔风飞扬的头像 楼主
发表于 2015-9-24 11:40:34 | 显示全部楼层
孙爱友 发表于 2015-9-23 19:57
有没有实施前端的案例教学

不明白你说的是什么意思
点评 ( 1 ) 收起 / 展开点评

hany7u 2015年11月03日 17:15 详情 回复

就是不用看代码,只在系统中进行配置的教程吧~~ 毕竟绝大多数的实施顾问是不会编写代码的~~~~

使用道具 举报

回复

发表于 2015-9-24 12:29:31 | 显示全部楼层
挺好的
使用道具 举报

回复

发表于 2015-10-9 08:10:07 | 显示全部楼层
讲的很清楚
使用道具 举报

回复

发表于 2015-10-10 11:34:50 | 显示全部楼层
好帖就不要沉了
使用道具 举报

回复

发表于 2015-11-3 17:15:36 | 显示全部楼层
朔风飞扬 发表于 2015-9-24 11:40
不明白你说的是什么意思

就是不用看代码,只在系统中进行配置的教程吧~~

毕竟绝大多数的实施顾问是不会编写代码的~~~~
点评 ( 1 ) 收起 / 展开点评

朔风飞扬 2015年11月04日 10:00 详情 回复

那样的话,可以使用单据模板,有字段编辑后公式,使用公式可以处理一些简单的数据

使用道具 举报

回复

朔风飞扬的头像 楼主
发表于 2015-11-4 10:00:13 | 显示全部楼层
hany7u 发表于 2015-11-3 17:15
就是不用看代码,只在系统中进行配置的教程吧~~

毕竟绝大多数的实施顾问是不会编写代码的~~~~ ...

那样的话,可以使用单据模板,有字段编辑后公式,使用公式可以处理一些简单的数据
点评 ( 1 ) 收起 / 展开点评

hany7u 2015年11月04日 11:57 详情 回复

实际上NC还有挺长的路要走~~ 如果把单据的事件前、事件后动作都在后台做好,前台只需要勾选想要的内容就行多好~~

使用道具 举报

回复

发表于 2015-11-4 11:57:57 | 显示全部楼层
朔风飞扬 发表于 2015-11-4 10:00
那样的话,可以使用单据模板,有字段编辑后公式,使用公式可以处理一些简单的数据 ...

实际上NC还有挺长的路要走~~
如果把单据的事件前、事件后动作都在后台做好,前台只需要勾选想要的内容就行多好~~
使用道具 举报

回复

您需要登录后才可以回帖 登录 | 立即注册

本版积分规则

关于我们
联系我们
  • 电话:010-86393388
  • 邮件:udn@yonyou.com
  • 地址:北京市海淀区北清路68号
移动客户端下载
关注我们
  • 微信公众号:yonyouudn
  • 扫描右侧二维码关注我们
  • 专注企业互联网的技术社区
版权所有:用友网络科技股份有限公司82041 京ICP备05007539号-11 京公网网备安1101080209224 Powered by Discuz!
快速回复 返回列表 返回顶部