组件开发问题总结1.打开一个类文件,在websource/web目录下1)打开Studio,选择NameSpace为websource,点Openfromdatabasae,Filesof选择.cls文件类型,双击Web包,进入后则现则所有的类文件,FileName:输入要打开的类名称。2.打开一个.JS文件1)打开Studio,选择NameSpace为websource,点Openfromdatabasae,Filesof选择*.js文件类型,进入trakcare/web双击script包,进入后则显示所有的js文件,FileName:输入要打开的js文件名称。3.打开工程File/OpenProject,选择要打开的工程组件:组件中可以包含组件元素ITEM,tableITEM,A.sval=%request.Get(billnosub)组件的item元素valueget属性中设置,作用是在刷新的时候重新获取元素的值B.sval=##Class(%CSP.Page).Encrypt($lb(web.LXSTESTLOOKUP.getdata))组件的item元素valueget属性中设置,作用是调用cls文件的方法,一般用于隐藏元素,基本上每个组件上的按钮都对应一个隐藏的元素。C.对TABLEITEM元素使用sval=rs.GetDataByName(status)作用是在刷新的时候重新获取元素的值D.对button元素来讲,要在link中进行一下设置,linkurl中websys.default.csp,linkcomponent中调用本组件的名称,如果调用其他组件的话在JS文件中进行调用:方法为:parent.frames['y'].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函数名F.TATBL元素的链接:对在表中对某一列值进行单击操作,会链接一个新的窗口。设置如下:在tableitem的属性中的LINK中1.linkurl=websys.default.csp2.linkcomponent=linkwindows(调用的组什名)3.linkexpression=billnosub=_rs.GetDataByName(billno)其中billnosub是链接组件中的一个元素名,billno是当前界面中的一个元素名,如果有多个要传入,之间用开划线分隔“_”G.组件的属性:1.name是组件的名称。2.displaytype是组件显示的类型,组件最终使用custom.如果设query给组件就要先用find,才可以设置queyname属性,classname是当前组件的所调用的cls文件的名称。Queryname是组件调用的query名字。Includescript是当前组件是否包含自己的JS文件,includecustomscript:是否调用其他JS文件。如果调用其他JS文件,但是要放在一个全局的没有被任何组件调用的JS文件中,在otherscripts中加入调用的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(t['01']),其中中括号中的01就是在这里的文本信息编码。H.组件程序的导入导出:1.getcomponent:导入websourcew$$getcomponent^dhccomponent(“组件名称”)如果提示1的话是什么错误,必须以站点的形式保存过才能导出。否则是不能导出来的,报1错误,导了之后存在一个global中websource-dhccomponent-导出global.2.putcomponent:导出websource$$putcomponent^dhccomponent(“组件名称”)导入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.ClassMethodloclookupClose:这部分中的内容是固定不变的。ClassMethodloclookupClose(ByRefqHandleAs%Binary)As%Status[PlaceAfter=loclookupExecute]{Setrepid=$LIST(qHandle,2)Kill^CacheTemp(repid)Quit$$$OK}2.ClassMethodloclookupExecute:query的具体实现单元ClassMethodloclookupExecute(ByRefqHandleAs%Binary,descAs%String)As%Status{Setrepid=$I(^CacheTemp)If$g(ind)=Setind=1srowid=0sdesc=$$ALPHAUP^SSUTIL4(desc)i$g(desc)=d.sdesc=%ed.sdesc=desc_%&sql(declareloccursorforselectctloc_rowid,ctloc_descfromSQLUser.ct_locwhere%UPPER(ctloc_desc)like:desc)&sql(openloc)f&sql(fetchlocinto:locrowid,:locdesc)q:SQLCODEd.i$P(locdesc,-,2)'=slocdesc=$P(locdesc,-,2).DoOutputRow2&sql(closeloc)SetqHandle=$lb(0,repid,0)Quit$$$OKOutputRow2setData=$lb(locdesc,locrowid)Set^CacheTemp(repid,ind)=DataSetind=ind+1quit}3.ClassMethodloclookupFetchp这部分也是固定写法ClassMethodloclookupFetch(ByRefqHandleAs%Binary,ByRefRowAs%List,ByRefAtEndAs%Integer=0)As%Status[PlaceAfter=loclookupExecute]{SetAtEnd=$LIST(qHandle,1)Setrepid=$LIST(qHandle,2)Setind=$LIST(qHandle,3)Setind=$o(^CacheTemp(repid,ind))Ifind=//iftherearenomorerows,finishfetching{SetAtEnd=1SetRow=}Else{SetRow=^CacheTemp(repid,ind)}//SaveQHandlesqHandle=$lb(AtEnd,repid,ind)Quit$$$OK}4.Queryloclookup这部分就是Query程序的入口了Queryloclookup(descAs%String)As%Query(ROWSPEC=qloc:%String,locid:%String){}K.如果对组件元素操作就要用js文件来处理最合理。JS文件与组件的名字要完全相同,JS文件保存在trakcare/web下调用JS文件的程序入口:document.body.onload=BodyLoadHandler;//程序入口//JS文件都是通过获取元素并对元素触发的事件进行操作document.getelementbyid(btn);此方法获取组件元素parent.frames['y'].location.href=websys.default.csp?WEBSYS.TCOMPONENT=LXSCSPTESTSUB&startD=+startdate+&endD=+enddate+&Bflag=+billflag调用新的组件并传递参数给组件&Bflag=中的Bflag为调用的组件元素的名字。varpatinfo=document.getElementById(JsGetpatinfo)//获取组件中隐藏元素的名字if(patinfo){varenmeth=patinfo.value}else{enmeth=}//取隐藏元素中调用的类方法,但返回来的值已被加密varinfo=cspRunServerMethod(enmeth,patno)//JS文件调用CLs文件的入口varstr=info.split(^)对返回值进行分解document.getElementById(pname).value=str[0]给元素赋值,varSelRowObj=document.getElementById('Tjsuserz'+i);//取组件的table中第i行的TABLEIITEM的名字为Tjsuserz的对象varjsuser=SelRowObj.innerText;获取这个对像的值给一个变量,如果要获取table的隐藏元素值就要用valueobj.onclick=print_click//如果后面加括号就会直接在加载的时候调用事件?不加括号在触发条件的时候调用varObjtbl=document.getElementById('tLINKwindows');获取组件LINKwindows中的Table,t是必须加在组件名前代表table项jobnum=document.getElementById('jobnoz'+1).value;取table中的元素名,z是要加在元素后面的,所加的数字代表取的行数JS文件的打印代码段:{varxlApp,xlsheet,xlBook,i,jTemplate=path+LXSBILL.xlsxlApp=newActiveXObject(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(savechange