EOS6一句话知识点整理GOOD

01  取变量赋值
01.1正确的赋值(数组下标从1开始)
    左值         右值                                右值类别    
    oOrg/orgid   oaOmEmporg[1]/omOrganization/orgid  变量
01.2错误的赋值
    左值         右值                                右值类别
    sTemp        (空,不写任何东西)                   常量
01.2正确的赋值
    左值         右值                                右值类别
    sTemp        ""                                  表达式

02  取表达式赋值
02.1字符串传化为int的表达式
    左值         右值                                右值类别    
    iOrgid       oOmEmployee.getInt("orgid")         表达式
02.2字符串赋值的表达式
    左值         右值                                右值类别
    sSeq         9999.1                              常量
    oOrg/orgseq  sSeq+oOrg.get("orgid")+"."          表达式
02.3表达式赋值
    左值         右值                                右值类别
    iOrglevel    getInt("orglevel")+1                表达式
    sOrgseq      to.getString("orgseq")+oOrg.getString("orgid")+"."  表达式

03  遍历对象/赋值
    左值                                           右值         右值类别
    ctAcIdentity/_expr[1]/acOperator.operatorid    ...          ...
    f:ctOrg/_expr[1]/omOrganization.orgid          ...          ...
    ctPosi/_expr[10]/omOrganization.orgid          ...          ...

04  查找第一级机构的注意点
    oOrg/omOrganization=null(表达式)        ---无效,它会将所有数据查询出来(带自关联)
    oOrg/omOrganization/orgid=null(表达式)  ---无效,它会将所有数据查询出来(带自关联)
    oOrg/orglevel=1(常量)                   ---正确

05  取Session值
05.1从页面流中取(尤其在集群环境中,必须这样使用)
    s:userObject/attributes/empid
    <h:hidden name="oEmp/empid" property="userObject/attributes/empid" scope="s"/>
    <h:text property="empid" scope="s"/>
    <h:text property="operatorid" scope="s"/>
    <h:text property="userObject/userId" scope="s"/>
05.2从MUO中取(禁止在集群环境中使用)
    m:empid

06  养成定义变量类型的习惯
    逻辑构件中,使用不定义的变量是,默认该变量的类型为java.util.HashMap, 故应先定义变量类型的习惯

07  使用联合主键的注意点
    联合主键(not null),在expandEntity时,必须所有的KEY列都赋值,否则系统不报错、结果也不对

08  处理BUG的一种方式
    例如: 更新职工机构关系
    用updateEntityByTemplate报
[FlowName=com.primeton.abframe.organization.OrgManager.test.biz][activity name=更新职工机构关系][activity id=invokePojo1][exception=com.primeton.das.entity.impl.hibernate.QueryException: could not resolve property: omEmployee1.omOrganization.orgid of: com.primeton.abframe.abfdataset.OmEmporg]
[eos-default][2008-08-16 10:59:01,687][ERROR][com.primeton.ext.engine.core.processor.AbstractBizProcessor][Line:217]
java.lang.reflect.InvocationTargetException
    最后用deleteEntity+insertEntity代替
    体会: 该BUG在后续版本中已改, 但时刻记住采用逆向思维的工作方式

09  [问题]:项目abframe缺少必要的源文件"com.primetom.eos.test/src"
    [解决]:在透视图“资源”导航器中,找到.classpath文件, 将包含com.primetom.eos.test/src的行去掉

10  [问题]:提示  工程[abframe]对应的Web应用eos-default非法,请检查你的Web Server配置
    [解决]:点选工程(abframe)-->右键-->属性-->EOS项目属性-->检查、修改各项配置

11  [问题]:Studio运行速度慢
11.1更改eclipse目录下eclipse.ini的参数
    -vmargs
    -Xms64m      -->-Xms256m
    -Xmx512m     -->-Xmx768m
    -XX:PermSize=64M
    -XX:MaxPermSize=128M
    -XX:+UseParallelGC
11.2Studio-->自动构建-->去掉勾选. 实时编译会影响开发效率, 故先禁止自动构建, 等到调式时手工触发进行构建.
 
