go to post Otto Medin · Mar 25 Thanks Dimitrii, your question answered my question (how to get rid of the trailing slash).
go to post Otto Medin · Oct 29, 2021 Note that applying the new IRIS for Health key (I haven't tried plain IRIS) yields a warning that it lacks some of the analytics features of the expiring key.
go to post Otto Medin · Sep 22, 2021 Nothing nonstandard. I went to the marketplace (link below) and pressed "Launch". The deployment page then (optionally) allows TCP traffic on ports 22, 1971 and 52773. (For unrelated reasons, I haven't actually deployed yet.) https://console.cloud.google.com/marketplace/product/intersystems-launch... Cheers, Otto
go to post Otto Medin · Dec 10, 2020 ...or using a stored procedure along these lines: ClassMethod RenameTable(oldName As %String, newName As %String) As %String [ SqlProc ]{ try { &sql(select %ID into :className from %Dictionary.ClassDefinition where SqlTableName = :oldName ) if SQLCODE set status = "Error: Table '" _ oldName _ "' not found." quit set classDef = ##class(%Dictionary.ClassDefinition).%OpenId(className) set classDef.SqlTableName = newName set saveStatus = classDef.%Save() set status = $case(saveStatus, 1: "OK", : "Error: " _ $system.Status.GetErrorText(saveStatus)) } catch { set status = "Error: " _ $zerror } return status}Note: This doesn't handle the special case where there is no 'SqlTableName' defined.
go to post Otto Medin · Apr 15, 2020 Hi Dimitry, Was the webinar recorded? I'd say you'll get at least another 80 viewers if you publish it... Cheers, Otto
go to post Otto Medin · Jan 24, 2018 Agreed, and if you want to have your cake and eat it, too: if (a) { set b = a }
go to post Otto Medin · Nov 8, 2017 Somewhat off-topic, there are reasons to watch out for %OnBeforeSave():The object is already serialized at this point, so you can't change any properties.The method is only triggered if the object was changed.%OnAddToSaveSet() has neither of these gotchas (but you don't have %Id() there either, of course).
go to post Otto Medin · Aug 16, 2017 ...and don't forget to kill the global when you're done. On a busy system, the log file could grow very large.Otto
go to post Otto Medin · Aug 7, 2017 Hi Kishan,The error message indicates that you're trying to access a property called 'value' in a collection of objects (%Collection.ListOfObj), but there is no such thing. My guess is that you're trying to access a property of one of the objects in the collection, in which case you need to use the 'GetAt' method of the collection object to specify which one you're after.Here's more information on how to handle collections of objects.Otto
go to post Otto Medin · Aug 7, 2017 This only matters for very long loops (and you'd need a pretty extreme scenario for it to matter even then), but a post-conditional 'quit' is only meaningful if there's more code after it, and it comes with a performance cost, so this line: USER>for count = count:1 set ref=$query(@ref) quit:ref="" ...should be: USER>for count = count:1 set ref=$query(@ref) if (ref="") quit
go to post Otto Medin · Jun 16, 2017 ...or did you already have data in the table when you added the index on A? Assuming that some or all of the pre-existing data is in your WHERE range, that would explain your problem, and as others have commented, an index rebuild is the remedy.
go to post Otto Medin · Jun 16, 2017 ([@Kyle.Baxter]: Your answer is in response to [@Scott.Morrison]'s comment, right?)Another thing to consider is that child objects have non-integer IDs, so you can't use bitmap or bitslice indices on their properties.
go to post Otto Medin · Jun 13, 2017 Since %PARALLEL was added to the mix, you can't be sure that $order beats SQL.
go to post Otto Medin · Jun 8, 2017 Depending on the exact behavior you're after, the "binary follows" operator (]) may do the trick. For your two values, it yields the desired result, regardless of how you set them: USER>set a = "1.0", b = "2.2" write a]b 0 USER>set a = "1.0", b = 2.2 write a]b 0 USER>set a = 1.0, b = 2.2 write a]b 0 USER>set a = 1.0, b = "2.2" write a]b 0