Cache(十):面向对象基础 Cache(十一):面向对象开发
-
常规概念
都是一些基础概念,在学校学过很多遍了
-
事务
-
Cache面向对象的crud
面向对象练习一:
新建简单obj
Method GetCode()
{
Quit $THIS.CrsCode
}
引用对象
s operobj=##class(User.ORCOperation).%OpenId(3)
parameter:全局变量,在其他方法调用使用..#xxx
openid:取对象值,并读取对象,读取完后可以从对象中获取属性值
%New()
创建对象
%OpenId(id)
修改、取数据,删除时可用于判断对象是否存在
%Save()
保存对象之前的更改
%Id
保存对象的rowid
d obj.%Close()
关闭对象
set obj.属性=
给对象属性赋值
面向对象实现增删改查
$ISOBJECT判断是否是对象
##class是打开这个类的意思
/// 新增操作
/// table:DHC_StudentSFCA
/// input:StCode(不能重复),StName,StSexDR,StDob
/// output:
/// other:w ##class(web.Study.DaySixSFC).AddData("10","aa","1","2020-11-11")
ClassMethod AddData(StCode As %String, StName As %String, StSexDR As %String, StDob As %String) As %String
{
Quit:(StCode="")||(StName="") "学号或姓名为空"
Quit:$DATA(^DHCSTUDENTSFCA(0,"code",StCode))'=0 "学号重复" //$d为0时通过,为0代表值为空,子节点也为空,代表code索引中没有这个学号
Set:StDob'="" StDob=##class(websys.Conversions).DateHtmlToLogical(StDob) //标准转换日期接口 = $zdh(stdob,3)
Set oref=##class(User.DHCStudentSFCA).%New()
If (oref){ //判断对象是否创建,还可以写做 (oref)
Set oref.StCode=StCode
Set oref.StName=StName
Do oref.StSexDRSetObjectId(StSexDR) //指向型字段,需要用SetObjectId()赋值
Set oref.StDob=StDob //需要转换格式,转换为逻辑数字传输
Set sc=oref.%Save()
If ($$$ISOK(sc)){ //(sc=1)判断保存是否为空,保存是否成功
Set StRowId=oref.%Id()
Set result="add success"_StRowId
}
Else{
Set result="add error"_$SYSTEM.OBJ.DISPLAYError(sc) //显示错误信息 w $SYSTEM.Status.DISPLAYError
}
}
Do oref.%Close()
Quit result
}
/// 更新操作
/// table:DHC_StudentSFCA
/// input:StRowId,StName,StSexDR,StDob
/// output:
/// other:w ##class(web.Study.DaySixSFC).AddData("10","aa","1","2020-11-11")
ClassMethod UpdateData(StRowId As %String, StName As %String, StSexDR As %String, StDob As %String)as %String {
q:(StRowId="") "rowid is null"
s:StDob'="" StDob=$zdh(StDob,3)
s obj=##class(User.DHCStudentSFCA).%OpenId(StRowId) //open obejct
if (obj){
s obj.StName=StName
d obj.StSexDRSetobjectId(StSexDR)
s obj.StDob=StDob
TSTART //引入事务
s sc=obj.%Save() //save obj
if (sc=1){
TCOMMIT
s result=1
}
Else{
TROLLBACK
s result=0
}
d obj.%Close()
q result
}
}
///function:数据保存 新增与修改合并方法
///input:StRowId为空默认新增,不为空默认为更新数据
ClassMethod SaveData(StRowId As %String,StCode As %String, StName As %String, StSexDR As %String, StDob As %String){
q:StCode="" "stcode is null"
q:StName="" "stname is null"
If (StRowId="") { //新增
Quit:$DATA(^DHCSTUDENTSFCA(0,"code",StCode))'=0 "学号重复" //$d为0时通过,为0代表值为空,子节点也为空,代表code索引中没有这个学号
Set oref=##class(User.DHCStudentSFCA).%New()
}
Else{ //修改
Set oref=##class(user.DHCStudentSFCA).%OpenId(StRowId)
}
If ($ISOBJECT(oref)){ //判断对象是否存在,然后给对象属性赋值
Set oref.StCode=StCode
Set oref.StName=StName
Do oref.StSexDRSetObjectId(StSexDR) //性别使用SetObjectId赋值
Set sc=oref.%save()
TSTART
}
If ($$$ISOK(sc)){ //(sc=1)判断保存是否为空,保存是否成功
TCOMMIT
Set StRowId=oref.%Id()
Set result="add success"_StRowId
}
Else{
TROLLBACK
Set result="add error"_$SYSTEM.OBJ.DISPLAYError(sc) //显示错误信息 w $SYSTEM.Status.DISPLAYError
}
d oref.%Close()
q result
}
///function:查询数据,取出数据
/// table:DHC_StudentSFCA
/// input:StRowId(不为空)
/// output:
/// other:w ##class(web.Study.DaySixSFC).OpenData("10")
ClassMethod OpenData(StRowId AS %String) as %String{
Quit:StRowId="" "StRowId is null"
Set obj=##class(User.DHCStudentSFCA).%OpenId(StRowId)
If (obj){
Set StCode=obj.StCode
Set StName=obj.StName
Set:obj.StSexDR'="" StSexDR=obj.StSexDR.CTSEXDesc //指向表取性别描述,先取出obj中的指向数,再赋值给指向表获取性别指向值
Set StDob=obj.StDob
Set:StDob'="" StDob=$ZDATE(StDob,3) //transfer Date
Set result="学号:"_StCode_"姓名:"_StName_"性别:"_StSexDR_"出生日期:"_StDob
}
Do obj.%Close()
Quit result
}
Set StCode=obj.StCode //等同于obj.StCodeGet()
Set:obj.StSexDR'="" StSexDR=obj.StSexDR.CTSEXDesc //指向表取性别描述,先取出obj中的指向数,再赋值给指向表获取性别指向值
//=obj.StSexDRGetObjectId 取性别指向表CT_SEX的的RowId
///function:删除数据
/// table:DHC_StudentSFCA
/// input:StRowId(不为空)
/// output:
/// other:w ##class(web.Study.DaySixSFC).DeleteData("10")
ClassMethod DeleteData(StRowId AS %String) as %String{
Quit:StRowId="" "rowid is null"
Set obj=##class(User.DHCStudentSFCA).%OpenId(StRowId)
If (obj){ //通过%OpenId判断数据是否存在
Tstart
Set sc=obj.%DeleteId(StRowId) //通过%DeleteId删除数据
If (sc=1){
Set result="success"
Tcommit
}
Else{
Trollback
Set result="error"_$SYSTEM.Status.DISPLAYError(sc)
}
Do obj.%Close()
}
Else{
Set result="数据不存在"
}
}