12  将左外连接的ORACLE语句 改成标准SQL/92语法的语句
  [ORACLE语句]
    select rf.*,f.funcname,a.appname,fg.funcgroupname,pr.partytype,pr.partyid
      from ac_rolefunc rf,ac_function f,ac_application a,ac_funcgroup fg,om_partyrole pr
        where rf.funccode=f.funccode(+) and rf.appid=a.appid(+) and rf.funcgroupid=fg.funcgroupid(+) and rf.roleid=pr.roleid
  [SQL/92标准]
    select rf.*,f.funcname,a.appname,fg.funcgroupname,pr.partytype,pr.partyid
    from ac_rolefunc rf left outer join ac_function f
    on rf.funccode=f.funccode
    left outer join ac_application a
    on rf.appid=a.appid
    left outer join ac_funcgroup fg
    on rf.funcgroupid=fg.funcgroupid
    inner join om_partyrole pr
    on rf.roleid=pr.roleid

13  命名SQL和逻辑流构件Criteria中的IN的使用的区别
13.1对命名SQL中的IN传递变量
    <parameter javaType="String" jdbcType="VARCHAR" property="mngrole"/>
    ...
    <select id="..." parameterClass="commonj.sdo.DataObject" resultMap="resultMap2">
        select ...
        from ac_role r
        where r.roleid in($mngrole$)  
    </select>
    ...    
    则,在逻辑流中,变量mngrole的值应格式化成'1','2','3'
    注意:不能写成('1','2','3')或“'1','2','3'” 等其它方式
13.2updateEntityByCriteriaEntity等(包含Criteria的构件)中的IN操作
    变量mngrole的值应格式化成1,2,3
    注意:不能写成'1','2','3'等其它方式

14  Datacell的行列的操作(行号,列号都从0开始)
    /**
    * 根据行索引和列索引获得单元格的方法.cellIndex也可以写单元格的name名称.
    * @param {Object} rowIndex
    * @param {Object} cellIndex
    */
    var dchavenot = $id("dcHavenot");
    dchavenot.afterRefresh = function(){
        var len  = dchavenot.getPageRowCount();  //getTotalRowCount
        for (var r=0; r<len; r++){
            var cell4 = dchavenot.getCell(r,3); //行号,列号都从0开始, 但列也可写单元格的name名称
            dchavenot.setCellValue(cell4, $name("sPartytype").value);         
            var cell5 = dchavenot.getCell(r,4);
            dchavenot.setCellValue(cell5, $name("iPartyid").value);
        }
    }

15  Datacell中增加定制按钮
    <r:toolbar tools="nav,pagesize,custom" location="top" />
    ......
    //写js
    //增加"直接授予的权限"Datacell定制BUTTON
    $id("dcOperfunc").setCustomTool("<input type='button' value='新增' οnclick='addRec();'>");
        ......
    function addRec() {
           ......
    }

16  Datacell中插入一行并赋值
    //获得人员机构当前活动行,把lookUp返回值设置到datacell的单元格中
    function returnFuncOrg(arg){    
        var lookup = $id("lookupID");
        lookup.value = arg[1];
        lookup.displayValue = arg[1];
        
        var row = dcemporg.getActiveRow();
        var entity = dcemporg.getEntity(row);
        entity.setProperty("omOrganization/orgid",arg[0]);
        entity.setProperty("omOrganization/orgname",arg[1]);
        entity.setProperty("omOrganization/orgtype", arg[2]);
        entity.setProperty("omOrganization/status", arg[3]);
        entity.setProperty("omEmployee/empid",$name("oEmp/empid").value );
        entity.setProperty("ismain", "n");
        dcemporg.refreshRow(row);
    }

17  Datacell中对当前行赋初始值
17.1例1
    dcempposi.afterAdd = function(row) {
        var entity=dcempposi.getEntity(row);    
        entity.setProperty("omEmployee/empid",$name("oEmp/empid").value );
        dcempposi.refreshRow(row);
        return true;
    }
17.2例2
    var myBizDictCell=$id("bizDictCell");
    myBizDictCell.afterAdd=afterAddBizDict;
    function afterAddBizDict(row){
        var entity=myBizDictCell.getEntity(row);    
        entity.setProperty('dicttypeid',myBizTypeCell.getEntity(myBizTypeCell.activeRow).getProperty("dicttypeid"));
        myBizDictCell.refreshRow(row);
        return true;
    }

