go to post Enrico Parisi · Mar 13 "...the write() function seems to be overlaying the whole stream..." Of course, that's the way a stream works as designed. The resulting (target) stream will contains what the Write() method writes to the stream. And only that. If this is not what you expect, then please provide more details on your goal.
go to post Enrico Parisi · Mar 13 Just in case, try adding a "code" action BEFORE your actions with: Do source.Stream.Rewind() Do target.Stream.Clear()
go to post Enrico Parisi · Mar 13 How big (Size) is the stream? If it's larger then the maximum string supported string length (~3.5MB), then you have a problem with your code. When it does not work, do you get an error? In the DTL, how do you set the "Create" option/parameter? (copy or new?) Is there any other reference/set referencing the Stream in the DTL?
go to post Enrico Parisi · Mar 13 What product? If it's HealthShare then you should use the class HS.Local.ZAUTHENTICATE in HSCUSTOM namespace.
go to post Enrico Parisi · Mar 13 If you use server side editing, you can have as many servers/namespaces as you need in Explorer. In many environments server side editing in much more convenient.
go to post Enrico Parisi · Mar 13 In fact, for simple XML export (no namespace and other amenities) you can just use XMLExport*() methods. ClassMethod test() { Set message=##class(Mensajes.Response.Radiologia.NumeroOrdenAcodigoSERAMResponse).%New() Set message.resultado.codigo="06050301" Set message.resultado.error=##class(EsquemasDatos.Seguridad.Error).%New() Set message.resultado.error.codigo=0 Set message.resultado.error.descripcion="Proceso realizado correctamente" Set sc=message.resultado.XMLExportToString(.string) ; handle sc error here Write string,!! ; convert XML string back to object Set reader = ##class(%XML.Reader).%New() Set sc=reader.OpenString(string) ; handle sc error here Do reader.Correlate("resultado","EsquemasDatos.Radiologia.Resultado") Do reader.Next(.ReturnObject,.sc) ; handle sc error here Write "ReturnObject is of type ",ReturnObject.%ClassName(1),! do ReturnObject.XMLExport(,",indent") Quit } Result: Do ##class(Mensajes.Response.Radiologia.NumeroOrdenAcodigoSERAMResponse).test() <resultado><error><codigo>0</codigo><descripcion>Proceso realizado correctamente</descripcion></error><codigo>06050301</codigo></resultado> ReturnObject is of type EsquemasDatos.Radiologia.Resultado <resultado> <error> <codigo>0</codigo> <descripcion>Proceso realizado correctamente</descripcion> </error> <codigo>06050301</codigo> </resultado>
go to post Enrico Parisi · Mar 13 OK, you asked XML string to object 😊 ClassMethod test() { Set message=##class(Mensajes.Response.Radiologia.NumeroOrdenAcodigoSERAMResponse).%New() Set message.resultado.codigo="06050301" Set message.resultado.error=##class(EsquemasDatos.Seguridad.Error).%New() Set message.resultado.error.codigo=0 Set message.resultado.error.descripcion="Proceso realizado correctamente" Set writer=##class(%XML.Writer).%New() Set writer.Indent=1 Set sc=writer.OutputToString() ; handle sc error here Set sc=writer.RootObject(message.resultado) ; handle sc error here Set string=writer.GetXMLString() Write string,! ; convert XML string back to object Set reader = ##class(%XML.Reader).%New() Set sc=reader.OpenString(string) ; handle sc error here Do reader.Correlate("resultado","EsquemasDatos.Radiologia.Resultado") Do reader.Next(.ReturnObject,.sc) ; handle sc error here Write "ReturnObject is of type ",ReturnObject.%ClassName(1),! do ReturnObject.XMLExport(,",indent") Quit } Result: Do ##class(Mensajes.Response.Radiologia.NumeroOrdenAcodigoSERAMResponse).test() <resultado> <error> <codigo>0</codigo> <descripcion>Proceso realizado correctamente</descripcion> </error> <codigo>06050301</codigo> </resultado> ReturnObject is of type EsquemasDatos.Radiologia.Resultado <resultado> <error> <codigo>0</codigo> <descripcion>Proceso realizado correctamente</descripcion> </error> <codigo>06050301</codigo> </resultado>
go to post Enrico Parisi · Mar 13 To export a XML enabled class use %XML.Writer class. ClassMethod test() { Set message=##class(Mensajes.Response.Radiologia.NumeroOrdenAcodigoSERAMResponse).%New() Set message.resultado.codigo="06050301" Set message.resultado.error=##class(EsquemasDatos.Seguridad.Error).%New() Set message.resultado.error.codigo=0 Set message.resultado.error.descripcion="Proceso realizado correctamente" Set writer=##class(%XML.Writer).%New() Set writer.Indent=1 Set sc=writer.OutputToString() ; handle sc error here Set sc=writer.RootObject(message.resultado) ; handle sc error here Set string=writer.GetXMLString() Write string,! Quit $$$OK } In your EsquemasDatos.Radiologia.Resultado class add XMLNAME parameter to obtain the correct (lowercase) tag name: Class EsquemasDatos.Radiologia.Resultado Extends (%SerialObject, %XML.Adaptor) { Parameter XMLNAME = "resultado"; Property error As EsquemasDatos.Seguridad.Error; Property codigo As %String(MAXLEN = ""); Result: Do ##class(Mensajes.Response.Radiologia.NumeroOrdenAcodigoSERAMResponse).test() <resultado> <error> <codigo>0</codigo> <descripcion>Proceso realizado correctamente</descripcion> </error> <codigo>06050301</codigo> </resultado>
go to post Enrico Parisi · Mar 11 Strange. Maybe a permissions issue? What user starts the IRIS service? The default Local system?You can check that in Windows Services, look for "InterSystems IRIS Controller for IRIS". If so, does the SYSTEM account have access to e:\intersystems\iris ? I'm just guessing.
go to post Enrico Parisi · Mar 7 Change to Do ..SendRequestSync("process.Reconciliation",pInput, .pOutput)
go to post Enrico Parisi · Mar 7 In your OnProcessInput() methods, how do you call the business process (or operation)? SendRequestAsync() or SendRequestSync()?
go to post Enrico Parisi · Mar 6 Sure, that's fine, each process commit/rollback it's own transactions. My message was to @Timo Lindenschmid where he was trying to commit/rollback worker processes from the "main" process. That's not possible.
go to post Enrico Parisi · Mar 6 How can a process commit/rollback transactions of other process(es)??
go to post Enrico Parisi · Mar 5 Are you using "direct" file I/O using Open/Use etc. commands?I think that's the way to go for your requirements. If so, have a look to the $ZSEEK() function, the documentation is here.
go to post Enrico Parisi · Mar 5 I think that using EnsLib.REST.GenericService and EnsLib.REST.GenericOperation is the way to go.
go to post Enrico Parisi · Mar 4 What platform and upgrade target version? I think the platform is relevant because install/upgrade script is different in Linux and Windows.
go to post Enrico Parisi · Mar 4 I'm sorry, I don't have a system that old to check/test. The oldest I have is 2018 and there AESEncode() and AESDecode() are deprecated (use AESCBCEncrypt() and AESCBCDecrypt() instead). Are AESCBCEncrypt() and AESCBCDecrypt() implemented in version 2016?And AESCBCEncryptStream(), AESCBCDecryptStream()?
go to post Enrico Parisi · Mar 3 Please note that, by default, Base64Encode() Insert CR/LF after every 76 characters.Did you take that into account? See class reference.