目录:

创建新类(表)(class文件)与创建routine(.mac  .inc)

在类里面添加函数(classmethod)

Terminal的使用

===============================================

===============================================

创建新类(表)(class文件)与创建routine(.mac  .inc)

一个.cls文件对应一个.mac文件和.inc文件,属性(property)与函数(method/query)定义放在.cls文件中,具体的处理函数写入.mac文件中,常量在.inc文件中定义,将用于函数调用数组时使用的(1,2,3)定义为具体的变量名,使.mac与文件易读

File/New.../General

cache class definition(.cls)

cache objectScript routine(.mac/.int)

输入适当的包名(Package Name)和新建的类名(Class Name)如图,就能得到一个名为Package.Class.cls的类文件了,可以在workspace/project中找到该文件

新建类时,一个类对应一张表,对于该表的所有操作方法组成一个类;放在同一个包下的各个类是相关联的,在实际意义中,一个包下的类对同一个大问题的不同方面进行描述。具体的建立和分类方式通过数据库设计方式来指导,在此处不多说。

新建的文件如上图所示,代码写在大括号内

一个类(表)里的要素:

属性、主键、索引、方法。

新建属性:

直接写语句:

Property ID As %String [ Required ];

就可以新建一个名为ID的属性,该属性为字符串类型(注意区分大小写),且在表中是必需属性不能为空

也可以找到一个new property的按钮,按照新建向导新建一个属性

若表与表之间是父子表的关系,比如父表是基本信息,子表是详细信息,要在属性中建立两个表之间的联系:(下例中父表是Class1,子表是Class2,共同放在P包下)

在P.Class1.cls中的属性中需要写:

Relationship Class2 As P.Class2 [ Cardinality = children, Inverse = Class1 ];

在P.Class1.cls中的属性中需要写:

Relationship Class1 As P.Class1 [ Cardinality = parent, Inverse = Class2 ];

设置主键:

Index PK On (Pr1, Pr2) [ IdKey, PrimaryKey, Unique ];

设置索引:Query中的查找依据

Index IdxA On (Pr1, Pr2);

这里Pr1和Pr2可以是主键,也可以不是主键

与其他表连接时,即具体的属性名在另一张表里,在这张表也同时有体现:

Property RevisionInfo As Cm.RevisionInfo;

这样的意思是本张表有一组属性RevisionInfo在表Cm.RevisionInfo里,同时在本张表里也能看到这一组属性。

=======================================================

添加方法(SetData):

写方法时需要同时对(.cls.mac.inc)三个文件进行操作:

.cls文件:

ClassMethod SetData(PlanNo As %String, PatientId As %String, StartDate As %Integer, EndDate As %Integer, Module As %String, Status As %Integer, DoctorId As %String, UserId As %String, TerminalName As %String, TerminalIP As %String, DeviceType As %Integer) As %Integer
{
Set Ret = 0
Set Ret = $$SetData^Ps.Plan( PlanNo, PatientId, StartDate, EndDate, Module, Status, DoctorId, UserId, TerminalName, TerminalIP, DeviceType)
Quit Ret
}

定义classmethod名字是setdata,括号内为传入参数及类型,设置return初始值为0,然后调用routine里的SetData函数(规定调用成功返回1,在routine中设置),退出函数并返回Ret

.mac文件

#Include %occStatus
#Include Ps.Plan.Storage
#Include ChroDiseaConst
#Include Cm.RevisionInfo.Storage SetData(PlanNo, PatientId, StartDate, EndDate, Module, Status, DoctorId, UserId, TerminalName, TerminalIP, DeviceType) Public
{
Set Ret = $$$SetDataFailed
Set key = PlanNo
Set oref = ##Class("Ps.Plan").%OpenId(key)
If ($IsObject(oref) = 0)
{
Set oref = ##Class("Ps.Plan").%New()
}
If ($IsObject(oref) = 1)
{
Set oref.PlanNo = PlanNo
Set oref.PatientId = PatientId
Set oref.StartDate = StartDate
Set oref.EndDate = EndDate
Set oref.Module = Module
Set oref.Status = Status
Set oref.DoctorId = DoctorId Set RevisionInfo = $$GetNewRevisionInfo^Cm.RevisionInfo(UserId, TerminalName, TerminalIP, DeviceType)
Set oref.RevisionInfo.DateTime = $ListGet(RevisionInfo, $$$CmRevisionInfoDateTime)
Set oref.RevisionInfo.UserId = $ListGet(RevisionInfo, $$$CmRevisionInfoUserId)
Set oref.RevisionInfo.UserName = $ListGet(RevisionInfo, $$$CmRevisionInfoUserName)
Set oref.RevisionInfo.TerminalName = $ListGet(RevisionInfo, $$$CmRevisionInfoTerminalName)
Set oref.RevisionInfo.TerminalIP = $ListGet(RevisionInfo, $$$CmRevisionInfoTerminalIP)
Set oref.RevisionInfo.DeviceType = $ListGet(RevisionInfo, $$$CmRevisionInfoDeviceType) Set sc = oref.%Save()
If $$$ISOK(sc)
{
Set Ret = $$$SetDataSuccess
}
else
{
Set ErrMsg = $System.Status.GetErrorText(sc,"")
Do WriteServerLog^Cm.CommonLibrary("","",ErrMsg)
}
Kill oref
}
Quit Ret
}

