go to post Enrico Parisi · Jun 17, 2024 Why define and reference an outbound adaptor when you don't use it in your code?I'd suggest to have a look to the documentation Using the HTTP Outbound Adapter. Anyway, given your code, you don't need a stream, it's just waste of resources and make your code more complicated for no reason, you can simply: ....Set httpRequest.ContentType = "application/xml"Do httpRequest.EntityBody.Write("<?xml version=""1.0"" encoding=""UTF-8""?><getURL>"_pRequest.getURL_"</getURL>")Set sc = httpRequest.Post("", 2).... Note that I assume that <Url1></Url1> is contained in the getURL string property content, as your first post suggest.
go to post Enrico Parisi · Jun 17, 2024 I don't understand your question in the context of the original question: "I work with a legacy that most screens are built using only CLS" If you want to rewrite using modern approach, then use your favorite front-end framework and implement a REST API in the Caché backend.......and maybe move from legacy Caché/Ensemble to modern IRIS as well...
go to post Enrico Parisi · Jun 16, 2024 I'm not sure if this apply to your case but in the past we found that a very old database (20+ years) that has been upgraded many time over the years had bitmap indices "not compacted" and we gained a lot of space and, more importantly, huge performance improvement running %SYS.Maint.Bitmap documented here: This utility is used to compact bitmap/bitslice indices. Over time in a volatile table (think lots of INSERTs and DELETEs) the storage for a bitmap index may become less efficient. To a lesser extent index value changes, i.e. UPDATES, can also degrade bitmap performance.
go to post Enrico Parisi · Jun 16, 2024 From a class that extends %CSP.Page you can include a CSP page using the Include() method inherited from %CSP.Page, like: Do ..Include("TestInclude.csp") This is what is actually generated when a csp page containing a CSP INCLUDE tag documented here is compiled, like: <CSP:INCLUDE page="TestInlude.csp"> Please note this is legacy (deprecated?).
go to post Enrico Parisi · Jun 16, 2024 It looks like an <UNDEFINED> error occurs in a SQL query generated code. Debugging generated code it's not easy/simple, I would double check SQL queries and parameters passed to the queries in the CSP page.
go to post Enrico Parisi · Jun 6, 2024 It depends on your timezone, well...the timezone configured in the IRIS system! 😊 Does the trailing +01:00 represent your timezone? Or what? I'm in a UTC+2 timezone, so: USER>w $zdt($zdth("1988-08-18 00:00:00.000",3),3,5,2) 1988-08-18T00:00:00.00+02:00
go to post Enrico Parisi · Jun 1, 2024 What platform? Using the IRIS Community Edition kit you can install only client components, including ODBC driver:
go to post Enrico Parisi · May 27, 2024 I'm no Python expert at all, but it looks like user and password are missing. (uid and pwd??)
go to post Enrico Parisi · May 24, 2024 From the error you get I suspect you are sending your HS.Message.PatientFetchRequestAsync to the wrong service/endpoint in the remote server. How are you sending your request and how the operation is configured?
go to post Enrico Parisi · May 23, 2024 The first parameter (Lookup Table Name) of Exists function must be quoted: Exists("HologicProcedureFilter",.....) If you want, you can switch to the old zen based rule editor, in the upper right of the page click on the user icon and select Open in Zen rule editor: Note that it will open the rule in new tab, leaving the old tab open, make sure you use only one tab to edit the rule!
go to post Enrico Parisi · May 22, 2024 Assuming response1 json ALWAYS contain a single entry, then: ; import stream into Dynamic Object Set Response1=##class(%DynamicObject).%FromJSON(response1.informesAutorizadosRangoFechas) Set Response2=##class(%DynamicObject).%FromJSON(response2.informesAutorizadosRangoFechas) Write "Response1 has ",Response1.entry.%Size()," entries",! Write "Response2 has ",Response2.entry.%Size()," entries",! ; loop all the entries in Response2 Set EntryIter=Response2.entry.%GetIterator() While EntryIter.%GetNext(.EntryKey, .Entry) { Write "Response2, entry ",EntryKey+1," has ",Entry.resource.%Size()," resources",! ; loop all resources within Entry Set ResourceIter=Entry.resource.%GetIterator() While ResourceIter.%GetNext(.ResourceKey, .Resource) { ; add resource from Result2 in first entry of Result1 Do Response1.entry.%Get(0).resource.%Push(Resource) } } Write "Merged Response1 has ",Response1.entry.%Get(0).resource.%Size()," resources",! Using your samples the output is: Response1 has 1 entries Response2 has 7 entries Response2, entry 1 has 1 resources Response2, entry 2 has 1 resources Response2, entry 3 has 1 resources Response2, entry 4 has 1 resources Response2, entry 5 has 1 resources Response2, entry 6 has 1 resources Response2, entry 7 has 1 resources Merged Response1 has 8 resources The resulting json is different than your manual merge.......
go to post Enrico Parisi · May 17, 2024 We had this same issue (missing support for SNI) long time ago, I think using healthshare based on cache version 2015.2. I'm afraid you need to add this to the (possibly very long) list of good reasons to upgrade.
go to post Enrico Parisi · May 17, 2024 In %Stream.* classes setting the Filename property corresponds to calling the LinkToFile() method (see FilenameSet() method).From LinkToFile() documentation: The method as its name suggests creates a LINK to an EXISTING file.....Also note that if there is currently some temporary data in the old stream when the LinkToFile is called this temporary data will be removed before the stream is linked to this filename. I think you have two options: set Filename BEFORE writing to the stream when you need to save a stream to a specific file, create a new file stream and use CopyFrom() method to copy existing data For option 2 here is a sample (using %Stream.TmpBinary for the temporary stream): set tStream = ##class(%Stream.TmpBinary).%New() do tStream.Write("whatever stream contains") set finalStream = ##class(%Stream.FileBinary).%New() set finalStream.Filename="c:\temp\streamtest.txt" do finalStream.CopyFrom(tStream) write finalStream.%Save(),!
go to post Enrico Parisi · May 13, 2024 In order to use LOAD DATA you need to check that the Java external language gateway is properly configured and working.
go to post Enrico Parisi · May 11, 2024 I'd implement a custom datatype, something like: Class Community.dt.IntJSON Extends %Integer { Parameter JSONTYPE = "string"; ClassMethod JSONToLogical(%val As %String) As %Integer [ CodeMode = expression, ServerOnly = 1 ] { ..DisplayToLogical(%val) } ClassMethod LogicalToJSON(%val As %Integer) As %String [ CodeMode = expression, ServerOnly = 1 ] { ..LogicalToDisplay(%val) } } Then in your class: Class Community.json.TestDT Extends (%RegisteredObject, %JSON.Adaptor) { Property something As Community.dt.IntJSON(DISPLAYLIST = ",OK,Error,Warning", VALUELIST = ",0,1,2") [ InitialExpression = 0 ]; ClassMethod RunMe() { set obj = ..%New() set obj.something = 2 do obj.%JSONExportToString(.string) write "JSON : " _ string,! write "Content : " _ ..somethingLogicalToDisplay(obj.something),!! set obj2=..%New() do obj2.%JSONImport(string) write "Imported something value: ",obj2.something,! } } Result: EPTEST>d ##class(Community.json.TestDT).RunMe() JSON : {"something":"Warning"} Content : Warning Imported something value: 2
go to post Enrico Parisi · May 3, 2024 In all set actions remove k1 from the Key (last column in the screenshot) and put "" (not empty) instead (that's the default when you insert a set action). Then try again.
go to post Enrico Parisi · May 2, 2024 Compact & Truncate are there EXACTLY to perform what you want/need, no other option. If want to speed it up, start compacting with "little" space tio free up at the end, then truncate to free disk space and gain some time, then repeat...etc.
go to post Enrico Parisi · Apr 23, 2024 There is also SYS.Stats.Dashboard class, again, I'm not sure it was in 2014 as well. This class provides an overview of the system "health", with all of the critical metrics and statuses gathered as properties in one class. It essentially contains all of the data that's available on the Dashboard in the System Management Portal. Each property is a different metric or status.
go to post Enrico Parisi · Apr 23, 2024 The WRITE command, when passed no argument, does a reflexion on the system. Well, it simply list/write all defined variables in current stack level, something you can perform using standard Object Script commands and functions, no need to look at Write source code. To do that you can use $order, $query, and indirection, with some trick needed for the variables you use to perform the listing, or, maybe simpler, you can use output redirection (to a string for example) and then...well, an argument less Write command 😊 Some hint for the first option: USER>set a=1,b=2,b(1)=3,x="" USER>set x=$order(@x) USER>write xaUSER>set x=$order(@x) USER>write xbUSER>set x=$query(@x) USER>w xb(1) For output redirection, see IO Redirect in ObjectScript in Open Exchange.
go to post Enrico Parisi · Apr 23, 2024 Within $piece, instead of $LENGTH(STRING,DELIM) you can use *