M语言

发布时间:2019-01-18 09:38:28   来源:文档文库   
字号:

开发培训文档

alert

M基础(参考Cache面向对象软件开发教程.pdf  P489)

1.常用的特殊的变量

这些特殊的变量有指定的含义,它们一般以$开头。有个别特殊变量也同时支持缩写

1)$HOROLOG ($H)

$Horolog 包含了时间和日期,它们由逗号分开。第一部分是日期的数字,它是从1840 12 31 日开始计算日期的数字。第二部分是秒的数字,它是从午夜开始计算的。

Global中的日期时间都是以数字的形式存储的。

时间日期的函数

$ZDate $Horolog 格式的日期值按照指定格式显示。

$ZDateH $ZDate 的反函数。

$ZDateTime $Horolog 格式的日期时间值按照指定格式显示。

$ZDateTimeH $ZDateTime 的反函数。

$ZTime $Horolog 格式的时间值按照指定格式显示。

$ZTimeH $ZTime 的反函数。

2) $JOB $J

$JOB 包含一个正整数,表示系统所分配给每一个在执行中的进程独一无二的编号。当进程还在的时候,$JOB 的值是不变的

2.基本的运算符

1)算术运算符+-*/\#**

其中,+、-、*/ 是基本的4 个算术运算符。

\ 整数的除法

2+5*7 = 49,从左到右依次运算

2+(a*b) = 37

2)算术比较运算符<>

3)字符串比较运算符=[]

= 比较运算符是比较两个字符串的相同与否。如果需要比较两个数字是否一样的话, 需要在前面再加一个+ 号。例如,

+number1=+number2

[ 运算符检查右边的串是不是包含了左边的串

] 运算符检查左边的串是不是在字典顺序上跟着右边的串;它是严格按照ASCII 码来操作的。例如:2]19,返回是1,因为2 ASCII 值是50,而1 ASCII 值是49

4) 连接符

_ 它是用来连接两个字符串的

&

‘= 

3.常见的命令

变量操作命令:Set, Merge, Kill, New, Lock

1)SET (S)给一个或者多个变量赋值 ,缩写S

Set x=5,n(1)=4,dd=5

Set ^File=3

2) MERGE (M)拷贝变量树。

Merge a=b

Merge var(1)=^G(1,2)

3) KILL

删除所有变量或一些指定的变量或所有变量除了指定的变量。

4NEW

初始化变量。

New a,b

New (x1,x2)  初始化除了x1,x2之外的变量

4.程序流控制命令

If, Else, For, Quit, Do, Goto, Break

If,I      条件判断语句。

ELSE (e)  当判断条件不通过的时候,执行后面的命令行。

FOR (f)    循环命令

QUIT (q)    结束执行一个函数并返回一个值。

DO (d)    执行命令。

GOTO(g)  跳转命令。

BREAK(b)  在调试的时候中断一个routine 的执行。

WRITE(w)  输出信息到当前设备上

READ (r)  从当前的设备读信息

OPEN (o)  开启一个设备以备使用。

5.常用的函数

$Piece($P)

格式::$Piece(expression,delimiter [,from[,to]])

返回一个或者多个被分隔符分开的子串。

$Order($O)

格式:$Order(variable[,direction])

按照指定的方向返回一个变量的上一个或下一个索引

$get($g)

返回一个变量的值

如果变量存在则返回变量本身,不存在则返回空

$data($d)

判断变量是否存在

$Extract($e)

格式:$Extract(expression,[,from[,to]])

说明:返回字符串的指定部分。

>Write $Extract("AABB",2,3)

AB

$Justify($J)

格式:$Justify(expression,width[,desimal])

说明:返回一个右对齐的值,并可以改变它的格式。

$Length($L)

格式:$Length(expression[,delimiter])

说明:返回一个字符串的长度,或者是被分隔符的子串的个数

>Write $Length("ABCD")

4

>Write $Length("AB/CD/EF","/")

3

