go to post Julius Kavay · Nov 17, 2022 First, the suggestion of Victor Gordillo is correct. do ##class(Some.Class).%BuildIndices() solves most index related problems. Second, there are a couple of things, we do not know, but you- did you made an in-place-upgrade or a clean install + data transfer- the class in question is the same on IRIS and Cache (i.e. no change was made)- is the class re-compiled (on IRIS)- what do you exactly mean when you say "Not opening an instance...": (1) you get an NULL-OREF or (2) you get an error- what do you provide as a NULL value: (1) "", (2) $c(0), (3) " " or something else as open parameter A shortened class definition (we don't need the whole definition) would be also helpfull, something like this Class Problem.Class extends %Persistent { Property Field1 as %String; Property Filed2 As %String; Index composite on (Field1, Field2) [ Unique]; }
go to post Julius Kavay · Nov 16, 2022 If your serial class is named Data.Serial (as in your example code) then you should use the same name for the serial property too Class Data.Persistent Extends %Persistent { Property MPID as %Integer; Property Name as Data.Serial; <--- !!!!! } The correct way to set the values Set Obj=##Class(Data.Persistent).%New() Set Obj.MPID=MPID Set Obj.Name.FirstName=FirstName ; <---- Set Obj.Name.LastName=LastName ; <---- Set tSC=Obj.%Save()
go to post Julius Kavay · Nov 14, 2022 I think, I have a solution for you ClassMethod GetImage() { s req=##class(%Net.HttpRequest).%New() s req.Server="www.distrelec.de" s req.SSLConfiguration="SSL" s req.ReadRawMode=1 // <<---- this is your solution d req.Get("/Web/WebShopImages/landscape_medium/_t/if/sortimentsboxen-1.jpg") q req.HttpResponse } To get the image s rsp=##class(Some.Class).GetImage() i rsp.StatusCode=200 { s file="c:\temp\imageName.jpg" o file:"nwu":0 i $t u file d rsp.Data.Rewind(),rsp.Data.OutputToDevice() c file } That's all...
go to post Julius Kavay · Nov 14, 2022 No, you can't revert, because the first chars (3 x '?') are replacement-chars. You could try to contact WRC.
go to post Julius Kavay · Nov 14, 2022 To download that image, you need just a few lines of code Class Some.Class Extends %RegisteredObject { ClassMethod GetImage() { s req=##class(%Net.HttpRequest).%New() s req.Server="www.distrelec.de" s req.SSLConfiguration="SSL" // use your SSL-Config-Name d req.Get("/Web/WebShopImages/landscape_medium/_t/if/sortimentsboxen-1.jpg",1) q req.HttpResponse } } So your code is more or less OK, but the rest of the process is ominous set rsp=##class(Some.Class).GetImage() zw rsp rsp=7@%Net.HttpResponse ; <OREF> +----------------- general information --------------- | oref value: 7 | class name: %Net.HttpResponse | reference count: 3 +----------------- attribute values ------------------ | ContentBoundary = "" | ContentInfo = "charset=UTF-8" | ContentLength = 17759 | ContentType = "image/jpeg;charset=UTF-8" | Data = "8@%Stream.GlobalCharacter" |Headers("CACHE-CONTROL") = "max-age=0" |Headers("CONTENT-LENGTH") = 17759 |Headers("CONTENT-TYPE") = "image/jpeg;charset=UTF-8" | Headers("DATE") = "Mon, 14 Nov 2022 10:57:10 GMT" | Headers("ETAG") = "a919e895229c7883864aecbfa2717516" |Headers("LAST-MODIFIED") = "Thu, 01 Jan 1970 00:00:01 GMT" |Headers("SET-COOKIE") = "visid_incap_2373370=1U8JalxbRJOzRFviQpi05AYfcmMAAAAAQUIPAAAAAADRm" |Headers("STRICT-TRANSPORT-SECURITY") = "max-age=31536000; includeSubDomains; preload" | Headers("X-CDN") = "Imperva" | Headers("X-IINFO") = "5-19652015-0 0CNN RT(1668423430526 51) q(0 -1 -1 0) r(0 -1)" | HttpVersion = "HTTP/1.1" | ReasonPhrase = "OK" | StatusCode = 200 | StatusLine = "HTTP/1.1 200 OK" +----------------------------------------------------- The sender says, content type is "image/jpeg", which is OK, but charset=UTF-8 is, I think, a problem. A jpeg-image usually starts with (hex) bytes: FF D8 FF E0 00 10 4A 46 49 46 ... The HTTP-Response gives us do rsp.Data.Rewind() zzdump rsp.Data.Read(10) 3F 3F 3F 10 4A 46 49 46 00 01 ???.JFIF.. But I'm in no way a web-expert, but it seems to me, Cache tries to decode (according to content-type =image/jpg; charset=UTF-8) the incomming raw (jpeg) data. The first byte, FF, will already give an error (no utf-8 encoded byte can start with FF) and returns an "?" char as a replacement. The next two "?" (hex: 3F) chars are also arised from (inpossible) decoding. Why the same page works, if you try it with Chrome or Firefox: I think, they either ignore the charset=UTF-8 or just show the raw data after the first decoding error.
go to post Julius Kavay · Nov 12, 2022 OK, no punctuation, no empty words, etc.... My lowest bid: 74 chars ClassMethod Order(s) { f s p=$p(s," ",$i(i)),w=$tr(p,1/17),$p(z," ",$tr(p,w))=w ret:p=w $g(z) } By the way, the following three variants all have the same size of 74 f s p=$p(s," ",$i(i)),w=$tr(p,1/17),$p(z," ",$tr(p,w))=w ret:p=w $g(z) f{s p=$p(s," ",$i(i)),w=$tr(p,1/17),$p(z," ",$tr(p,w))=w ret:p=w $g(z)} 1 s p=$p(s," ",$i(i)),w=$tr(p,1/17),$p(z," ",$tr(p,w))=w q:p=w $g(z) g 1
go to post Julius Kavay · Nov 12, 2022 You say "No punctuation". OK, but then we have a contradiction: Example 4 of the test cases contains several commas, a dot and a question mark...
go to post Julius Kavay · Nov 11, 2022 A small complaint:- possible word delimiters weren't specified (space, tab, etc.)- no specification about punctuation marks (allowed or disallowed)- no specification about empty words (allowed or disallowed) and how to handle them, if allowed So my question is, are the following examples legal or not: "O2K. I'1m" --> "I'm OK.""spac4es are2 1There ma3ny" --> "There are many spaces."
go to post Julius Kavay · Nov 10, 2022 Putting all in one line saves one byte ClassMethod Order(s As %String) As %String { s d=" ",z="" f i=1:1:$l(s,d){s b=$p(s,d,i),c=$zstrip(b,"*n"),$p(z,d,$tr(b,c))=c} q z } Changing $zstrip() to a $tr() saves one more byte ClassMethod Order(s As %String) As %String { s d=" ",z="" f i=1:1:$l(s,d){s b=$p(s,d,i),c=$tr(b,1E20/17),$p(z,d,$tr(b,c))=c} q z } So I end up with 86 bytes
go to post Julius Kavay · Nov 9, 2022 and this is an updated version ClassMethod Order(s as %String) As %String { s d=" ",z="" f i=1:1:$l(s,d) s b=$p(s,d,i),c=$zstrip(b,"*n"),$p(z,d,$tr(b,c))=c q z }
go to post Julius Kavay · Nov 9, 2022 I do not work with Ensemble nor do I have Ensemble installed... But you could take a close look on that Ens_Enterprise_MsgBank.MessageHeader class, and check, if there is a mapping into an other, possibly readonly, database. Maybe somebody with ENS experience has a solution for you
go to post Julius Kavay · Nov 9, 2022 As I learned the hard way, abstract classes do not have storage implementation, hence no indices either
go to post Julius Kavay · Nov 9, 2022 One of the possible solutions /// You can change the s:b]"" to an comma if there is always exact one space between the words /// and remove the ,1) from $lts() if all word are numbered from 1..N with no number missing ClassMethod WordOrder(s) { s z="" f i=1:1:$l(s," ") s b=$p(s," ",i) s:b]"" $li(z,$zstrip(b,"*ap"))=$zstrip(b,"*n") q $lts(z," ",1) } This is a working solution and maybe not the shortest
go to post Julius Kavay · Nov 8, 2022 I never had this kind of problem, but a quick and dirty method would be: 1) remove the 'Mount Read-only' flag, 2) run the tune table utility, 3) reenable the 'Mount Read-only flag'. I hope, you do not have some mean application, waiting for the chance of his life, to get a writable database...
go to post Julius Kavay · Nov 7, 2022 License counting depends on how you access Cache/IRIS (i.e. Web interface or some kind of client).
go to post Julius Kavay · Nov 7, 2022 You can it enter via terminal, no question about, but it's a little bit cumbersome // create the class s cls=##class(%Dictionary.ClassDefinition).%New() s cls.ProcedureBlock=1 s cls.Super="%RegisteredObject" s cls.Name="ObjectScript.RightTriangle" // add one method s mth=##class(%Dictionary.MethodDefinition).%New() s mth.Name="Main" s mth.Description="Compute area and hypotenuse of a right triangle" d mth.Implementation.WriteLine($c(9)_"write !,""Compute the area and hypotenuse of a right triangle"",") d mth.Implementation.Write($c(9,9)_"!,""given the lengths of its two sides.""") d cls.Methods.Insert(mth) // add one more method s mth=##class(%Dictionary.MethodDefinition).%New() s mth.Name="Area",mth.Description="Area, computed from sides 'a' and 'b'" s mth.FormalSpec="a,b" d mth.Implementation.WriteLine($c(9)_"quit a*b/2") d cls.Methods.Insert(mth) // save the class (it's NOT compiled!) w cls.%Save() As you may see, creating a class via an IDE is simpler... but yes, in an emergency case you can do it also via a console access
go to post Julius Kavay · Nov 5, 2022 First, ##class(%PopulateUtils).StringMin(16,16) generates random printable chars for testing (as replacement for user input) and is not ment to be used to generate cryptographic random chars. If you need cryptographic random chars, use $system.Encryption.GenCryptRand(length). This is just a hint and is not a reason for your current problem. Second, despite my very limited C# experience, there is one thing in your code, I do not understand. If the initial vector (IV) is used, then it should be used (for enryption and decryption) the same IV on both sides, but you create an IV on Cache side (with the populate utils) and an other one on the C# side: byte[] IV = new byte[16]; (new Random()).NextBytes(IV); That your decryption can't work. To have a successful comunication, agree with the other party on- a passphrase (the key), padding is done inside the encoding function - an IV (or left it empty on both sides)- and on how the data will be sent: either as the encoded (binary) data or as a readable (base64) data.ISC's implementation of AESCBCEncrtypt/Decrypt works well. One of my application uses it to communicate with an Windows application written in Delphi, without any problem since more the 15 years (we do not use the IV). So your problem will be some kind of a home-made problem:- not using the same keys on both sides- applying some kind of transformation (utf-8, base64, etc.)- something suchlike
go to post Julius Kavay · Nov 4, 2022 One of the problems could be the Bas64 encoding. This function inserts after each 76th byte a CRLF which possibly confuses the other party. Try with Set EncryptedBase64=$SYSTEM.Encryption.Base64Encode(encrypted, 1) The parameter 1 says, do not insert CRLFs. Also, the text you encrypt must be an ANSI (8bit) text. If you are on a unicode system, you should call Set encrypted=$SYSTEM.Encryption.AESCBCEncrypt($zcvt(text,"O","UTF8"),key,iv)
go to post Julius Kavay · Nov 3, 2022 I understand your answer (#2) the way as this is a one time job. The simplest and quickest way to do this is: - disable all indices (comment them out), - compile the class or classes - do the bulk insert - enable all indices (by removing comment markers) - compile the class or classes - rebuild the indices Class My.Class { /* disable all indices index1 someindex1 on someprop1; index2 someindex2 on someprop2; */ }
go to post Julius Kavay · Nov 2, 2022 You are just one letter away from solution... set db=##Class(SYS.Database).%OpenId("/trak/base/tc/db/ct",,.sc) //................................^^^ Id, not ID!