已阅读5页,还剩28页未读, 继续免费阅读
版权说明:本文档由用户提供并上传,收益归属内容提供方,若内容存在侵权,请进行举报或认领
文档简介
NC二次开发框架技术红皮书NC 5.0用友NC-总体设计部,平台技术部2020-01-111第 页目 录第一章前言1第二章身份认证21.概述22.实现说明22.1后台认证接口22.2前台预处理接口32.3前台认证结果信息接口32.4配置工作33系统登录身份认证相关包及类4第三章单点登录方案(V5.0)61概述62过程说明63URL格式74配置文件7第四章功能按钮及UI事件扩展方案(V5.011)81.概述82.菜单扩展按钮的相关类83.扩展类FuncMenuExtends94.配置文件funcMenuExtConfig.xml125.开发过程简介135.1编写FuncMenuExtends子类135.2在funcMenuExtConfig.xml文件中进行配置155.3运行程序156.附录:供应链产品按钮扩展17方案介绍17支持二次开发按钮扩展功能单据清单(已覆盖全部核心单据)18优劣势分析19第五章UI界面API的发布规范(V5.02后,仅参考)201.概述202.发布UI-API接口的步骤212.1定义接口212.2实现接口212.3填充配置文件222.4提供接口说明文档23第六章业务组件服务扩展开发(V5.0)241.概述242.财务产品单据组件关键方法扩展接口方案242.1收付产品方案242.2财务开发部改进24第七章UAP开发资源(V5.0)261.UI端环境变量262.发送邮件273.发送待办消息28第 30 页第一章 前言NC作为一个平台化的ERP产品,在提供完整的系统管理和应用功能同时,为满足本地化、行业化甚至是企业化的个性应用,设计了一个开放的实现框架,来满足二次开发过程中对标准应用的扩展、替换。目前,这个框架包含了系统管理安全方案、UI端按钮扩展及事件方法扩展方案、业务组件服务扩展方案三部分,包含的主要内容是一系列的插件接口和API。这个框架与二次开发产品安装部署方案(详见NCV5-安装盘配置与升级技术红皮书有关内容)结合,共同组成了NC二次开发解决方案。这个方案定位于实现3个目标:降低二次开发难度,减少并最终杜绝对标准产品源代码的修改;二次开发产品与标准产品开发和成果部署上的分层隔离;标准产品升级兼容二次开发成果。NC二次开发解决方案势必在以后版本中持续地完善,目前各详细方案分章节说明如下。需要说明的是,在该框架推出之前,NC也曾基于项目要求提供了一些中间方案,基本情况收录相关章节附录中。这些方案为兼容项目成果还保留,但在新项目二次开发中已经不准使用,并在今后的版本中逐渐取消支持。注:本文针对二次开发描述也同样适用于行业开发过程中,在标准产品基础上进行的行业定制。第二章 身份认证1. 概述NC系统面向高端企业集团ERP应用的产品定位决定了其系统安全的重要性,系统安全性包括登录身份的认证和各种数据的安全。NC系统对数据安全性的处理不在本文描述,本文主要阐述系统登录的身份认证的安全性及认证方式的实现。NC系统默认的身份认证方式是基于静态密码的认证方式。目前,在身份认证领域,也有许多厂家能提供更为安全可靠的认证方式,如CA认证,动态密码认证。为了提高NC系统本身在登录认证方面的安全性,NC系统提供了一套用于集成第三方认证方式的接口,能够方便地将更为安全的身份认证方式集成到NC系统中,进而加强NC系统在登录时身份认证的安全性。2. 实现说明NC系统的身份认证集成接口主要包含:l 后台的认证接口:nc.bs.sm.identityverify.IAModel 前台的预处理接口:nc.bs.sm.identityverify.IloginPretreatmentl 前台的认证结果消息接口:nc.bs.sm.identityverify.IloginResultMessage一般实现某种身份认证方式即实现上述接口。2.1后台认证接口后台的认证接口是实现一个身份认证方式必须要实现的一个接口,不过在实际的代码中,一般都是继承nc.bs.sm.identityverify.AbstractIAMode抽象类,它实现了nc.bs.sm.identityverify.IAMode接口。程序员需要实现verify方法,在该方法中进行用户的身份认证。int verify(nc.vo.sm.login.LoginSessBean lsb, nc.vo.sm.UserVO userVO);参数:LoginSessBean lsb 主要存储登录用户的一些信息,如用户编码,用户密码,或其他一些信息(可以有LoginSessBean.put()方法和LoginSessBean.get()方法存取)。UserVO userVO 利用lsb中的公司信息和用户编码信息在数据库中查找到的nc用户对象,包含了nc用户的信息。返回值 int 表示身份认证的结果,如果身份认证成功,请返回nc.vo.sm.login.ILoginResult.LOGIN_LEGALIDENTITY。如果不合法,返回其他自定义的int值,但是自定义的返回值必须大于200 (小于200的返回值分配给系统自己使用)nc.bs.sm.identityverify.AbstractIAMode类有一个方法是Object getParameter(String key),它的是返回定义在配置文件中的参数,关于配置文件,后面将有描述。2.2前台预处理接口前台的预处理接口是在前台运行的,它提供了在调用后台认证功能之前进行一些预处理操作的机会。例如一般在实现某种CA认证方式时,需要从usbkey中读取用户信息,以及对挑战码进行签名的操作等等,并将这些挑战码传输到后台,供身份认证使用,此时即可实现该接口。该接口定义了一个方法:void pretreatment(LoginSessBean lsb) throws Exception,在该方法中进行上述的操作,一些需要传输到后台的信息利用lsb传递,例如用户编码,需要利用lsb.setUserCode方式设置。对于其他用于外系统进行认证的数据,如挑战码,应该使用lsb.put方法设置到lsb中,供后台调用void pretreatment(nc.vo.sm.login.LoginSessBean lsb) throws Exception参数:LoginSessBean lsb 这里的lsb主要用来存储一些后台认证需要的数据,可以使用lsb的相关方法进行设置,这个lsb对象将传递给后台的认证方法verify(nc.vo.sm.login.LoginSessBean lsb, nc.vo.sm.UserVO userVO);中的参数lsb。异常:出现一些需要终止操作的异常,可以抛出如果认证方式中不需要前台的预处理过程,可以不实现该接口。2.3前台认证结果信息接口前台的认证结果消息接口nc.bs.sm.identityverify.IloginResultMessage的作用主要在于,在我们的认证方法中返回的是int型数据,不能直接反馈给用户,故利用此接口进行认证结果的映射,将int型的认证结果翻译为用户能够理解的文字信息,这些文字信息将提示用户认证失败的原因。该接口方法定义如下:String getResultMessage(int intResult);参数: int intResult 该值由后台认证接口方法返回,返回值 String 返回给用户的对应intResult的提示文字2.4配置工作对于代码开发来说,实现上面的接口后,就完成了开发工作。紧接着就是需要进行一些配置工作,即可在NC系统中使用新的身份认证方式。对于nc3x的版本配置文件为./ierp/bin/IAConfig.xml,它的一般格式为:(例子)nc.bs.uap.ca.CAModeCA认证nccauserIDModeusercodetruenc.ui.uap.ca.CALoginPretreatmentnc.ui.uap.ca.CALoginResult对于nc5x的版本配置文件为./ierp/bin/IAConfig.xml,它的一般格式为:(例子) nc.bs.uap.ca.CAModeCA认证nccauserIDModeusercodetruenc.ui.uap.ca.CALoginPretreatmentnc.ui.uap.ca.CALoginResult对于,如果程序中不需要额外的参数配置,可以不需要配置对于,如果认证方式中不需要前台的预处理过程,也可以不配置该项对于,如果没有额外的信息返回,也可以不配置该项3 系统登录身份认证相关包及类nc.bs.sm.identityverify |AbstractIAMode#身份认证方式抽象类,一般实现某种认证方式都要实现该类|IAConfigFileTool #读写身份认证配置文件的工具类|IAConfSetupDlg#和IASetupFrame类一起配置身份认证配置文件|IAMode#身份认证方式接口类,由AbstractIAMode实现|IAModeFactory#在系统运行时根据身份认证配置文件构造一个认证方式对象|IASetupFrame#配置身份认证配置文件的工具|IASetupPanel#配置身份认证配置文件|StaticPasswordIAMode#系统默认的静态密码认证方式类,它实现了AbstractIAModenc.ui.sm.identityverify|DefaultLoginPretreatment#默认的登录预处理类|IloginPretreatment#登录预处理接口类。凡在登录前需做的工作可实现该类来完成|IloginResultMessage #登录返回信息类。根据返回的int值得到string值。nc.vo.sm.identityverify|IAConfigFileVO#对应于身份认证方式配置文件的vo类|IAConfVO#对应于一种身份认证方式的vo类|IAContext#身份认证上下文类,可以通过该类获取身份认证方式需要的参数|IAParameterVO #对应于身份认证方式的参数vo类nc.vo.sm.login.LoginSessBean的相关方法:方法名称方法描述get(String)获取通过put方法设置的属性值put(String, Object)设置key-value属性值对getPk_crop()获取公司主键值setPk_corp(String)设置公司主键值getUserCode()获取用户编码setUserCode(String)设置用户编码getPassword()获取用户密码setPassword(String)设置用户密码nc.vo.sm.UserVO 的相关方法方法名称方法描述getPrimaryKey() 获取用户主键值getUserCode()获取用户编码getUserName()获取用户名称getUserPassword()获取用户密码第三章 单点登录方案(V5.0)1 概述登录方案示意图如下:NC应用服务器超时处理注册中心2向nc服务器注册登录信息外部身份认证系统3,利用注册信息,客户端进入NC系统1登录请求客户端2 过程说明2.1 当客户端用户希望进入NC系统时,首先向外部的认证系统提交请求。2.2 由外部认证系统向nc服务器注册客户端的登录信息,这些信息是nc系统所必需的信息。可以通过 一个随机的键值key来索引登录信息。2.3 客户端将通过该键值来进入nc系统。即客户端将向nc应用服务器提交其键值。nc服务器将利用该键值从注册中心中获取登录信息(同时注销注册信息)。然后利用这些登录信息登录到NC系统。2.4 超时处理:注册的登录信息有其生命期,超过生命期的注册信息将会被清除。客户端只能在超时以前登录nc才有效,否则不能进入nc系统。超时的值在配置文件中进行配置3 URL格式3.1 注册用的URL外部系统服务器利用此url向nc服务器注册登录信息。该URL的基本格式为:http:/localhost/service/RegisterServlet?key=111111&usercode=1注:usercode和key是必须的。key值为注册登录信息的键值,必须保证唯一。在这个url后面还可以提供一些附加参数accountcode用于指定登录的账套pkcorp用于指定登录的公司workdate用于提供登录日期,默认为NC服务器当前日期language用于提供登录的语种,默认为简体中文。height客户端分辨率的高度值width 客户端分辨率的宽度值3.2 登录用的URL外部系统服务器注册完毕后,返回客户端该url,使客户端重定向到该url,实现登录NChttp:/localhost/login.jsp?key=111111注:其中key的取值和注册时的值一致4 配置文件文件ierpbinexterior.xml用于配置在单点登录中能够注册登录信息的主机ip和注册信息的超时值。这些配置都是出于对安全的考虑,因为只有在该文件中配置的主机才能向nc服务器注册登录信息。exterior.xml的内容为: 用于指定可以注册的外部主机ip10.5.2.* 可以使用*指定某个网段20 用于指定注册信息的生命期,单位为妙第四章 功能按钮及UI事件扩展方案(V5.011)1. 概述在具体的项目中,对于已有的产品,往往会有一些新的需求。其中就包含了对已存在的功能节点扩展菜单功能的需求。比如需要在某个节点上增加一些菜单按钮来响应新的功能。在以前的产品中,由于没有对菜单按钮扩展的支持,二次开发的程序员们不得不将产品中的一些相关类的逻辑进行修改来达到要求。但这就给产品的维护和升级带来了问题与麻烦。因此,急切地需要我们的产品中提供对功能节点菜单扩展的支持。以满足在不修改现有代码的情况下,二次开发的程序员们能方便地扩展功能节点的菜单功能。对于二次开发扩展功能节点菜单按钮的需求,在NC5.011的版本中,我们提供了支持,下面的内容将讲述怎样来扩展功能节点的菜单按钮功能。2. 菜单扩展按钮的相关类如上图所示,二次开发的程序员们在扩展菜单按钮时,所需要关心的只有两个东西:FuncMenuExtends类和funcMenuExtConfig.xml文件。FuncMenuExtends类是一个抽象类,它定义了一些事件回调方法以及一些常用方法;funcMenuExtConfig.xml文件则配置了功能节点和扩展类的匹配关系。3. 扩展类FuncMenuExtendsFuncMenuExtends类是一个抽象类,全路径名为nc.ui.sf.menuext.FuncMenuExtends,其中定义了许多回调方法,系统将在不同的时机调用相应的方法,另外的一些方法则提供了一些方便的功能,让二次开发的程序员们调用。下面将详细介绍每一个方法:l postUIInit方法public void postUIInit()该方法是在节点刚刚被打开,toftpanel的实例被构建完成后调用的,设置此方法的目的是提供一个机会让二次开发进行一些额外的界面初始化的功能。系统默认为空操作。l deExtendsAction方法public abstract void doExtendsAction(ButtonObject bo)该方法是一个抽象方法,子类必须实现它。它响应扩展按钮(现在一个功能节点上的菜单按钮按照来源分为两种,一种是系统默认定义的那些按钮,我们称为“系统默认按钮”,另外一种是二次开发程序员扩展所增加的那些菜单按钮,我们称其为“扩展按钮”)的点击事件,即当最终用户在节点界面上点击了一个扩展按钮时,系统会回调该方法。通常在该方法类根据不同的按钮实现对应的响应逻辑。l addExtendsMenus方法public abstract void addExtendsMenus( ArrayList bos )该方法是一个抽象方法,子类必须实现它。它主要是实现将扩展按钮增加到功能节点菜单上去的功能。系统在设置功能节点的菜单之前回调该方法,传递的参数为一个ArrayList对象,该对象中包含了系统默认按钮,二次开发程序员只要将扩展按钮增加到这个对象中,即可将扩展按钮增加到界面上。l preDoneSysDefMenuAction方法public boolean preDoneSysDefMenuAction( ButtonObject bo )该方法是在最终用户点击了一个系统默认菜单时,在响应其默认的处理逻辑之前调用的,其返回一个boolean值来确定事件是否继续执行,返回true,将继续执行其默认的处理逻辑以及回调postDoneSysDefMenuAction方法,返回false,将终止事件的执行。一般来说二次开发程序员可以在此方法类增加一些额外的校验逻辑。l postDoneSysDefMenuAction方法public void postDoneSysDefMenuAction( ButtonObject bo )该方法是在最终用户点击了一个系统默认菜单时,在其默认的处理逻辑调用完成之后调用的。一般来说二次开发程序员可以在此方法类作一些额外的界面状态处理,例如可以设置某些扩展按钮的状态。l getToftPanel方法public ToftPanel getToftPanel()该方法返回所对应的ToftPanel实例,以方便二次开发程序员调用ToftPanel上的一些方法,例如获取界面上的某些控件。l getComponentFromToftPanelByName方法public Component getComponentFromToftPanelByName(String name)该方法是根据控件的名称从节点界面(ToftPanel)上获取对应的控件。提供该方法是为了方便二次开发程序员获取节点界面上的某个控件的引用。如果没有找到,返回null值。如果存在多个控件名称相同时,返回第一个找到的控件。l getComponentsFromToftPanelByClass方法public Component getComponentsFromToftPanelByClass(Class cls)该方法是根据Class类型从节点界面上获取满足条件的控件。返回值为Component数组。提供该方法可以方便地通过控件的类型获取功能节点界面上的空间引用。如果没有找到,返回长度为0的数组。l getButtonObjectByCode方法public ButtonObject getButtonObjectByCode(String code)该方法是根据菜单按钮的编码来获取菜单按钮BO的实例引用,如果没有找到,返回null值。例如在需要对一个BO设置状态时使用。l updateButton方法public void updateButton(ButtonObject bo)该方法提供更新某个菜单按钮界面状态的功能。一般在设置了ButtonObject对象的状态后,都需要调用该方法来通知界面更新状态。l updateButtons方法public void updateButtons()该方法提供更新所有菜单按钮界面状态的功能。一般在需要通知界面更新所有菜单按钮状态时调用此方法。l lookup( String interfaceClassName )public Object lookup(String interfaceClassName)功能节点对二次开发提供的api是通过接口提供的,通过该方法,可以获取一个对应接口的实现类实例,以便于二次开发程序员调用功能节点的API。如果没有找到,返回null。l mouseClicked方法public void mouseClicked(MouseEvent e)在ToftPanel界面上某个控件发生了鼠标点击事件时,系统将会回调该方法。子类应该根据事件源来分别处理。l mousePressed方法public void mousePressed(MouseEvent e)在ToftPanel界面上某个控件发生了鼠标按下事件时,系统将会回调该方法。子类应该根据事件源来分别处理。l mouseReleased方法public void mouseReleased(MouseEvent e)在ToftPanel界面上某个控件发生了鼠标释放事件时,系统将会回调该方法。子类应该根据事件源来分别处理。l mouseEntered方法public void mouseEntered(MouseEvent e)在ToftPanel界面上某个控件发生了鼠标进入事件时,系统将会回调该方法。子类应该根据事件源来分别处理。l mouseExited方法public void mouseExited(MouseEvent e)在ToftPanel界面上某个控件发生了鼠标退出事件时,系统将会回调该方法。子类应该根据事件源来分别处理。l mouseDragged方法public void mouseDragged(MouseEvent e)在ToftPanel界面上某个控件发生了鼠标拖动事件时,系统将会回调该方法。子类应该根据事件源来分别处理。l mouseMoved方法public void mouseMoved(MouseEvent e)在ToftPanel界面上某个控件发生了鼠标移动事件时,系统将会回调该方法。子类应该根据事件源来分别处理。l keyTyped方法public void keyTyped(KeyEvent e)在ToftPanel界面上某个控件发生了键盘键入事件时,系统将会回调该方法。子类应该根据事件源来分别处理。l keyPressed方法public void keyPressed(KeyEvent e)在ToftPanel界面上某个控件发生了键盘按下事件时,系统将会回调该方法。子类应该根据事件源来分别处理。l keyReleased方法public void keyReleased(KeyEvent e)在ToftPanel界面上某个控件发生了键盘释放事件时,系统将会回调该方法。子类应该根据事件源来分别处理。l focusGained方法public void focusGained(FocusEvent e)在ToftPanel界面上某个控件发生了焦点获取事件时,系统将会回调该方法。子类应该根据事件源来分别处理。l focusLost方法public void focusLost(FocusEvent e)在ToftPanel界面上某个控件发生了焦点丢失事件时,系统将会回调该方法。子类应该根据事件源来分别处理。4. 配置文件funcMenuExtConfig.xmlfuncMenuExtConfig.xml文件位于NC系统安装目录的ierp/ext/目录下。通过它可以为一个功能节点配置一个或者多个菜单按钮扩展实现类,一个功能节点和其菜单按钮扩展类是通过他们的类全路径或者功能节点编码关联上的。其大致格式如下:继承FuncMenuExtends的全路径类名称1继承FuncMenuExtends的全路径类名称2继承FuncMenuExtends的全路径类名称1继承FuncMenuExtends的全路径类名称2可以参见其schema文件,如下图所示:5. 开发过程简介综上所述,功能节点菜单按钮扩展的开发步骤比较简单,只需要继承FuncMenuExtends类,并将该类在funcMenuExtConfig.xml文件中进行配置,下面我们将通过一个具体的例子来说明怎样进行功能节点菜单按钮扩展的开发。我们将以公司目录节点来说明开发过程。5.1 编写FuncMenuExtends子类我们在开发环境中新建一个类叫做nc.ui.menuext.CorpTree。该类继承了FuncMenuExtends类。public class CorpTree extends FuncMenuExtends 我们将扩展出三个菜单按钮,因此声名了三个ButtonObject实例,bo3按钮将作为bo2的子菜单出现public class CorpTree extends FuncMenuExtends private ButtonObject bo1 = null;private ButtonObject bo2 = null;private ButtonObject bo3 = null;public CorpTree()super();init();private void init() bo1 = new ButtonObject(bo1,bo1,bo1);bo2 = new ButtonObject(bo2,bo2,bo2);bo3 = new ButtonObject(bo3,bo3,bo3);bo2.addChildButton(bo3);我们将把bo1,bo2按钮放到顶级, 因此需要实现addExtendsMenus方法。public void addExtendsMenus(ArrayList bos) bos.add(bo1);bos.add(bo2);这里也可以通过ArrayList.add(index, element)方法将按钮添加到指定的位置,或者先找到某个有下拉菜单的按钮,将扩展的按钮添加到它的下面去对于增加的这几个扩展按钮的事件响应,我们应该通过实现doExtendsAction方法来实现。public void doExtendsAction(ButtonObject bo) if(bo.equals(bo1)MessageBox.showConfirmationMessage(提示, bo1 clicked);else if(bo.equals(bo3)MessageBox.showConfirmationMessage(提示, bo3 clicked);到目前为止,扩展的按钮已经被增加到节点的菜单上并且可以响应事件了,主要的功能已经完成了。下面我们需要实现这样一个功能,就是当用户在公司目录树上选择了树根时,bo1不可用,当选择了公司时才可用。想要实现这个功能,我们需要监听用户鼠标点击事件和获得公司目录树控件,对于监听用户鼠标点击事件,我们只需要实现mouseClicked方法即可。至于如何获取节点界面上控件引用的方法,我们最好区分一些情况分别对待。在一般情况下我们最好是通过调用功能节点提供的uiapi接口来获取界面上控件的引用或数据,这样是最安全的方法。另外,FuncMenuExtends类还提供了两个较为实用的方法让我们可以简单地获取到节点上的控件引用,它们是getComponentFromToftPanelByName和getComponentsFromToftPanelByClass方法,前面对它们有详细介绍。在公司目录这个节点上,由于界面相对简单,在该节点的程序员没有提供可以直接调用的方法时,我们可以通过这两个方法来获取公司目录树控件的引用,例如,由于该节点上就只有一个树控件,那么通过调用getComponentsFromToftPanelByClass方法就可以轻松地得到公司目录树控件的引用。public void mouseClicked(MouseEvent e) /获取公司目录树控件引用JTree tree=(JTree)getComponentsFromToftPanelByClass(JTree.class)0;/如果该鼠标事件源是公司目录树,响应下列处理逻辑if(e.getSource().equals(tree)TreeNode o = (TreeNode)tree.getSelectionPath().getLastPathComponent();/获取bo1引用ButtonObject bo = getButtonObjectByCode(bo1);if(tree.getModel().getRoot().equals(o)/如果选择根节点,则不可用bo.setEnabled(false);else/如果选择了某个公司,则可用bo.setEnabled(true);/更新菜单状态updateButton(bo);5.2 在funcMenuExtConfig.xml文件中进行配置在代码编写完成后,我们就需要在funcMenuExtConfig.xml文件中进行配置了,公司目录的toftpanel子类类名为nc.ui.bd.CorpTreePanel,我们扩展的类名称为nc.ui.menuext.CorpTree,则配置如下所示:nc.ui.menuext.CorpTree5.3 运行程序在上述工作完成后,我们就可以启动NC服务器中间件,然后登录进去查看效果了。如下列图所示:选中根节点时的效果选中公司节点的效果:点击bo1按钮的效果:点击bo3按钮的效果:6. 附录:供应链产品按钮扩展面对二次开发项目对于按钮添加的集中需求,加强对产业链发展的支持,SCM产品在NCV31sp1推出了一个中间方案,实现了全部核心单据支持二次开发按钮扩展的功能。方案介绍l 首先,SCM设计了一个接口类nc.ui.scm.pub.bill.IBillExtendFun,来完成扩展按钮的添加、状态控制、相关方法的绑定,方法如下: /* * 获取扩展按钮数组。修改现有ui类,调用getExtendBtns()将获取的按钮加入按钮组。 */ public abstract nc.ui.pub.ButtonObject getExtendBtns(); /* * 控制扩展按钮的事件。在onButtonClick中最后此方法。 */ public abstract void onExtendBtnsClick(nc.ui.pub.ButtonObject bo); /* * 控制扩展按钮状态。需要在setState方法注释中说明单据状态的取值。 */ public abstract void setExtendBtnsStat(int iState);l 二次开发人员需要开发一个新的界面类,新类只需继承节点UI类,重写nc.ui.scm.pub.bill.IBillExtendFun的接口方法就能实现增加新按钮的功能。l 最后,需要把“客户化/二次开发工具/系统管理工具/功能注册”相应功能节点中的“对应文件名或控件名”修改为新类名。支持二次开发按钮扩展功能单据清单(已覆盖全部核心单据)单据类型编码单据类型单据类型编码单据类型20请购单5A调入申请21采购订单5C三方调拨订单23到货单5D公司间调拨订单25采购发票5E组织间调拨订单30销售订单5I组织内调拨订单32销售发票61委外订单38预订单7D发运日计划3G返利单7F发运单3H价保单7G任务单40期初余额7I签收单41期初借入单7J途损单42期初借出单7V运费发票43期初废品单7W运费单44期初来料加工单I2采购入库单45采购入库单I3产成品入库单46产成品入库单I4其它入库单47委托加工收货单I5销售成本结转单48来料加工入库单I6材料出库单49借入单I7其它出库单4A其它入库单I8报废单4B借出还回单I9入库调整单4C销售出库单IA出库调整单4D材料出库单IB计划价调整单4E调拨入库单IC委外加工发料单4F委托加工发料单ID委外加工收货单4G来料加工出库单II调拨入库单4H借出单IJ调拨出库单4I其它出库单Z1采购合同期初4J借入还出单Z2采购合同日常业务4O报废出库单Z3销售合同期初4P废品处理单Z4销售合同日常业务4Q货位调整单Z5其它合同日常业务4Y调拨出库单优劣势分析优势:添加按钮时不需要修改产品源代码隔离了产品代码和二次开发代码,一定程度上解决了维护升级问题 缺点:把功能注册修改,仍然有产品升级,需要重新指定类的过程。产品代码需要做配合,方案可复制性弱。第五章 UI界面API的发布规范(V5.02后,仅参考)1. 概述扩展按钮被添加到功能节点菜单上只是按钮扩展功能实现的第一步,更为重要的是在响应这些菜单扩展按钮时,二次开发程序员往往需要调用到与该节点界面上相关的API,例如需要获取节点界面上的某个控件,或者需要获取节点界面上的相关数据,等等。这些需求在以前往往是当需要时,联系相关程序员,要求在toftPanel上随意的提供某个方法,由二次开发程序员调用。目前存在以下的一些问题:l 二次开发程序员不清楚应该调用什么API来获取界面上的相关数据,总是需要询问相关的程序员。l 二次开发的代码和产品代码往往有较为紧密的耦合,产品一旦升级,往往会影响到以前的二次开发结果。l 对二次开发提供的接口难以维护。l 二次开发的维护也很困难,特别是当人员变动时,很难接续以前的工作,上述的问题,总的说来是因为我们以前
温馨提示
- 1. 本站所有资源如无特殊说明,都需要本地电脑安装OFFICE2007和PDF阅读器。图纸软件为CAD,CAXA,PROE,UG,SolidWorks等.压缩文件请下载最新的WinRAR软件解压。
- 2. 本站的文档不包含任何第三方提供的附件图纸等,如果需要附件,请联系上传者。文件的所有权益归上传用户所有。
- 3. 本站RAR压缩包中若带图纸,网页内容里面会有图纸预览,若没有图纸预览就没有图纸。
- 4. 未经权益所有人同意不得将文件中的内容挪作商业或盈利用途。
- 5. 人人文库网仅提供信息存储空间,仅对用户上传内容的表现方式做保护处理,对用户上传分享的文档内容本身不做任何修改或编辑,并不能对任何下载内容负责。
- 6. 下载文件中如有侵权或不适当内容,请与我们联系,我们立即纠正。
- 7. 本站不保证下载资源的准确性、安全性和完整性, 同时也不承担用户因使用这些下载资源对自己和他人造成任何形式的伤害或损失。
最新文档
- 兵团团委公务员考试试题及答案
- 北京市公务员轮换考试试题及答案
- 爸爸公务员考试试题及答案
- 生活污水治理建设项目商业计划书
- 十五五规划纲要:塑料污染全链条治理深化政策
- 2026年能源加工公司环境监测数据上报管理制度
- 十五五规划纲要深度解读:低碳社区建设与示范推广
- 人工智能在医疗健康产业的应用与前景
- 汽车智能化与未来出行行业分析
- 2025浙江省杭州市桐庐富春山健康城管委会招聘2人易考易错模拟试题(共500题)试卷后附参考答案
- 控制器说明书
- 10以内加减法练习题-直接打印版
- 音频处理器说明书
- 原发性中枢神经系统淋巴瘤
- 德语智慧树知到答案章节测试2023年西安理工大学
- 坚持成就梦想(励志经典)
- GB/T 21140-2017非结构用指接材
- GB/T 20019-2005热喷涂热喷涂设备的验收检查
- 北师大七年级初一数学上册-初一数学-分单元全套试卷
- 演讲希特勒的一生课件
- 穿支蒂皮瓣vs穿支筋膜蒂皮瓣课件
评论
0/150
提交评论