Tstart      开始一个事务

Tcommit    提交事务

Trollback    保存失败后回滚

三.编写简单的M程序及调试

1.Global介绍

Caché 中的所有数据都是保存在Global(多维数组)中的。Global以如下形式表示:

^名称(下标1,下标2,下标3)=

l ^AirPlane(Manufacturer,Address,Country)=US

我们可以自己定制Global,包括添加、删除、修改、遍历其节点。多维数组以树状的形式保存,他的每一个节点直接与磁盘和内存中的数据块相对应,因此可以达到极快的访问速度。

2.Routine的使用(.MAC程序)

我们可以把Routine 理解为小程序或程序模块。

Routine 的基本结构

1. Routine 的命名

Routine 的名字可以是任何的字母数字式字符。但是有要求:一般不能以数字或百分号%开头命名,和句号不能在开始或者结束的位置。以%百分号开头命名的Routine 是不局限在某一个名字空间(Namespace)应用的,%号它是Caché 系统内部保留的,只是系统为我们提供的程序命名所使用。此外,对Routine 名字的长度也没有限制,但是只有前31 个字符是用来对不同的Routine 加以区分的。

2. Routine 的程序行

程序行是routine 最基本的单位之一。我们这里说的是一个逻辑上的行,因为有的逻辑上的行在物理上占据了可能超过一行的位置。Routine 的行有3 种不同的类型,下面作一一的介绍。

Routine 标签行

一个标签要确定一行,它从当前行的第一个位置开始。它的命名条件和routine 的命名条件类似。但是它的长度不能超过31 个字符。通常一个标签后面有一些空格,后面可以跟一些Caché 的可执行命令。

代码行

代码行的最前端至少要有一个空格,作为一行的开始部分。

注释行

4 种形式的注释符号:

;符号后面的本行内容将不被执行。

;;一些时候,注释的内容在执行的过程中是需要用到的。两个分

号的注释内容是被编译进去的,而一个分号的注释在编译的时候就

被去掉了。

// 和一个分号是一样的。

/* ……*/中间省略号的部分是被注释的内容。

创建Routine

首先切换namespaceMedsourceFile—Change Namespace,选择Medsource

File---New ,如下图

ok,然后点编译按钮,界面如下,保存Test.MAC文件

点击保存。则保存在Medsource,这样我们保存了一个空的.mac文件,下面我们将介绍如何写简单的程序.

3.没有父子关系的表

1)如查询所有押金明细表的收费日期(prt_date),病人姓名(pa_patmas.papmi_name),登记号(pa_patmas.papmi_ipno)金额,支付方式(prt_paymode),收费员姓名(表—dhc_sfprintdetail,对应字段分别为prt_date,prt_adm(病人就诊rowid,指向pa_adm),prt_payamount,prt_paymode,指向ct_paymode表)

我们可以查看表的Global的存储结构为

^DHCSFPRINTDETAIL({prt_rowid})

Test (我们上面建的mac文件)

GetDepositDetail()  //标签行,也就是函数的名称
s prtrowid=0,num=0  //首先要对检索的global的节点付初始值
f s prtrowid=$O(^DHCSFPRINTDETAIL(prtrowid)) quit:prtrowid="" do
.s prtdate=$p(^DHCSFPRINTDETAIL(prtrowid),"^",2)
.s prttime=$p(^DHCSFPRINTDETAIL(prtrowid),"^",3)
.s adm=$p(^DHCSFPRINTDETAIL(prtrowid),"^",4)
.q:adm=""
.s papmi=""
.i $d(^PAADM(adm)) s papmi=$p(^PAADM(adm),"^",1)
.q:papmi=""
.i $d(^PAPER(papmi,"ALL")) d

..papname=$p(^PAPER(papmi,"ALL"),"^",1)
..s papno=$p(^PAPER(papmi,"PAT",1),"^",1)
.s payamt=$p(^DHCSFPRINTDETAIL(prtrowid),"^",6)
.s num=num+1
.;w !,$zd(prtdate,3)_"^"_$zt(prttime,1)_"^"_papname_"^"_papno_"^"_payamt
q num

