登录UI类
这个类就是NC的界面的窗口类(有启动动画图): nc.starter.ui.AppletViewer.initialize()
NC启动类: nc.starter.ui.NCLauncher.startNC(String, String, String)
开发调试启动类: nc.starter.test.JStarter.main(String[])
nc.login.ui.LoginUI , 登录涉及到的类在 nc.login.ui 这个包下面
nc.login.ui.StandardLoginUI.initialize()
nc.login.ui.StandardLoginUI.initUI()
nc.login.bs.INCLoginService
配置文件解析: nc.login.ui.LoginUIConfig.parseDataToDocument(byte[])
登录按钮: nc.login.ui.StandardLoginUI.initialize().new LoginUISupport() {...}.(Container)
后台:
登录: nc.login.bs.impl.NCLoginImplement.login(LoginRequest, boolean)
查询人员: nc.login.bs.impl.NCUserQueryImple
密码校验: nc.identityverify.pub.StaticPWDVerifier.verify(AuthenSubject, UserVO)
校验密码是否匹配: nc.vo.uap.rbac.util.RbacUserPwdUtil.checkUserPassword(UserVO, String)
校验密码安全度:
nc.impl.uap.rbac.userpassword.UserPasswordCheckerImpl.getPwdCheckMsg(UserVO, PasswordSecurityLevelVO, String)
nc.login.identify.ui.StaticPWDVerifySuccessClient.checkPWDLevel(Map<String, String>)
功能注册
这样搜索有惊喜哦 : *FuncRegister
nc.impl.uap.bbd.func.FuncRegisterImpl
打开节点
nc.desktop.ui.ProductNavigatePanel.openNode(TreePath)
nc.ui.uap.sf.SFClientUtil.open(Component, FuncRegisterVO, int, String)
nc.funcnode.ui.FuncletWindowLauncher.openFuncNodeInTabbedPane(Component, FuncRegisterVO, FuncletInitData, FuncletLinkListener, boolean, String)
-nc.funcnode.ui.FuncletWindowEngine.openNode(OpenParam)
//上面方法另启动一个线程执行下面的
-nc.funcnode.ui.FuncletWindowEngine.openNodeImple(OpenParam)
-nc.funcnode.ui.FuncletWidgetContainerFactory.createFuncletWidgetContainer(FuncRegisterVO, FuncletModel, FuncletInitData, FuncletLinkListener, FuncletListener)
-nc.funcnode.ui.FuncletWidgetContainer.initUI(FuncletModel, FuncletInitData)
//这个方法里面初始化了IFunclet(功能类实例),它里面调用的init方法由AbstractFunclet实现
-nc.funcnode.ui.FuncletWidgetFactory.createFuncletWidget(FuncRegisterVO, FuncletModel, FuncletInitData)
//由功能类实例(继承AbstractFunclet->IFunclet)执行init,AbstractFunclet有个抽象init(),由具体的功能类实现,在这里调用
-nc.funcnode.ui.AbstractFunclet.init(FuncletContext)
-这里会调用具体功能类的init()方法
-这里执行执行createFuncletWidget方法,初始化数据,并把funclet加入到widget
-这里在FuncletWidgetContainer.initUI中把widget加入到widgetcontainer
-返回WfContainer
//这里new 一个FuncNodePanel,返回window
-nc.funcnode.ui.FuncNodePanel.initialize()
//把该panel加入到打开的窗口集合
-nc.desktop.ui.WorkbenchEnvironment.addOpenedFuncletWindow(IFuncletWindow)
-展现window
参照
nc.ui.pub.beans.UIRefPane.showModel()
nc.ui.bd.ref.AbstractRefModel.getData()
点击确认按钮:
- nc.ui.pub.beans.UIRefPane.onButtonClicked()
- nc.ui.bd.ref.UFRefManage.doReturnOK()
事件触发:
- 一般在列表或卡片视图类的handler方法,实现的nc.ui.uif2.AppEventListener接口
修改列表表头
BillItem bi = getBillCardPanel().getBodyItem("desdocvalue");
IType typeByID = MDBaseQueryFacade.getInstance().getTypeByID(desdocid, 300);
bi.setMetaDataProperty(new MetaDataUserDefAttributeAdpter(bi.getMetaDataProperty().getAttribute(), typeByID));
bi.setName(typeByID.getDisplayName());
事件
- 有些配置文件会配置(这个在UI2中加载配置文件时,判断以mediator结尾会加载):
<bean id="eventMediator" class="nc.ui.pubapp.uif2app.model.AppEventHandlerMediator">
- 一般页面中的事件都会在列表或卡片页面类的父类的handler方法,实现的nc.ui.uif2.AppEventListener接口
弹框显示
MessageDialog.showHintDlg(null, "提示", "abc!");
状态栏显示
ShowStatusBarMsgUtil.showStatusBarMsg("msg", model.getContext());
nc.funcnode.ui.AbstractFunclet.showStatusBarMessage(String)
//自己加的一个
ShowStatusMsg.showStatusBarMessage("", context);
nc.message.reconstruction.NCMessageQueryPanel.fireQuery(MsgQueryInfo)
树的构造
nc.ui.uif2.model.HierachicalDataAppModel.initModel(Object)
if(objs==null||objs.length==0){
setTree(new DefaultTreeModel(treeCreateStrategy.getRootNode()));
}else{
setTree(BDTreeCreator.createTree(objs, treeCreateStrategy));
}
NC定时任务
- 必须实现这个接口,然后需要在页面上配置:
nc.bs.pub.taskcenter.IBackgroundWorkPlugin