18  Datacell的列只能显示逻辑流对象的前2级(层)的属性,要显示第3级及以后的属性,可通过fillCodeDesc构件将其转化到第1级。
    下例中,queryOperfunc.biz的查询结果oaOperfunc[]/acFunction/acFuncgroup/acApplication/appname在页面中显示不出来,
    只能在逻辑流中用fillCodeDesc构件将oaOperfunc[]/acFunction/acFuncgroup/acApplication/appname转化成oaOperfunc[]/appname,
    然后才能显示出。
        <r:datacell id="dcOperfunc" rowStyleClass="rowclass2"
            rowEvenStyleClass="rowclass1" showIndex="false"
            queryAction="org.gocom.abframe.organization.employee.EmpManager.queryOperfunc.biz"
            paramFormId="qfOperfunc" xpath="oaOperfunc" width="100%" height="50"
            pageSize="10" pageSizeList="10,20,30" submitAction="">

            <r:toolbar tools="nav,custom,info" location="botton" />
            <r:field fieldName="acFunction/funcname" label="<%=pnOperfunc_acFunction_funcname%>" />
            <r:field fieldName="funcgroupname" label="<%=pnOperfunc_funcgroupname%>" />
            <r:field fieldName="appname" label="<%=pnOperfunc_appname%>" />
            <r:field fieldName="authtype" label="<%=pnOperfunc_authtype%>" allowModify="false">  
                <d:select dictTypeId="ABF_YESORNO" />
            </r:field>
            <r:field fieldName="startdate" label="<%=pnOperfunc_startdate%>" />  
            <r:field fieldName="enddate" label="<%=pnOperfunc_enddate%>" />
        </r:datacell>

19  Datacell页面接收传入参数的问题
19.1以下方法不能用
    <h:hidden name="oEmp/empid" property="iEmpid"/>
19.2以下方法能用
    <input type="hidden" name="oEmp/empid" value='<b:write property="iEmpid" propertyType="parameter"/>'/>

20  取Datacell的总行数
    var len = $id("dcHave").table.tBodies[0].rows.length;

21  取缺省生效日期,失效日期,作为Datacell中的缺省值
    /*****
    <%   
        String sToday;   
        java.text.SimpleDateFormat formatter = new java.text.SimpleDateFormat("yyyy-MM-dd");   
        java.util.Date dt = new java.util.Date();   
        sToday = formatter.format(dt);   
    %>
    ******/
    //取缺省生效日期(当天),失效日期(下个月),格式yyyy-mm-dd
        var dt,day1="",day2="";
        dt = new Date();
        day1 += dt.getFullYear()+"-";
        day2 += (dt.getFullYear()+1)+"-";
        if ((dt.getMonth() + 1)<10) {
            day1 += "0"+(dt.getMonth() + 1)+"-";
            day2 += "0"+(dt.getMonth() + 1)+"-";
        }else{
            day1 += (dt.getMonth() + 1)+"-";
            day2 += (dt.getMonth() + 1)+"-";
        }
        if (dt.getDate()<10 ){
            day1 += "0"+dt.getDate();
            day2 += "0"+dt.getDate();
        }else{
            day1 += dt.getDate();
            day2 += dt.getDate();
        }

22  动态树的初始化
    function getInitParam()
    {
        //alert($name("sOrgname").value);
        $id("orgTree").getRootNode().setText($name("sOrgname").value);
        return "<oParentOrg><orgid>"+$name("iOrgid").value+"</orgid></oParentOrg>" ;
    }

23  取静态树的选中节点并返回(lookup方式调用)
    场景:一棵静态树,多根节点treeNode的xpath="oaOrg",子节点xpath="oaOrgsub"。要求将选中的所有节点的orgid用逗号连接,将选中的所有节点的orgname用逗号连接,返回两连接串。
    页面:http://127.0.0.1:8080/eos-default/organization/org/mngorg_assign.jsp
    JS代码:
    <input type="button" value="返回" οnclick="javascript:rtnSelectVal();">
    .......
    function rtnSelectVal() {
        var treeObj = $id("mngorgTree");
         
        var orgChecked=treeObj.getCheckedList("org");
        var orgsubChecked= treeObj.getCheckedList("orgsub");
         
        //alert(orgsubChecked.list[0].getProperty("orgid"));
        //alert(orgsubChecked.getLength());

        var sorgid="";
        var sorgname="";
        var len =-1;
        
        len = orgChecked.getLength();
        for( var i = 0 ; i < len; i++ ) {
            sorgid+=orgChecked.list[i].getProperty("orgid")+",";
            sorgname+=orgChecked.list[i].getProperty("orgname")+",";
        }
          
        len = orgsubChecked.getLength();
        for( var i = 0 ; i < len; i++ ) {
            sorgid+=orgsubChecked.list[i].getProperty("orgid")+",";
            sorgname+=orgsubChecked.list[i].getProperty("orgname")+",";
        }              
        sorgid = sorgid.substr(0, (sorgid.length-1));
        sorgname = sorgname.substr(0, (sorgname.length-1));
        alert(sorgid);
        alert(sorgname);
        returnValue = [ sorgid,sorgname ];
        window.close();
    }    