Terminate调试程序(参考Terminate端程序调试)

2) 查询表病人收费类别表pac_admreason的数据,在rowid之前有一个ADMREA”的节点,显示代码(rea_code),名称(rea_desc)

^PAC("ADMREA",rowid)=记录

查询所有的病人收费类别循环如下:

S rowid=""
F s RowId=$o(^PAC("ADMREA",RowId)) q:RowId="" d
.S Code=$p(^PAC("ADMREA",RowId),"^",1)
.S Desc=$p(^PAC("ADMREA",RowId),"^",2)
.S Num=+$g(Num)+1
.S PLIST(Num)=Code_"^"_ Desc

Q

3)查询表ct_paymode 的数据,显示ctpm_code,ctpm_desc

4.有父子关系的表的取值

如查询显示某帐单(dhc_patientbill.pb_rowid)的收费项目的名称(表

dhc_patbilldetails字段分别为

pbd_tari_dr->dhc_taritem(tari_desc),单价(pbd_unitprice),数量(pbd_billqty)

金额(pbd_totalamount) ,收费日期(pbd_billdate),收费时间(pbd_billtime)

GetDetailByRowID(pbrowid)

S rowid=””

f  s rowid=$o(^DHCPB(rowid)) q:RowId=”” d  //第一层循环

.s OrdSub=””

f  s OrdSub=$o(^DHCPB(RowId,"O",OrdSub)) q: OrdSub =”” d  //第二层循

..s DetSub=””

..f  s DetSub =$o(^DHCPB(RowId,"O",OrdSub,D,DetSub)) q: DetSub =”” d

...//第三层循环

5.表的索引的应用

取某段时间内押金的明细(dhc_sfprintdetail),显示押金的病人姓名,金额,支付方式  ,收费员信息

索引结构为

^DHCSFPRINTDETAIL(0,"PrtDate",{prt_printdate},{prt_rowid})

F  PrtDate=Stdate:1:EndDate d

s RowId=$o( ^DHCSFPRINTDETAIL(0,"PrtDate",PrtDate,RowId) q:RowId=””  d

.;找到数据的RowId后,到主Global中取相应的数据

S PrtDate=$p(^DHCSFPRINTDETAIL (RowId)),^,2)

S PrtTime=$p(^DHCSFPRINTDETAIL (RowId)),^,3)

S AdmId=$p(^DHCSFPRINTDETAIL (RowId)),^,4)

I $d(^PAADM(AdmId)) d

. .S paperid=$p(^PAADM(AdmId),^,1)

. .S Regno=$p(^PAPER(paperid,ALL),^,1)

. .S PatName=$p(^PAPER(paperid,"PAT",1),^,1)

. S PayAmt=$p(^DHCSFPRINTDETAIL (RowId)),^,6)

S PayMode=$p(^DHCSFPRINTDETAIL (rowid)),^,9)

S Num=Num+1

Q

6.TerminateM程序调试

编译m程序  d ^%urcomp,然后输入要编译的m名称

调试程序(包括.mac,.cls,query)

Mac文件调试

d  procname^macname(参数1,参数2.。。。) q后面没有返回值

w $$function^macname(参数1,参数2.。。。)q后面有返回值

如果以q 返回值的方式执行,即使没有入参,也要在函数名称后面增加括号

练习1

查询某段日期(prt_date)的某个收费员(prt_adduserid)的押金的明细(DHC_SFPRINTDETAIL),显示信息为病人登记号(Pa_PatMas.paper_ipno),病人姓名(Pa_PatMas.paper_name),收费金额(DHC_PrintDetail.prt_payamount),支付方式(dhc_sfprintdetail.paymode)

练习2

.查询入院日期为2007-04-022007-04-08日的住院就诊病人的信息,

