Caché学习资料整理.doc

上传人:文库蛋蛋多 文档编号:2393088 上传时间:2023-02-17 格式:DOC 页数:19 大小:357.50KB
返回 下载 相关 举报
Caché学习资料整理.doc_第1页
第1页 / 共19页
Caché学习资料整理.doc_第2页
第2页 / 共19页
Caché学习资料整理.doc_第3页
第3页 / 共19页
Caché学习资料整理.doc_第4页
第4页 / 共19页
Caché学习资料整理.doc_第5页
第5页 / 共19页
点击查看更多>>
资源描述

《Caché学习资料整理.doc》由会员分享,可在线阅读,更多相关《Caché学习资料整理.doc(19页珍藏版)》请在三一办公上搜索。

1、关于Cach学习资料整理一、Cach概念1、InterSystems公司产品,后关系型数据库2、整合了对象数据访问、高性能的SQL访问、多维数据访问3、在Cach包括一个应用服务器,提供高级对象编程、Cach还提供高性能的运行环境,这一运行环境采用独特的分布式数据缓存协议技术。4、Cach的ObjectScript的数据存取方法:对象,SQL、多维数组和嵌入式HTML。5、Cach为开发复杂的、基于网页应用程序提供了丰富的集成开发环境。Cach Service Page(CSP)技术可以进行快速开发,动态产生。6、Cach以多维数组存储数据,所有数据都保存在Global中。7、Global以如

2、下形式表示:名称(下标1,下标2,下标3)= 值8、可以自己定制Global,包括添加,删除,修改,遍历起节点。多维数组以树状的形式保存,他的每一个节点直接与磁盘和内存中的数据块相对应,因此可以达到极快的访问速度。在此基础上将多维数组映射成对象或者关系形的格式,分别由面向对象的接口和基于SQL的接口进行访问。9、Cach完全面向对象,可以直观的数据建模。10、应用程序通过命名空间访问数据库里的数据和程序,因此命名空间和数据库之间要建立映射,命名空间和数据库之间的映射不一定是一对一的,一个数据库可以被多个命名空间访问,一个命名空间可以访问多个数据库里的数据。建立命名空间的主要工作就是建立与数据库

3、的映射,这样做可以将程序逻辑与物理存在的数据独立开来。/命名空间是一个逻辑图,这个图把多维Global数组和代码映射到数据库。11、Cach 的菜单 Getting Started 入门文档 初学者可从中获取必要信息 Start Cach 启动Cach 启动Cach 服务 Stop Cach 关闭Cach 关闭Cach 服务。点击后选择是要关闭还是要重新启动Cach。 Studio 工作室 Cach 的集成开发环境。 Terminal 终端 通过类似于DOS 的终端界面访问Cach Explorer 资源管理器 查看Cach 中的数据资源,包括多维数组、类和例程 SQL Manager SQL

4、 管理器 通过关系型方式访问Cach Control Panel 控制面板 监视和管理Cach 的运行 Configuration Manager 配置管理器 进行基本配置,包括数据库的配置 Documentation 联机文档 只有启动Cach 后才可以阅读全部文档信息 Remote System Access 远程系统访问 在本地控制远端的Cach 服务器(任意平台)。UNIX 系统的管理要通过这种方式实现。子菜单中同样包含了工作室,终端,资源管理器,SQL 管理器,控制面板,配置管理器,联机文档等菜单项。 Preferred Server 当前使用的Cach服务器子菜单中可以编辑Cach

5、 服务器列表。在这里配置远程服务器。我们可以在一台Windows 平台的计算机上管理网络中所有的各种平台的Cach 服务器。 About 关于 查看版本 Exit 退出 关闭任务栏中的Cach 图标12、Cach Terminal 常用命令:Zn “namespace” /切换namespace Write “content” /写命令 Set Parameter=content /赋值命令 Kill target /删除命令;不建议在一个运行中的系统使用kill,而后面不跟参数13、创建CSP的两种方式:使用Cach类建立对象框架来创建动态网页通过基于HTML的标记语言把Cach脚本嵌入到H

