instead of
do %code.WriteLine($c(9) _ "Quit ..Test()")use
do %code.WriteLine($c(9) _ "Quit zTest()")It worked for me best
- Log in to post comments
instead of
do %code.WriteLine($c(9) _ "Quit ..Test()")use
do %code.WriteLine($c(9) _ "Quit zTest()")It worked for me best
OK.
StorageTo../..ToStorage only works in persistent classes where you move content from/to globals.
No chance without storage.
It doesn't get called in Registered Classes and not when the object wasn't saved.
see my test with %Persistent
This proves that there is limited use of the approach.
I could imagine inheriting standard data types for a customized data type and then
adding methods LogicalToStorage and StorageToLogical similar as LogicalToObs, ....
So your manipulations happen on the way from Global to the local variable.
Additional Parameters eventually may control the generated code.
It's just a vague idea.
Ken Olson , the founder of DEC (Digital Equipment Corp.) was famous for its statement:
Similar in the late 1950ies IBM estimated the worldwide market for computers of 15..30 systems in total.
So lack of phantasy what could be in the future is quite common also for very successful people and companies.
inside &SQL() only SQL compatible code is allowed
so $ZDT($H,3,1,3) is not known in SQL
you may do
mind the colon :%myts and :%tx to pass global accessible variables to embedded SQL
you better not change %CSP.Login but make a personal copy and change this
404 = HTTP page not found. Most likely you put your copy to the wrong directory or namespace
And then you have to put the reference in MgmtPortal Security-> WebApplications as Login page:
Again with the correct namespace and the correct directory.
@Aleksandar Kovacevic
ISC Engineering & Support has this information and also appropriate tools for analysis.
You better contact them directly in Cambridge.
@Dmitry Maslennikov : Excellent explanation ![]()
can't import %routines which I need.
Without any special mapping, %routines are stored in SYSLIB. (except %z*,%Z*)
Mount SYSLIB (default: read-only) as Read/Write and you can load your %routines.
Needless to mention that you better not overwrite already existing %routines.
The effects could be unpredictable.
As you describe it I'd create a nice BAT file that you execute.
It coud be static or created ad hoc just by writing it from Caché
And then execute it using $ZF(-1...) ,$zf(-2....) or CPIPE
Though Caché has powerful utilities around %File class you will be faster that way
[based on ~40 yrs of M]
adapt :== create your own class and inherit %CSP.Login
to create your own Login Page you best start with
defaulting to
.png)
and then you add the new Login Page to Security-> WebApplications
.png)
Size of WIJ is in Relation to Global Buffers. With equal size of G.Buf. you should get similar size of WIJ
that's wrong ! "will execute nothing, "
if condition
Sets the system variable $TEST.
And this was and still is a widely used way of signaling between routines and functions.
And millions lines of existing code rely on its proper use.
I come back to an earlier comment: Really learning the language is definitely an advantage.
returning to dotted subroutines would be really bad. Though they are still around in %SYS. ![]()
on the other hand, the flexibility of the language allows a broad range of personal styles.
knowing them enabled me in the past (amongst my customers ) to identify the author of a routine
just by his style with a hit rate of >75%. ![]()
QUIT and RETURN are massively different.
OK Vitaly !
It happens under cover (from: ^%SYS.SECURITY1.int)
Alexej,
if you don't care about maintenance effort the most exact pointer is preferable.
As you may see from Ensemble the number of entries in the mapping table is of no importance.
With modern hardware, saving memory is of no importance anymore.
excellent, as usual!
I remember times when new programmers learned from their masters to use no matter what
programming language in her full beauty and elegance with all its features.
no matter if this was Assembler/360 or Macro32 or C, C++, C# or Bliss or PL/1 or Fortran, Algol, .... [list almost unlimitted]
All of them had their tricks and open and hidden features that inspired the creativity of developers
and allowed them to create artwork instead of stereotypic formulated phrases. By this approach,
developers get degraded from architects to monotone brick assemblers.
"users unfamiliar with the language"
I'd recommend they should learn it to understand it before touching it.
If I want to read the Правда I have to learn Cyrillic characters and the Russian language to understand it.
Nobody would accept any request for Latin letters.
Hmmm,
it seems to prefer "waste screen space" style
over "have all on 1 screen with no scrolling" [my favorite ]
In this case, you may create a Privileged Routine Application with the rights you need and the required code
calling it raises access rights just for this routine.
Hi Tim
write $d(^|"%SYS"|SYS("Security","SSLConfigsD",<my config> ),settings)
provided you have access rights
Cheers, Robert
I think RowVersion and Serial Counter Fields should do it as well.
(with less typing)
This just doesn't work in Caché SQL
You have to set your DB to be in Primary MIRROR before the copy.
Otherwise, you may miss some kind of "Mirror-Marker" / Timestamp.
I hit this trap also on my first trials.
I just realized that this method doesn't check the existence of the ID.
therefore:
write:##class(Abstract.Class).%ExistsId(id) $li(##class(Abstract.Class).%ComposeOid(id),2)
or any equivalent construct.
OID contains the class name. So this should do it.
write $li(##class(Abstract.Class).%ComposeOid(id),2)
You are totally right.
With Parent-Child your data are not only logical but also physically tied to each other.
One-to-many allows you more flexible handling of Relations.
Just one out of many examples M:N Relationship
Exactly 4 weeks before UK is leaving the European Union on Friday, March 29th this sounds like kind of British humor to me.