显示信息为病人登记号(Pa_PatMas.paper_ipno),病人姓名(Pa_PatMas.paper_name),入院日期;用到的表就诊信息表Pa_adm,病人基本信息表Pa_PatMaspaadm_type=I”的表示住院病人

利用索引

^PAADMi("PAADM_AdmDate",{PAADM_AdmDate},{PAADM_rowid})

四.类的创建及类方法的编写及调试

转换命名空间到websource

1.创建一个类,保存到websource

File---New---Cache Class Definition

下一步,修改class名称

下一步,选择第三项,然后完成就可以了

2.打开一个类文件,在websource/web目录下

1)打开Studio,选择NameSpacewebsource,点Open from databasae,Files of 选择.cls文件类型,为如下界面

2)双击Web包,进入后则现则所有的类文件,File Name:输入要打开的类名称。

3. 类方法的编写

首先创建一个类,然后编写类方法,一个类里面可以有多个类方法

我们把前面编写的m里面的函数转换成类的方法编写

//如查询所有押金明细表的收费日期,病人姓名,金额,支付方式,收费员姓名(表—dhc_sfprintdetail,对应字段分别为prt_date,prt_adm(病人就诊rowid,指向pa_adm),prt_payamount,prt_paymode,指向ct_paymode表)

我们可以查看表的Global的存储结构为

^DHCSFPRINTDETAIL({prt_rowid})

ClassMethod GetDepositDetail()
{

s prtrowid=0,num=0
f s prtrowid=$O(^DHCSFPRINTDETAIL(prtrowid)) quit:prtrowid="" do
.;i prtrowid="" q
.s prtdate=$p(^DHCSFPRINTDETAIL(prtrowid),"^",2)
.s prttime=$p(^DHCSFPRINTDETAIL(prtrowid),"^",3)
.s adm=$p(^DHCSFPRINTDETAIL(prtrowid),"^",4)
.q:adm=""
.s papmi=""
.i $d(^PAADM(adm)) s papmi=$p(^PAADM(adm),"^",1)
.q:papmi=""
.i $d(^PAPER(papmi,"ALL")) s papname=$p(^PAPER(papmi,"ALL"),"^",1)
.s papno=$p(^PAPER(papmi,"PAT",1),"^",1)
.s payamt=$p(^DHCSFPRINTDETAIL(prtrowid),"^",6)
.s num=num+1
.w !,$zd(prtdate,3)_"^"_$zt(prttime,1)_"^"_papname_"^"_papno_"^"_payamt
q
}

写好后到Terminate端调试

4.Query程序的编写

TestCls文本里的FindDeposit

练习3

Query查询支付方式表ct_paymode,显示内容为

Ctpm_codectpm_desc

练习4

查询某个账单对应的收费项目明细;

要求显示收费项目名称(dhc_pabilldetail.pbd_tari_dr),单价

pbd_unitprice),数量(pbd_billqty),金额(pbd_totalamount

练习5

查询某段日期(prt_date)的押金的明细(DHC_SFPRINTDETAIL),显

示信息为病人登记号(Pa_PatMas.paper_ipno),病人姓名

(Pa_PatMas.paper_name),收费金额

(DHC_PrintDetail.prt_payamount),支付方式(dhc_sfprintdetail.paymode)

5.Terminate端类方法的调试

Class文件

d ##class(web.classname).functionname(参数1,参数2.)

w ##class(web.classname).functionname(参数1,参数2.)     

Query的执行

D ##class(%ResultSet).RunQuery(“类名称,Qurey名称,参数1,”参数2,…….)

五.组件程序开发

1.javascript基础

1)功能

在客户端 IE 执行 

用来与用户交互

数据检查、控制

控制Browser 的页面方式

2).基本命令

var    定义变量

alert    生成一个独立的小窗口,称作对话框,并用它来显示一条信息和一个确定按钮!当显示这个对话框时,暂停程序的执行。

