go to post Enrico Parisi · Oct 28, 2024 True, but the problem definition is: If both fields are numeric and the result of subtraction of field1-field2 is positive. My understanding/interpretation is that the subtraction and further test should be performed only "If both fields are numeric", so the code should check that condition. If the first part of the problem (If both fields are numeric) is irrelevant....then the question/problem definition is misleading.
go to post Enrico Parisi · Oct 27, 2024 Use XML format and you get 6x faster load than using UDL. My guess the difference is due to the parsing needed by UDL import. My estimate in your case you can get as low as 42 seconds, I'm curious to see the actual numbers.
go to post Enrico Parisi · Oct 25, 2024 I really don't think that an addon package is the solution. I access, more or less regularly, around 20 IRIS different systems used by various customers and a number of local instances in my machines and VMs. Do you really think that installing an add on package in all this systems is a "solution"?
go to post Enrico Parisi · Oct 25, 2024 Can you please provide some details on what you are actually doing in your DTL?
go to post Enrico Parisi · Oct 24, 2024 To check if MyVal is a valid positive number I'd use $ISVALIDNUM(MyVal,,0) See $ISVALIDNUM function documentation.
go to post Enrico Parisi · Oct 11, 2024 This works only if you assume that the stream size is less than the maximum string length.
go to post Enrico Parisi · Oct 11, 2024 I miss how you are going to compare the two base64 json properties. If you assume that the stream AND the base64 converted stream sizes are less than maximum string length, then I miss the point of converting to base64.
go to post Enrico Parisi · Oct 8, 2024 From the other old post: Characters with accents are encoded with two characters in Unicode while it's only one character in Latin1. Unicode IRIS: USER>w $zvIRIS for Windows (x86-64) 2024.2 (Build 247U) Tue Jul 16 2024 09:52:30 EDTUSER>w $l("è")1USER>w $a("è")232USER> 232 is 0xE8, it correspond to è in both latin1 and Unicode. Do not confuse Unicode with utf-8.
go to post Enrico Parisi · Oct 6, 2024 The reason why it happen is explained in the Indirection (@) documentation: Important: All variables referenced in the substitution value are public variables, even when used in a procedure. So, I'd write your method something like: ClassMethod test() [ PublicList = arg ]{ new arg s arg = "asd" s routine = "say^hello(arg)" do @routine}
go to post Enrico Parisi · Oct 5, 2024 In these situations what I use is: If ##class(Ens.Job).ShouldBeQuiescent() || ##class(Ens.Job).ShouldTerminate() { ; close shop! Quit}
go to post Enrico Parisi · Oct 4, 2024 True, only if you don't need/want a response from the called BO.
go to post Enrico Parisi · Oct 3, 2024 VSCode with ObjectScript - tried to run simple MUMPS code and says not supported Can you provide more details on what and how you tried? It should work, in fact, it does work!
go to post Enrico Parisi · Oct 3, 2024 I (and not only me) don't consider it "best practice" but sometime is necessary and I admit I have done it a few times. You can definitely call another BO from a BO, the only limitation is that you can only make a sync call. Just use ..SendRequestSync() method, same as you would do in a BP.
go to post Enrico Parisi · Oct 2, 2024 What we are seeing is that IRIS.WorkQueue globals are being defined for these calls but then the IRIS.WorkQueue is not being cleaned up and taking up large amounts of Memory. You mention IRIS.WorkQueue globals consuming/using memory, but globals don't consume memory, they reside on disk. I never seen any IRIS.WorkQueue globals, can you provide some detail?What component is creating/using these globals?
go to post Enrico Parisi · Oct 1, 2024 Note that, if needed, you can map your classes and global for ALL namespaces currently defined and defined in the future, please check Mapping to All Namespaces documentation on how to use %ALL namespace mapping.
go to post Enrico Parisi · Oct 1, 2024 You need to check the Storage defined in your class, typically automatically generated when the class is first compiled. For example I have created a ConfigUtils.ConfigSettingsTable class: Class ConfigUtils.ConfigSettingsTable Extends %Persistent { Property Name As %String; Storage Default { <Data name="ConfigSettingsTableDefaultData"> <Value name="1"> <Value>%%CLASSNAME</Value> </Value> <Value name="2"> <Value>Name</Value> </Value> </Data> <DataLocation>^ConfigUtils.ConfigSetti1ADBD</DataLocation> <DefaultData>ConfigSettingsTableDefaultData</DefaultData> <IdLocation>^ConfigUtils.ConfigSetti1ADBD</IdLocation> <IndexLocation>^ConfigUtils.ConfigSetti1ADBI</IndexLocation> <StreamLocation>^ConfigUtils.ConfigSetti1ADBS</StreamLocation> <Type>%Storage.Persistent</Type> } } In this case the globals used by my class are: ^ConfigUtils.ConfigSetti1ADBD (Data)^ConfigUtils.ConfigSetti1ADBI (Indices)^ConfigUtils.ConfigSetti1ADBS (Streams) Instead of the 3 single globals, you can map ^ConfigUtils.ConfigSetti1ADB* Note that you MUST check the actual global(s) name(s) used by your class. If your class extends another persistent class, then the storage is defined in the superclass that define the extent (the first persistent class in class hierarchy).
go to post Enrico Parisi · Sep 29, 2024 In your production class you can implement the OnConfigChange() method. From Class Reference: This method is called when config changes to the Production or any item are saved from the portal