go to post Julius Kavay · Jul 27, 2022 You can take the line from your own code, but with a suitable parameter Set BASE64=BASE64_file.Read(someCount) // someCount = aNumber * 3 For example 30000 instead of 32000. By the way, you read (8 bit) bytes, so there is no need to do the output-UTF8 conversion.
go to post Julius Kavay · Jul 9, 2022 After spending about 30 seconds on Google, I found following links https://www.astm.org/e1394-97.html // ?? https://toolkits.horiba-abx.com/documentation/download.php?id=71068 // downloads a pdf https://meganorms.com/st-astm-e1394-97.html https://www.iso.org/obp/ui/#iso:std:iso:18812:ed-1:v1:en ... and many other links Don't ask me,how accurate they are...
go to post Julius Kavay · Jul 4, 2022 I have an (some ten years old) one which I use in the %ZSTART routine. Sometimes (for maintenance or whatever other reasons) you have to (re)start Cache and nowdays IRIS, but you want to start just some of the automatic processes listed in %ZSTART. If you forgot to disable those other before shutdown a init-file comes handy to disable things before start. A sample section looks like this: [Start] # 0 = do not start # 1 = start LoginServer = 1 UserLogin = 0 SystemTasks = 1 UserTasks = 0 I added some more comments to the class, you can download the InitFile.xml (class export) from my FTP server (which will be open for the next few days). Addr: ftp.kavay.at User: dcmember Pass: member-of-DC
go to post Julius Kavay · Jun 28, 2022 The general syntax for calling routines from another namespace is: do label^|namesapce|routine where - you can omit the label and - namespace is either the name of the namespace (like set namesapce="USER") or the path to the database (preceded by two carets), where the routine resides. I see right now, Config.MapGlobals accesses the ^SYS global via the path to the database (take a look at the Storage section) - so in theory, you can call all classmethods from the above class as: do zClassmethodname^|"%SYS"|Config.MapGlobals.1(args...) merely, I do NOT recommend to do this (the cass is in deployed mode, so we do not know, what the code really does and (instance)methods are private, so you can't call them from outside).
go to post Julius Kavay · Jun 28, 2022 First, the correct (or better) way for the above code snipet were: new $NAMESPACE zn "%SYS" do ##class(Config.MapGlobals).Delete(...) quit second, one can call routines (and (class)methodes are compiled to rotines) from another namespace by using extended syntax, but in that case such a routine uses the globals (if the routine does a global access) from the CALLING namespace. In Your case this won't work because the Config.MapGlobals uses globals which resides in %SYS namespace and not in the namesspace you are in.
go to post Julius Kavay · Jun 7, 2022 you miss the object reference! set context.strDocumentEncoded = B64EncodeStream(request.streamPDF) // ---------------------------^^^^^^^ this should be something set context.strDocumentEncoded = ##(your.class).B64EncodeStream(request.streamPDF) but you have another problems too: your context.strDocument and context.strDocumentEncoded are currently STRING properties (according to the operation you try to do), which are limitet to a maxlength of 3.47MB! You have to change both to a STREAM, so you can handle PDFs larger then ca. 2.6MB (because 2.6 * 4 / 3 ==> 3.46MB, the limit for a string variable). After you change context.strDocument and context.strDocumentEncoded to a stream properties, you could use this code: Class DC.Someclass Extends %RegisteredObject { Parameter CHUNKSIZE = 2097144; ClassMethod ToBase64(src As %Stream.Object, dst As %Stream.Object) As %Status { i ..#CHUNKSIZE#3=0, src.Rewind(), dst.Rewind() { set sts=$$$OK while 'src.AtEnd,sts { do dst.Write($system.Encryption.Base64Encode(src.Read(..#CHUNKSIZE,.sts),1)) } } else { set sts=$$Error^%apiOBJ(5001,"Chunksize or src/dst-problem") } quit sts } } if ##class(your.class).ToBase64(context.strDocument,context.strDocumentEncoded) write "OK" It seems, this task will take some time... you have to check, how context.strDocument is populated and how context.strDocumentEncoded is later in code used. Good luck.
go to post Julius Kavay · Jun 6, 2022 it looks like an OREF but it is just a string, try set obj = [1,2] write obj --> NN@%Library.DynamicArray write $isobject(obj) --> 1 set ^myGlobal = obj set obj=^myGlobal write obj --> NN@%Library.DynamicArray write $isobject(obj) --> 0 see also my answer in https://community.intersystems.com/post/handling-globalcharacterstream-production-service?page=1#comment-189746
go to post Julius Kavay · Jun 4, 2022 As an ObjectScript routine, remove the "ClassMethod" keyword (which, as the name indicates, belongs to classes. Then either add a "Public" keyword or you remove the brackets ("{", "}") too, but then all variables will have the same scope: ProcData(file = "c:\temp\zipcitystate.csv") Public { set str=##class(%Stream.FileCharacter).%New() do str.LinkToFile(file) while 'str.AtEnd { set $listbuild(ZIP,CITY,STATE)=$listfromstring(str.ReadLine()) // now you have the individual columns // in ZIP, CITY and STATE variables for further processing write "Zip=",ZIP,?12,"City=",CITY,?40,"State=",STATE,! } // depending on the way of your implementation, a "kill str" // would be needed to free up the file kill str } Oh, and to invoke the above procedure just do a: do ProcData^YourRoutineName() // or do ProcData^YourRoutineName("path-to-file")
go to post Julius Kavay · Jun 2, 2022 A simple method like ClassMethod ProcData(file = "c:\temp\zipcitystate.csv") { set str=##class(%Stream.FileCharacter).%New() do str.LinkToFile(file) while 'str.AtEnd { set $listbuild(ZIP,CITY,STATE)=$listfromstring(str.ReadLine()) // now you have the individual columns // in ZIP, CITY and STATE variables for further processing write "Zip=",ZIP,?12,"City=",CITY,?40,"State=",STATE,! } // depending on the way of your implementation, a "kill str" // would be needed to free up the file kill str } to do the job. Then call the method as do ##class(your.class).ProcData() // or do ##class(your.class).ProcData("path-to-the-file")
go to post Julius Kavay · May 30, 2022 your exit statement If (AxVisM1.P0.ToString = "") Then Exit While End If is to late, this must come after the $ORDER() statement AxVisM1.Execute("set P0=$o(^ztonMS(""REF"",P0))") If (AxVisM1.P0.ToString = "") Then Exit While End If AxVisM1.Execute("s P1=$g(^ztonMS(""REF"",P0))") The same goes for the next while-loop a few lines below
go to post Julius Kavay · May 26, 2022 The standard ANSI escape sequenc should be: write $c(27)_"[42m"_"Your green backround"_$c(27)_"[m"_" and a normal dot." write $c(27)_"[32m"_"Your green text"_$c(27)_"[m"_" and a normal dot."
go to post Julius Kavay · May 25, 2022 Bye the way, non of Cache/IRIS has an $ZU command but all versions have a bunch of $ZU() functions. So what do you want to do with them?
go to post Julius Kavay · May 24, 2022 To get all the jobGUIDs you need two loops: f i=1:1:list1.Size f j=1:1:list1.GetAt(i).sensors.Size w list1.GetAt(i).sensors.GetAt(j).jobGUID,! 0b955ee7-9a54-4b13-9af1-7019721faeab 8f9e85ab-31e7-4835-8969-6d72d142a2f1 68cea9d3-54cd-43f2-ae37-aaf47ed43e6b 7602764e-8951-451f-9653-ceb84834a1a6 88d2e472-a1e4-40b3-a108-f2d32a2023e5 116f2ac6-da5f-46da-a7c7-92d9eaf98c89 a878e527-f519-4aaa-bf5d-0d65f72de119 be570b14-0555-4b86-ab9f-e37c40c79216 3a13e243-d6ed-4788-98b2-52e9213bee00 54969869-c4f6-43f6-a74a-2a67f9a73fc5 700af7d3-77b3-4a84-ba11-ea49602d6558 18dc3370-c291-468b-af1f-0361d95bb02c 35d0d2e7-1199-4c18-8941-4fff6dbdba1f 8044560c-94d2-4da7-87f5-07328d9e62c1 b636a2f5-d35f-4c82-9646-e09572336e23 9c9a4bf4-e8af-4b8d-9de2-a99cdff150ed a576d235-6eb6-4312-a1ff-7b1f767b88ce 654cf21e-daad-4a11-b676-86a7bc8a3360 2be4efc8-6616-4bff-87ba-30fe388a1b34 a5374d6c-311c-44d0-8d06-3a31f33dd3a8 955529c5-36be-4f3e-b768-0e3b377804a7 60a7cdb0-499e-4d02-b4d3-06ee58e40481 e84eda78-1491-49af-9e34-d647e817a251 9bcd5fe6-6f05-4482-ad78-612f35c60b41
go to post Julius Kavay · May 24, 2022 read json <now, Cntrl-V here the above string, press enter>, then w ##class(%ZEN.Auxiliary.jsonProvider).%ConvertJSONToObject(json,,.list1) --> 1 w list1 --> 42@%Library.ListOfObjects w list1.GetAt(1).sensors.GetAt(1).jobGUID --> 0b955ee7-9a54-4b13-9af1-7019721faeab where is the problem?
go to post Julius Kavay · May 20, 2022 Try this one. The idea is, find the state (including the separators), everything before is the city and everything after is the zip code. Then we remove the separator chars (whitespaces, commas and dots). ClassMethod Disjoin(data, cty, sta, zip) { i $locate(data,"(\s|,|\.)[A-Za-z]{2}(\s|,|\.)",3,,sta) { s $lb(cty,zip)=$lfs(data,sta), sta=$$s(sta), cty=$$s(cty), zip=$$s(zip) } else { s (cty,sta,zip)="" } q sta]"" s(x) q $zstrip(x,"<>w",",.") } Some examples i ##class(DC.Test).Disjoin("CANTON,TX.,75103",.c,.s,.z) w c,", ",s,", ",z --> CANTON, TX, 75103 i ##class(DC.Test).Disjoin("MILFORD, OH 45150",.c,.s,.z) w c,", ",s,", ",z --> MILFORD, OH, 45150 i ##class(DC.Test).Disjoin("MILFORD OH 45150",.c,.s,.z) w c,", ",s,", ",z --> MILFORD, OH, 45150 i ##class(DC.Test).Disjoin("KANSAS CITY, MO, 12345",.c,.s,.z) w c,", ",s,", ",z --> KANSAS CITY, MO, 12345 i ##class(DC.Test).Disjoin("KANSAS CITY MO, 12345",.c,.s,.z) w c,", ",s,", ",z --> KANSAS CITY, MO, 12345 i ##class(DC.Test).Disjoin("ST. LOUIS MO, 12345",.c,.s,.z) w c,", ",s,", ",z --> ST. LOUIS, MO, 12345 i ##class(DC.Test).Disjoin(" ST. LOUIS MO, 12345",.c,.s,.z) w c,", ",s,", ",z --> ST. LOUIS, MO, 12345 OK, something like this gives a wrong result... i ##class(DC.Test).Disjoin(" ST. LOUIS MO, 12345",.c,.s,.z) w c,", ",s,", ",z --> , ST, LOUIS MO, 12345
go to post Julius Kavay · May 16, 2022 Class DC.Test Extends %RegisteredObject { /// Return TRUE if val contains an string ClassMethod IsString(val) As %Boolean { q $a($lb(val),2)<3 } /// Return TRUE if val contains a number (int, real or double) ClassMethod IsNumber(val) As %Boolean { q $a($lb(val),2)>3 } } w ##class(DC.Test).IsString("abc") //--> 1w ##class(DC.Test).IsString("123") //--> 1w ##class(DC.Test).IsString(123) //--> 0w ##class(DC.Test).IsNumber(123) //--> 1w ##class(DC.Test).IsNumber("abc") //--> 0w ##class(DC.Test).IsNumber("123") //--> 0w ##class(DC.Test).IsNumber(123_345) //--> 0w ##class(DC.Test).IsNumber(123+345) //--> 1w ##class(DC.Test).IsString(123_456) //--> 1w ##class(DC.Test).IsString(123+456) //--> 0 s x=123, y="123"w ##class(DC.Test).IsString(x) //--> 0w ##class(DC.Test).IsString(y) //--> 1
go to post Julius Kavay · May 8, 2022 The input variable pInput is an object(reference). You can't save OREFs in a global! Think about OREFs as memory location (or, if you "speak" C, as a pointer). Trying to save it in a global is the same as saving a C pointer into a file for a later use... Won't work either
go to post Julius Kavay · Apr 29, 2022 People call it the reverse mode of $translate(). I saw this kind of usage of $tr() some 20 years ago. If I recall it right, it was mentioned in an article on usenet: comp.lang.mumps.
go to post Julius Kavay · Mar 17, 2022 I'm quite shure, the above code won't work as expected, or with the words of Joseph Weizenbaum: “A computer will do what you tell it to do, but that may be much different from what you had in mind.” The content of your myf variable is always 0 (the result of comparing nullstring with a filename), the size of tmpFile stream is also 0 (you never write into the stream). Sometimes it's faster to write a "oneliner" to solve a simple problem then searching and downloading a solution from openexchange or from whereever... That's the beauty of the ObjectScript. And if you think, the oneliner is worth to be reused, then make it to a method, add some small adjustments for a general usability... The oneliner s str="",tmp=##class(%File).TempFilename("txt") o tmp:"NWRU":0 i $t { u tmp zw ^||fruit s s=$zpos r:'$zseek(0) str#s c tmp:"D" } The more general version ClassMethod ToString(ref,max=32000) { s tmp=##class(%File).TempFilename("txt") o tmp:"NWRU":0 q:'$t "" u tmp zw @ref s siz=$zpos r:'$zseek(0) str#$s(siz>max:max,1:siz) c tmp:"D" q str } Use it as write ##(your.class).ToString($na(^||fruit))
go to post Julius Kavay · Jan 31, 2022 First, disable the start of %ZSTART: ManagementPortal-->SystemAdmin-->Configuration-->AdditionalSettings-->Startup: here, set SystemStart to false. Now, you can (Re)Start the system and check the %ZSTART routine. <DIRECTORY> means, trying to access a nonexistent database directory. After solving the problem, set SystemStart to true.