confirm 确认选择对话框用于确定用户某个Yes/No风格问题的回答。这种风格的对话框中显示一个问号和两个按钮:确定取消。当用户单击了确定按钮Confirm()方法返回true;否则返回false

If , else 

For   

Less than (<) 

Greater than (>) 

Not (!)       

Not equal (!=) 

Equals (==)

Logical AND (&&) 

Logical OR (||)

Is NOT a Number (isNaN )

Split  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.readOnly

4.事件

document events

document.body.onload=MyLoadHandler;  当网页打开,只能书写在bodyonUnload   当网页关闭或离开时,只能书写在body  

Object events

obj.onclick=MyOnClick;      当对象被点击

obj.onkeydown=MyKeyDown;  按回车

obj.onchange = MyChange;  当对象的内容被改变  

obj.onblur= MyBlur;      当对象失去焦点  

obj.onmouseover   当鼠标悬于其上时  
obj.onmouseout   当鼠标离开对象时  
obj.onmouseup   当鼠标松开  
obj.onmousedown   当鼠标按下键  
obj.onFocus   当对象获取焦点时  
obj.onSelect   当对象的文本被选中时  

我们在使用object.onXXX = handler是需要保证object已经在页面中生成。比如我们为document.body赋予事件处理函数,我们必须保证document.body已经存在,就是说我们不能在之前在的全局语句中使用document.body
handler必须是函数名

2.创建组件过程

1)创建组件;

进入组件管理器,选择要连接的数据库,如下图所示

选择连接的数据库后,点击进入,然后新建组件

Component—New Component,提示Create a New Component?,选择.

系统会默认的创建组件的名称,选中名称,点击右键,进入Component Properties,如下图所示

修改组件的名称,同时把Display Type修改成Custom,点击Apply按钮,保存所做的改变

2)创建组件上的元素

选中组件名称,点击右键,进入Add Item(s) to Component ,进入界面如下

Custom Item      组件上的单个元素

Custom Table Item 以列表的形式显示的元素

根据实际需求选择要创建的元素类型

对于要创建的元素打勾,然后File—Apply

3)修改元素属性

选中元素,右键 Item Properties (或双击),如下图所示

Name:元素名称

Caption:界面上显示的名称

Display TypeTEXTBOX,LISTBOX,CHECKBOX,LINK,BUTTON

Data Type属性:元素显示的数据类型,如日期,字符串等

3.查询程序的编写及调试(以押金收据购入程序为例)

练习不带条件的查询和带条件的查询   

参考Test.cls中的QueryFindDeposit

注意:

Query FindDeposit() As %Query(ROWSPEC = "Tprtdate:%String,Tprttime:%String,Tpapname:%String,Tpapno:%String,Tpayamt:%String")中的ROWSPEC中的Tprtdate,Tprttime等是组件上的元素名称,这类元素是Table Item

OutputRow中的

set Data=$lb(prtdate,prttime,papname,papno,payamt)

$lb内的是要输出的值,这些变量的位置要和组件上的元素相对应,这样 

才能在Table的相应的列对应的显示内容

组件的属性:连接ClassQuery名称(在修改时要先把组件的显示类型修改成除Custom之外的类型才能修改)

组件的类型是:修改后组件的显示类型修改成Custom

如果是带参数的查询程序,则相应的参数为组件上的元素,那么在点击查

找的时候会自动传入参数;

练习6

用组件开发,把练习4,练习5的查询结果在界面上显示出来;

并挂入菜单

4.组件程序的开发(以押金收据购入程序)

1).放大镜,不带参数,带有参数

组件元素为:Custom Item

元素的LookUp如下图所示

放大镜要显示的内容写成Query

LookupClassName:要调用的类的名称

LookupQueryName:要调用的Query名称

LookupProperties:传入的参数,如果没有入参则为空,参数为组件上元

素的名称

LookupJsFunctionjs文件里调用的js函数

练习7

在练习5的基础上,收费员显示以放大镜的方式显示,显示收费员姓名,