6、TML中去14、程序应该不仅能够处理复杂行为而 且能够隐藏其复杂性,这是当今顶尖应用程序所需的两大特征。15、对象能够对复杂数据进行简单建模,所以对象编程是编写复杂应用程序的最佳选择。16、Cach 对象数据模型和对象编程概述 Cach 对象模型基于 ODMG(对象数据库管理组:Object Database Management Group)标准,并且支持许多高级特性,包括多重继承。17、统一数据字典可以定义类和表,并且提供了到多维数据结构的映射,这种映射是自动产生的。18、Cach 的一个独一无二的特性是它的单一数据结构。19、Cach数据库的核心是高效的多维数据引擎。20、Cach更新数

7、据时使用逻辑锁,而不是锁住整个物理页,提高了并发性。21、Cach的数据结构支持复杂数据的简单存储,并且不需要复杂的声明或者定义。22、为了提高执行效率和降低消息传递,Cach在客户端缓存了对象数据的副本,然后适时进行后台更新。23、Cach引进了一种新的技术:事务型位图索引。Cach支持传统的位图索引和事务型位图索引。24、企业缓存协议(ECP):具有极高性能和高扩展性能的技术。通过该协议,可以使分布式系统中的计算机共享彼此的数据库。25、容错机制:Cach写映像日志和其他内嵌的功能确保了大部分硬件故障的完整性,在将客户的影响最小化的同时。快速恢复。Cach还提供高级可用性配置选项,以进一步

8、减小和消除对客户的影响,包括故障切换集群、Shadow服务器和分布式ECP。26、数据库加密:1.安全管理员可以指定在硬盘上对一个或者多个Cach.DAT(数据库)文件进行加密,这些文件中的所有内容都被加密;2.开发人员可以使用系统功能对数据进行加密/解密,随后可将其存储到数据库中或进行传送。该功能用于加密敏感数据,保证不被有权读取数据库、但没有密钥的其他用户使用。默认情况下,Cach使用高级加密标准实现数据库加密,高级加密标准是一个支持128,192或者256位密钥的对称加密算法。二、Cach ObjectScripte1、为了和其他变量和数组的名字区分开来,系统函数名字都以“$”开头。常用

9、系统函数:$extract(stting,from,to)/获取字符串子串$lenght(string)/计算字符串长度$Length(字符串变量或字符串,“分隔符”) /被分隔符分割的子串的个数$Horolog /包含了时间和日期,它们由逗号分开。第一部分是日期的数字,它是从1840 年12 月31 日开始计算日期的数字。第二部分是秒的数字,它是从午夜开始计算的。Global中的日期时间都是以数字的形式存储的。格式为数字:1 2 3 4$ZDateH 和 $ZDate。$ZD(日期数字,格式) 日期$ZDH(日期,格式) 数字$Ztime 和$ZtimeH$ZT(时间数字,格式) 时间 $Z

10、TH(时间,格式) 数字$Piece($P)格式:$Piece(变量,“分隔符”,位置)返回一个或者多个被分隔符分开的子串。$Order($O)格式:$Order(variable,direction)按照指定的方向返回一个变量的上一个或下一个索引$get($g)返回一个变量的值如果变量存在则返回变量本身,不存在则返回空$data($d)判断变量是否存在$Ascii格式:$Ascii(字符串变量或字符串,位置)说明:返回一个字符的ASCII 值。$Char格式:$Char(expression,)说明:以一个整数型的串里面的数字作为ASCII 码值来产生一个字符。$Select格式:$Sele

11、ct(expression:value,)说明:返回第一个为真的表达式对应的值。Set a=1Write $Select(a=1:5,a1:0) /5Write $Select(a=2:5,a=1:0) /0Set min=$Select$TRanslate格式:$TRanslate(string,replace,by)说明:替换一个字符串中的字符,并返回替换后的结果。$Reverse格式:$REverse(string)说明:逆序返回一个字符串。$ZConVerT格式: $ZCONVERT(string,mode,trantable,handle) 说明:返回一个按照指定模式表示的字符串。m

