go to post Robert Cemper · Mar 1, 2019 Exactly 4 weeks before UK is leaving the European Union on Friday, March 29th this sounds like kind of British humor to me.
go to post Robert Cemper · Feb 25, 2019 Thanks @Jeffrey Drumm !I always distrusted HL7 separators and ESC chars. when I first met them ages back as they carry the same limit as $PIECE() with them:"There is always somewhere some odd case where your separator turns up as content. " Praise $LB() !
go to post Robert Cemper · Feb 25, 2019 if \E is just a synonym for <ESC> than use insteadset remove=$c(27)
go to post Robert Cemper · Feb 25, 2019 set remove="\E"set hl7="OBX|1|RP|ECG||CARDIO ECG^APPLICATION^PDF^^\E\\E\sitehopital.org\E\files\E\cardio\E\022018\E\GE274583.PDF|"set clean=$replace(hl7,remove,"") write cleanOBX|1|RP|ECG||CARDIO ECG^APPLICATION^PDF^^\\sitehopital.org\files\cardio\022018\GE274583.PDF|
go to post Robert Cemper · Feb 21, 2019 for that case passing the variables by reference should be sufficient. ClassMethod Main() { Do ..InvokedMethod(,var1,.var2) W !,var1}ClassMethod InvokedMethod(byRef var1, byRef var2) { Set var1 = "ChangedInInvoked"}
go to post Robert Cemper · Feb 21, 2019 I see 5 options :any classmethod can be projected as SQL Procedure. So using your ODBC adapter you may communicate that way with Cachébased on rather poor personal experience of PHP & ODBC it is definitely not my favorite.With Angular & PHP you are in the Web environment. So SOAP Webservices may be useful.I had a very positive experience with that approach. see it here Feeling the power of CachéActually I would rather use REST in combination with JSONIf rather synchronous interaction between both sides is required AJAX (+JSON) could be a way Or for longer lasting asynchronous communication WebSockets might be appropriate.So you have a choice what fits best to your needs.
go to post Robert Cemper · Feb 19, 2019 interesting observation with CHPC 65001:a loop USER>for i=1:1:255 write i," ",$c(i),! stops the session with any character > $c(127).I'd suggest forget that M$ crap.Use Putty or any thing else.Cache for Windows (x86-64) 2018.1.1 (Build 312U) Thu Jan 3 2019 14:34:00 EST
go to post Robert Cemper · Feb 19, 2019 BTW.zwrite @reader.GlobalNameUSER>zwrite @reader.GlobalName^||CacheTemp=5^||CacheTemp(5,1)=$lb("element","","Oceano","Oceano",0,1)^||CacheTemp(5,2)=$lb("element","","Header","Header",0,2)^||CacheTemp(5,3)=$lb("element","","DataSource","DataSource",0,3)^||CacheTemp(5,4)=$lb("chars","Oceano","")^||CacheTemp(5,5)=$lb("endelement","","DataSource","DataSource")^||CacheTemp(5,6)=$lb("element","","DataType","DataType",0,3)^||CacheTemp(5,7)=$lb("chars","EDAttendance","")^||CacheTemp(5,8)=$lb("endelement","","DataType","DataType")^||CacheTemp(5,9)=$lb("endelement","","Header","Header")^||CacheTemp(5,10)=$lb("element","","Body","Body",0,2)^||CacheTemp(5,11)=$lb("element","","MIU","MIU",0,3)^||CacheTemp(5,12)=$lb("element","","Department","Department",0,4)^||CacheTemp(5,13)=$lb("chars","BCH","")^||CacheTemp(5,14)=$lb("endelement","","Department","Department")^||CacheTemp(5,15)=$lb("element","","TotalNumber","TotalNumber",0,4)^||CacheTemp(5,16)=$lb("chars","6","")^||CacheTemp(5,17)=$lb("endelement","","TotalNumber","TotalNumber")^||CacheTemp(5,18)=$lb("element","","NumberWaitingToBeSeen","NumberWaitingToBeSeen",0,4)^||CacheTemp(5,19)=$lb("endelement","","NumberWaitingToBeSeen","NumberWaitingToBeSeen")^||CacheTemp(5,20)=$lb("element","","LongestWaitMin","LongestWaitMin",0,4)^||CacheTemp(5,21)=$lb("endelement","","LongestWaitMin","LongestWaitMin")^||CacheTemp(5,22)=$lb("endelement","","MIU","MIU")^||CacheTemp(5,23)=$lb("element","","MIU","MIU",0,3)^||CacheTemp(5,24)=$lb("element","","Department","Department",0,4)^||CacheTemp(5,25)=$lb("chars","BOS","")^||CacheTemp(5,26)=$lb("endelement","","Department","Department")^||CacheTemp(5,27)=$lb("element","","TotalNumber","TotalNumber",0,4)^||CacheTemp(5,28)=$lb("chars","1","")^||CacheTemp(5,29)=$lb("endelement","","TotalNumber","TotalNumber")^||CacheTemp(5,30)=$lb("element","","NumberWaitingToBeSeen","NumberWaitingToBeSeen",0,4)^||CacheTemp(5,31)=$lb("chars","1","")^||CacheTemp(5,32)=$lb("endelement","","NumberWaitingToBeSeen","NumberWaitingToBeSeen")^||CacheTemp(5,33)=$lb("element","","LongestWaitMin","LongestWaitMin",0,4)^||CacheTemp(5,34)=$lb("chars","109293","")^||CacheTemp(5,35)=$lb("endelement","","LongestWaitMin","LongestWaitMin")^||CacheTemp(5,36)=$lb("endelement","","MIU","MIU")^||CacheTemp(5,37)=$lb("endelement","","Body","Body")^||CacheTemp(5,38)=$lb("endelement","","Oceano","Oceano")
go to post Robert Cemper · Feb 19, 2019 structure is OK, and it worked for me.Removing all CR,LF,TAB,BLANK still looks good here. Could you have some control characters in your string ?USER>ZZDUMP myfile may show itUSER>write $TR(myfile,$c(13,10,9,32))<Oceano><Header><DataSource>Oceano</DataSource><DataType>EDAttendance</DataType></Header><Body><MIU><Department>BCH</Department><TotalNumber>6</TotalNumber><NumberWaitingToBeSeen/><LongestWaitMin/></MIU><MIU><Department>BOS</Department><TotalNumber>1</TotalNumber><NumberWaitingToBeSeen>1</NumberWaitingToBeSeen><LongestWaitMin>109293</LongestWaitMin></MIU></Body></Oceano>
go to post Robert Cemper · Feb 19, 2019 this happens if your variable myfile doesn't have a clean XML structure check the content it. eg: https://www.w3schools.com/xml/xml_validator.asp
go to post Robert Cemper · Feb 18, 2019 By XML bit I understand you have some myfile="<mynode>anytext</mynode>" or similar in handsso this should cover your needs:USER>set sc=##class(%XML.TextReader).ParseString(myfile,.reader)USER>zwrite @reader.GlobalName^||CacheTemp=1^||CacheTemp(1,1)=$lb("element","","mynode","mynode",0,1)^||CacheTemp(1,2)=$lb("chars","anytext","")^||CacheTemp(1,3)=$lb("endelement","","mynode","mynode")or is the content of myfile something else ??
go to post Robert Cemper · Feb 12, 2019 First, CACHETEMP doesn't maintain a Journal. (could be a minor advantage) .Second, CACHETEMP follows a different storage strategy as it is kept in memory (global buffers) as long as affordable.While for the other DBs data (global buffer blocks) get written to disk as soon as possible it is the opposite for CACHETEMP.Third, CACHETEMP is common to all namespaces.Forth, CACHETEMP is cleared at every restart and total empty after. I doubt that this could be useful in an ECP setup.
go to post Robert Cemper · Feb 12, 2019 to my understanding, there is no technical limit.Though I believe to remember that it used to be ~16.000 some time in past.Class SYS.Database maps to ^SYS("CONFIG","IRIS","Databases",<DBNAME>) and has NO limit theresimilar Namespaces are stored in SYS("CONFIG","IRIS","Namespaces",<NSPCE>) an are covered by %SYS.Namespace If there is any limit it must be related to internal memory structures. (gmheap ??)
go to post Robert Cemper · Feb 12, 2019 Use either $ZF(-1,...) or $ZF(-100, ... )or CPIPE to talk to your OS on command level.detals here:Execute Server Commands from Caché / Ensemble / IRIS
go to post Robert Cemper · Feb 8, 2019 see my 2 alternative solutions to use external adaptersClient for WebSockets based on CSPClient for WebSockets based on Node.jsand thanks again for the inspiration.It was just in time for a business project.
go to post Robert Cemper · Feb 6, 2019 In addition to the reply from @Evgeny Shvarov :INT is highly important to identify error locations.eg. <DIVIDE>label+5^routinename refers to the location in routinename.INT
go to post Robert Cemper · Feb 5, 2019 Out of curiosity, I have built a more exotic solution that is easier to understand. (At least for me)I don't like so much this protocol upgrade stuff and encrypting and simulation of a browser.My personal workaround:start browser over ZF(-1, "start chrome http://.................my csp......")the page gets my request passed with the URL. very simple just as a Hashthe page does all the WS stuff via JavaScriptthe reply is returned using Hyperevent #call(....) It works fine and is rather "classic CSP" style.