这里,ChroDiseaConst设置了工程中用到的所有状态变量,如代码中的ISOK等;Ps.Plan.Storage.inc文件设置了对应这张表的各个属性的宏文件,将调用数组元素时使用的数字设置为对应变量名,使代码易读;Cm.RevisionInfo.Storage也是相同的作用

首先设置返回初始值,设置主键,若已存在则打开这个主键对应的值,否则新建;设置各个属性的值为传入的参数;判断是否成功,否则报错;最后释放缓存并返回Ret退出。

.inc文件

#Define    PsPlanD "^Ps.PlanD"

#Define    PsPlanI "^Ps.PlanI"

#Define PsPlanPatientId 2
#Define PsPlanStartDate 3
#Define PsPlanEndDate 4
#Define PsPlanModule 5
#Define PsPlanStatus 6
#Define PsPlanDoctorId 7
#Define PsPlanRevisionInfo 8

定义宏

==================================================

添加方法(简单查表):

.cls:

ClassMethod GetPatientPlan(PlanNo As %String) As %List
{
Set Ret = ""
Set Ret = $$GetPatientPlan^Ps.Plan(PlanNo)
Quit Ret
}

输入一个参数(PlanNo)返回符合查找条件的一个列表。首先置初值为空,然后调用routine,最后返回退出。

.mac:

GetPatientPlan(PlanNo) Public
{
Set Ret = ""
Set Data = $Get(@$$$PsPlanD@(PlanNo))
If (Data '= "")
{
Set PatientId = $ListGet(Data,$$$PsPlanPatientId)
Set StartDate = $ListGet(Data,$$$PsPlanStartDate)
Set EndDate = $ListGet(Data,$$$PsPlanEndDate)
Set Module = $ListGet(Data,$$$PsPlanModule)
Set Status = $ListGet(Data,$$$PsPlanStatus)
Set DoctorId = $ListGet(Data,$$$PsPlanDoctorId)
Set RevisionInfo = $ListGet(Data,$$$PsPlanRevisionInfo) Set DateTime = $ListGet(RevisionInfo, $$$CmRevisionInfoDateTime)
Set UserId = $ListGet(RevisionInfo, $$$CmRevisionInfoUserId)
Set UserName = $ListGet(RevisionInfo, $$$CmRevisionInfoUserName)
Set TerminalName = $ListGet(RevisionInfo, $$$CmRevisionInfoTerminalName)
Set TerminalIP = $ListGet(RevisionInfo, $$$CmRevisionInfoTerminalIP)
Set DeviceType = $ListGet(RevisionInfo, $$$CmRevisionInfoDeviceType) Set RevisionInfoRet = $ListBuild(DateTime, UserId, UserName, TerminalName, TerminalIP, DeviceType) Set Ret = $ListBuild(PatientId, StartDate, EndDate, Module, Status, DoctorId, RevisionInfoRet)
}
Quit Ret
}

同样的,先置初值,然后从D表中查找搜索条件(本例中因为用主键查找,因此不需要索引),然后设置返回的列表内容,最后build列表并返回。

=================================================

Terminal的使用:

命令行操作,用于对数据库进行指令操作或测试写过的方法。

如测试classmethod可以输入命令

w ##class(Ps.Plan).SetData(“xx”, “yy”, …)

测试query

do TestGetPlan^Ps.Plan()

(在routine中应有对应的测试方法TestGetPlan() )

注意,首次打开需要输入用户名密码,每次打开都要更改到对应命名空间:

zn “namespace”

Caché数据库学习笔记(2)的更多相关文章

  1. Caché数据库学习笔记(1)

    目录: Caché的概念和基础知识 Caché数据库的安装 创建命名空间(namespace)和数据库(database) Documentation的使用 ===================== ...

  2. Caché数据库学习笔记(5)

    目录 Cache数据库方法的RESTful封装 ================================================================ 因为对web serv ...

  3. Caché数据库学习笔记(4)

    目录 DeepSee的使用 数据.方法等的导入与导出 ======================================================== ================ ...

  4. Caché数据库学习笔记(3)

    目录 Query函数及其测试 重建索引表 Management portal简介 远程访问Ensemble ============================================== ...

  5. MySQL数据库学习笔记(十二)----开源工具DbUtils的使用(数据库的增删改查)

    [声明] 欢迎转载,但请保留文章原始出处→_→ 生命壹号:http://www.cnblogs.com/smyhvae/ 文章来源:http://www.cnblogs.com/smyhvae/p/4 ...

  6. MySQL数据库学习笔记(十)----JDBC事务处理、封装JDBC工具类

    [声明] 欢迎转载,但请保留文章原始出处→_→ 生命壹号:http://www.cnblogs.com/smyhvae/ 文章来源:http://www.cnblogs.com/smyhvae/p/4 ...

  7. MySQL数据库学习笔记(九)----JDBC的ResultSet接口(查询操作)、PreparedStatement接口重构增删改查(含SQL注入的解释)

    [声明] 欢迎转载,但请保留文章原始出处→_→ 生命壹号:http://www.cnblogs.com/smyhvae/ 文章来源:http://www.cnblogs.com/smyhvae/p/4 ...

  8. Mysql数据库学习笔记之数据库索引(index)

    什么是索引: SQL索引有两种,聚集索引和非聚集索引,索引主要目的是提高了SQL Server系统的性能,加快数据的查询速度与减少系统的响应时间. 聚集索引:该索引中键值的逻辑顺序决定了表中相应行的物 ...

  9. MYSQL数据库学习笔记1

      MYSQL数据库学习笔记1 数据库概念 关系数据库 常见数据库软件 SQL SQL的概念 SQL语言分类 数据库操作 创建数据库 查看数据库的定义 删除数据库 修改数据库 创建表 数据类型 约束 ...

随机推荐

  1. eNSP的使用

    1- 进入华为路由器界面配置ipThe device is running!####################################Nov  1 2016 23:39:24-08:00 ...

  2. SQL调优

    # 问题的提出 在应用系统开发初期,由于开发数据库数据比较少,对于查询SQL语句,复杂视图的的编写等体会不出SQL语句各种写法的性能优劣,但是如果将应用 系统提交实际应用后,随着数据库中数据的增加,系 ...

  3. MySQL主键删除/添加

    2修改数据库和表的字符集alter database maildb default character set utf8;//修改数据库的字符集alter table mailtable defaul ...

  4. c#.net常用字符串函数 字符串常用方法

    RegionsStr = RegionsStr.Remove(RegionsStr.LastIndexOf(","), 1);   //去掉最后一个逗号 Compare 比较字符串 ...

  5. MSSQL 2012 拒绝了对对象 'extended_properties' (数据库 'mssqlsystemresource',架构 'sys')的 SELECT 权限

    查看数据库的表的时候报如下错误: MSSQL 拒绝了对对象 ) 解决方法: 在数据库里相应的用户权限中,把db_denydatareader的复选框的勾去掉.db_denydatareader是拒绝访 ...

  6. 【Unity3D基础】让物体动起来①--UGUI鼠标点击移动

    背景 首先还是先声明自己是比较笨的一个人,总是找不到高效的学习方法,目前自己学习Unity3D的方式主要是两种,一种是直接看高质量的源码,另一种是光看不行还要自己动手,自己写一些有代表性的小程序,这也 ...

  7. VirtualBox网络设置讲解

    VirtualBox的提供了四种网络接入模式,它们分别是:           1.NAT 网络地址转换模式(NAT,Network Address Translation) 虚拟机访问网络,是通过主 ...

  8. 搭建android开发环境

    任何一个程序的开端都要从搭建开发环境开始,这样你就可以进行实战练习了,并且搭建完后即快速来一个项目HelloWorld, 哈哈,话不多说了,进入正题 android环境的安装主要分3步骤: 1.下载和 ...

  9. QT开发编译问题备忘

    编译<Qt及Qt Quick开发实战精解> 的代码,编译出错,提示: Cannot find file: E:\学习资料\QT\<Qt及Qt Quick开发实战精解>代码\sr ...

  10. spring环境搭建需要的插件-------Spring Tool Suite™ Downloads

    下载地址http://spring.io/tools/sts/all 上面的是集成了eclipse的,所以文件比较大,下面的是单独的插件,下载之后打开eclipse,help->installN ...