12、ode:U、L、S、W、I、O列表函数:* $Length 带有两个参数的$Length 函数,可以计数一个列表的元素个数。* $Piece 取出列表的某一个元素。* Set 命令可以新增或者替换列表的某一个元素。* $ListBuild 缩写为$LB ,用来产生列表。* $ListLength 缩写为$LL ,返回列表的元素个数* $LIst 缩写为$LI , 取出一个或者多个列表的元素* $ListGet 缩写为$LG ,和$Get 一样,但是取消了对空值引用的报错。* $ListData 缩写为$LD, 检查一个列表的元素是不是有值。* $ListFind 缩写为$LF ,从指定位置开始

13、找列表中的某一个2、表达式按从左到右的计算顺序。3、事务Tstart 开始一个事务Tcommit 提交事务Trollback 保存失败后回滚4、异常处理* $ZT=ERROR“ClassMethod testZT()s $ZT=ERROR /设置一个异常TSTART /开始一个事务s b=dddddds d=d_000w e“TCOMMIT /没有发生异常,提交事务q 0ERROR /发生异常时执行Set $ZT=s ErrorMsg=$ZE /$ZE 获取错误信息TROLLBACK /有异常,则回滚事务(Golbal才可以回滚,普通变量不能回滚)Quit Error_ErrorMsg /返回

14、错误信息* Trycatch5、Cach ObjectScript一个最突出的特性是高度灵活、动态的数据数据存储。数据被存储在:对象属性、变量、稀疏的多维数组,允许任何类型的数据、数据库文件(Global),数据库文件也是稀疏的多维数组。6、Cach ObjectScript 中对象属性是有类型限制的,而另外三中存储类型(变量、数组、Global)是完全多态的,无类型实体不需要声明或者定义,只有他们在使用的时候才具有数据类型,按照他们存储时的数据要求以及在表达式里使用的要求来决定他们的数据类型。7、对数据库的直接引用(Global引用)实际上是一个多维数组的引用,通过前导符“”来表示这种引用。

15、这个符号表明这是对存储在数据库中的数据的引用,而不是临时过程的私有数据。8、HTML 和SQL 可以嵌入到Cach ObjectScript代码中。三、数据曾删改查1、数据查询执行查询。有两种方式: 1:调用预定义查询:通过 ResultSet()方法,输入类名和查询名,返回结果集(ResultSet)对象; Set rset = #class(%ResultSet).%New() Set rset.ClassName = 完整类名Set rset.QueryName = 类中已经写好的查询方法名 Do rset.Execute(“查询条件参数”)2:直接调用 SQL 语句:通过 Dynami

16、cSQL()方法,输入SQL语句,返回结果集对象; 得到结果集对象后,执行其 Execute()方法运行查询。Set rset = #class(%ResultSet).%New()Do rset.Prepare(SQL查询语句) Do rset.Execute()之后:遍历结果集对象:通过 Next(),GetData()等标准结果集方法访问执行查询后返回的数据。遍历结果集:While (rset.Next() /取一行的数据 取查询出的数据:1、根据字段名称取:Set code = rset.Data(Code)2、根据字段在一行里面的列号取:Set data = rset.GetData

17、(n)3、Set data = rset.GetDataByName(fieldname)关闭查询:Do rset.Close() Set sc = rset.Close()例:1. class containing the querySet rset = #class(%ResultSet).%New() Set rset.ClassName = Sample.Person Set rset.QueryName = ByName Do rset.Execute() While (rset.Next(.sc) / go to the next row of the result set If

