美文网首页
Portal一些类

Portal一些类

作者: feiyingmm | 来源:发表于2017-11-23 14:12 被阅读0次
    portal编译同步在home中生成前台文件目录

    nchome9810\hotwebs\portal\sync
    注: 如果这个目录下没生成相应文件的话会提示找不到app或者win或list窗口

    打开节点

    nc.uap.lfw.core.servlet.CoreServlet.doPost(HttpServletRequest, HttpServletResponse)

    接口实现类查找
    • 查找实现类
      nc.bs.framework.core.AbstractMeta.SingletonInstantiator.instantiate(Context, String, Object[])
    • 具体实例化实现类的地方:
      nc.bs.framework.instantiator.CtorInstantiator.instantiate(Class<?>, Object[], String)
    Portal流程插件类
    • nc.uap.wfm.exetask.ExeTaskMainCtrl
    Portal参数共享
    • 获取url后面参数
    LfwRuntimeEnvironment.getWebContext().getOriginalParameter(ProjectSubcontract.PK_PROJECTSUBCONTRACT);
    LfwRuntimeEnvironment.getWebContext().getParameter(SubcontractEditWinCtrl.APPLY_TASK);
    
    • 获取域空间参数
    Object obj = AppLifeCycleContext.current().getWindowContext().getAppAttribute(key);
    if(obj == null)
        obj = AppLifeCycleContext.current().getApplicationContext().getAppAttribute(key);
    
    主子表页面数据加载
    • 主子表数据获取
    Dataset dsh = getDS(SubcontractEditConstants.CARDVIEW, SubcontractEditConstants.DSNAME_HEAD);
    Dataset dsb = getDS(SubcontractEditConstants.CARDVIEW, SubcontractEditConstants.DSNAME_BODY);
    AggregatedValueObject aggvo = new Datasets2AggVOSerializer().serialize(dsh, new Dataset[] { dsb }, AggProjectSubcontract.class.getName());
    aggvo = getDetailVOFromDS((AggProjectSubcontract) aggvo);
    
    • 主子表数据赋值(主子表分别赋值)
    ProjectSubcontract[] vos = new ProjectSubcontract[]{subcontract};
    new SuperVO2DatasetSerializer().serialize(vos, ds);
    
    单表页面数据加载
    • 单表页面数据获取
    Dataset dsh = getDS(SubcontractEditConstants.CARDVIEW, SubcontractEditConstants.DSNAME_HEAD);
    ProjectSubcontract vo = (ProjectSubcontract) new Dataset2SuperVOSerializer<SuperVO>().serialize(dsh)[0];
    
    • 通过row行获取
    Row row = ds.getSelectedRow();
    row.getString(ds.nameToIndex(ProjectSubcontract.PK_PROJECTSUBCONTRACT))
    private ProjectSubcontract ConvertRowToVO(Dataset ds, Row row) {
        Dataset2SuperVOSerializer<ProjectSubcontract> s = new Dataset2SuperVOSerializer<ProjectSubcontract>();
        SuperVO[] vos = s.serialize(ds, row);
        if (vos != null && vos.length > 0) {
            return (ProjectSubcontract) vos[0];
        }
        return null;
    }
    
    ProjectSubcontract vo = (ProjectSubcontract) new Dataset2SuperVOSerializer<SuperVO>().serialize(dsh)[0];
    
    • 表体获取多行数据
    获取全部数据,需要在页面配置多行的标记,前台的每一个操作对应后台的方法(按钮,编辑事件,插件里面):
    <SubmitRule>
        <Widget id="cardView">
            <Dataset id="listDS" type="ds_current_line">
            </Dataset>
            <Dataset id="editbDS" type="ds_all_line">
            </Dataset>
        </Widget>
    </SubmitRule>
    
    • 给表体行赋值,控制编辑性
    Dataset dsbody = ConsHelper.getDataSetById(SubcontractEditConstants.DSNAME_BODY);
    Row[] rows = dsbody.getAllRow();
    for(Row r:rows){
        r.setValue(dsbody.nameToIndex(ProjectSubcontractB.PK_PROJECTTASK), (String)row.getValue(ds.nameToIndex(ProjectSubcontract.PK_PROJECTTASK)));
    }
    ConsHelper.setElementEditable("editbForm", "pk_projecttask_wbs_name", false);
    
    提示框
    • 是否提示框
      boolean dialogRet = OAInteractionUtil.showDelDefaultConfirmDialog();
    • 提示信息提示框
      AppInteractionUtil.showShortMessage("删除成功!");
    Portal前端参照组件
    • 参照加过滤条件
    <NCRefNode allowInput="false" dataListener="nc.ref.oa.oapub.data.CurOrgPsndocReferenceDatasetListener" dialogHeight="" dialogWidth="" filterRefNodeNames="false" hrOrgs="false" i18nName="" id="refnode_editDS_pk_undertaker_name" langDir="" multiSel="false" orgs="true" pagemeta="reference" pagemodel="" read="true" readDs="masterDs" readFields="pk_psndoc,name" refId="" refcode="人员" refnodeDelegator="" relationRefNodeId="" selLeafOnly="false" text="工程分包_人员" usePower="false" writeDs="listDS" writeFields="pk_undertaker,pk_undertaker_name"> </NCRefNode>
    
    nc.ui.bd.ref.AbstractRefModel
    
    <FieldRelation id="pk_industrytype_rel" needProcess="true" refDataset="$refds_oacmfj_Defdoc_CQ002(合同管理)" useCache="true">
        <MatchFields>
            <Field readField="name" writeField="pk_industrytype_name"></Field>
        </MatchFields>
        <WhereField>
            <Field key="pk_defdoc" value="pk_industrytype"></Field>
        </WhereField>
    </FieldRelation>
    //id字段格式  $refds_模块名_元数据实体名称, caption为元数据实体显示名称
    <RefMdDataset caption="合同行业类型(自定义档案CQ002)" controlwidgetopeStatus="false" enabled="false" id="$refds_oacmfj_Defdoc_CQ002(合同管理)" lazyLoad="true" notNullBody="false" objMeta="oacmfj.Defdoc-CQ002(合同管理)" voMeta="nc.vo.bd.defdoc.DefdocVO">
        <Fields>
        </Fields>
    </RefMdDataset>
    //refcode字段跟bd_refinfo表中参照记录的name字段相同,主要是这个,注意orgs这个属性
    <NCRefNode allowInput="false" dataListener="" dialogHeight="" dialogWidth="" filterRefNodeNames="false" hrOrgs="false" i18nName="" id="refnode_editDS_pk_industrytype_name" langDir="" multiSel="false" orgs="false" pagemeta="reference" pagemodel="" read="false" readDs="masterDs" readFields="pk_defdoc,name" refId="" refcode="行业类别(自定义档案CQ002)" refnodeDelegator="" relationRefNodeId="" selLeafOnly="false" text="行业类别" usePower="false" writeDs="listDS" writeFields="pk_industrytype,pk_industrytype_name">
    </NCRefNode>
    <Element id="pk_industrytype" field="pk_industrytype" text="行业类型" visible="false" allowExtendValue="false" attachNext="false" canUpload="false" colSpan="1" editable="true" editorType="StringText" enabled="true" height="" imageOnly="false" langDir="" nextLine="false" nullAble="true" rowSpan="1" selectOnly="true" toolbarType="Custom" width="">
    </Element>
    <Element id="pk_industrytype_name" field="pk_industrytype_name" text="行业类型" refNode="refnode_editDS_pk_industrytype_name" allowExtendValue="false" attachNext="false" canUpload="false" colSpan="1" editable="true" editorType="Reference" enabled="true" height="" imageOnly="false" nextLine="false" nullAble="true" rowSpan="1" selectOnly="true" toolbarType="Custom" visible="true" width="">
    </Element>
    
    流程保存
    • 插件流程关键类
      保存类查找 :nc.uap.wfm.server.ProcessEngineExecutor.saveFormInfoCtx()
      流程参数封装获取 : nc.uap.wfm.utils.WfmParamUtil.initWfmParams()
      流程参数设置在进页面的pagemodel中 : nc.bs.oa.oapub.wfm.OAWfmUtil.WfmInit(String, String, String, String, String, String, String, String)
    获取页面组件
    • 获取页面空间,设置编辑性
    LfwView view = LfwRuntimeEnvironment.getWebContext().getPageMeta().getView(viewname);
    GridComp gridform = (GridComp) view.getViewComponents().getComponent(gridId);
    GridColumn column = gridform.getElementById(columnname);
    column.setEditable(false);
    
    FormComp form = (FormComp) view.getViewComponents().getComponent(formId);
    FormElement element = form.getElementById(elementname);
    element.setEditable(false);
    
    获取数据集
    • 通过viewName,dsName
    LfwView view = LfwRuntimeEnvironment.getWebContext().getPageMeta().getView(viewName);
    if (view == null) {
        view = AppLifeCycleContext.current().getApplicationContext().getCurrentWindowContext().getViewContext(viewName).getView();
    }
    Dataset ds = view.getViewModels().getDataset(dsName);
    
    • 通过dsName获取
      LfwView view = AppLifeCycleContext.current().getViewContext().getView()
    portal关键类
    • nc.uap.lfw.core.ctx.AppLifeCycleContext
    LfwView view = AppLifeCycleContext.current().getApplicationContext().getCurrentWindowContext().getViewContext(viewName).getView();
    LfwView view = AppLifeCycleContext.current().getViewContext().getView();
    
    ViewContext viewContext = AppLifeCycleContext.current().getViewContext();
    WindowContext windowContext = AppLifeCycleContext.current().getWindowContext();
    ApplicationContext appContext = AppLifeCycleContext.current().getApplicationContext();
    AppLifeCycleContext appLifeCycleContext = AppLifeCycleContext.current();
    WebContext webContext = LfwRuntimeEnvironment.getWebContext();
    LfwWindow lfwWindow = AppLifeCycleContext.current().getWindowContext().getWindow();
    LfwView lfwView = AppLifeCycleContext.current().getViewContext().getView();
    
    • nc.uap.lfw.core.LfwRuntimeEnvironment
    LfwView view = LfwRuntimeEnvironment.getWebContext().getPageMeta().getView(viewName);
    
    LfwWindow parentPm = LfwRuntimeEnvironment.getWebContext().getPageMeta();
    
    String datasource = LfwRuntimeEnvironment.getDatasource();
    
    前台页面目录结构及事件
    • 目录结构
      • applications目录下的是应用
      • nodes目录下是window窗口
      • 每个窗口下的叫视图
    • 事件
      事件可以配置在视图级别,Dataset级别,及按钮内部
    <Event async="true" methodName="beforeShowCardView" name="beforeShow" onserver="true">
                <SubmitRule>
                    <Widget id="cardView">
                        <Dataset id="listDS" type="ds_current_line">
                        </Dataset>
                        <Dataset id="editbDS" type="ds_all_line">
                        </Dataset>
                    </Widget>
                </SubmitRule>
                <Params>
                    <Param>
                        <Name>dialogEvent</Name>
                        <Value>
                        </Value>
                        <Desc>                        <![CDATA[nc.uap.lfw.core.event.DialogEvent]]>
                        </Desc>
                    </Param>
                </Params>
                <Action>
                </Action>
            </Event>
            <Event async="true" methodName="pluginwf_plugin" onserver="true">
                <Params>
                    <Param>
                        <Name>keys</Name>
                        <Value>
                        </Value>
                        <Desc>                        <![CDATA[java.util.Map]]>
                        </Desc>
                    </Param>
                </Params>
                <Action>
                </Action>
            </Event>
    
    <Event async="true" methodName="onAfterDataChange" name="onAfterDataChange" onserver="true">
                            <Params>
                                <Param>
                                    <Name>datasetCellEvent</Name>
                                    <Value>
                                    </Value>
                                    <Desc>                                    <![CDATA[nc.uap.lfw.core.event.DatasetCellEvent]]>
                                    </Desc>
                                </Param>
                            </Params>
                            <Action>
                            </Action>
                        </Event>
    <Event async="true" methodName="onDataLoad" name="onDataLoad" onserver="true">
                            <SubmitRule>
                            </SubmitRule>
                            <Params>
                                <Param>
                                    <Name>dataLoadEvent</Name>
                                    <Value>
                                    </Value>
                                    <Desc>                                    <![CDATA[]]>
                                    </Desc>
                                </Param>
                            </Params>
                            <Action>
                            </Action>
                        </Event>
    
    获取节点信息

    String nodecode = (String) this.getAppAttr(AppControlPlugin.NODECODE);

    Portal登录过程
    nc.uap.portal.login.listener.PortalLoginListener.onclick(MouseEvent<ButtonComp>)//点击登陆
    
    nc.uap.portal.login.itf.LoginHelper.processLogin(AuthenticationUserVO)//登陆操作以及一些Cookie写入操作
    nc.uap.portal.user.impl.PortalLoginHandler.afterLogin(LfwSessionBean)//登陆操作的一些具体处理类
    nc.uap.portal.user.impl.PortalLoginHandler.loginPluginExecutor(Object, String)//执行登陆插件
       - 登陆插件看到三个:[nc.bs.hrss.pub.plugin.LoginHandler, nc.ssc.task.jobmanage.SSCLoginPersonPortalPlug, uap.iweb.user.UserLoginForPt
    
    ------------登陆过程基本完成
    uap.iweb.user.UserLoginForPt.afterLogin(PtSessionBean)//登陆完成后写入Cookie
    
    //前台Cookie校验
    ensureUserStateSecurity   portal.js
    getCookie    PageUtil.js
    
    //portal会话bean
    nc.uap.portal.deploy.vo.PtSessionBean
    nc.uap.lfw.login.vo.LfwSessionBean
    
    //portal登陆执行插件必须实现接口
    nc.uap.portal.user.itf.IUserLoginPlugin
    

    相关文章

      网友评论

          本文标题:Portal一些类

          本文链接:https://www.haomeiwen.com/subject/aydcvxtx.html