查询时以rowid为查询条件;

2).js文件创建,js文件的调用;

创建的js文件的名称必须要和对应的组件的名称一致

如果js文件里调用其他js文件里的函数,则要在组件的OtherScript

js文件的名称添加进来,就可以调用里面的函数了

3).前端页面元素调用后台的classmethod的方法;

前端页面调用后台的类方法是通过函数js函数里调用

cspRunServerMethod(参数1,参数2,参数3.。。。)来实现

参数1为固定参数,传入的值为要调用的后台的类方法

那么入参的获取是通过组件上的某个元素来获得的

如组件UDHCJFRcptBuy中的添加按钮,是通过调用元素ins1来获取后台要执行的方法(ValueGet

4).执行后台的classmethod之后接收返回结果的两种方法;

1.直接通过cspRunServerMethod(参数1,参数2,参数3.。。。)返回结

果,可以定义变量直接接收返回结果;如果采用此方式,要求

Classmethodq 后面返回变量

Var Returnvalue

Returnvalue= cspRunServerMethod(参数1,参数2,参数3.。。。)

2.通过cspRunServerMethod(参数1,参数2,参数3.。。。)里的某个参

数接收返回值,如可以利用参数2接收后台的返回值

如接收返回值的参数的名称为GetReturnValue,那么在传入参数的时

候要传到后台cspRunServerMethod(参数1GetReturnValue,参数

3.。。。)

class端,GetReturnValue已经传入,那么通过

S  retval= GetReturnValue _"('"_$ZCVT(返回值,"O","JS")_"');"

&javascript<#(retval)#>,通过javascript把结果返回页面

js文件里有个函数名称为GetReturnValue(value),接收返回值括号

内的value就是返回值,然后可以根据需求对返回值做相应处理

练习8

输入登记号,回车,查找病人的姓名;并在界面上显示出来;

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.length;

获取Table上某一行的某个元素的值

var SelRowObj=document.getElementById('Tbuyrowidz'+selectrow);   

var buyrowid=SelRowObj.innerText;

其中Tbuyrowid为元素的名称,z要加到元素名称的后面,selectrow

行号;

如果是显示的列则用SelRowObj.innerText;

如果是隐藏的列则用SelRowObj.Value

7).Link

00528273

Display TypeLink

LinkUrlwebsys.default.csp(在输入组件名称时会自动输入)

LinkComponent:要Link的组件的名称

LinkExpression:要传入到所Link的组件的名称

如果要在新的窗体中打开组件:

General页签处,设置新打开窗体的大小

ShowInNewWindowtop=30,height=650,left=8,width=1000

8).按钮中打开新的组件

var str='websys.default.csp?WEBSYS.TCOMPONENT=UDHCJFDeposit&Adm='+Adm+'&deposittype='+t['01']
window.open(str,'_blank','toolbar=no,location=no,directories=no,status=no,menubar=no,scrollbars=yes,resizable=yes,copyhistory=yes,width=1000,height=700,left=0,top=0')
}

9).Message的定义

在组件属性的Message页签,定义Code,Description

js文件里调用时用t[‘Code’],获取Description

练习9

输入登记号(pa_patmas.Papmi_no),回车事件时,显示病人的姓名

(pa_patmas.papmi_name),就诊号(pa_adm.paadm_admno

pa_adm.paadm_rowid)(就诊号用放大镜显示,可能会有多条记录);

选择就诊号,查询病人的账单总表(dhc_patientbill),显示账单的总金

(pb_totalamount),账单rowid(pb_rowid)

选中病人的某个账单,显示账单的收费项目明细(pa_patbilldetails)(以

按钮的方式打开),显示收费项目的名称(pbd_tari_dr),单价

pbd_unitprice),数量(pbd_billqty),金额(pbd_totalamount);

账单RowidLink的方式,链接收费项目明细(示收费项目的名称,

单价,数量,金额);

说明:收费项目明细可以采用同一个组件,只是以两种不同的方式打开;