18、($SYSTEM.Status.IsOK(sc) / check if this succeeded without errors Write rset.Data(Name),! / perform business logic Else / if there was an error, break out of the While loop Quit If $SYSTEM.Status.IsError(sc) / if there was an error, process that / perform error processing 2. use the %ResultSet objec

19、t to prepare a dynamic SQL statement using the Prepare method Set rset = #class(%ResultSet).%New()Do rset.Prepare(SELECT Name FROM Sample.Person WHERE Name %STARTSWITH A) Do rset.Execute() While (rset.Next(.sc) / go to the next row of the result set If ($SYSTEM.Status.IsOK(sc) / check if this succee

20、ded without errors Write rset.Data(Name),! / perform business logic Else / if there was an error, break out of the While loop Quit If $SYSTEM.Status.IsError(sc) / if there was an error, process that / perform error processing 2、数据添加方法1:以对象方式添加数据sobject= #class(className).%New() /创建对象 object. propert

21、y = value/给对象属性赋值 object.%save()/保存方法2:用SQL语句添加数据&SQL(insertintopackageName.SqlTableName (SqlFieldName,)values(:value)3、数据更改:方法1:以对象方式更改数据Sobject= #class(className).%OpenId(ID) / 根据ID得到要更改的对象object. PropertyName = value/更改属性值方法2:用SQL语句更改数据&SQL(updatepackageName.SqlTableName set SqlFieldName1 = value

22、1 where SqlFieldName2 = value2)/注:SQL语句中字符串用单引号 不是双引号4、数据删除方法1:以对象方式删除/删除行Do #class(classname).%DeleteId(id)Do #class(classname).%Delete(oid)/删除表Do #class(classname).%DeleteExtent()方法2:用SQL语句删除/删除行&SQL(deletepackageName.SqlTableName where SqlFieldName = value)/注:SQL语句中字符串用单引号 不是双引号/删除表&SQL(droptable

23、 packageName.SqlTableName)Terminate端类方法的调试Class文件d #class(web.classname).functionname(参数1,参数2.) q后面没有返回值w #class(web.classname).functionname(参数1,参数2.) q后面有返回值 Query的执行D #class(%ResultSet).RunQuery(“类名称”,”Qurey名称”,”参数1”,”参数2”,.)四、组件程序开发1.javascript基础1)功能在客户端 IE 执行 用来与用户交互 数据检查、控制控制Browser 的页面方式2).基本命

24、令var 定义变量alert 生成一个独立的小窗口,称作对话框,并用它来显示一条信息和一个“确定”按钮!当显示这个对话框时,暂停程序的执行。 confirm 确认选择对话框用于确定用户某个Yes/No风格问题的回答。这种风格的对话框中显示一个问号和两个按钮:“确定”和“取消”。当用户单击了“确定”按钮Confirm()方法返回true;否则返回false。If , else For Less than () Not (!) Not equal (!=) Equals (=) Logical AND (&) Logical OR (|) Is NOT a Number (isNaN )Split

25、 将string对象字符以某个符号分开隔开 3.属性document properties 文档对象,描述当前窗口或指定窗口对象的文档。它包含了文档从到的内容。document.getElementById document.getElementById(id1).value /获取或设置id1的值Object properties Obj.tagName Obj.className Obj.type Obj. checked Obj. value Obj. disabled Obj. style Obj.readOnly4.事件document eventsdocument.body.onl

26、oad=MyLoadHandler; 当网页打开,只能书写在body中onUnload 当网页关闭或离开时,只能书写在body中 Object eventsobj.onclick=MyOnClick; 当对象被点击 obj.onkeydown=MyKeyDown; 按回车obj.onchange = MyChange; 当对象的内容被改变 obj.onblur= MyBlur; 当对象失去焦点 obj.onmouseover 当鼠标悬于其上时 obj.onmouseout 当鼠标离开对象时 obj.onmouseup 当鼠标松开 obj.onmousedown 当鼠标按下键 obj.onFoc

27、us 当对象获取焦点时 obj.onSelect 当对象的文本被选中时 我们在使用object.onXXX = handler是需要保证object已经在页面中生成。比如我们为document.body赋予事件处理函数,我们必须保证document.body已经存在,就是说我们不能在之前在的全局语句中使用document.body; handler必须是函数名2.创建组件过程1)创建组件;进入组件管理器,选择要连接的数据库,如下图所示选择连接的数据库后,点击进入,然后新建组件ComponentNew Component,提示Create a New Component?,选择”是”.系统会默认