24  刷新树节点
24.1在调用节点处刷新(如:右键新增下级机构)
    function addSubOrg(node){
        sUrl=contextPath+"/organization/org/org_add.jsp";
        var argument = node.getProperty("orgid")+"-"+node.getProperty("orglevel")+"-"+node.getProperty("orgseq");
        showModalCenter(sUrl,argument,callBack,570,400,"<b:message key='orgSubMaintain_l_menu_addSubOrg'/>");
        node.reloadChild();
    }
24.2在被调用页面返回时触发刷新动作(如:在界面右边的Tab页下点弹出式新增机构,新增成功后要返回主页面,同时刷新左边的树节点)
    function addRec2() {
        var sUrl=contextPath+"/organization/org/org_add.jsp?pid="+$name("iOrgid").value;
        var argument = $name("iOrgid").value+"-"+$name("iOrglevel").value+"-"+$name("sOrgseq").value  ;
        showModalCenter(sUrl,argument,callBack,600,400,"<%=addOrg %>");
    }
    function callBack(returnValue) {
        parent.parent.orgTree.getSelectNode().reloadChild();
        window.location.href=window.location.href+"&";
    }

25  用ComboSelect,并实现页面的初始化(过滤)
    <td class="form_label">
        上级机构
    </td>
    <td colspan="1">
        <%--
          <h:text property="oOrg/omOrganization/orgid" readonly="true"/>
        --%>
        <r:comboSelect id="countryList" name="oOrg/omOrganization/orgid"  disabled="true"
            queryAction="com.primeton.abframe.organization.organization.OrgManager.queryOrgidname.biz"
            textField="orgname" valueField="orgid" xpath="oaOrgidname" width="100" initParamFunc="initComboSelectParam"
        />
    </td>
    ............................
    function initComboSelectParam(){
        return "<oOrgidname><orgid>"+$name("iParentorgid").value+"</orgid></oOrgidname>" ;
    }
    //http://127.0.0.1:8080/eos-default/organization/org/org_add.jsp

26  弹出式窗口实现新增操作
26.1从查询结果页面中发起:
  http://127.0.0.1:8080/eos-default/organization/emp/emp_query_result.jsp
  主要调用信息:
  <%
    String contextPath = request.getContextPath();    
  %>
  ......
  function addRec2() {
    var sUrl="<%=contextPath%>"+"/organization/emp/empopr_add.jsp";
    showModalCenter(sUrl,null,callBack,800,600,"新增人员信息");
  }
 
  function callBack(returnValue) {
    window.location.href=window.location.href+"&";  //保存原有tab输入参数
  }
26.2新增的弹出页面
  http://127.0.0.1:8080/eos-default/organization/emp/empopr_add.jsp
  处理逻辑:用ajax方式调用,并用window.close()关闭
26.3优点:不用多增加一个子页面流

27  弹出式窗口实现修改操作
27.1从查询结果页面中发起:
  http://127.0.0.1:8080/eos-default/organization/emp/emp_query_result.jsp
  主要调用信息:
  function mdfRec2() {
    var g= $id('group1');
    if(g.getSelectLength()==1){
      var parm="iOrgid="+g.getSelectParams("oaOrgEmpQry/inorgid")+"&iEmpid="+g.getSelectParams("oaOrgEmpQry/empid")+"&lOperatorid="+g.getSelectParams("oaOrgEmpQry/operatorid");
      var sUrl="com.primeton.abframe.organization.employee.empOprAndOtherModify.flow?"+parm;   
      showModal(sUrl,null,callBack,700,600,200,50,"修改人员信息");
    }else{
      alert("请选择一行记录!");
      return;
    }
  }
  function callBack(returnValue) {
    window.location.href=window.location.href+"&";
  }
27.2修改的弹出页面
  http://127.0.0.1:8080/eos-default/organization/emp/empopr_add.jsp
  处理信息:
    <input type="button" value="保存" οnclick="javascript:mdfEmpOpr();window.close();">
    .......
    function mdfEmpOpr(){
        var frm = $name("dataform1");
        frm.submit();
    }
  处理逻辑:页面流方式
