Cache数据库组件开发问题总结.doc_第1页
Cache数据库组件开发问题总结.doc_第2页
Cache数据库组件开发问题总结.doc_第3页
Cache数据库组件开发问题总结.doc_第4页
Cache数据库组件开发问题总结.doc_第5页
已阅读5页,还剩3页未读 继续免费阅读

下载本文档

版权说明:本文档由用户提供并上传,收益归属内容提供方,若内容存在侵权,请进行举报或认领

文档简介

组件开发问题总结1.打开一个类文件,在websource/web目录下1)打开Studio,选择NameSpace为websource,点Open from databasae,Files of 选择.cls文件类型,双击Web包,进入后则现则所有的类文件,File Name:输入要打开的类名称。2.打开一个.JS文件1)打开Studio,选择NameSpace为websource,点Open from databasae,Files of 选择*.js文件类型,进入trakcare/web双击script包,进入后则显示所有的js文件,File Name:输入要打开的js文件名称。3.打开工程File/Open Project,选择要打开的工程 组件:组件中可以包含组件元素ITEM,tableITEM,As val=%request.Get(billnosub)组件的item元素valueget属性中设置,作用是在刷新的时候重新获取元素的值Bs val=#Class(%CSP.Page).Encrypt($lb(web.LXSTESTLOOKUP.getdata)组件的item元素valueget属性中设置,作用是调用cls文件的方法,一般用于隐藏元素,基本上每个组件上的按钮都对应一个隐藏的元素。C对TABLEITEM元素使用s val=rs.GetDataByName(status)作用是在刷新的时候重新获取元素的值D对button元素来讲,要在link中进行一下设置,linkurl中websys.default.csp,linkcomponent中调用本组件的名称,如果调用其他组件的话在JS文件中进行调用:方法为:parent.framesy.location.href=websys.default.csp?WEBSYS.TCOMPONENT=LXSCSPTESTSUB&startD=+startdate+&endD=+enddate+&Bflag=+billflagE放大镜:对textbox这类组件元素如果要用放大镜这种方式,其实也是使用的QUERY,操作方法是在元素属性的LOOKUP中进行设置:1.lookupclassname中调用所建立的类名,如:web.LXSTESTLOOKUP2.lookupqueryname中加入要调用的这个类中的query名,如typelookup3.lookupproperties中加入要传入的参数,如果 是所在组件元素的值,输入组件的名称,之间用逗号分隔。3.lookupJSfunction调用的JS函数名FTATBL元素的链接:对在表中对某一列值进行单击操作,会链接一个新的窗口。设置如下:在tableitem的属性中的LINK中1.linkurl=websys.default.csp2.linkcomponent=linkwindows(调用的组什名)3.link expression= billnosub=_rs.GetDataByName(billno) 其中billnosub是链接组件中的一个元素名,billno是当前界面中的一个元素名,如果有多个要传入,之间用开划线分隔“_”G组件的属性:1.name是组件的名称。2.display type是组件显示的类型,组件最终使用custom.如果设query给组件就要先用find,才可以设置queyname属性,classname是当前组件的所调用的cls文件的名称。Queryname是组件调用的query名字。Include script是当前组件是否包含自己的JS文件,include custom script:是否调用其他JS文件。如果调用其他JS文件,但是要放在一个全局的没有被任何组件调用的JS文件中,在other scripts中加入调用的js文件的名称:websys.js,websys.listrows.js,websys.List.js,websys.List.Tools.js,ALLPRINT.js,DHCWeb.OPOEData.js,DHCWeb.OPCommon.js3.messages:这有的版本在JS中不支持中文,在这里加入每种提示信息的编码和提示信息的内容。以便在js文件中调用:调用方法为 alert(t01) ,其中中括号中的01就是在这里的文本信息编码。H组件程序的导入导出:1.getcomponent:导入websourcew $getcomponentdhccomponent(“组件名称”)如果提示1的话是什么错误,必须以站点的形式保存过才能导出。否则是不能导出来的,报1错误,导了之后存在一个global中websource-dhccomponent-导出global.2.putcomponent:导出websource$putcomponentdhccomponent(“组件名称”)导入global,再从global导入组件:当导入的时候报了1的错误,是因为如果组件存在的话要给原来的文 件删除。再导入就可以了。当导的时候message是否导入进来。如果没有导进来到global里,到给你的global里看看这个节点的MESSAGE是怎么写的3.组件对应的JS,CLS,CSP的更新,JS文件放到JS的文件存放的文件夹,csp放以csp文件存放的目录下。4.再在菜单管理器中给组件重新挂一下。I.复制组件:copycomponent(原组件名,目标组件名)J.一般组件中tableitem都与类文件中的一个相对应的query来实现功能, Query中返回值一定是Tableitem的元素名相同, 入能也要和item元素名相同,否则会报错:Query文件要含以下几部分:1. ClassMethod loclookupClose:这部分中的内容是固定不变的。ClassMethod loclookupClose(ByRef qHandle As %Binary) As %Status PlaceAfter = loclookupExecute Set repid=$LIST(qHandle,2)Kill CacheTemp(repid)Quit $OK2. ClassMethod loclookupExecute:query的具体实现单元ClassMethod loclookupExecute(ByRef qHandle As %Binary, desc As %String) As %StatusSet repid=$I(CacheTemp)If $g(ind)= Set ind=1s rowid=0s desc=$ALPHAUPSSUTIL4(desc)i $g(desc)= d.s desc=%e d.s desc=desc_%&sql(declare loc cursor for select ctloc_rowid,ctloc_desc from SQLUser.ct_loc where %UPPER(ctloc_desc) like :desc)&sql(open loc)f &sql(fetch loc into :locrowid,:locdesc) q:SQLCODE d.i $P(locdesc,-,2)= s locdesc=$P(locdesc,-,2).Do OutputRow2 &sql(close loc)Set qHandle=$lb(0,repid,0)Quit $OKOutputRow2set Data=$lb(locdesc,locrowid)Set CacheTemp(repid,ind)=DataSet ind=ind+1quit3. ClassMethod loclookupFetchp这部分也是固定写法ClassMethod loclookupFetch(ByRef qHandle As %Binary, ByRef Row As %List, ByRef AtEnd As %Integer = 0) As %Status PlaceAfter = loclookupExecute Set AtEnd=$LIST(qHandle,1)Set repid=$LIST(qHandle,2)Set ind=$LIST(qHandle,3)Set ind=$o(CacheTemp(repid,ind)If ind= / if there are no more rows, finish fetchingSet AtEnd=1Set Row=Else Set Row=CacheTemp(repid,ind)/ Save QHandles qHandle=$lb(AtEnd,repid,ind)Quit $OK4. Query loclookup这部分就是Query程序的入口了Query loclookup(desc As %String) As %Query(ROWSPEC = qloc:%String,locid:%String)K.如果对组件元素操作就要用js文件来处理最合理。JS文件与组件的名字要完全相同, JS文件保存在trakcare/web下调用JS文件的程序入口:document.body.onload=BodyLoadHandler; /程序入口/JS文件都是通过获取元素并对元素触发的事件进行操作document.getelementbyid(btn);此方法获取组件元素parent.framesy.location.href=websys.default.csp?WEBSYS.TCOMPONENT=LXSCSPTESTSUB&startD=+startdate+&endD=+enddate+&Bflag=+billflag 调用新的组件并传递参数给组件&Bflag=中的Bflag为调用的组件元素的名字。var patinfo=document.getElementById(JsGetpatinfo)/获取组件中隐藏元素的名字if (patinfo) var enmeth=patinfo.value else enmeth= /取隐藏元素中调用的类方法,但返回来的值已被加密var info=cspRunServerMethod(enmeth,patno) /JS文件调用CLs文件的入口var str=info.split() 对返回值进行分解document.getElementById(pname).value=str0 给元素赋值,var SelRowObj=document.getElementById(Tjsuserz+i);/取组件的table中第i行的TABLEIITEM的名字为Tjsuserz的对象var jsuser=SelRowObj.innerText;获取这个对像的值给一个变量,如果要获取table的隐藏元素值就要用valueobj.onclick=print_click /如果后面加括号就会直接在加载的时候调用事件?不加括号在触发条件的时候调用var Objtbl=document.getElementById(tLINKwindows);获取组件LINKwindows中的Table,t是必须加在组件名前代表table项jobnum=document.getElementById(jobnoz+1).value; 取table中的元素名,z是要加在元素后面的,所加的数字代表取的行数JS文件的打印代码段:var xlApp,xlsheet,xlBook,i,jTemplate=path+LXSBILL.xls xlApp = new ActiveXObject(Excel.Application); xlBook = xlApp.Workbooks.Add(Template); xlsheet = xlBook.ActiveSheet定义并初始代部分.中间过程xlsheet.cells(2,3)=登记号: xlsheet.cells(2,4)=document.getElementById(pno) 写XLS部分.xlsheet.printout; 输出 xlBook.Close (savechanges=false);关闭对像 xlApp.Quit(); 退出对像 xlApp=null;释放对象 xlsheet=null;打印,在类中给查出来的数据放在临时tmp里,tmp(结点,$j,下标变里(记录数))界面进程号L.CSP文件的使用。目前我们使用CSP来将几个组件包在一起来实现我们的一些功能。用我作业的一点原码来分析一下要点 i #Class(websys.SessionEvents).SessionExpired() q 1#(%session.Get(TITLE)# 用灰色背景的这一部分是固定的格式,不用去做改动。 这句是对两个组件在这一个界面中的所站上下百分比,如果想用左右的话就有cols.这两句是在显示的组件调用方法 主要在这一部分,M. 在class中建立类文件:组件所调用的类文件的类型都为Registered在类文件中用”.名称”调用的是在当前class的另一个classmethod,”.” 相当于m程序中的d或$调用其他class中的medthod就用d #class(web.名称).方法(参数)调用query:D #class(%ResultSet).RunQuery(web.类名,query名,参数数组)多个参数之间用逗号分隔类方法的执行:w $class(web.LxsBillTestFind).GetPatInfo(1731308)类QUERY的执行:d #class(%ResultSet).RunQuery(web.LxsBillTestFind,aa,1731308)N.作业心得:通过对组件的开发练习后,总结一点心得,1,有的时候这个东西很怪,明明写的是对的,但是执行的时候就是报错。Js文件被修改了才要进行刷新,class修改了不用进行刷新就可以,如有错误就可以出现2.流程:A.可以先在trakWeb3对组件的内容进行设置(NEW component-修改component properties中的组件的名称name,display type 最终是custom,但是在对就类的时候要首先选为find,在对应好class name和queryname后再修改为custom,如果要对应JS文件,那么要选中include script 选中)如果JS中要显示的提示信息不支持中文,我们可以对JS中的提示信息进行编码。之后alert调用编码就可以显示出中文提示信息B.在增加ITEM的时候有时候找不到ADD,是因为(显示类型不是custom)ADD ITEM(S) to component-首先加入我要实现功能所需要的ITEM的个数,再加入要在列表中显示的列的个数(Table ITEM项)-修改ITEM和Table item项的properties,注意如果要对刷新的时候数据回写要在valueget内加入s val=%request.Get(BillNo),如果datatype是日期型,注意系统有时不能转换此类型有可以是因为最初类型并不是日期型,后来改动了。-对BUTTON类型的,要进行相关操作的关系对应,在这种类型的LINK中设置linkurl为websys.default.csp,linkcomponent为要连接的组件!对这种在界面上的按钮有实操功能,这样要相应的建立一个隐藏ITEM与之配合使用才能实现功能,对隐藏项要进行如下设置:在valueget中加入s val=#Class(%CSP.Page).Encrypt($lb(web.LxsBillTest.GetPatInfo),对 LxsBillTest是class名字,GetPatInfo是class中的方法,于TAble item项,要对valueget设置为s val=rs.GetDataByName(ZTotal),而且这里的ZTotal是table Item的名字,在类的query中的返回值变量的名字要和这个项目的名字是完全相同才行,否则返回来的值不能传到想就的table item中。C.放大镜(UDHCJFinvprtBuy):对界面上的放大镜这样的项目,我们要做如下操作对应的ITEM中的LOOKUP内输入lookupclassname(如:web.UDHCJFReceipt),lookupqueryname(如:FindUser),lookupproperties中加入相应的参数,在lookupjsfunction中加入调用的JS文件名称。Table Item 如果没有连Quey的话,在界面中是看不到Table Item的,所以在菜单组授权的时候要想在界面中看到table,那么要建立class中做QueryD.component layout在布局,保存两次,有时候要对ITEM做一下改动才能刷新E.建立Class在websource下:F.建立JS文件(JS的名称必须和组件的名称一致):每个界面交互中的对像,在这里都要通过document.getElementById(FindPat)来进行获取,JS中首先要有这段语句document.body.onload=BodyLoadHandler;来调用BodyLoadHandler函数来执行JS文件中的内容,在传参给classmethod的时候一定要通过以下语句: var getmethod=document.getElementById(GetPatInfo); if (getmethod) var encmeth=getmethod.value else var encmeth=; var info=cspRunServerMethod(encmeth,BillNo)1.隐藏的用value2.table的项目未隐藏取值用innerText属性3.如果用隐藏元素调用JS就要在组件界面上不加,给隐藏了就可以了,要不就不要隐藏给加到界面上link传参方法:&billno=_rs.getdatabyname(tbillrowid)csp:udhcjfinvrpt.csp 传参在菜单管理器里的值表达式,两个TAble的时候,组件也可以在菜单管理器中传入参数给元素session会话可以在js文件中直接取网页原码中的数据值刷新组件parent.frames组件名.location.href=websys.default.csp?websys.Tcomponent=传入的参数存入临时全局变量里。看看参数传入是否正常 。界面报错是在界面管理器中有误!界面编辑器中如果用user保存过,那么如果新加的元素没有用user保存,在界面中是看不到的,默认最高级别的保存方式!(曾用这个保存过),组件保存的时候只能保存两级,所能如果在界面编辑器中按其他给保存过。那就要在组件中加完元素后在界面编辑器中去进行一下保存才可以!其他JS内的文件中的函数!1. query要素:入参要和界面上的元素名称一致!修改后要item-table Item- 记得要getvalue菜单组加入2. JS中的入口程序,一定要先获取一下Item对象。判断是否获取到这个对像,如果存在那么执行事件,Q:在程序最终是不允许加“:”号Query 日期,病人类别pacadmreason,科室ctloc显示:住院病人的姓名,登记号,住院日期,在院状态paadmvisitstatus可选 中tableitem中的一条记录,我调用websys.listrows.jsdocument.getElementById(Tbuyrowidz+selectrow);z是固定写法document.write(x); / 输出 2000Hello、要想显式地将字符串转换为整数,使用 parseInt 方法。要想显式地将字符串转换为数字,使用 parseFloat 方法。请注意,比较大小时字符串自动转换为相等的数字,但加法(连接)运算时保留为字符串。Jscript中 typeof 运算符 要检查一个对象属性是否存在,可以使用新的 in 运算符: if (prop in someObject)/ someObject 有属性 prop/ 要比较 String 对象的值, / 用 toString() 或者 valueOf() 方法。if (StringObject1.valueOf() = StringObject2) /执行某些命令(将要运行的)。Query的执行方法d #class(%ResultSet).RunQuery(web.类名,query名称,参数1,参数2,参数组件的更新方法:第一步: 在界面编辑器中以站点的方式保存一次第二步:组件导出 进入terminal,在websource下,执行w $GetCo

温馨提示

  • 1. 本站所有资源如无特殊说明,都需要本地电脑安装OFFICE2007和PDF阅读器。图纸软件为CAD,CAXA,PROE,UG,SolidWorks等.压缩文件请下载最新的WinRAR软件解压。
  • 2. 本站的文档不包含任何第三方提供的附件图纸等,如果需要附件,请联系上传者。文件的所有权益归上传用户所有。
  • 3. 本站RAR压缩包中若带图纸,网页内容里面会有图纸预览,若没有图纸预览就没有图纸。
  • 4. 未经权益所有人同意不得将文件中的内容挪作商业或盈利用途。
  • 5. 人人文库网仅提供信息存储空间,仅对用户上传内容的表现方式做保护处理,对用户上传分享的文档内容本身不做任何修改或编辑,并不能对任何下载内容负责。
  • 6. 下载文件中如有侵权或不适当内容,请与我们联系,我们立即纠正。
  • 7. 本站不保证下载资源的准确性、安全性和完整性, 同时也不承担用户因使用这些下载资源对自己和他人造成任何形式的伤害或损失。

评论

0/150

提交评论