28、的创建组件的名称,选中名称,点击右键,进入Component Properties,如下修改组件的名称,同时把Display Type修改成Custom,点击Apply按钮,保存所做的改变。2)创建组件上的元素选中组件名称,点击右键,进入Add Item(s) to Component ,进入界面如下:Custom Item 组件上的单个元素Custom Table Item 以列表的形式显示的元素根据实际需求选择要创建的元素类型对于要创建的元素打勾,然后FileApply3)修改元素属性选中元素,右键 Item Properties (或双击),如下图所示Name:元素名称Caption:界

29、面上显示的名称Display Type:TEXTBOX,LISTBOX,CHECKBOX,LINK,BUTTON等Data Type属性:元素显示的数据类型,如日期,字符串等注意:Query FindDeposit() As %Query(ROWSPEC = Tprtdate:%String,Tprttime:%String,Tpapname:%String,Tpapno:%String,Tpayamt:%String)中的ROWSPEC中的Tprtdate,Tprttime等不一定是组件上的元素名称,是返回界面的值OutputRow中的 set Data=$lb(prtdate,prttim

30、e,papname,papno,payamt) $lb内的是要输出的值,这些变量的位置要和ROWSPEC内的变量相对应,这样,才能在Table的相应的列对应的显示内容组件的属性:连接Class和Query名称(在修改时要先把组件的显示类型修改成除Custom之外的类型才能修改)组件的类型是:修改后组件的显示类型修改成Custom如果是带参数的查询程序,则相应的参数为组件上的元素,那么在点击查找的时候会自动传入参数;4.组件程序的开发(以押金收据购入程序)1).放大镜,不带参数,带有参数组件元素为:Custom Item元素的LookUp如下图所示放大镜要显示的内容写成QueryLookupCl

31、assName:要调用的类的名称LookupQueryName:要调用的Query名称LookupProperties:传入的参数,如果没有入参则为空,参数为组件上元素的名称LookupJsFunction:js文件里调用的js函数2).js文件创建,js文件的调用;创建的js文件的名称必须要和对应的组件的名称一致如果js文件里调用其他js文件里的函数,则要在组件的OtherScript里把js文件的名称添加进来,就可以调用里面的函数了3).前端页面元素调用后台的classmethod的方法; 前端页面调用后台的类方法是通过函数js函数里调用cspRunServerMethod(参数1,参数2

32、,参数3.。)来实现参数1为固定参数,传入的值为要调用的后台的类方法那么入参的获取是通过组件上的某个元素来获得的如组件UDHCJFRcptBuy中的添加按钮,是通过调用元素ins1来获取后台要执行的方法(ValueGet)待添加的隐藏文字内容14).执行后台的classmethod之后接收返回结果的两种方法;1直接通过cspRunServerMethod(参数1,参数2,参数3.。)返回结 果,可以定义变量直接接收返回结果;如果采用此方式,要求 Classmethod的q 后面返回变量 Var Returnvalue Returnvalue= cspRunServerMethod(参数1,参数

33、2,参数3.。)2通过cspRunServerMethod(参数1,参数2,参数3.。)里的某个参 数接收返回值,如可以利用参数2接收后台的返回值 如接收返回值的参数的名称为GetReturnValue,那么在传入参数的时 候要传到后台cspRunServerMethod(参数1,GetReturnValue,参数 3.。) 在class端,GetReturnValue已经传入,那么通过 S retval= GetReturnValue _(_$ZCVT(返回值,O,JS)_); &javascript,通过javascript把结果返回页面 在js文件里有个函数名称为GetReturnVal

