go to post Enrico Parisi · Jun 30, 2024 From %ResultSet.SQL Class Reference: This class has been superseded. It will remain for compatibility with existing code and samples. We recommend using %SQL.Statement.
go to post Enrico Parisi · Jun 30, 2024 To lock a persistent object (in different modes) use the second argument of the %OpenId() method as described in Object Concurrency Options documentation.
go to post Enrico Parisi · Jun 28, 2024 You need to pass each argument separately, this will work: d $ZF(-100,"/logcmd", "qpdf", "--encrypt", "test123", "test123", "256", "--", "C:\test\basement.pdf", "c:\test\basementenc.pdf")
go to post Enrico Parisi · Jun 28, 2024 I don't think the upgrade runs $System.OBJ.CompileAll() "automatically", it's your responsibility to recompile, if necessary.
go to post Enrico Parisi · Jun 27, 2024 To my knowledge and (more importantly 😁) according to the documentation, it's not possible. The types of the arguments in the subclass method must be consistent with the types of the arguments in the original method. Specifically, any given argument must be either the same as the original type or a subclass of the original type. The method in the subclass can have more arguments than the method in the superclass. Note that in your case the problem is not the number of parameters/arguments, it's the type of the arguments that does not match the superclass %OnNew() (implemented in %Exception.AbstractException) arguments type: Method %OnNew(pName As %String = "", pCode As %String = "", pLocation As %String = "", pData As %String = "", pInnerException As %Exception.AbstractException = {$$$NULLOREF}) As %Status [ Private ] One option could be: Class test.Foo Extends %Exception.AbstractException { Method %OnNew(arg1 As %String, arg2 As %String, arg3 As %String, arg4 As %String, pInnerException As %Exception.AbstractException = {$$$NULLOREF}, arg5 As %String) As %Status { quit ##super("some message") } }
go to post Enrico Parisi · Jun 27, 2024 %SYS>s db=##class(SYS.Database).%OpenId("C:\InterSystems\IRIS\mgr\user") %SYS>w db.SFN8%SYS>
go to post Enrico Parisi · Jun 27, 2024 Your question is too vague to answer, I'd suggest to start reading the documentation, a good starting point can be Communication Protocols in Interoperability Productions. Then, after reading the documentation you can ask a more specific question.
go to post Enrico Parisi · Jun 27, 2024 Have you read the chapter "Purpose of System Default Settings" in the RIS documentationpage that @Vic Sun I linked in his post? After reading the documentation, have you found the info you were looking for?
go to post Enrico Parisi · Jun 26, 2024 Each DTL calls “ConstructClone” to make a copy of the message before making any changes to it. There will be hundreds of cloned-objects in case of hundreds of DTLs Keep in mind that when you create a clone of an HL7 message using %ConstructClone() the segments ARE NOT CLONED. Only modified segments will be replaced with the new modified segment content.The storage of unmodified segments will be "shared" between the original HL7 message and the cloned message. A little test do demonstrate it: ; open an existing message and see the storageSet hl7msg=##class(EnsLib.HL7.Message).%OpenId(33)zw ^EnsLib.H.MessageD(33) ^EnsLib.H.MessageD(33)=$lb("","","Demo.HL7.MsgRouter.Schema:ORM_O01",0,"2024-03-24 01:44:43.142","Demo.HL7.MsgRouter.Schema","C:\temp\hl7\in\XYZ1.txt"_$c(13,10)_" Document# 2, level 1, @Line 11","","",0)^EnsLib.H.MessageD(33,"segs")=9^EnsLib.H.MessageD(33,"segs",1)="8480,161"^EnsLib.H.MessageD(33,"segs",2)="8480,162"^EnsLib.H.MessageD(33,"segs",3)="8480,163"^EnsLib.H.MessageD(33,"segs",4)="8480,164"^EnsLib.H.MessageD(33,"segs",5)="8480,165"^EnsLib.H.MessageD(33,"segs",6)="8480,166"^EnsLib.H.MessageD(33,"segs",7)="8480,167"^EnsLib.H.MessageD(33,"segs",8)="8480,168"^EnsLib.H.MessageD(33,"segs",9)="8480,169" ; create a clone, save it and see the storageSet hl7msgClone=hl7msg.%ConstructClone()Write hl7msgClone.%Save()Set CloneId=hl7msgClone.%Id()zw ^EnsLib.H.MessageD(CloneId) ^EnsLib.H.MessageD(37)=$lb("","","Demo.HL7.MsgRouter.Schema:ORM_O01",1,"2024-03-24 01:44:43.142","Demo.HL7.MsgRouter.Schema","C:\temp\hl7\in\XYZ1.txt"_$c(13,10)_" Document# 2, level 1, @Line 11","","",0)^EnsLib.H.MessageD(37,"segs")=9^EnsLib.H.MessageD(37,"segs",1)="8480,161"^EnsLib.H.MessageD(37,"segs",2)="8480,162"^EnsLib.H.MessageD(37,"segs",3)="8480,163"^EnsLib.H.MessageD(37,"segs",4)="8480,164"^EnsLib.H.MessageD(37,"segs",5)="8480,165"^EnsLib.H.MessageD(37,"segs",6)="8480,166"^EnsLib.H.MessageD(37,"segs",7)="8480,167"^EnsLib.H.MessageD(37,"segs",8)="8480,168"^EnsLib.H.MessageD(37,"segs",9)="8480,169" ; as you can see the new cloned message shares exactly the same segments of the original HL7 message ; modify a segment in the cloned HL7 message, save it and see the storage Write hl7msgClone.SetValueAt("NEWVALUE","MSH:3.1")Write hl7msgClone.%Save()zw ^EnsLib.H.MessageD(CloneId) ^EnsLib.H.MessageD(37)=$lb("","","Demo.HL7.MsgRouter.Schema:ORM_O01",1,"2024-03-24 01:44:43.142","Demo.HL7.MsgRouter.Schema","C:\temp\hl7\in\XYZ1.txt"_$c(13,10)_" Document# 2, level 1, @Line 11","","",0)^EnsLib.H.MessageD(37,"UserValues")=""^EnsLib.H.MessageD(37,"segs")=9^EnsLib.H.MessageD(37,"segs",1)="8992,2"^EnsLib.H.MessageD(37,"segs",2)="8480,162"^EnsLib.H.MessageD(37,"segs",3)="8480,163"^EnsLib.H.MessageD(37,"segs",4)="8480,164"^EnsLib.H.MessageD(37,"segs",5)="8480,165"^EnsLib.H.MessageD(37,"segs",6)="8480,166"^EnsLib.H.MessageD(37,"segs",7)="8480,167"^EnsLib.H.MessageD(37,"segs",8)="8480,168"^EnsLib.H.MessageD(37,"segs",9)="8480,169" ; as you can see now the first segment is different, all other segments use the same storage as the original message The storage and I/O overhead of the cloning performed by DTL is minimal and limited the the strictly necessary modifications.Of course if you change all the segments content, then all segment will be replaced, there is no options, but more often than not, DTL modify a limited number of segments.
go to post Enrico Parisi · Jun 25, 2024 ISO 8601 date format is not an accepted format for the SQL DATEPART function. You can check the supported formats in the DATAPART SQL Documentation. If I remove the trailing Z (for Zulu / UTC time) and leave the T, DatePart works fine I'm afraid it does not woks fine: select 'YEAR: '||DATEPART(YEAR,'2024-06-23T06:03:00') result: YEAR: 1900 Try: select 'YEAR: '||DATEPART(YEAR,$TRANSLATE('2024-06-23T06:03:00Z','TZ',' '))
go to post Enrico Parisi · Jun 24, 2024 In my opinion, if you need to encode a file/stream "as is", without any conversion, so that the counterpart receiver get EXACTLY what your source file/stream is/was, then use %Stream.FileBinary. If you need some character conversion (say, Unicode/UTF8 or others), then use %Stream.FileCharacter (with appropriate parameters...) that can handle the conversion.
go to post Enrico Parisi · Jun 24, 2024 Why do you say the stream is typically a binary stream? Because a Charecter Stream may introduce additional character set conversion.In your case it seems your stream is a MS Word docx document file, that's a binary file (it's a zip file) and no character set conversion is needed nor wanted, you just take the "raw" content (i.e. binary content) and encode it in base64 when included in JSON/Dynamic Object. Please note that the code:Do obj.%Set("data",pStream,"stream>base64") already encode the pStream content to base64! If you pass a base64 encoded stream, you'll end up with double base64 encoding! Its' my understanding that all you need is to load a docx file into json/dynamiy object, then all you need is: Set obj = {} Set pFile = "/ICS/jira/wgetDATA1343.docx" Set pStream = ##class(%Stream.FileBinary).%OpenId(pFile) Do obj.%Set("data",pStream,"stream>base64") The base64 encoding is performed using the "stream>base64" type parameter, here is the class reference documentation for the %Set() method.This is much more efficient and easier to read.
go to post Enrico Parisi · Jun 24, 2024 Well...I did not read the AI answer with attention, there are a few mistakes in the answer. Base64Stream should be a stream (typically a binary stream), not a string as in the AI sample, let alone the fact that in the sample code Base64Stream is NOT base64 encoded. But.....almost correct. 😊
go to post Enrico Parisi · Jun 23, 2024 I'm a little puzzled, according to documentation the method %FromJSONFile() it's not implemented in version 2022.3, it has been implemented in 2024.1, so I don't understand why you get that error, I'd expect a <METHOD DOES NOT EXISTS> error, but I don't have version 2022.3 at hand to test. In any case, for IRIS versions that implement the %FromJSONFile() method, please note that the parameter to pass is the filename, not a %File object instance. Form class reference of the %Library.DynamicAbstractObject class the first parameter is documented as: filename A file URI where the source can be read. So, the code should be: set newObject = {}.%FromJSONFile("/tmp/longObjectFile.txt")
go to post Enrico Parisi · Jun 21, 2024 As @Jon Willeke wrote in his post: 2023.1.2 shipped with the 3.2.0 and 4.1.0 wheels in the dev/python directory It's in the dev/python directory of your IRIS installation. It's in your system.
go to post Enrico Parisi · Jun 18, 2024 Yes, I think it is, that's why I proposed to change the DEFAULT view to list view.