213 25 1MB
Russian Pages 120 Year 2004
. .,
. .
Caché (
)
2004
1
. ,
-
,
,
-
,
. :
-
; ; ; -
CASE-
-
. Versant, Jasmine, ODB-Jupiter, Caché . ,
., ,
,
. Caché
, . ,
Caché –
Web-
,
SQL
– ,
-
. Caché,
,
. Caché.
,
-
,
,
,
Cache. ,
,
-
. . .
.
.,
.
. ., InterSystems
. . .
-
. .,
. .
: . .
. .
2
1.
............................................8
1.1.
..........................................................8
1.2. 1.2.1. 1.2.2. 1.2.3. 1.2.4. 1.2.5. 1.2.6.
ODMG........................................................................9 ...............................................................................................................9 ..............................................................................................10 .....................................................................................................10 ............................................................................................11 .................................................................................................11 ...............................................................................................11
1.3. 1.3.1.
Caché ......................................................................................12 Caché..........................................................................12 2.
CACHÉ ................................................................14
3.
CACHÉ OBJECT SCRIPT ..............................................................19
3.1. 3.2. 3.2.1. 3.2.2. 3.2.3. 3.2.4. 3.2.5. 3.2.6. 3.2.7. 3.2.8. 3.2.9. 3.2.10. 3.2.11. 3.2.12. 3.2.13. 3.2.14. 3.2.15. 3. 3. 3.3.1. 3.3.2. 3.3.3. 3.3.4. 3.3.5. 3.3.6. 3.3.7. 3.3.8.
,
.........................................................................................19
.............................................................................................................................20 ............................................................................................20 Write .............................................................................................................21 Read ...............................................................................................................21 Set ..................................................................................................................22 .......................................................................................22 Do .................................................................................................................23 Kill .................................................................................................................23 Quit ................................................................................................................24 ................................................................................................................24 If ...........................................................................................................24 ..........................................................25 ......................................................................................25 $Case $Select ..........................................................................................25 For........................................................................................................26 While Do/While ................................................................................27 Caché ............................................................................................................27 ............................................................................................................27 Caché ....................................................................28 ...............................................................................28 ...................................................................................................29 ........................................................................................30 ....................................................................................................................31 ................................................................32 New ................................................................................................................32 3
3.3.8. 3.3.10. 3.3.11. 3.3.12.
...................................................................................................33 ...............................................................................................34 ..................................................................................................34 , , , , . ............................................................................................................................34
3.4. 3.4.1. 3.4.2. 3.4.3. 3.4.4.
@.................................................................................................35 ..............................................................................................................35 ....................................................................................................35 ...............................................................................................35 ......................................................................................................35
3.5. 3.5.1. 3.5.2. 3.5.3. 3.5.4. 3.5.5.
...........................................................................................................36 .........................................................................................36 ...................................................................................................36 – ? .......................................................................36 ..............................................................................37 ..................................................................................................38
3.6. 3.6.1. 3.6.2. 3.6.3. 3.6.4. 3.6.5. 3.6.6.
...........................................................................................................39 $ListBuild ......................................................................................................40 $ListLength....................................................................................................40 $List...............................................................................................................40 $ListGet .........................................................................................................40 $ListData .......................................................................................................41 $ListFind........................................................................................................41
3.7. 3.7.1. 3.7.2.
.................................................................................................................41 $ZDate ...........................................................................................................42 $ZDateH ........................................................................................................42
3.8.
5.1. 5.2. Э
..............................................................................................................................43 4.
CACHÉ...............................................................44
5.
............................................................................47 .................................................................................................47 .............................................................................................................47
5.3.
.........................................................................................................................48
5.4.
................................................................................................................48
5.5. 5.5.1. 5.5.2. 5.5.3. 5.5.4. 5.5.5. 5.5.6.
.............................................................................................................................48 ......................................................................................................49 .......................................................................................................49 ...........................................................................................................49 ................................................................................................................50 ...............................................................................................50 ....................................................................................................................51 4
5.5.7. 5.5.8. 5.5.9. 5.5.10. 5.5.11. 5.5.12.
......................52 ......................................................................................53 ....................................................................................................53 ...................................................................................................53 ...........................................................................................................54 .............................................................................................55
5.6. 5.6.1. 5.6.2. 5.6.3. 5.6.4. 5.6.5. 5.6.6. 5.6.7. 5.6.8. 5.6.9. 5.6.10.
................................................................................................................................55 .......................................................................................................55 ..............................56 .................................................................................56 .................................................................................56 .....................................................................................................57 ..................................................................................................................57 ..............................................................................................57 ....................................................................................58 ................................................................................................................58 .............................................................................................................59
5.7.
...................................................................60
5.8.
...............................................................................................................................61
5.9.
..............................................................................................................................61
5.10. 5.10.1. 5.10.2. 5.10.3. 5.10.4. 5.10.5. 5.10.6.
..............................................................................................................................61 ..................................................................................................................62 .................................................................................................62 .............................................................................................62 #IMPORT .................................................................................................63 SQL .............................................................................................................63 ....................................................................................................63
6.
........................................................................64
6.1.
................................................................................................64
6.2.
.......................................................................................64
6.3.
..........................................................................................................64
6.4.
............................................................................................64
6.5. 6.5.1. 6.5.2.
...........................................65 ............................................................65 , , ............................................................................................................66
6.6. 6.6.1. 6.6.2.
...................................66 .........................................66 .....66
6.7.
-
....................................................................................67 5
6.7.1. 6.7.2. 6.7.3. 6.7.4.
...............................................................................67 ................................................................67 ...................................................................68 .....................................................................69
6.8. 6.8.1. 6.8.2. 6.8.3. 6.8.4.
-
6.9.
..................................................................................69 .............................................................................69 ................................................................69 ...................................................................70 ...................................................................70 ..................................................................70
6.10.
...........................................................................................................71
6.11.
.....................................................................................................72
6.12. 6.12.1. 6.12.2.
..........................................................................................................72 ...........................................................................................72 .............................................................................73
6.13. 6.13.1. 6.13.2. 6.13.3. 6.13.4. 6.13.5.
.....................................................................................................73 .........................................................................................................73 .......................................................................74 ................................................................................................74 ...............................................................................74 .......................................................................................................75
6.14. 1. 2. 3. 4. 5. 6. 7. 8. 7.
......................................................................................75 ...........................................................................75 .........................................................................77 ......................................................................77 ..............................................................................79 ......................................................................................79 ..80 , ...................81 .......81 .............................................................83
7.1.
......................................................................................83
7.2.
.............................................................................83
7.3.
...............................................................83
7.4.
..............................................................................................................................84
7.5.
...........................................................................................................85
7.6. 7.6.1. 7.6.2.
...................................................85 $Data..............................................................................................................85 $Get ...............................................................................................................87 6
7.6.3. 7.6.4. 7.6.5. 7.6.6.
$Order............................................................................................................87 $Query ...........................................................................................................89 $QLength, $QSubscript.................................................................................90 Merge .............................................................................................................90
7.7. 7.7.1. 7.7.2. 7.7.3. 7.7.4.
...............................90 IDKEY.........................................................................................................91 .....................................................................................................................92 ........................................................................................................................93 ............................................................93 8.
CSP .................................................................95
8.1. 8.2. 8.3.
Caché .............................................................................................................95 ,
Caché..............................................................................95 ,
#server(…)# ...............................96
8.4. CSP .............................................................................................................................99 8.4.1. .........................................................................................................99 8.4.2. ........................................................................................................101 8.4.3. .......................................................................................................102 8.4.4. .........................................................................................................103 8.4.5. ...............................................................................................................103 8.4.6. .....................................................................................................104 8.4.7. JavaScriptHTML Caché Object Script (COS) 105 8.5.
.
%CSP.Request ..........................................................105
8.6.
%session ..............................................................................................................110
8.7.
............................112
8.8. .....................................................................................................................................117 ..........................................................................................120
7
1. 1.1. ,
,
,
.
. :
-
; ; ; . -
,
:
1.
, . . ,
,
,
. ,
-
,
, . . , . . .
2. ,
,
,
,
. .
, 3. .
,
,
. .
-
-
SQL
(join)
,
-
,
, . . .
, ,
. , «
. -
»,
. •
(
) :
,
• • •
,
; ; ; . ,
-
, ,
. , ,
Caché
SQL. InterSystems (www.intersystems.ru).
Caché
, 8
-
,
-
, . , ,
, -
, ,
.
1.2.
ODMG -
(
)
« », Group), .
,
. ODMG (Object Data Management -
,
. ODMG.
1.2.1. ODMG 2.0 .
•
.
-
,
•
. .
,
( (
). )
.
•
.
•
,
-
. . .
•
, .
, ,
-
,
. .
,
-
—
.
, . .
,
, ,
. .1
. .
9
1. 1.2.2. ,
. .
— identificator)
,
(OID — object -
, . .
. Versant
OID , yyyyyyyy —
xxxxxxxx:yyyyyyyy,
, xxxxxxxx —
.
OID ,
Jasmine
OID classnamexxxxxxxx, . .
classname —
. Caché,
,
. xxxxxxxx —
, ,
, .
—
-
: ,
. ,
:
,
,
OID,
,
.
,
— ,
.
1.2.3. . . -
:
,
,
-
. , ),
(
,
-
, . .
, . .
,
. ,
, , .2 «
(Adult)
«
» (MalePerson), «
,
. « » (Person), » (FemalePerson), « »
» (Child). 10
. MalePerson, FemalePerson, Adult MaleAdult, , ,
. Person. MalePerson Adult,
Child ,
,
-
.
2. 1.2.4. -
,
, «
»
-
, ,
,
. , ,
,
,
.
1.2.5. . , Language),
OQL (Object Query
SQL ,
ODMG.
, XML.
(
SQL. ) — XML QL ( ,
1998
.
XQL). -
. 1.2.6. ,
, .
, :
(
), •
. ,
, ,
-
;
• •
, -
; , ,
,
-
. . 11
1.3.
Caché Caché
1997
,
,
-
InterSystems. Caché 5.0. 1978 IDC, InterSystems
.
–
. Chase Manhattan, Lloyd Bank, -
, , .
InterSystems .
•
Caché
: , ,
,
•
.
Caché. , -
•
,
-
,
.
.
Caché (
•
,
«
. -
), »
. -
, . ,
•
. .
•
,
Caché
.
-
. SQL. ,
-
Caché SQL •
Caché. CSP
1.3.1.
Web-
Caché Caché: ,
•
,
.
-
. .
, Caché
,
,
•
.
,
. Caché Objects. ,
, .
.
12
2.
Caché Caché • • • • • •
: Studio Terminal
SQLCaché.
, « • • • • • •
,
-
» :
CSPCaché Caché.
«
» Caché
.4
Cache.dat. C:\CacheSys\MGR\User. « » . «
. Caché «
-
…» 1
.
».
14
4.
«
».
.5
.
5. (namespace), , «
».
User. ,
Caché Studio Web:
.
-
-
15
•
, CSP-
• •
• • •
Caché Object Script(COS)
, ;
, : Caché Object Script, Basic, Java, SQL, JavaScript, HTML,
XML; ,
; ; ; , WEB-
,
,
,
. Caché :
. ,
, CSP-
,
-
.
.
-
. Caché Studio
6.
. 6.
Caché Studio. ,
Caché Terminal ,
, . ENTER. . 7.
,
. .
-
.
16
7.
Caché Terminal Caché
Caché ,
. /
Caché ,
,
Caché.
Caché,
. 8.
8.
Caché
.
17
-
SQL,
. . 9.
9.
SQL-
.
18
3.
Caché Object Script
Caché (COS). COS — (ANSI MUMPS). . Script: • •
.
Caché Object Script M . CachéObject
: set set=12,
-
, COS ,
Caché
Caché-
: ,
.
,
–
set –
. .
•
-
.
• • • • • •
, : $Piece, $Select
.
$ . . .
: write, read
. .
. . . /
3.1.
. SQL.
, ObjectScript
,
,
.
, ,
, .
– ,
( . String, string,
)
STRING
,
. :
. ,
– . .
( (Direct Access), . «^».
, , ,
1.
) -
.
,
31
-
7-
-
. 2. 3.
–
«%». ASCII.
4.
. : Read, Set,
For.
Kill : Set Article=”
.
” 19
Read “ ”, number Kill Article, number :
Caché . String.
–
. .
–
,
,
. ,
–
. $.
-
— $Horolog, . -
– . “^$”.
.
,
^$Job
(
$S[torage]
,
-
.
.1). 1
> write $S > 16694336
$ZN[ame]
>write $ZN >
$ZV[ersion] $J[OB]
Caché , , . ,
$ZPI
3.2. 3.2.1. :
. -
.
.
• • • •
: 2
.
. , –
.
,
. .
,
-
. (
Caché
Terminal): 20
USER> SET··nextvar=" " ·, USER> SET·nextvar=" " USER> KILL··SET·nextvar=5··WRITE USER> KILL·SET·nextvar=5 3.2.2.
:
Write Write : Write
:
,
,
,
.
. Write .
: !– #– ?n –
; ; n
.
: SAMPLES>write " SAMPLES>write !, "
", !, "
SAMPLES>write !, "
", ?10, "
!!!” ", !, "
", !
", ?50, "
", !
SAMPLES> write a 1 SAMPLES>write 7.95 * 1.15 9.1425 3.2.3.
Read -
. Read
:
,
,
,
.
. : !– #– ?n – *( :(
#
–
,
. write .
.
-
:
SAMPLES>read x SAMPLES>write "
: ", x 21
: READ
,
-
write. :
(
.)
.
Enter,
. , SAMPLES>read !, " 5
: ", z#5 .
SAMPLES>read ?30, " : SAMPLES>read !, " 5 SAMPLES> 3.2.4.
:
5 : abcde : : ", n 5
: ", x:5
:
Set Set
Set Set Set Set >
< (< < (
, < 2>, < >=< >,
= < 1>, < >.< 1>.
= < 2> 3>, …) = < > 2>.
>,
.
) =
set x = 4 + 2 SAMPLES>write x 6
, ,
, . Set sum=sum+(num#10)+(num\10) .
3.2.6.
, 2 : Set sum=sum+num#10+num\10.
Do ObjectScript
, Do. P1: Do ^P1, P2 , . . ,
%,
,
-
: P1 –
, P1: Do P2^P1,
. ^ -
.
: Do ^sum. a b: Do ^sum(a, b). Do sum. ,
, – %SQROOT. ^(^–
Do, ).
,
-
,
.
,
.
(
-
.
:
SAMPLES>Do ^%SQROOT Square root of: 100 is: 10 Square root of: , ),
, . (^).
-
:
Set %X = 523 Do INT^%SQROOT Write %Y %X, INT
%SQROOT.
523 3.2.7.
Kill Kill
, .
Kill < > Kill Write . : SAMPLES>set a = 1, b = 2, c = 3, d = 4, e = 5 SAMPLES>write a=1
-
INT %Y.
: -
23
b=2 c=3 d=4 e=5 SAMPLES>kill c SAMPLES>write a=1 b=2 d=4 e=5 3.2.8.
Quit . . 2
Quit
,
-
. . Caché Studio .
, undefined variable
, .
, Caché Terminal. SAMPLES>
,
:
: SAMPLES 2d0>. Q( Quit) . FINED> : SAMPLES>do ^badroutine start+3^badroutine Quit, SAMPLES 2d0>Quit SAMPLES>
, ^badroutine
[,< 2>,...,< 3>] , . code , . . , 1: Set x=0,y=-1,a=0 if xupto) set t1=1, t2=1, fib=1 write ! while (fib'>upto) { write fib," " set fib=t1+t2, t1=t2 ,t2= fib } Caché Terminal: SAMPLES>do ^fibonacci : 100 1 2 3 5 8 13 21 34 55 89 1 2 3 5 8 13 21 34 55 89
3. 3.
Caché
3.3.1. Caché 1.
3 MAC) SQL, (OBJ). (
( , ,
2.
: ObjectScript,
INT)
ObjectScript. .
SQL 3.
( MACInclude –
,
HTML.
INC)
,
-
. –
-
. 4.
(.OBJ) –
,
. . .
. RTN,
. . 27
Caché Studio. Caché Terminal. +
,
.
:
SAMPLES>do ^badroutine start+3^badroutine SAMPLES 2do>quit SAMPLES> ,
,
,
. .
end quit
-
:
;
3.3.2.
Caché Caché . –
,
-
,
.
MAC, ASCII,
-
,
. (
), - (
), ; (
).
,
,
: _ -
),
-
. : Do ^RoutineName ( ,
.
– ,
, ),
%(
,
.
-
. [
] [
] [
] , ,
-
, . 3.3.3. , ,
,
,
Quit.
. : Label ([param [= default]]) // // Quit // , , Label – , param – .
-
Quit , default – ,
-
. Do Label[(param)] C
: Do Label^Routine[(param)] 28
Routine – , Routine, param –
Routine.Mac, Label – .
1. , set x=1,y=2 do minim(x,y) // write !,"x=",x," y=",y quit minim(a=0,b=0) // if (a>b) { set mn=b } else { set mn=a} write !,"min=",mn quit
routine.Mac
minim
:
:
do minim(x,y) minim do minim^routine(9,2)
: ,
: do minim^routine() (^)
,
Do minim(x,y),
,
. N-
: + : Do minim+3^routine –
.
,
.
.
3.3.4. Caché
(
)
,
. . .
, , . .
Caché
. : $Function(Arg1, Arg2, …).
-
$.
.
.3
. 3
-
$Ascii, $CASE, $Char, $Random, $Select, $Stack, $Text, $View $Data, $Get, $Order, $Name, $Query, $QSubscript, $QLength $Extract, $Find, $Length, $Piece, $Reverse, $Translate $FNumber, $Justify, $Inumber, $NUMBER $List, $ListBuild, $ListData, $ListFind, $ListGet, 29
,
$ListLength $Increment $ZABS, $ZEXP, $ZLN, $ZSIN $ZDate, $ZDateTime, $ZDateH, ZTime, ZtimeH $ZWAscii, $ZWChar, $ZF,$ZHex, $ZLAscii, $ZLChar, $ZSEArch, $ZSEEK $ZCONVert, $ZCyc, $ZSTRIP $ZBitAND, $ZbitCount, $Zboolean
Caché. 3.3.5. ,
-
. ,
,
.
,
.
: (
. .
.
: Set < Do
=$$< >(
>(
) )
Do
. . Do,
,
: Do
^
(
)
: Set
=$$
^
(
)
1. , FRnd.Mac: set a=200,b=100 set r=$$Rnd(a,b) // write !,"r=",r Quit Rnd(m,n) // Quit $Random(m-n)+1+m : set r=$$Rnd^FRnd(200,100) 2. func1.Mac set x=6,y=2 set mn=$$minim(x,y) // write !,"x=",x," y=",y,”min=”,mn
minim:
30
quit minim(a,b) // write "minim" if (a>b) { quit b } else { quit a} quit : Set m=$$minim^func1(9,2) 3.3.6. ObjectScript, ,
, ,
.
{}.
: <
(
)[
{
]
> [Quit
]
} –
,
,
-
. –
.
,
,
.
-
public-
–
. public. Private ( , public –
: private
,
)–
. : (
)[=
] :
Do Proc(
) :
Do Proc^Routine(< Proc – , Routine – 1: proc2.Mac set c=1,d=3 do MyProc(1,2) // quit MyProc(X,Y)[A,B] Public { write "X+Y=", X+Y, ! set A=1,B=4 write "A+B=", A+B, ! }
>)
// . :
: 31
Do MyProc(1,2) : Do MyProc^proc2(1,2) 2.
proc2.Mac,
MyProc x, y
MyProc. abc,
-
a, b: set c=1,d=3 do MyProc(1,2) // MyProc MyProc(X,Y)[A,B] Public { write "X+Y=", X+Y, ! set A=1,B=4 do abc(X,Y) // write "A=", A, " B= ", B, ! }
abc
// abc, abc(n,m)[A,B] { set n=9,m=5 write "a=",A,"b=",B }
MyProc
MyProc
3.3.7. , ,
-
,
,
. 1 .3.3.3.
x
y,
routine.Mac,
minim,
-
,
.
. .
Caché 1.
«
»
Kill
: ,
-
Quit
.
2.
New ,
3. 4.
. .
public
private
, .
3.3.8.
New New
, .
.
: New [(
)]
New –
P1
, : New a,b // : //
a
.
b
32
New a Set a=1 Do P2 Write Quit P2 // New x, y Set x=a, y=3 Quit a x
P1
y .
P2, . . P2
P1.
-
. ,
,
P2. New
. (private) ,
New New
public-
, public-
New,
Quit .
,
public-
,
.
, abc set name="Tom" do MyProc(9,4) write !,"abc name= ", name
abc.Mac:
MyProc(x,y)[name]{ New name Set name="John" write !,"MyProc name = ",name Do xyz() Quit } xyz()[name] { write !,"xyz name = ",name }
“John”
“xyz” name, . . name – publicname ( ) public“MyProc”. ^abc MyProc name = John xyz name = John abc name= Tom
“abc” . “name”
New
“Tom”,
:
3.3.8. • • •
•
:
. :
33
•
.
3.3.10. New.
-
Kill. . . :
. Set a=1, b=2, c=3 Do p1(a,b,c) // write … P1(r,s,t) // Set summ = r+s+t Quit
-
. ,
,
.
3.3.11. –
-
. , Kill var // var Do P1(.var) // … P1(x) // Set x=0, x(1)=1, x(2), x(3)=3 … Quit
,
.
:
x
P1 var, var(1), var(2), var(3). : Do ^Summ(a, b, c, .var) 3.3.12.
,
,
,
,
.
,
• • • • •
• • •
•
. private
: public. . . . .
: public public; ,
. ;
,
. ,
. ,
Caché ObjectScript ,
, . 34
: ObjectScript .
3.4.
@
• • • •
: :
(
,
).
:
. :
.
:
.
3.4.1. . : Set pname=”Prog1” do @pname // Set var=”locvar” Set @var=4 //
Prog1 locvar
4
3.4.2. ,
for,
-
. : Set isetarg=”x=1”, @isetarg // set x=1 Set ikill=”(e,f,g)” Kill @ikill Set inew=”(a,b,c)” New @inew 3.4.3. . –
-
. , (
):
: Set x(2, 5,3)=“IndInd” Set feld=”x(2,5)”, d1=3 Write @feld@(d1) : IndInd x(2,5)
3.
3.4.4. . Set lvmuster=”1.3N” If eingabe ‘?@lvmuster Do error
:
35
3.5. Caché
,
. COS
,
-
. ,
. ,
.
-
. SAMPLES>set x = 4 write x + 2 6 SAMPLES>set x = "5" write x * 2 10 SAMPLES>set x = "fred" write x + 3 3 SAMPLES>set x = "32hut" write x / 4 8 SAMPLES>write +x 32 SAMPLES>write 5 + 2, ?10, "5" + "2" , ?20, "5 + 2" 7 7 5+2 SAMPLES> 3.5.1. ).
^( kill,
, .
-
:
SAMPLES>set x = 4 SAMPLES>set ^x = " SAMPLES>kill SAMPLES>write SAMPLES>write ^x
"
: SAMPLES > kill ^x. 3.5.2. : (_)– (?) – ject Script.
, ,
3.5.3.
Cache Ob– ?
?– .
?
,
< о - о>[< о - о>] < - > . .4
1 (true), , ,
– ,
, .5
-
. 36
4 3(
) 1
1.3
3 3
.3 3
3.
,
.
0 5
(
A
C
)
U
E
L
ANP
N
"abd"
P : 1. 348?3N – 2.
, . .
–
3
date
. .
.
.
: if date?2N1P2N1P4N write “ 3. 4. 1U.AP –
”. : 2N1”.”2N1”.”4N.
–
,
. 3.5.4. : $Length(< , $Extract(
,[< >,
]) – . 3>) –
2>,
,
,
,
) – ,
>,
,
) –
-
,
, .
, $Justify(< ,
–
. >,
,
) – ,
. ,
.
Caché.
. 37
SAMPLES>write $length(" 18 SAMPLES>write $extract(" ; 8 SAMPLES>write $find(" 11 SAMPLES>write $piece("
?") ", 8, 12) 12 ", "
") ", " ", 2)
SAMPLES>write $justify(3.1415, 10, 3) 3.142 $Piece , , ,
. .
.
“-“ – . $Piece .
: «22-55-77», ,
,
, :
$Piece(< >, < : SAMPLES>write $piece("
>[, ]) ", " ")
: SAMPLES>write $piece("
", " ", 1)
SAMPLES>set street=$piece(" SAMPLES>write street
^
^35^630058", "^", 2)
–
: SAMPLES>write $piece(" ^35 , $Length
^
: ,
SAMPLES>write $length(" 4
^35^630058", "^",2,3)
^
. ^35^630058", "^")
3.5.5. $Extract Set.
$Piece
-
$Extract
,
. SAMPLES>set empty="" SAMPLES>set $extract(empty, 4) = "abcde" ; "abcde" SAMPLES>write empty . . . abcde SAMPLES>set $extract(empty, 4, 5) = "12345" ; "12345" SAMPLES>write empty . . .12345cde $Piece .
3
, . . 4-
4
5-
Set . 38
SAMPLES>set empty="" SAMPLES>set $piece(empty, "^", 3) = "abcde" write empty ^^abcde SAMPLES>write $length(empty, "^") 3 SAMPLES>set $piece(empty, "^", 2) = "9/9/1999" write empty ^9/9/1999^abcde SAMPLES>write $piece($piece(empty, "^", 2), "/", 3) 1999 SAMPLES>
3.6. Object Script . , , , 3-
. L1={ , L2={
. : } . .
,
,
,
,
L3={
,
} ,,
L4={
,
, “ ”,
: L1. }
4
,
-
. }
4
,
3-
. , L5={ Caché
,
,{
-
: ,
-
,
-
},
}.
. ,
• • • • •
,
.
-
: . . . . . .
USER> Set L2=$ListBuild(“ .6
”,”
,
$ListBuild: ”,” ”) . 6
$ListBuild $ListLength $List $ListGet
$LB $LL $LI $LG
$ListData
$LD
$ListFind
$LF
, . ,
$Get -
39
3.6.1.
$ListBuild .
:
$LISTBUILD(element,...) $LB(element,...)
element – .
,
.
,
X:
SET X=$LISTBUILD("Red","Blue","Green")
3.6.2.
$ListLength .
:
$LISTLENGTH(list) $LL(list)
list
.
:
WRITE $LISTLENGTH($LISTBUILD("Red","Blue","Green")); WRITE $LISTLENGTH("") ; 0
3.6.3.
3
$List .
:
$LIST(list,position,end) $LI(list,position,end)
list
, Position –
, End –
. • • •
: $LIST(list) $LIST(list,position) $LIST(list,position,end) , position :
. . , end.
-
WRITE $LIST($LISTBUILD("RED","BLUE","GREEN")) ; WRITE $LIST($LISTBUILD("RED","BLUE","GREEN"),1) ; SET X=$LISTBUILD("Red","Blue","Green") WRITE $LIST(X,2) ; Blue
RED RED
SET X=$LISTBUILD("Green ","White ","Brown ","Black ") SET LIST2=$LIST(X,3,-1) WRITE LIST2 ; BrownBlack
$List
Set
,
. $List
.
.
:
>Set L1=$LISTBUILD("RED","BLUE","GREEN") >Set $List(L1,2)= "hhhh" ; hhhh >Write $List(L1,2) hhhh > Set $List(L1,4)= "abcd" ; 4-
3.6.4.
$ListGet , .
: $LISTGET(list,position,default) $LG(list,position,default)
list 40
Position – Default –
,
.
: SET LIST=$LISTBUILD("A","B","C") WRITE $LISTGET(LIST) ; WRITE $LISTGET(LIST,1) ; SET LIST=$LISTBUILD("A","B","C") WRITE $LISTGET(LIST,4) ; WRITE $LISTGET(LIST,4,"ERR");
3.6.5.
A A , . . 4"ERR"
$ListData ,
.
:
$LISTDATA(list,position) $LD(list,position)
list – Position –
. 1 (true) –
, 0 (false) – .
-
:
KILL Y SET X=$LISTBUILD("Red",,Y,"","Green") WRITE $LISTDATA(X,2) ; 0 WRITE $LISTDATA(X,3) ;
я
–
0 WRITE $LISTDATA("")
я
;
0 WRITE $LISTDATA(X,0) ; 0 WRITE $LISTDATA(X,6) ; 6- я
0
3.6.6.
я
5-
$ListFind .
:
$LISTFIND(list,value,startafter) $LF(list,value,startafter)
list – Startafter –
, value -
. ,
.
.
,
. ,
.
-
,
(0),
-
:
SET X=$LISTBUILD("A","B","C","D") WRITE $LISTFIND(X,"B") 2 SET X=$LISTBUILD("A","B","C","D") WRITE $LISTFIND(X,"B",2) 0
3.7. ObjectScript
– ,
0
. 12/31/1840
2980013
-
41
12/31/9999. 15/12/2003.
,
:
$Horolog.
, ,
. $Horolog , . USER> write $Horolog 59469,47554 3.7.1.
1 2 ,2 , 13 9
$ZDate $ZDate 9 – . – 4–
:
. .
: ,
,
,
-
. , 10 –
:1– 0–
,
-
. . –
.
: « ».
–
. –1 (
–1,
1).
: SAMPLES> write !,$Zdate($Horolog, 2, " ") 27 2003 SAMPLES>write $zdate($horolog) 11/24/2003 SAMPLES>write $zdate($horolog, 2) 24 Nov 2003 SAMPLES>write $zdate($horolog, 10) 1 ; USER>write $zdate(11111111111111111111, 1,,,,,,, -1) -1 3.7.2.
-
$ZDateH $ZDateH
. ,
, ,
-
. $ZDate. , $ZDateH
, . T
( ) SAMPLES >write $ZDateH("24/11/2003", 4) 59497 SAMPLES >w $ZDateH("21/05/2002", 4) 58945 SAMPLES>write $ ZDateH ("21/9/1999", 5,,,,,,, -1) -1 SAMPLES>write $ ZDateH ("21 SEP", 5,,,,,,, -1)
,
.
42
59433 SAMPLES>write $ ZDateH ("SEP 21 1998", 5,,,,,,, -1) 57607 SAMPLES>write $ ZDateH ("T+12", 5,,,,,,, -1) 59509 SAMPLES>write $ ZDateH ("MAT 3", 5,,,,,,, -1) -1
3.8. Caché .
. Caché
.
,
,
-
. . , MyVar Set MyVar=7 Set MyVar(22)=-1 Set MyVar(-3)=89 Set MyVar(“MyString”)=”gg” Set MyVar(-123409, “MyString”)=”k” Set MyVar(“MyString”, 2398)=23 Set MyVar(1.2, 3, 4, “Five”, “Six”, 7)
:
, ,
, MyVar(22)
,
. ,
, MyVar(10). . .
.
,
, . .
, ,
:
, -
.
43
4.
Caché
Caché Data Management Group).
ODMG (Object –
,
.
Caché
-
, . .
.
, (
). Caché : ).
. Caché • •
( (
-
. 10.
). (
.
)
-
, ,
. -
.
.
• •
: . .
(%String, %Integer, %Float, %Date – .
Caché .). Caché
-
. -
-
-
10.
Caché
. : . : reference),
OREF (object ,
. OID
– OID (object ID). , .
OID . OREF –
, -
OREF. 44
, .
(OID) Caché,
,
(OREF).
-
: -
. ,
.
. ,
,
-
. ,
, %New()
,
, %Close() –
. %RegisteredObject. ,
.
-
, . Caché.
-
, . (
. )
%SerialObject
.
-
, , ,
.
. -
: -
. – OREF.
-
, .
OID, . %Persistent. , : . . – OID OREF. ,
%Persistent ,
, 2
OID
,
, OREF .
Caché : .
Caché
-
. .
Caché
.
Caché
. .
. . , . .
,
. 45
.
• •
Caché
Caché; ; Caché SQL Gateway. Caché : . UDL (unified definition language), markup language). run-time . .
:
, ,
XML (extensible
46
5. 5.1. .
-
.7: 7
(
)[
]
: 48
Property Total As %Float (SCALE = 2); Property Description As %Library.String (MAXLEN = 300); Property PlayingNow As %Library.Boolean [ InitialExpression = 1 ]; Property Rating As %Library.String (VALUELIST = ",G,PG,PG-13,R"); Property Pr As %String [ Required ]; Property SALARY As %Integer (MINVAL = "0", MAXVAL = "1000000"); Property SecretName As %String (MAXLEN = "20") [ Private, Required ]; : Relationship Chapter As Chapter [Inverse = Book, Cardinality = Many]; •
Caché
: ,
•
,
,
(CLOB’ ),
. -
•
. ,
•
, .
,
,
,
-
(private).
. -
( ).
5.5.1. (public) , . . «
».
5.5.2. , . •
-
:
•
– Get(), Set(),
,
–
.
– ,
,
-
. ,
,
.
, . ,
. ,
,
-
. 5.5.3. , .
, .
: ,
Calculated –
.
-
. Description – .
,
Caché
-
.
49
Final –
,
. .
,
.
InitialExpression –
. .
. private.
Private –
,
private.
. .
Required – required.
-
. Transient –
,
. -
transient. . Type – ,
,
, .
-
(%String).
. 5.5.4. • • • • • •
:
5.5.5. .
,
,
.
Property Count As %Integer; Count , %Integer –
,
. ,
• • •
•
:
Property Count As %Integer(MAXVAL = 100); , : ; ; .
•
•
:
: ,
(
-
) SQL, ODBC, ActiveX
( . Java,
),
. ,
Caché
. 8. 8 50
SQLBINARY, BINARY RAW, VBINARY
%Binary %Boolean
(0-
, 1-
VARYING,
) MONEY, SMALLMONEY
%Currency (
%Date
DATE
)
%Float
DOUBLE, DOUBLE FLOAT, REAL
PRECISION,
%Integer
BIT, INT, INTEGER, SMALLINT, TINYINT $List,
%List Caché %Name
“ .
-
” -
%Numeric
DEC, DECIMAL, NUMBER, NUMERIC
%Status CHAR, CHAR VARYING, CHARACTER, CHARACTER VARYING, NATIONAL CHAR, NATIONAL CHAR VARYING, NATIONAL CHARACTER, NATIONAL CHARACTER VARYING, NATIONAL VARCHAR, NCHAR, NVARCHAR, VARCHAR, VARCHAR2
%String
TIME
%Time %TimeStamp
,
-
TIMESTAMP
5.5.6. , . MAXLEN — MAXVAL — MINLEN —. MINVAL —
: ,
;
; ,
;
; 51
FORMAT —
. .
$FNUMBER, SCALE — PATTERN — PATTERN TRUNCATE — , ODBCDELIMITER — ODBC. VALUELIST – DISPLAYLIST –
. ,
.
-
Caché. 1, MAXLEN ( -
),
0, %List,
. -
.
,
-
, VALUELIST. .9
,
. 9
MAXLEN, MINLEN
%Binary %Boolean %Currency
DISPLAYLIST, FORMAT, MAXVAL, MINVAL, VALUELIST
%Date
DISPLAYLIST, FORMAT, MAXVAL, MINVAL, VALUELIST
%Float
DISPLAYLIST, FORMAT, MAXVAL, MINVAL, SCALE, VALUELIST, XSDTYPE
%Integer
DISPLAYLIST, FORMAT, MAXVAL, MINVAL, VALUELIST, XSDTYPE
%List
ODBCDELIMITER
%Name
COLLATION, INDEXSUBSCRIPTS, MAXLEN, XSDTYPE
%Numeric
DISPLAYLIST, FORMAT, MAXVAL, MINVAL, SCALE, VALUELIST
%Status %String
COLLATION, DISPLAYLIST, MAXLEN, MINLEN, PATTERN, TRUNCATE, VALUELIST, XSDTYPE
%Time
DISPLAYLIST, FORMAT, MAXVAL, MINVAL, VALUELIST
%TimeStamp
DISPLAYLIST, MAXVAL, MINVAL, VALUELIST
5.5.7. , Caché
.
. 10
. 52
10 Display Logical
-
Storage ODBC
ODBC
SQL
, : 11 DisplayToLogical() LogicalToDisplay () LogicalToODBC()
ODBC (
)
(
)
ODBCToLogical()
ODBC
LogicaToStorage() (
)
(
)
StorageToLogical() . Person %Library.Date. Person Caché DateOfBirthDisplayToLogical(), DateOfBirthLogicalToDisplay() .
DateOfBirth . .
5.5.8. Caché
.
-
, . .
, Doctor: Property Doc As Doctor;
Doc,
5.5.9. .
-
, ,
.
, , ,
,
– ,
,
. . Property Adr As Address; Adr , Address –
.
5.5.10. . Caché :
(List)
(Array).
53
, . . .
:< .
,
>
,
:
2.04.1999 10.05.2001 20.11.2002 ,
.
,
Colors
%String: Property Colors As %String [collection = list]; , Caché Doctors Property Doctors As Doctor [collection = array];
,
,
, Doctor:
5.5.11.
(Binary Large Objects)
. Caché SQL CLOBs (Character Large Objects) ,
CLOBs
, .
, , Caché
. BLOBs , ,
, BLOBs -
.
-
, . CHARACTERSTREAM ( ) BINARYSTREAM( ). %STREAM. : Class MyApp.JournalEntry Extends %Persistent [ClassType = persistent] { Property ItemDate As %Date; Property PictureOfTheDay As %Stream [ Collection = binarystream ]; Property EventsOfTheDay As %Stream [ Collection = characterstream ]; } MyApp.JournalEntry : PictureOfTheDay – , EventsOfTheDay – . , , Caché . STORAGE GLOBAL, FILE. LOCATION , , . , . : Property GMemo As %Stream (STORAGE="GLOBAL", LOCATION="^MyStream") [collection = binarystream]; Property FMemo As %Stream (STORAGE="FILE", LOCATION="C:\Stream") [collection = binarystream]; GMemo ^MyStream, FMemo C:\Stream.
54
GLOBAL
-
^PackageClassS. .
5.5.12. . , der.
$Or-
, abc Property abc [ MultiDimensional ];
: abc:
Set x = $DATA(obj.abc) Set x = $DATA(obj.abc(3)) Set x = $GET(obj.abc(3)) Set x = $ORDER(obj.abc("hello",3)) KILL obj.abc obj – oref. , . , KidsGet, KidsSet, SQL .
-
Kids KidsLogicalToDisplay.
5.6. – Caché
,
.
.
,
,
-
. . , Caché Object Script (COS). . %Library.Status,
, ,
,
, .
. ClassMethod, Method. , ClassMethod < { }
: >(
)[
]
: Method < { }
>(
)[
]
5.6.1. .
-
. , ).
, ,
( Calculate
:
Method Calculate(count As %Integer, name, state As %String = "CA") { // ... }
55
count
state
%String.
%Integer
%String, %String, .
. .
.
, name
5.6.2. : Method Test(flag As %Integer = 0) { }
,
.
5.6.3. ,
.
,
ByRef.
:
Method Swap(ByRef x As %Integer, ByRef y As %Integer) { Set temp = x Set x = y Set y = temp }
, ,
, ByRef,
Output.
,
-
. Method CreateObject(Output newobj As MyApp.MyClass) As %Status { Set newobj = ##class(MyApp.MyClass).%New() Quit $$$OK }
Caché Object Script (ByRef Output),
, :
Do obj.Swap(.arg1, .arg2)
5.6.4. , .
,
, ,
-
.
,
( ,
).
(OREF)
.
:
Method MethodName() As ReturnType { }
MethodName ,
, ReturnType
, %Integer:
.
Method Add(x As %Integer, y As %Integer) As %Integer { Quit x + y }
,
:
Method FindPerson(id As %String) As Person { Set person = ##class(Person).%OpenId(id) Quit person }
56
5.6.5. public
private. Private. Public-
, .
Caché private.
»
«
(protected). 5.6.6. ObjectScript), “Basic”, Language.
“Java”. .
: “Caché” (Caché ,
, ,
: Class MyApp.Test { /// Basic Method TestB() As %Integer [ Language = basic] { ' Basic Print "Э " Return 1 } /// Cache ObjectScript Method TestC() As %Integer [ Language = cache] { // Cache ObjectScript Write "Э " Quit 1 } }
. , , Caché-
Caché ObjectScript Basic, . Caché Java Binding), Java, Java)
. Java( Java- . Java
JVM (
-
. Java-
-
Java-
.
5.6.7. .
, ,
.
: ClassMethod –
.
,
. ClassMethod. Description –
, .
,
.
-
. Final –
, ,
. Private –
.
. -
, (
).
, . . Final
private,
-
private57
.
public. (
,
-
«protected» “private” , ReturnType –
). .
(“ ” ), ReturnType , SQLProc –
,
ReturnType
-
. . . SQL.
-
. 5.6.8. ,
. ##this.
:
set sc= ##this.%Save() ##this, %Save –
-
. . ,
##this
.
-
. :
.
%New() – %OpenId() – %DeleteId() –
. .
5.6.9. .
, : Do oref.MethodName(arglist) Set value = oref.MethodName(arglist)
oref MethodName , .
,
,
, arglist , ,
Admit
Patient
: Do pat.Admit()
pat
OREF Patient. , SearchMedicalHistory : Set result = pat.SearchMedicalHistory("MUMPS") pat OREFPatient result SearchMedicalHistory. . . , .
Patient
-
,
,
-
:
Do ##class(Classname).MethodName(arglist) Set value = ##class(Classname).MethodName(arglist)
Classname , arglist
, MethodName . Value
, ,
,
. 58
.
,
ReportCard: Do ##class(MyApp.ReportCard).PurgeAll() MyApp – . , Exists , :
PurgeAll
%File,
,
-
Set exists = ##class(%File).Exists("\temp\file.txt")
exists
true (1),
,
false (0),
.
5.6.10. • • • •
Caché
:
-
–
-
,
Caché Object Script. .
.
,
Speak
-
Dog:
Class MyApp.Dog Extends %Persistent [ClassType = persistent] { Method Speak() As %String { Quit "Woof, Woof" } }
SQL
HTML,
Caché ObjectScript, .
Basic,
-
: Write dog.Speak()
//
:
Woof, Woof
–
-
Caché Object Script. ,
.
SQL,
HTML. . ,
,
,
,
. Speak
, :
-
-
Method Speak() As %String [CodeMode = expression] { "Woof, Woof" }
: Write dog.Speak()
: Write "Woof, Woof"
.
. : Caché -
-
.
–
Caché. ,
,
-
. .
,
:
Method Call() [ CodeMode = call ]
59
{
Tag^Routine }
“Tag^Routine”
Tag
Routine.
–
,
Caché Object Script. . .
5.7. –
,
,
. . .
,
. ,
MyApp.A
:
XYZ
100
Class MyApp.A { Parameter XYZ = 100; }
MyApp.B
.
Class MyApp.B Extends MyApp.A { Parameter XYZ = 200; }
.
-
,
. , .
, . ,
MAXVAL,
%Integer %Integer.
NumKids
-
:
Property NumKids As %Integer (MAXVAL=10);
, 10
MAXVAL
я
асса %Integer
NumKids. :
. NumKidsIsValidDT, 10.
, ,
NumKids
IntegerLessThanTen. PROPERTYVALI, ,
DATION. :
• • •
0– 1– 2(
. )–
. ,
,
-
60
.
, .
5.8. .
,
. Caché Object Script, SQL. ResultSet – , Caché Object ActiveX, Java. , SQL SQL.
Script, (View),
,
5.9. –
,
.
-
. ,
.
Student
« Student,
, »
Person
,
.
,
. .
. EXACT – UPPER – ALPHAUP – SPACE – PLUS – MINUS –
: ; ; ; ; ; .
,
, .
,
, .
5.10. . , : “Inventory”. “Accounting”
, “Inventory”.
: “Accounting” ,
-
61
,
,
-
: Do ##class(Accounting.Invoice).Method() Do ##class(Inventory.Item).Method()
, : Do ##class(Invoice).Method()
: ,
-
. ,
Caché.
Caché
,
,
.
5.10.1. . . «TestClass»
, “Test.Subtest” : “Test_TestClass”.
,
•
“.”, “Test.Subtest.TestClass” .
, SQL :
31
•
,
,
25
. ,
.
5.10.2. . Caché Studio .
– , ,
-
. .
:
Class Accounting.Invoice { }
Invoice Caché Studio, ,
“Accounting”. , «
».
5.10.3. •
: .
•
:
-
. ,
.
:
// я Lab.Patient Set patient = ##class(Lab.Patient).%New()
, ,
#IMPORT
.MAC
, “%Library”.
.
-
“User”
:
// я Person Set person = ##class(Person).%New()
62
// , Set person = ##class(User.Person).%New()
5.10.4.
#IMPORT #IMPORT
,
.
:
#import Lab // К "Patient" Lab Set patient = ##class(Patient).%New()
#IMPORT #import #import // П Set pat // П Set inv
Lab Accounting "Patient" = ##class(Patient).%OpenId(1) "Invoice" = ##class(Invoice).%OpenId(1)
MAC: Lab & Аccounting Lab & Accounting
#IMPORT . ,
, #IMPORT.
. IMPORT
, .
,
-
: #import User
, ,
User
-
: #import MyPackage #import User
5.10.5.
SQL
Team.Player ( “Team.Player” (
Player Player “User”
SQL . “Team”), “Team”).
,
“SQLUser”. SQLUser.Person.
User.Person
, MyTest.Test.MyClass ( MyClass, “MyTest.Test”) MyTest_Test.MyClass (MyClass – , “MyTest_Test” – ). SQLUser. :
, .
:
Select ID, Name from Person // Т : Select ID, Name from SQLUser.Person
5.10.6. •
•
« “%Library” – “%Library” “User” –
»
:
%class -% class
“User”
63
6. 6.1. %New: Set oref = ##class(Classname).%New()
oref
OREF
Classname
,
. ##class() – ,
,
. Person
:
Set person = ##class(MyApp.Person).%New()
%New
. -
%OnNew .
, -
.
6.2. : 1. OID – 2. ID – 3. OREF –
.
OID ID Set OID = $LB( ID, “ . ”) : Set OID=$LB(ID,”User.Books”)
:
6.3. ID,
: Set oref = ##class(Classname).%OpenId(ID)
oref – , ID .
,
OREF
, Classname . Classname
,
-
Sample.Person ID 22:
Set person = ##class(Sample.Person).%OpenId(22) Write person.Name,!
person
OREF
Person. OID:
, Set oref = ##class(Classname).%Open(oid)
oref
OREF,
Classname
,
oid
OID
. %OpenId. , .
6.4. , , ,
-
,
,
,
. -
. :
Set oref.PropertyName = value
64
oref .
–
OREF ,
Name
Set person.Name = "А
person
, PropertyName Person
, value :
"
OREF
Person
“
”
Name.
. :
set ..< >=< set ..Adress=”
>.
:
35”. ##this,
OREFSet ##this.Name=”
: ”
• • • •
:
:
-
-
.
6.5. ,
, .
,
,
,
,
-
.
,
,
.
6.5.1. . ,
OREF.
,
-
(ID). : Set oref.PropertyName = RefOref
oref – RefOref –
OREF OREF
, PropertyName – ,
-
,
.
,
Car
,
Person,
person
OREF ID,
Person.
-
: Set car.Owner = person
car –
OREF
Car
-
: Do oref.PropertyNameSetObjectId(RefId)
oref –
OREF , RefId – ID , SetObject ( ID). , ( Car)
, PropertyName – . OID) SetObjectId ( ( :
Person)
Do car.OwnerSetObjectId(PersonId)
car
OREF
Car
PersonId
ID
Person. GetObject
GetObjectId.
65
6.5.2.
,
,
-
,
-
: Set oref.PropertyName.RefPropertyName = value
oref –
OREF , RefPropertyName – , value –
, PropertyName –
,
-
.
, Car,
Name
Owner
-
:
А
Set car.Owner.Name = "И
car –
OREF-
"
Car
"
"
.
6.6. ,
. •
: -
•
-
. .
6.6.1. – 1. 2.
OREF
-
: %New; ,
: Set oref.PropertyName = EmbeddedOref
oref –
OREF
-
, PropertyName – , EmbeddedOref – OREF
; 3.
, . :
.
,
Address:
Set address = ##class(Address).%New()
Home
Person:
Set person.Home = address
address – Person.
OREF
Address
person –
OREF
: Set person.Home.State = "MA"
6.6.2. –
-
: Set oref.PropertyName.EmbPropertyName = value
66
oref
OREF , PropertyName , EmbPropertyName
-
-
,
. , Set Set Set Set
Home
Person
:
person.Home.Street = "One Memorial Drive" person.Home.City = "Cambridge" person.Home.State = "MA" person.Home.Zip = 02142
person – OREF Drive, Cambridge, MA 02142”.
Person
6.7.
“One Memorial
. .
-
,
.
, . . ,
,
–
,
. .
• •
: . ,
.
-
.
6.7.1. ,
:
Do oref.PropertyName.Insert(data)
oref – data –
OREF ,
. ,
, PropertyName – “
”
, -
:
Do person.FavoriteColors.Insert("
person –
OREF
")
Person. n,
:
Do oref.PropertyName.SetAt(data,n)
oref – .
OREF
, PropertyName –
,
:
,
Do person.FavoriteColors.SetAt("
, data –
",2)
. .
"
".
n: Do oref.PropertyName.InsertAt(data,n)
. “
”, “
”, “
“ ”, “
”, “ ”
”, “
Do person.FavoriteColors.InsertAt("
,
:
” : ",2).
6.7.2. . ,
,
,
: Do oref.PropertyName.Insert(ItemOref)
67
oref – OREF , ItemOref –
OREF Vaccination
, PropertyName – . Patient,
,
:
Do pat.Vaccination.Insert(vac)
pat –
OREF
Patient, vac –
OREF
Vaccinati-
on. ,
,
n,
: Do oref.PropertyName.SetAt(ItemOref,n)
oref – OREF , ItemOref – , .
n
OREF
, PropertyName –
.
,
-
,
,
-
: Do pat.Vaccination.SetAt(vac,2)
pat – Vaccination, n
OREF
Patient, vac –
OREF .
, :
,
,
Do oref.PropertyName.InsertAt(ItemOref,n)
. , Vaccination
Patient:
Do pat.Vaccination.InsertAt(vac,3)
pat –
OREF
Patient, vac
OREF
Vaccination.
6.7.3. ,
, ,
-
.
,
,
. .
,
-
: Do oref.PropertyName.InsertObject(itemoid)
oref – OID :
.
OREF ,
, PropertyName
-
,
itemoid – -
Do per.Pets.InsertObject(DogOid)
per –
OREF
Person, Pets –
-
, DogOid
OID
Dog. n,
:
Do oref.PropertyName.SetObjectAt(ItemOid,n)
oref OID
.
OREF ,
, PropertyName
-
, ItemOid , -
: Do per.Pets.SetObjectAt(DogOid,3)
per
OREF
Person n
DogOid :
OID
Dog.
Do oref.PropertyName.InsertObjectAt(ItemOid,n)
.
,
: Do per.Pets.InsertObject(DogOid,1)
per –
OREF
Person
DogOid –
OID
Dog.
68
6.7.4. ,
,
: Set oref.PropertyName.GetAt(n).ListPropertyName = data
oref – , ListPropertyName ,
OREF GetAt
,
; PropertyName
name (
n.
, data )
. :
Set per.Pets.GetAt(2).Name = "Rover"
per
OREF
Person
6.8.
Rover
.
( ).
, -
, ,
.
. • •
-
:
. ,
.
6.8.1. : Do oref.PropertyName.SetAt(data,key)
oref
OREF
, key
, PropertyName .
, ,
Colors
Do paint.Colors.SetAt("255,0,0","
“
paint ”
-
OREF
, data
-
Palette:
")
Palette, Colors
-
,
,
“255,0,0”.
6.8.2. ,
,
, : Do oref.PropertyName.SetAt(ElementOref,key)
oref – OREF ElementOref OREF , Vaccination Patient:
,
, PropertyName key ,
, .
Do pat.Vaccination.SetAt(vac,"04/08/99")
pat – OREF , “04/08/99” .
Patient, Vaccination – ,
, vac –
OREF
-
69
6.8.3. ,
, .
,
, .
, : Do oref.PropertyName.SetObjectAt(ElementOid,key)
oref –
OREF , key –
OID
, PropertyName – ,
, ElementOid , :
. ,
Do per.Pets.SetObjectAt(DogOid,"Д
, “
per – ”
OREF ,
")
Person, Pets –
OID,
DogOid.
6.8.4. ,
:
Set oref.PropertyName.GetAt(key).ArrayPropertyName = data
oref – , key
OREF
,
, PropertyName , Vaccination,
, 02/23/98:
-
.
Set pat.Vaccination.GetAt("02/23/98").Type = "Polio"
pat – 2/23/98 «Polio».
OREF
Patient,
GetAt
,
Type
6.9. List ,
Array
-
.12. 12 я
я
List
Clear() Count()
Array
-
Define(key) Find(element,key)
key ,
(key). (
,
)
-
«»,
GetAt(key) key. ,
GetNext(. key) key,
,
GetPrevious(. key) key, Insert(element) InsertAt
key. key. 70
(element,key)
. .
InsertOrdered (element)
,
-
. ( ) Next(key)
(
)
-
(
)
-
key Previous(key) key RemoveAt(key)
key
SetAt (element, key)
key.
6.10. : Do oref.PropertyName.Write(data)
oref – , Write
OREF %Stream ( .
, PropertyName , data
),
,
, -
Note
Visit
: Do Visit.Note.Write(note)
visit – ,
OREF ,
Visit, Note –
, note .
. 13
. 13
Write(data) Read(.length)
data length
. ,
. ,
WriteLine(data) ( ) ReadLine(. length) ( ) Rewind()
,
.
data
-
. (
length) .
-
-
. GoToEnd() CopyFrom(stream) OutputToDevice() LineTerminator
«
» stream. , CR LF.
. ,
WriteLine()
. ReadLine().
71
AtEnd
(1),
-
-
. .
User.Person
Memo,
-
.
.
Set pers=##class(User.Person).%OpenId(ID) Do pers.Memo.WriteLine(“ я ”) … Do pers.Memo.WriteLine(“ яя ”) Do pers.%Save() Quit
Set pers=##class(User.Person).%OpenId(ID) Do pers.Memo.Rewind() While ‘pers.Memo.AtEnd { Set length=99 write pers.Memo.ReadLine(.length),! } Quit
6.11. %Save()
:
Do oref.%Save()
oref – %Save .
oref
. ,
-
Set sc=oref.%Save()
sc –
,
%Save, oref –
-
. ,
$$$ISOK $$$ISERR
1,
, 1,
0
, 0 DisplayError()
, $system.Status
. . Caché
. Person
OREF
per
: Set sc = per.%Save() If $$$ISERR(sc) { Do $System.Status.DisplayError() }
6.12. ,
.
-
.
6.12.1. OID .
,
%Delete , .
%DeleteId. ID -
%Delete: Do ##class(Classname).%Delete(oid)
72
Set sc = ##class(Classname).%Delete(oid)
%DeleteId: Do ##class(Classname).%DeleteId(id) Set sc = ##class(Classname).%DeleteId(id)
classname sc – ,
, oid
OID
,
, id – ID . :
, Person
.
Set sc = ##class(Person).%Delete(oid)
oid .
OID
Person,
,
Person ID=24
sc :
Set sc = ##class(Person).%DeleteId(«24”)
sc
.
6.12.2. , Extent,
%Delete-
,
.
Do ##class(Classname).%DeleteExtent() Set sc = ##class(Classname).%DeleteExtent()
Classname
, sc
, ,
. . ,
Person,
-
: Do ##class(Person).%DeleteExtent()
%DeleteExtent
%OnDelete,
-
. , ,
-
%KillExtent: Do ##class(Classname).%KillExtent()
%KillExtent
,
,
,
.
,
-
.
6.13. Caché
%ResultSet
-
.
:
1. 2. 3. 4.
6.13.1. %ResultSet. • • • • •
%ResultSet: GetParamCount() – GetParamName(n) – GetColumnCount() – GetColumnName(n) – GetColumnHeading(n) –
, ,
-
n,
n,
n-
. 73
•
Prepare() –
• •
, QueryIsValid() Execute() –
• • • •
, 1(true) –
, . , 0(false) –
.
,
-
. Next() – Data(< GetData(n) – Close() –
. >) – . .
6.13.2. , %New():
%ResultSet
Set rset = ##class(%ResultSet).%New()
%ResultSet
:
Set rset.ClassName = class Set rset.QueryName = query
rset – , query –
OREF
%ResultSet, class . :
,
-
Set rset = ##class(%ResultSet).%New(”%DynamicQuery:SQL”) Set rset.ClassName = "Sample.Person" Set rset.QueryName = "ByName" Do rset.Execute() While (rset.Next()) { Write rset.Data("Name"),! }
%ResultSet SQL-
,
Prepare:
Set rset = ##class(%ResultSet).%New("%DynamicQuery:SQL") Do rset.Prepare("SELECT Name FROM Sample.Person WHERE Name %STARTSWITH 'A'") Do rset.Execute() While (rset.Next()) { Write rset.Data("Name"),! }
6.13.3. : Do rset.Execute(arglist)
rset
OREF ,
%ResultSet, arglist
-
.
6.13.4. : Do rset.Next()
rset – Next
OREF
0,
%ResultSet. . .
-
,
: If ('rset.Next()) { Quit
74
}
, %ResultSet. Data .
Data
. .
Set code = rset.Data("Code")
: Set data = rset.GetData(n)
data –
,
n. ,
GetDataByName: Set data = rset.GetDataByName(fieldname)
data
fieldname.
,
Data. , Next
.
6.13.5. ,
:
Do rset.Close() Set sc = rset.Close()
sc Close
, , , , Close ,
.
. %ResultSet. %ResultSet ClassName QueryName %ResultSet .
%ResultSet
-
-
:
// Result я Sample.Person:ByName Set rset = ##class(%ResultSet).%New("Sample.Person:ByName") Set columns = rset.GetColumnCount() // В Set sc = rset.Execute("A") // И While (rset.Next()) { Write "------------------------",! // For col = 1:1:columns { Write rset.GetColumnName(col),": " Write rset.GetData(col),! } } Do rset.Close()
ActiveX
Java ActiveX
Java-
%ResultSet .
-
6.14. 1. 1.
«
: » (Category), .
, : CategoryName –
. 75
2.
« » (Books) – , Authors – , :
. , CountPage – « », Decsription –
COS-
Category
Title – , Category – .
-
Books.
-
, Category
. : : Class User.Category Extends %Persistent [ ClassType = persistent, ProcedureBlock] { Property CategoryName As %String; } Class User.Books Extends %Persistent [ ClassType = persistent, ProcedureBlock ] { Property Authors As %String [ Collection = list ]; Property Title As %String; Property Category As User.Category; Property Cena As %Numeric; Property CountPage As %Integer; Property Decsription As %String(MAXLEN = 100); } : for { read !, " :", cat Quit:cat="" set ct=##class(User.Category).%New() set ct.CategoryName =cat set xx=ct.%Save() for { read !, " ", title Quit:title="" set bk=##class(User.Books).%New() set bk.Title = title read !, " : ",Author do bk.Authors.Insert(Author) set bk.Category =ct read !, " : ",desc set bk.Decsription =desc read !, " : ",kol set bk.CountPage =kol read !, " : ",price set bk.Cena =price set xx=bk.%Save() } }
76
2. ks ID=58,
COSAuthors –
,
%String. // ID=58 set bk=##class(Books).%OpenId(58) // do bk.Authors.Clear() set i=1 // Id=58 for { read !," ",avt Quit:avt="" do bk.Authors.InsertAt(avt,i) set i=i+1 } set xx=bk.%Save() // Set r=##class(%ResultSet).%New(”%DynamicQuery:SQL”) Do r.Prepare("Select ID, Title from Books ") Do r.Execute() While(r.Next()) { write ! write ?5,r.Get("ID")," ",r.Get("Title") set id=r.Get("ID") set bk=##class(User.Books).%OpenId(id) set kol=bk.Authors.Count() write !,"kol=",kol for k=1:1:kol { write !,?15,bk.Authors.GetAt(k) } } 3. Person ( Fio – Adres – DataR –
,
)
,
Address .
Address Ind – City – Street – House – Flat – :
:
,
. COSAddress
:
,
Person
-
. 77
: Person
:
Class User.Person Extends %Persistent [ ClassType = persistent, ProcedureBlock ] { Property Adres As Address; Property DataR As %Date; Property Fio As %String; } Address
// for {
:
Class User.Address Extends %SerialObject [ ClassType = serial, ProcedureBlock ] { Property Flat As %Integer; Property House As %String(MAXLEN = 5); Property Street As %String; Property City As %String(MAXLEN = 15); Property Ind As %String(MAXLEN = 6); } Person, . : Address. Person SQL. Person read !," ",fio Quit:fio="" set pr=##class(Person).%New() // Person set pr.Fio=fio read !," ",dataR set pr.DataR=$ZdateH(dataR) write !," :" read !," ",ind set pr.Adres.Ind=ind read !," ",city set pr.Adres.City=city read !," ",street set pr.Adres.Street=street read !," ",house set pr.Adres.House=house read !," ",flat set pr.Adres.Flat=flat set yy=pr.%Save()
} // Person Pech Set r=##class(%ResultSet).%New(”%DynamicQuery:SQL”) Do r.Prepare("Select ID from Person") Do r.Execute() While(r.Next()) 78
{ write ! write ?5,"ID ",r.Get("ID") set id=r.Get("ID") set bk=##class(User.Person).%OpenId(id) write !,"FIO ","DataR ","Ind ", "City ","Street ","House ","Flat " write ! set k=1 write bk.Fio set k=k+10 write ?k,$ZDate(bk.DataR) set k=k+10 write ?k,bk.Adres.Ind set k=k+10 write ?k,bk.Adres.City set k=k+10 write ?k,bk.Adres.Street set k=k+10 write ?k,bk.Adres.House set k=k+10 write ?k,bk.Adres.Flat } 4. Books, .
.
: Method AlterBook(title As %String, authors As %String, countpage As %String, desc As %String, categ As Category, cena As %Numeric) { // set ..Title=title do ..Authors.InsertAt(authors,1) do ..CategorySetObjectId(categ) set ..CountPage=countpage set ..Decsription=desc set ..Cena=cena set sc= ##this.%Save() } : set bk=##class(Books).%OpenId(5) do bk.AlterBook(“ ”, “ .”, 560,” ”,1,350) 5. Books, . ,
OREF-
.
: ClassMethod AddBook(title As %String, author As %String, countpage As %String, desc As %String, categ As Category, cena As %Numeric) as Books { // set book=##class(Books).%New() 79
set book.Title=title Set book.CountPage=countpage Set book.Decsription=desc Set book.Cena=cena do book.CategorySetObjectId(categ) do book.Authors.InsertAt(author,1) set sc=book.%Save() Quit book } : Set bk=##class(Books).AddBook(“ bk – OREF-
”, “ c
.”, 560,” ”,1,350) .
6. Human
ID, Fam –
,Im –
. ,
,
, age –
, dat – ,
-
. : Human Class User.Human Extends %Persistent [ ClassType = persistent, ProcedureBlock ] { Property Fam As %String; Property Im As %String; Property age As %Integer; Property dat As %Date; } : / write !," " for { read !," ",fam Quit: fam=”” read !," ",im read !," ",vozr // Set n=##class(User.Human).%New() Set n.Fam=fam, n.Im=im, n.age=vozr // Set sc=n.%Save() } // write !," " Set r=##class(%ResultSet).%New(”%DynamicQuery:SQL”) Do r.Prepare("Select ID,Fam,Im,age from Human") Do r.Execute() While(r.Next()) { write !,r.Data("ID")," ", r.Data("Fam")," ",r.Data("Im")," ",r.Data("age") } 80
7.
,
// write " " read !," ", klass write !," ", klass write ! Set r=##class(%ResultSet).%New(”%DynamicQuery:SQL”) Do r.Prepare("Select * from "_klass) if 'r.QueryIsValid() { write !," " quit } Do r.Execute() // set k=1 for i=1:1:r.GetColumnCount() { write ?k,r.GetColumnName(i) set k=k+10 } // While(r.Next()) { write ! set k=1 for i=1:1:r.GetColumnCount() { write ?k,r.Get( r.GetColumnName(i)) set k=k+10 } } 8. Books – Title – . Authors : Property Authors As %String [ Collection = list ]; : Books, .
, Description –
-
Authors
-
, Authors –
Set r=##class(%ResultSet).%New(”%DynamicQuery:SQL”) Do r.Prepare("Select ID,Title,Authors from Books") if 'r.QueryIsValid() { write !," " quit } Do r.Execute() // set k=1 for i=1:1:r.GetColumnCount() { write ?k, r.GetColumnName(i) set k=k+15 } // ID, Title, Authors
,
//
81
while (r.Next()) { Set IID= r.Data("ID") write !,IID, ?20, r.Data("Title") set b=##class(Books).%OpenId(IID) set k=b.Authors.Count() // //
Authors
,
Count
. for i=1:1:k { write ?40, b.Authors.GetAt(i),! // } }
82
7. 7.1. , .
,
,
-
. , .
-
. 14
: 14
Name= Book(Nomer)= Name –
|
^Name= ^Book(Nomer)= .
.
,
,
|
. ^Name –
. Book ^Book – ^Name.
Name
, , . .
^Book
-
.
7.2. Set. . Set A=1, A(3)=2, A(3,7)=”Monday”, A(3,7,25)=”holiday”. A, A(3), A(3,7), A(3,7,25). . – A(3,7) , ,
:
, ,
-
A(3,4). .
, : Set month(“ Set Fio=Univer(«
.
”)=9 // », 104) // . ,
1023
.
7.3. Caché • •
.
-
: .
:
.
+ 1, 0.7
. 2.40 -100 -15 0
. , 5
. 6.1
11
“!”
“AA”
“ZZ”
“a”
“z”
“ ”
“
”
: “ ” “ ”.
83
7.4. ,
,
, .
Caché Set
.
Set ^Univer(“
. : . .”, “22-33-45”)
”)=$ListBuild(“ ,
. : For i =1:1:$ListLength(^Univer(“ { Write !, $List ( ^ Univer(“ }
”)) ”) , i) Kill.
: Kill ^ Univer(“
-
”). .
,
ZKill,
.
-
$List. «
».
^Univer,
-
: ^Univer= “N-
” ,
– ^Univer(
)=
|
: ^Univer(“ ^Univer(“ ^Univer(“
”) = ”) = ”) =
. .| 22-33-45 . .| 34-32-12 . .| 45-90-78 ,
,
. . (
) :
^Univer(
,
)=
.
”, 104) = ”, 105) = ”, 106) =
. . . . . .
: ^Univer(“ ^Univer(“ ^Univer(“ (…)
: ^Univer(
,
, )=
|
|
: ^Univer(“ ^Univer(“ ^Univer(“
Set ^Univer= "NSet ^Univer(" Set ^Univer("
”, 104, 91232) = ”, 104, 91233) = ”, 104, 91234) =
. .| . .| . .|
10,3| 67-56-32 45,9| 78-56-34 10,78| 33-45-67
: " ") = $ListBuild(" ") = $ListBuild("
. .","22-33-45") . .","34-32-12") 84
Set ^Univer(" Set ^Univer(" Set ^Univer(" Set ^Univer(" Set ^Univer(" 10,3","67-56-32") Set ^Univer(" 45,9","78-56-34") Set ^Univer(" 10,78","33-45-67")
") = $ListBuild(" . .","45-90-78") ", 104) = " . ." ", 105) = " . ." ", 106) = " . ." ", 104, 91232) = $ListBuild(" . ."," ", 104, 91233) = $ListBuild("
. .","
", 104, 91234) = $ListBuild("
•
. .","
: (
,
).
•
, . ,
: ,
, ,
№
. • Caché
. -
,
«
Caché,
-
» [2].
7.5. Caché. B*,
.
-
, (balanced tree, ,
B*-
B-
).
, ,
-
.
.
7.6. 7.6.1.
$Data - $D) – .
$Data (
,
,
-
, .
.
: $DATA(variable,target) $D(variable,target) variable – , target – . , , $DATA.
,
.
. 15 15
0 10 (
)
, . .
, ,
$DATA(y)
85
10,
set x=y
. ,
1 ,
.
«»
.
11(
. )
-
. 1
.
11
,
. $Data . If $Data(^Univer(“
: ”, 104))#10 write “
-
” If $Data((^Univer(“ ,
1
10 11,
”, 110))#10=0 write “ $Data 1,
”. -
. . 10 : , If ($Data(^Univer(“ { Set Fio=^Univer(“ write Fio }
1, 0
1
,
10, 10, 0. ,
11
. : ”, 104))#10 ”, 104)
,
-
. $Get ( $G). : Set Fio=$Get(^Univer(“ ”, 110),””) , Fio – “ ”. . , . , – , , . ^client . ^client(5) John Jones // ^client(5,1) 23 Bay Rd./Boston/MA 02049 // ^client(5,1,1) Checking/45673/1248.00 // ^client(5,1,2) Savings/27564/3270.00 // ^client(5,1,3) Reserve Credit/32456/125.00 // ^client(5,1,4) Loan/81263/460.00 //
, ^client, ,
–
. ,
:
: Set ^client(5)="John Jones" // Set ^client(5,1)=$ListBuild("23 Bay Rd.","Boston","MA 02049") // Set ^client(5,1,1)=$ListBuild("Checking","45673","1248.00") // Set ^client(5,1,2)=$ListBuild("Savings","27564","3270.00") // Set ^client(5,1,3)=$ListBuild("Reserve Credit","32456","125.00") // Set ^client(5,1,4)=$ListBuild("Loan","81263","460.00") //
86
. $DATA=0 $DATA=10 2 3 .
1,2,
3 1
$DATA , 2
. , ,
. WRITE
.
$List Start Read !," Read !," For i=s : 1 : s + n { // If $Data(^client(i)) { If $Data(^client(i))=10 { Write !," :
-
: ",n : ",s
"}Else {Write !,"
If $Data(^client(i,1)) { // If $Data(^client(i,1))=10 {Write !," Else { // Write !," : ",$List(^client(i,1),1) Write " , ",$List(^client(i,1),2) Write " , ",$List(^client(i,1),3) } }
:
: " ,^client(i)}
"}
For j=1:1:4 {// If $Data(^client(i,1,j)) { Write !," : ",$List(^client(i,1,j),1) Write ?30," #: ",$List(^client(i,1,j),2) Write ?50," : ",$List(^client(i,1,j),3) } } } } Write !," " Quit 7.6.2.
$Get $Get
, .
$Get(
[,
]) ,
. : Set Fio=$Get(^Univer(“ 7.6.3.
”, 110),””)
$Order – $Order ($O)
.
87
.
,
^Univer. ^Univer(“ ”) = ^Univer(“ ”) = ^Univer(“ ”) = write $Order(^Univer(“
-
. .| 22-33-45 . .| 34-32-12 . .| 45-90-78 ”)) ^Univer(“
: “
”.
-
”), ,
”.
“
, . .
.
,
-
, .
,
: Set x=”” For { Set x=$Order(^Univer(x)) Quit: x=”” Write !,x }
1.
,
, ,
> write $Order(^Univer(“ > 104
,
-
: ”, 004))
2.
, ,
, 104
-
115.
Set x=104 For { Set x=$Order(^Univer(“ Quit:x=””!(x>115) Write !, x }
”, x))
3.
: Set x=”” For { Set x=$Order(^Univer(x), -1) Quit:x=”” Write !, x} :
4.
“
”
? : > write $Order(^Univer(“ > 104 //
”, ””)) :
Set Fac=" ", x="" For { Set x=$Order(^Univer(Fac,x)) 88
Quit:x="" Write !, x } 104.
: : Set Fac=" ", Gr=104, x="" For { Set x=$Order(^Univer(Fac,Gr,x)) Quit:x="" Write "№ ",x,! Write " :",$List(^Univer(Fac,Gr,x),1) ,! Write " :",$List(^Univer(Fac,Gr,x),2) ,! Write " :",$List(^Univer(Fac,Gr,x),3) ,! } 7.6.4.
$Query $Query
. , ^Univer=”N^Univer(“ ^Univer(“ ^Univer(“ ^Univer(“ ^Univer(“ ^Univer(“ ^Univer(“ ^Univer(“ ^Univer(“
, . :
$Order
” ”) = . .| 22-33-45 ”) = . .| 34-32-12 ”) = . .| 45-90-78 ”, 104) = . . ”, 105) = . . ”, 106) = . . ”, 104, 91232) = . .| ”, 104, 91233) = . .| ”, 104, 91234) = . .|
> write $Query(^Univer(“ ^Univer("
10,3| 67-56-32 45,9| 78-56-34 10,78| 33-45-67
”)) ",104)
> write $Query(^Univer(" ^Univer("
",104)) ",104,91232)
> write $Query(^Univer(" $Query(^Univer("
",104,91232)) ",104,91233))
> write $Query(^Univer(" $Query(^Univer(" , , ,
",104,91233)) ",104,91234)) , .
-
: set x="^Univer("" for { set x=$Query(@x) Quit:x="" write !,x }
"")"
89
$Query
$Order
,
,
–1(
1)
«
»
-
. 7.6.5.
$QLength, $QSubscript $Qlength ($QL) . . . sn), n. : > write $QL("(^Univer("" 3 >write $QL(" ") 0
,
Name (s1, s2,…,
"",104,91232)")
. 0.
-
,
,
: write $QL(1). $QSubscript : $QS[ubscript] (,) namevalue – , intexpr – , . Name (s1, s2,…, sn), $QS(Name (s1, s2,…, sn), m) m, mwrite $QS("^Univer("" "",104,91232)", 2) 104 7.6.6.
-
:
Merge Merge (
,
M)
-
,
.
Merge < < ,
>=< >
:
>
– . .
:
Merge copy=^Univer ^Univer
copy.
copy(i)
^Univer(i). ,
,
,
-
: Merge ^Math(“
”)=^Univer(“
”) .
7.7. ,
%CacheStorage, ,
(
-
).
90
: :
• •
. ,
, . . “D”,
.
-
, “I”.
,
•
. ID.
,
ID $Increment.
-
, , .
,
MyApp.Person
-
. Class MyApp.Person Extends %Persistent [ClassType = persistent] { Property Name As %String; Property Age As %Integer; } , : ^MyApp.PersonD = 2 // ( ^MyApp.PersonD(1) = $LB("",19," ") ^MyApp.PersonD(2) = $LB("",20," ") , , . . . %OpenId, %Persistent, , .
7.7.1.
)
, Person,
IDKEY IDKEY . IDKEY , ,
ID, , , , ,
ID. ID
. IDKEY,
ID. Person , IDKEY, Name. Class MyApp.Person Extends %Persistent [ClassType = persistent] { Index IDKEY On Name [ Idkey ]; Property Name As %String; Property Age As %Integer; } Person, : ^MyApp.PersonD(" ") = $LB("",19) ^MyApp.PersonD(" ") = $LB("",20)
-
,
,
-
-
91
,
.
ID
,
,
-
,
Name, . IDKEY
, . Class MyApp.Person Extends %Persistent [ClassType = persistent] { Index IDKEY On (Name,Age) [ Idkey ]; Property Name As %String; Property Age As %Integer; } : ^MyApp.PersonD(" ^MyApp.PersonD("
",19) = $LB("") ",20) = $LB("")
7.7.2. ,
,
,
. .
,
-
,
MyApp.Person : Class MyApp.Person Extends %Persistent [ClassType = persistent] { Property Name As %String; Property Age As %Integer; } , MyApp.Student, : Class MyApp.Student Extends Person [ClassType = persistent] { Property Subject As %String; Property Mark As %Float; } MyApp.Student, : ^MyApp.PersonD = 2 // ^MyApp.PersonD(1) = $LB("Student",19," ") ^MyApp.PersonD(1,"Student") = $LB(3.2," ") ^MyApp.PersonD(2) = $LB("Student",20," ") ^MyApp.PersonD(2,"Student") = $LB(3.8," ") , Person, , , Student . , Student Person. , SQL , Person, Person, Student. ,
, ,
. “Student”,
,
Student.
92
7.7.3. , ,
. Caché SQL . Caché Object
-
SQL ,
.
7.7.4. ID.
,
-
MyApp.Person
Name. Class MyApp.Person Extends %Persistent [ClassType = persistent] { Index NameIdx On Name; Property Name As %String; Property Age As %Integer; } Person, : // ^MyApp.PersonD = 3 // ^MyApp.PersonD(1) = $LB("",34,"Jones") ^MyApp.PersonD(2) = $LB("",22,"Smith") ^MyApp.PersonD(3) = $LB("",45,"Jones") // ^MyApp.PersonI("NameIdx"," JONES",1) = "" ^MyApp.PersonI("NameIdx"," JONES",3) = "" ^MyApp.PersonI("NameIdx"," SMITH",2) = "" : 1.
,
2.
,
, “I”
-
. , -
. 3.
. SQLUPPER, ,
-
.
,
, Exact. Index NameIdx On Name As Exact; ID
4.
,
:
,
-
; 5.
, .
,
, ,
-
.
93
, , son,
Per-
, Name.
$Order. Write $Order(^MyApp.PersonI("NameIdx"," JONES",-1)) . . , , Id : Write $Order(^MyApp.PersonI("NameIdx"," JONES",1)) 3, Id , NES", . . 1 .
: ,
1. " JONES".
-
" JO-
94
8.
CSP CSP (Caché Server Pages) ,
WebCSP
Caché. ,
Web-
-
. . CSP-
CSP-
.
CSP-
CSP,
Caché
Server Pages.
.
,
HTTP,
,
CSP-
, ,
HTML.
,
• • • • •
Web, Caché. Caché Web-
CSP; ,
: Caché
JavaScript;
; CSP-
; HTML.
8.1.
Caché Caché
#(…)#
, .
:
… ! #($Zdate($Horolog,4,” “)#
!
…
#(…)# -
CSP.
-
Caché.
8.2.
,
Caché
#(^Visit)#
( ^Visit
-
),
1.
2. Web
id=2
Human:
Human 2.
: Fam
ID
Im,
.
8.3.
,
#server(…)#
1. Login.csp, . 10. “
” , –
. , . onClick “CheckPassword”.
. «
-
» :
96
:
:
csp:object
: #(Hum.Fam)#
: #(Hum.Im)#
: #(Hum.age)#
99
: CSPBIND
CSPBind.
HTML ,
:
,
CSPBind
.
:
NAME ,
-
,
CSPBind PUT
IN-
. Caché,
,
ClassName
(
, SELECT). CSPField
,
Class-
, CSPQuery. (
CSPField Name) (
SELECT). ,
CSPQuery
ID. , SELECT). CSPField
( ,
-
CSPQuery. ,
CSPRequired
,
. JavaScript
CSPValid
,
.
, , Fam –
,Im –
, age –
Human .
Human.
ID :
:
:
Id – -
-
100
:
8.4.2.
CSP-
SQL. • • •
.
,
-
: ; SQL-
; . . .
:
CLASSNAME
Caché.
,
-
, . NAME
, CSP-
QUERYNAME
Caché. ,
-
, ,
P1,P2,…P16
. ,
-
. Human
1.
HTML-
,
-
Fam. byHuman SELECT %ID,age,dat,Fam,Im FROM Human ORDER BY Fam. , . hum.Get(< >) – .
#(query.Get("Title"))# |
ID | ||||
#(hum.Get("ID"))# | #(hum.Get("Fam"))# | #(hum.Get("Im"))# | #(hum.Get("dat"))# | #(hum.Get("age"))# |
ID | ||||
#(query.Get("ID"))# | #(query.Get("Title"))# | #(query.Get("Authors"))# | #(query.Get("CategoryName"))# | #(query.Get("CountPage"))# |