34、ue(value),接收返回值括号 内的value就是返回值,然后可以根据需求对返回值做相应处理6).SelectRowHandler的用途;(周一)可以获取Table的行数和当前选中的记录的行可以选中某个记录,获取选中记录的各元素的值获取到选中的行var eSrc=window.event.srcElement;var rowObj=getRow(eSrc);var selectrow=rowObj.rowIndex;获取Table的记录数var objtbl=document.getElementById(tUDHCJFRcptBuy);var rows=objtbl.rows.lengt

35、h;获取Table上某一行的某个元素的值var SelRowObj=document.getElementById(Tbuyrowidz+selectrow);var buyrowid=SelRowObj.innerText;其中Tbuyrowid为元素的名称,z要加到元素名称的后面,selectrow为行号;如果是显示的列则用SelRowObj.innerText;如果是隐藏的列则用SelRowObj.Value7).LinkLinkUrl:websys.default.csp(在输入组件名称时会自动输入)LinkComponent:要Link的组件的名称LinkExpression:要传入

36、到所Link的组件的名称如果要在新的窗体中打开组件:在General页签处,设置新打开窗体的大小ShowInNewWindow:top=30,height=650,left=8,width=10008).按钮中打开新的组件var str=websys.default.csp?WEBSYS.TCOMPONENT=UDHCJFDeposit&Adm=+Adm+&deposittype=+t01window.open(str,_blank,toolbar=no,location=no,directories=no,status=no,menubar=no,scrollbars=yes,resizab

37、le=yes,copyhistory=yes,width=1000,height=700,left=0,top=0)9).Message的定义在组件属性的Message页签,定义Code,Description在js文件里调用时用tCode,获取Description五类文件的导出与导入切换namespace到websource下1.导出Tools-Export,进入如下界面可以导成.XML文件,也可以导成.cdl文件,然后Add要导出的类文件的名称(websource/web目录下),输入要导出的文件保存的路径,可以是本地,也可以是服务器,点ok即可2.导入同样,转换namespace到we

38、bsourceTools-Import Local(或Import Remote),选择要导入的文件进入如下界面是否把导入的文件加到打开的工程里,如果是则第一个checkbox打勾;是否自动编译导入的文件;如果编译则打勾;六组件程序的导出与导入1.在界面编辑器中以站点的方式保存一次2.组件导出进入terminal,在websource下,执行w $GetComponentDHCComponent(组件名),此步骤将组件各属性导出到Global(DHCComponent),进入Explorer,在websouce下找到 DHCComponent,右键,Export,导出完成说明:如果是P5导入到

39、P7,则调用GetComponentP5P7 如果是P7导入到P5,则调用GetComponentP7P5 如果是P5P5,P7-P7,则调用GetComponent3.组件导入在Explorer的websouce下,选中Global,右键,Iimport from Disk,导入DHCComponent完成后,进入组件管理器,如果要导入的组件已经存在,则要删除原来的组件,才能导入(右键,Delete Component),之后进入terminal,在websource下,执行w $PutComponentDHCComponent(组件名),这时一定要注意Message的大小写说明:如果是P5

40、导入到P7,则调用PutComponentP7 如果是P7导入到P5,则调用PutComponentP7P5 如果是P5P5,P7-P7,则调用PutComponentP74.在trakcare的菜单管理器中,如果已经挂过菜单,在删除组件时,菜单链接的 自动清空,要重新选中一下组件;七csp的创建 将多个组件包在一起的方法;1).创建csp文件1).Csp把多个组件包在一起,在菜单直接调用csp 2).Csp组件之间的参数传递如果获取某个组件上的元素属性,则需要增加parent.frames在csp里定义的frame的名称.八、创建一个完整项目过程说明1、OrderI 和OrderD 的区别ClassTest.OrderI(CreateDateIndex,OrdDate,OrdRowID)/ClassTest.OrderI(索引名“,条件数据,要查询的数据字段)ClassTest.OrderD(OrdRowID,DetailItems,ChildSub),2

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

当前位置:首页 > 建筑/施工/环境 > 项目建议


备案号:宁ICP备20000045号-2

经营许可证:宁B2-20210002

宁公网安备 64010402000987号