业务系统常用开发技巧1.docx

上传人:b****8 文档编号:29464896 上传时间:2023-07-23 格式:DOCX 页数:22 大小:203.32KB
下载 相关 举报
业务系统常用开发技巧1.docx_第1页
第1页 / 共22页
业务系统常用开发技巧1.docx_第2页
第2页 / 共22页
业务系统常用开发技巧1.docx_第3页
第3页 / 共22页
业务系统常用开发技巧1.docx_第4页
第4页 / 共22页
业务系统常用开发技巧1.docx_第5页
第5页 / 共22页
点击查看更多>>
下载资源
资源描述

业务系统常用开发技巧1.docx

《业务系统常用开发技巧1.docx》由会员分享,可在线阅读,更多相关《业务系统常用开发技巧1.docx(22页珍藏版)》请在冰豆网上搜索。

业务系统常用开发技巧1.docx

业务系统常用开发技巧1

1.取到表格上的某个格子,用于等表格加载完后用脚本往cell里设值;

例:

综合测评的测评方案定义的针对年级是这样搞的

2.获取选中的所有checkbox对象

varcheckboxList=Ext.query("#V_QGZX_BCTJinput:

checked[@name=cb_select_field]");

3.需要传递的参数如果包含汉字,一定要在传前编码

filter=StringURLEncode(filter);

4.弹出的模态对话框的参数传递

例如:

在做逐条审核的时候,弹出的审核页面就是一个模态对话框,通过在BDTAG上面增加一个按钮,该按钮触发一个动作,如ztsh()函数

functionztsh()//BDTAG里面,逐条审核

{

varurl="/epstar/app/template.jsp?

mainobj=SWMS/CJPXKSXT/T_CJKS_SHB&tfile=XGMRMB/SHYM";

varspyj=window.showModalDialog(url,"审批意见","dialogWidth:

400px;dialogHeight:

300px");

if(spyj=="notgoon")return;

EditField_SetValue("SHYJ",spyj);

if(EditForm_Save("T_CJKS_SHB")){

frameContents.query();//刷新页面

}

5.脚本->callservice->login_page.jsp->Service->callserviceImpl

5.1.同步:

varserviceUrl="/epstar/app/template.jsp?

mainobj=SWMS/ZHSZCPGLZXT/ZHSZCPPZ/T_ZHCP_CPDY&tfile=XGMRMB/logic_dealGrades";

varparam=[];

param["type"]="checkForCpdyQy";

param["cpdybh"]=cpdybh;

param["gradesStr"]=checkedStr;//注意前面后面参数不同

//传到后台处理

varbackStr=callService(serviceUrl,param,callback,null,null);//callback是回调函数

5.2.异步:

代码位置:

V_QGZX_BCTJ/XGMRMB/JB.jsp

例如:

functionupdateRecord(){

if(Page_GetStrLen(EditField_GetValue("XH"))>10){alert("学号长度过长");return;}

if(Page_GetStrLen(EditField_GetValue("SHYJ"))>10){alert("审核意见长度超出范围");return;}

varsURL="/epstar/app/template.jsp?

mainobj=SWMS/CJPXKSXT/V_CJKS_CJST&tfile=XGMRMB/LOGIC_CJKS";

varparam=[];

param["type"]="updateRecord";

param.WID=wid;

param["XH"]=EditField_GetValue("XH");

param["XB"]=EditField_GetValue("XB");

param["SHZT"]=EditField_GetValue("SHZT");

param["SHYJ"]=EditField_GetValue("SHYJ");

varsfkj=EditField_GetValue("SFKJ");

if(sfkj){

param["SFKJ"]=1;

}else{

param["SFKJ"]=0;

}

param["FS"]=EditField_GetValue("FS");

callService(sURL,param,ResultShow,null,null);

}

functionResultShow(xmlDocStr)

{

if(Page_GetResultXmlMessage(xmlDocStr)=="true"){

alert("提示:

保存成功");

frameMyquery.query();

window.close();

}else{

alert("提示:

失败");

}

}

注意:

同步就是要等一个事件完成之后才能下一个;异步就是同时可以完成几个事件

6.Logic页面的模式化写法

例见V_QGZX_GWPS/XGMRMB/logic_gwps.jsp

例如:

<%@pageimport="com.wiscom.system.log.Logger"%>

<%@pageimport="java.io.PrintWriter"%>

<%@pageimport="com.wiscom.epstar.system.util.XmlMessage"%>

<%@pagecontentType="text/html;charset=utf-8"pageEncoding="utf-8"%>

<%@pageimport="com.wiscom.app.swms.service.factory.GenericFactory,com.wiscom.app.swms.service.CjksService"%>

<%@includefile="/app/_head.jsp"%>

<%

Stringtype=request.getParameter("type");

Stringwid=request.getParameter("WID");

Stringxh=request.getParameter("XH");

Stringxb=request.getParameter("XB");

Stringshzt=request.getParameter("SHZT");

Stringshyj=request.getParameter("SHYJ");

Stringsfkj=request.getParameter("SFKJ");

Stringfs=request.getParameter("FS");

CjksServicesbiService=(CjksService)com.wiscom.app.swms.service.factory.GenericFactory.getServiceInstance(CjksService.class);

XmlMessagexm=newXmlMessage();

PrintWriterwriter=response.getWriter();

try{

if("updateRecord".equals(type)){

xm.setMessage(sbiService.updateRecord(wid,xh,xb,shzt,shyj,sfkj,fs));

xm.setType(XmlMessage.TYPE_SUCCESS);

}

}catch(Exceptione){

Logger.debug("&&&&&&&&&&&&&&&&&&&&&&&&&"+e.getMessage());

xm.setType(XmlMessage.TYPE_FAILURE);

xm.setMessage(e.getMessage());

}finally{

Logger.debug("88888888888888888888888");

response.setContentType("text/xml;charset=utf-8");

writer.write(xm.toString());writer.close();

}

%>

注意:

字段是表和视图中共有的字段

7.Service的几个注意事项

命名规范:

HxfService

function名称与type及logic中调用的方法名称一样。

实现体有两种:

基于orcale及基于DB2

logic中对于service的定义就是从配置文件中读取它所对应的实现体。

同步异步的概念。

开发规范:

一个子系统一个service;一个模块一个logic

7.1.命名不要全大写,如ZXJFFService

7.2.一个子系统不要定义多于3个的Service

7.3.尽量在service中屏蔽orcle和db2的差异

具体地:

1.epstar里的固定长度对应的db2里的char,oracle里的varchar,不要用固定长度,字符型字段统一使用epstar客户端建模工具里的"文本:

可变长度";

2.db2里的sequence一般最大值为9位9,可通过将sequence类型指定为bigint使db2支持更多位的sequence(有兴趣可参看附件).oracle默认方式可建30位9的sequence.

3.db2里没有createorreplace语句(oracle里有),所以在写初始化脚本的时候,不要写createorreplace

  而要先删再建:

droptablev_ss_fjxxst;

              createviewv_ss_fjxxstas...

4.db2视图里不能直接用orderby语句,而oracle可以直接使用,那么db2里在使用orderby时,应该在子句里

  用orderby,如:

select*from(selecta,b,cfromtable1orderbya)astab

5.db2里的SQL要求比较严格,字符型字段值不能与数字比较,数字型字段不能与字符串比较,否则会出错,如XH是varchar类型,那么在select*fromt_xsjbxx_xsjbbwherexh=1是会报错的,因为1是整数

7.4.方法名和变量名第一个单词的首字母必须小写,其后单词的首字母必须大写

如:

updateRecord

8.多TAB页的规范做法

可参考V_QGZX_GWSHTJ/XGMRMB/view_mainFrame.jsp

9.获取sequence

getSeqNextValue("SEQ_ZHCP_CPJGXX");

10.只允许输入整数、n位小数的正则表达式

10.1.利用建模工具

10.2.利用JS脚本

例见T_ZHCP_CPJGXX/XGMRMB/JB.jsp,35行附近

if(!

/^[-]?

\d*[.]?

\d*$/.test(document.getElementById("Z").value.trim()))

{

alert("提示:

只能输入数字,请重新输入!

");

returnfalse;

}

//判断不能超值

11.移花接木

<%

((ContextParameters)request.getAttribute(ContextParameters.ID_STORED_IN_REQUEST)).setParamValue(ContextParameters.PARAM_TEMPLATE_FILE,"");

%>

参考:

V_QGZX_SGZST/XGMRMB/XJ_BGTAG.jsp

12.判断某表中某字段是否有某值

说明:

如勤工助学申请岗位时,岗位要求不允许黑名单中的学生申请,因此当学生A去申请该岗位时,会去黑名单表中找是否有该学生,如果有,不给申请。

//获取某表中符合条件的记录条数

checkNumber(objPath,filter);

参数:

objPath表名或业务对象路径

Filter是where后面的过滤条件

例:

参见V_QGZX_GWPS/XGMRMB/JB.jsp中的checkAppliable方法

functioncheckAppliable(gwbm,xh){

//判断是否困难生、是否需要上岗证、是否允许一人多岗、是否受黑名单控制

//查出岗位的限制

vargwxxDOM=Page_GetServerDataXmlCP("SWMS/QGZXGLZXT/QGZXGL/T_QGZX_GZGW","SQKSRQ,SQJSRQ,SFZZDKNS,SFXYSGZ,SFYXYRDG,SFSHMDXZ","GWBM="+gwbm,"","");

//检查是否在申请期间

varsqksrq=getFieldValue(gwxxDOM,0,"SQKSRQ");

varsqjsrq=getFieldValue(gwxxDOM,0,"SQJSRQ");

sqksrq=sqksrq.substring(0,10);

sqjsrq=sqjsrq.substring(0,10);

//alert(sqksrq+":

"+curDate+":

"+sqjsrq);

if(sqksrq>curDate||sqjsrq

alert("提示:

该岗位不在申请时间内,审批无法通过!

");

returnfalse;

}

//是否需要检查困难生SFZZDKNS

if(getFieldValue(gwxxDOM,0,"SFZZDKNS")=="1"){

//查看该学生是否困难生,不是困难生者,返回false,申请失败

if(!

isKns(xh))

{

alert("提示:

不是困难生,审批无法通过!

");

returnfalse;

}

}

//是否需要检查上岗证SFXYSGZ

if(getFieldValue(gwxxDOM,0,"SFXYSGZ")=="1"){

//查看该学生是否有上岗证,如果没有上岗证,返回false,申请失败

if(checkNumber("SWMS/QGZXGLZXT/QGZXGL/T_QGZX_SGZ","XH='"+xh+"'")*1==0)

{

alert("提示:

没有上岗证,审批无法通过!

");

returnfalse;

}

}

//是否需要检查受黑名单控制SFSHMDXZ

if(getFieldValue(gwxxDOM,0,"SFSHMDXZ")=="1"){

if(checkNumber("SWMS/QGZXGLZXT/QGZXGL/T_QGZX_HMD","XH='"+xh+"'","XH")*1>=1)

{

alert("提示:

被加入黑名单,审批无法通过!

");

returnfalse;

}

}

//是否需要检查允许一人多岗SFYXYRDG

if(getFieldValue(gwxxDOM,0,"SFYXYRDG")!

="1"){

if(checkNumber("SWMS/QGZXGLZXT/QGZXGL/T_QGZX_XY","SHZT=99andgwbmin(selectgwbmfromt_qgzx_gzgwt_gzgwwheret_gzgw.sfyxyrdg=0)andXH='"+xh+"'")*1>0)

{

alert("提示:

已有成功申请的记录,审批无法通过!

");

returnfalse;

}

}

returntrue;

}

13.获取某表中符合条件的记录的某些字段值

getFormData()方法

//查询

functionquery(){

vardata=Epx.getFormData('T_CJKS_SHB');

varfilter="filter=T_CJKS_SHB:

1=1";

for(fieldindata)

{

if(data[field])

{

if(field=='mainobj'||field=='mainobjidtype'||field=='editfield_wid'||field=='taglib_userid')continue;

//用like查询的字段

if(field=='XM'||field=='XH')

filter+="and"+field+"like'%"+replaceSingleQuotesByDouble(data[field])+"%'";

else

filter+="and"+field+"='"+replaceSingleQuotesByDouble(data[field])+"'";

}

}

filter=StringURLEncode(filter);

varurl="/epstar/app/template.jsp?

mainobj=SWMS/CJPXKSXT/T_CJKS_SHB&tfile=XGMRMB/BGTAG&page=T_CJKS_SHB:

curpage=1,pagesize=20";

parent.main.location.href=url+"&"+filter;

}

14.QueryString助你获取URL中的参数

例:

参见T_ZHCP_KTSZ/XGMRMB/BGTAG..jsp,配合DBTAG.jsp

varrequest=newQueryString();

BDTAG中:

<%

Stringxg=request.getParameter("xg");

java.lang.BooleantextOnly=java.lang.Boolean.FALSE;

if(xg!

=null&&xg.equals("1"))

textOnly=java.lang.Boolean.TRUE;;

java.lang.BooleancprReadOnly=java.lang.Boolean.FALSE;

if(xg!

=null&&xg.equals("2"))

cprReadOnly=java.lang.Boolean.TRUE;

%>

15.使按钮失效

15.1.Epstar的按钮

ToolButton_SetDisable(”按钮ID”);

15.2.学工中ext扩展过的按钮

toolbar_T_XSJBXX_XSJBB.items.get("btn_chosen").disable();

16.加入等待进度条使慢可以接受

Epx.showProgressDialog();//显示进度条

Epx.hideProgressDialog();//隐藏进度条

17.借鸡生蛋(保存数据到另外一个业务对象)

18.种树

18.1.树一:

18.2.树二:

19.配流程

显示:

……

vartypeId=

document.getElementById("JXJZLBM").value;

showProcess("SWMS/JXJGLZXT/JXJSQ/T_JXJ_JXJXXB",typeId);

保存:

saveProcess("SWMS/JXJGLZXT/JXJSQ/T_JXJ_JXJXXB",typeId);

删除:

例见/T_JXJ_JXJZLB/XGMRMB/BDTAG.jsp

下面添加:

document.getElementById("sffdjInitValue").value=EditField_GetValue("SFFDJ");

//把流程嵌进来

vartypeId=document.getElementById("JXJZLBM").value;

showProcess("SWMS/JXJGLZXT/JXJSQ/T_JXJ_JXJXXB",typeId);

20.定制列

例见V_QGZX_BCTJ/XGMRMB/BCFF_BGTAG.jsp

21.获取选择范围字段的值和显示值

${BCJSDW_displayvalue}是BCJSDW的显示值

22.让平台识别普通的input控件

23.服务器端取得表数据简单方法:

24.用js新增、更新或删除记录

用处:

借鸡生蛋,保存数据到另外一个业务对象,如业务对象为视图,要保存数据到表

//保存函数

functionsave(){

varrowList=[];

//新增的纪录

varrow1={recordState:

‘new’};

row1.WID=Epx.GUID();

row1[‘FIELD1’]=‘xxx’;

rowList.push(row1);

//更新的记录

varrow2={recordState:

‘changed’};

row2.WID=‘xxx-xxx-xxx-xxx’;

row2[‘FIELD1’]=‘xxx’;

rowList.push(row2);

//删除的纪录

varrow3={recordState:

‘deleted’,WID:

‘xxx-xxx-xxx-xxx’};

rowList.push(row3);

//取得上下文xml

varxmlDoc=XmlDocument.create();

xmlDoc.loadXML(document.getElementById("xml_T_TABLE_XXX").innerHTML);

vartemplateNode=xmlDoc.documentElement.getElementsByTagName("Template").item(0);

templateNode.firstChild.firstChild.nodeValue='';//清空模板

Epx.showProgressDialog();//显示进度条

Epx.putXmlFromArray({objPath:

"

展开阅读全文
相关资源
猜你喜欢
相关搜索

当前位置:首页 > 高等教育 > 艺术

copyright@ 2008-2022 冰豆网网站版权所有

经营许可证编号:鄂ICP备2022015515号-1