六.类文件的导出与导入

切换namespacewebsource

1.导出

Tools---Export,进入如下界面

可以导成.XML文件,也可以导成.cdl文件,然后Add要导出的类文件的名称

(websource/web目录下),输入要导出的文件保存的路径,可以是本地,也可以是

服务器,点ok即可

2.导入

同样,转换namespacewebsource

Tools---Import Local(Import Remote),选择要导入的文件进入如下界面

是否把导入的文件加到打开的工程里,如果是则第一个checkbox打勾;

是否自动编译导入的文件;如果编译则打勾;

七.组件程序的导出与导入

1.在界面编辑器中以站点的方式保存一次

2.组件导出

进入terminal,在websource下,执行w $$GetComponent^DHCComponent(组件名),此步骤将组件各属性导出到Global(^DHCComponent),进入Explorer,在websouce下找到^ DHCComponent,右键,Export,导出完成

说明:如果是P5导入到P7,则调用GetComponentP5P7

如果是P7导入到P5,则调用GetComponentP7P5

如果是P5—P5,P7---P7,则调用GetComponent

3.组件导入

Explorerwebsouce下,选中Global,右键,Iimport from Disk,导入

^DHCComponent完成后,进入组件管理器,如果要导入的组件已经存在,则要

删除原来的组件,才能导入(右键,Delete Component),之后进入terminal,在

websource下,执行w $$PutComponent^DHCComponent(组件名),这时一定要注

Message的大小写

说明:如果是P5导入到P7,则调用PutComponentP7

如果是P7导入到P5,则调用PutComponentP7P5

如果是P5—P5,P7---P7,则调用PutComponentP7

4.trakcare的菜单管理器中,如果已经挂过菜单,在删除组件时,菜单链接的

自动清空,要重新选中一下组件;

八.csp的创建

将多个组件包在一起的方法;

1).创建csp文件

1).Csp把多个组件包在一起,在菜单直接调用csp

   

src="websys.default.csp?WEBSYS.TCOMPONENT=UDHCJFSearch">   

src="websys.default.csp?WEBSYS.TCOMPONENT=UDHCJFDepositRpt">

src="websys.default.csp?WEBSYS.TCOMPONENT=UDHCJFInvRpt">

2).Csp组件之间的参数传递

如果获取某个组件上的元素属性,则需要增加

parent.frames[csp里定义的frame的名称].

练习

查询某段日期的某个收费员(用放大镜显示)的预交金明细

要求查询条件放在一个组件上

显示的预交金明细放在第二个组件上

csp把两个组件包起来

九.打印的实现         

目前使用最多的是Excel模板打印,如果是成批的数据,那么在查询的时候把要

打印的数据放到临时Global里,向Excel表格输出的时候从临时Global里取记录,

依次输出到Excel里。建议大家找个有打印的例子参考着做。

UDHCJFCKD.CLS

UDHCJFCKD.JS

ALLPRINTJST

练习10

打印上个练习的预交金明细,打印病人姓名,登记号,金额,支付方式

收费日期;

十.搭建TrakCare环境

远程登录

增加信任站点,自定义级别启用ActiveX的相关配置

本地TrakCare环境搭建操作步骤:

1.安装IIS

2.如果没有安装数据库,则需要安装数据库,配置数据库;

3.在数据库的配置中csp,增加虚拟目录;

4.IIS,增加虚拟目录,修改相关配置;

5.websource下执行$System.OBJ.DeletePackage("csp","dr");

6.安装jre

7.配置后检查工具栏--配置管理器的配置是否正确。

注意:在数据库配置的csp中的虚拟目录必须和IIS配置的一致

本文来源:https://www.2haoxitong.net/k/doc/4e3699dedc3383c4bb4cf7ec4afe04a1b071b094.html

《M语言.doc》
将本文的Word文档下载到电脑,方便收藏和打印
推荐度:
点击下载文档

文档为doc格式