go to post Robert Cemper · Apr 16, 2018 the WRITE is just to visualize the examplethe loop in YOUR class could be: for msg=1:1 set msg(msg)=stream.ReadLine() quit:stream.AtEnd but that's just standard COS programming. Nothing special. see hereThen you have the local array msg with your SOAP messageSimiliar the Try{ } Catch {} construct that ignores the error that you experience as you don't get a real SOAP response here.
go to post Robert Cemper · Apr 15, 2018 You may create a normal SOAP Client in Studio using the Wizard.Then you add a transport class to display / dump your request. (example in SAMPLES) Class SOAPDemo.Transport Extends %RegisteredObject{ClassMethod DoSOAPRequest( client As %SOAP.WebClient, Action As %String, OneWay As %Boolean = 0, stream As %FileBinaryStream, ByRef responseStream As %GlobalBinaryStream) As %Status{ write !,"**** SOAP Request Begin ****",! for write stream.ReadLine(),! quit:stream.AtEnd write !,"**** SOAP Request End ****",! quit $$$OK}}Example to use it :SAMPLES>set soap=##class(SOAP.DemoProxy).%New() SAMPLES>set soap.Transport=##class(SOAPDemo.Transport).%New() ;; add cusomized transport SAMPLES>try {write !,soap.Mission() } catch {} ;; you don't get a reply, so ignore it **** SOAP Request Begin ****<?xml version="1.0" encoding="UTF-8" ?><SOAP-ENV:Envelope xmlns:SOAP-ENV='http://schemas.xmlsoap.org/soap/envelope/' xmlns:xsi='http://www.w3.org/2001/XMLSchema-instance' xmlns:s='http://www.w3.org/2001/XMLSchema'> <SOAP-ENV:Body><Mission xmlns="http://tempuri.org"></Mission></SOAP-ENV:Body></SOAP-ENV:Envelope>**** SOAP Request End **** SAMPLES>try {write !,soap.AddInteger(17,4) } catch {} **** SOAP Request Begin ****<?xml version="1.0" encoding="UTF-8" ?><SOAP-ENV:Envelope xmlns:SOAP-ENV='http://schemas.xmlsoap.org/soap/envelope/' xmlns:xsi='http://www.w3.org/2001/XMLSchema-instance' xmlns:s='http://www.w3.org/2001/XMLSchema'> <SOAP-ENV:Body><AddInteger xmlns="http://tempuri.org"><Arg1>17</Arg1><Arg2>4</Arg2></AddInteger></SOAP-ENV:Body></SOAP-ENV:Envelope>**** SOAP Request End **** so you get Envelope + Body well separated
go to post Robert Cemper · Apr 14, 2018 in technology space it's nice and compatible to the UNIX/LINUX worldin the commercial arena it is just an alien
go to post Robert Cemper · Apr 13, 2018 %Date is just handling +$h, no time (that would be %Time)%Timestamp is the real object equivalent of $h
go to post Robert Cemper · Apr 13, 2018 That makes it more clear, but not easier.Class %SOAP.WebClient is the base for any SOAP Client in Caché.It has a property Transport to provide a registered class for alternate transport (or no immediate transport in your case)check the code starting with Method InvokeClient(...and look for transport within the next 50 lines to see how that works up to here #; Make the requestSet sc=transport.DoSOAPRequest($this,Action,OneWay,stream,.responseStream)Just to be clear:I personally won't do it that way because of all the related maintenance risks.
go to post Robert Cemper · Apr 13, 2018 If you don't do to detect the structure using TCPtrace or WireShark or similar you will not see it.As I noted. It's an advice for hackers (and network engineers)
go to post Robert Cemper · Apr 13, 2018 YES. and once you have identified the content you should be able to modify it in object script according to your needs with $REPLACE, $TRANSLATE, ...... as any other string
go to post Robert Cemper · Apr 13, 2018 MgmtPortal : System Operation > Databases > Freespace > Compact / Truncate Take a look to online docs first !"Displaying Free Space Information" http://docs.intersystems.com/latest/csp/docbook/DocBook.UI.Page.cls?KEY=GSA_check_databases_freespace
go to post Robert Cemper · Apr 13, 2018 In order to use a table in an external DB you need to LINK this table to your Caché instance.There's a Wizard in Mgmt Portal System > SQL > Wizards > Link TableIt connects to your external table using SQLgateway and creates a proxy class in your namespacethat presents the table with all SQLnames ...( underscores, ...) as if it was a local table but with a special external storageThen you use this proxy class as you would do with a local one.Table 'WINSURGE_RESULT_FACT' should then be visible and accessible. It might be somewhat slower than Globals
go to post Robert Cemper · Apr 13, 2018 Hacker's advice:Create a SOAP client with Studio - Assist.Send your request anywhere and hijack it with TCPtrace or WireShark or similar.Now you have the string that you intend to modify and to send.Anyhow, I'm somewhat surprised about the subject.
go to post Robert Cemper · Apr 13, 2018 Mike,please create a new question as the solution is not related to the previous one.Thx.
go to post Robert Cemper · Apr 11, 2018 Evgeny,The type of mirror depends on how it should be used:for Disaster Recovery, it is important to get as much real-time date across as possible.it is irrelevant to have indices, cubes or similar in your (very) remote data center. so I'd recommend asynchronous Mirror / Shadow to feed it.What else you require can be generated from existing data. for High Availability, everything to continue / restart should be available permanentlyso my recommendation is Synchronous Mirror but in parallel, there is the recommendation to separate Production data from DeepSee cubesless for cube maintenance but fo queries. And that's really important! As a consequence, you would need a secondary mirror to provide high availability + performance alsofor your DeepSee cubes. Which is not a waste of effort as it allows load balancing across DeepSee. In any case, it is a tricky exercise to build, verify and manage such a configuration.
go to post Robert Cemper · Apr 11, 2018 Typically a Message in Ensemble is inheriting from Ens.Requeste.g. Class EnsLib.Testing.Request Extends Ens.RequestI have no Healthshare at hands to identify your correct messagejust to confirm Enslib.HL7.Message does NOT extend Ens.Request as it is a Persistent object on it's own.
go to post Robert Cemper · Apr 11, 2018 Your message might be locked by some other process at that time. Try to raise your Lock level to have exclusive access to your persistent object %GetLock(id) which you need during %Save() If it fails you should find out who else is locking it.
go to post Robert Cemper · Apr 9, 2018 That's mine: ClassMethod main(s As %Integer = 10){ f r=1:1:s w ! f c=1:1:s w $s(c=1!(r=1)!(r=s)!(c=s)!(c=r)!(s-r+1=c):"#",1:" ")}