27.3优点/缺点:必须增加一个子页面流,主要是完成修改前的查询

28  showModalCenter中传递字符串
    var sUrl="<%=contextPath%>"+"/organization/emp/emp_power_rightkey_maintain.jsp";
    var argument = node;
    //var argument = node.getProperty("empid")+"-"+node.getProperty("operatorid")+"-"+node.getProperty("orgid")+"-"+node.getProperty("position");
    showModalCenter(sUrl,argument,callBack,570,450,"维护人员权限");

29  showModalCenter中传递对象
    function maintainPowerEmp2(node){
        var sUrl=contextPath+"/organization/emp/emp_power_rightkey_maintain.jsp";
        var argument = node; //传递树节点对象
        showModalCenter(sUrl,argument,callBack,570,450,"<b:message key='orgSubMaintain_l_menu_maintainPowerEmp2'/>");
    }

    function callBack(returnValue) {
        window.location.href=window.location.href+"&";
    }

30  取主调页面传过来的参数
    在被调页面中的处理如下,
    function init(){
        //取得主页面传过来的参数
        var argument = window["dialogArguments"];
        var pos = argument.indexOf("-");
        alert(argument.substr(0, pos-1));
        $name('oEmpposi/omPosition/positionid').value= argument.substr(0, pos);
        alert(argument.substr(pos+1));
        $name('oEmporg/omOrganization/orgid').value= argument.substr(pos+1);
    }

31  页面流中传递汉字变成乱码的问题
    改D:\eos6la2\apache-tomcat-5.5.20\conf\server.xml文件,加URIEncoding="GBK", 或加URIEncoding="UTF-8"。如下示,
    <Connector port="8080" maxHttpHeaderSize="8192" maxThreads="150" minSpareThreads="5" maxSpareThreads="75" enableLookups="false" redirectPort="8443" acceptCount="100" connectionTimeout="20000" disableUploadTimeout="true" URIEncoding="GBK"/>  

32  调试(尤其是对命名SQL调试)时,随时跟踪SQL日志
    SQL日志存放位置D:\eos6la2\eosserver\working\eos-default\logs\eos-engine.log

33  Ajax调用的写法
        var ajax = new Ajax("com.primeton.abframe.organization.organization.OrgManager.removeOrg.biz");
        ajax.addParam("oRmvOrg/orgid", node.getProperty("orgid") );
        ajax.addParam("oRmvOrg/orgseq", node.getProperty("orgseq") );  
        ajax.submit();
        var rtnNode = ajax.getResponseXMLDom();
        if( rtnNode ) {
            if( ajax.getValue("root/data/iRtn") == 0 )
                alert( "操作成功!" );
            else {
                alert( "操作失败!" );    
            }        
        } else {
            alert("操作失败!");
        }

34  弹出页面选择并返回值的实现(如: 选择上级岗位)
    position_add.jsp
        ........
        <td class="form_label">
            上级岗位
        </td>
        <td colspan="1">
            <w:lookup property="parentPosName" name="parentPosID"  readonly="true" displayProperty="parentPosName"  dialogTitle="选择上级岗位"  width="370" height="550" lookupUrl="/organization/position/position_tree.jsp" onReturnFunc="lookupRetFun"></w:lookup>
           
        </td>
        .........
    ......
    function lookupRetFun( arg ) {
        return true;
    }

35  截字符串
    String s=".0.1.3.511.";    //最后返回".0.1.3."
    int i=s.lastIndexOf('.');  //=10
    s=s.substring(0, s.lastIndexOf('.'));
    s=s.substring(0, s.lastIndexOf('.')+1);

36  简单页面校验的写法
    <h:text property="acmenu/menuname" validateAttr="allowNull=false;maxLength=40"/>
    <h:text property="acmenu/displayorder" validateAttr="type=number;minValue=-32768;maxValue=32767" />
       
37  保存后,关闭本页面(弹出窗口)的处理方式
    <l:equal property="iRtn" targetValue="0" compareType="number" scope="request" >
        <script>
            //window['returnValue'] = $id("function_code").value;
            alert("保存成功!");
            window.close();
        </script>
    </l:equal>
    <l:lessThan property="iRtn" targetValue="0" compareType="number" scope="request">
        <script>
            alert("保存失败!");
        </script>
    </l:lessThan
  • 0
    点赞
  • 4
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值