go to post Eduard Lebedyuk · Jun 15, 2023 Anything better than manual wrangling: Set tSC=##class(%Atelier.v2.Utils.TextServices).SetTextFromArray(.tTextArray,0,"CatNameFromFile","OTH",0)
go to post Eduard Lebedyuk · Jun 15, 2023 Use Session Events or create your custom base REST class extending %CSP.REST with logging in OnPreDispatch method. Check Custom Logging section in this article, for an example of %request logging.
go to post Eduard Lebedyuk · Jun 1, 2023 Yes, sue, check out fhir-profile-validation project by @Dmitry Zasypkin
go to post Eduard Lebedyuk · Jun 1, 2023 I don't think dynamic return value is possible. As a workaround you can write the desired destination value in context and redefine doOneAction in your custom router engine to replace i.e. @destino value with a value from a context before calling ##super.
go to post Eduard Lebedyuk · May 30, 2023 Run: do ##class(HS.HC.Util.Installer).InstallFoundation(ns) to enable HS package in a different namespace.
go to post Eduard Lebedyuk · May 29, 2023 If you're using git/Gitlab you can have System Default Settings file (export, import) specific for each deployment. /<repo>/config/SDS/dev.xml /<repo>/config/SDS/test.xml /<repo>/config/SDS/live.xml And get the path as: config/SDS/$CI_COMMIT_BRANCH.xml This way the code is the same everywhere, and you only load one SDS file, depending on the current environment.
go to post Eduard Lebedyuk · May 27, 2023 3 times cheaper. Or you can get the compute Savings Plans for AWS Fargate. Compare prices: On Demand (100%): $0.04048 per vCPU per hour + $0.004445 per GB per hour Spot (31%): $0.01254 per vCPU per hour + $0.00137698 per GB per hour 3 years upfront Compute Savings Plan (48%): $0.0194304 per vCPU per hour + $0.0021336 per GB per hour
go to post Eduard Lebedyuk · May 27, 2023 Yes, you can mount volumes and provide a value for ISC_DATA_DIRECTORY variable.
go to post Eduard Lebedyuk · May 27, 2023 At this point I would highly recommend just writing a cfn template, rather than clicking through 30 screens. Great article though. Notes: Split cluster and service/task creations into separate stacks. By default your cluster would have FARGATE and FARGATE_SPOT capacity providers, but if you use Launch type compute configuration you'll only get Fargate On-Demand. To use Spot you need to use Capacity provider strategy compute configuration and specify Spot.
go to post Eduard Lebedyuk · May 27, 2023 Use the ^ZMIRROR Routine, you need NotifyBecomePrimary callback.
go to post Eduard Lebedyuk · May 25, 2023 Does your license support IAM? What's the output for this command: w $SYSTEM.License.GetFeature(21)
go to post Eduard Lebedyuk · May 25, 2023 As long as you insert only with SQL (without %NOINDEX flag) or objects (%Save), you don't have to rebuild indices. But some gotchas to remember: If the table has some data before you added an index, you need to build the index after adding it (as adding an index does not build it for preexisting data) If you ran sql queries which filtered based on an indexed column value, they won't automatically take advantage of the index, you need to purge all queries associated with the newly indexed table. If you use %NOINDEX or direct global access to add rows, indexes must be built manually later
go to post Eduard Lebedyuk · May 24, 2023 Here's the code to create task to purge messages in all interoperability namespaces: set sc = ##class(%SYS.Namespace).ListAll(.result) kill result("%SYS"), result("HSCUSTOM"), result("HSLIB"), result("HSSYS"), result("REPO") while 1 {set ns = $o(result($g(ns))) quit:ns="" continue:$e(ns,1,2)="^^" set $namespace = ns continue:'##class(%Dictionary.ClassDefinition).%ExistsId("Ens.MessageHeader") set task=##class(%SYS.Task).%New(),task.Name = "Purge old Interoperability data in " _ $namespace,task.NameSpace=$Namespace,task.TimePeriod=0,task.TimePeriodEvery=1,task.DailyFrequency=0,task.DailyFrequencyTime="",task.DailyIncrement="",task.DailyStartTime = 3600,task.DailyEndTime = "",task.StartDate = $p($H,",",1)+1,task.Priority = 2,task.Expires = 0,taskdef = ##class(Ens.Util.Tasks.Purge).%New(),taskdef.BodiesToo = 1,taskdef.KeepIntegrity = 1,taskdef.NumberOfDaysToKeep = 1,taskdef.TypesToPurge = "all",sc = task.AssignSettings(taskdef),task.TaskClass=$classname(taskdef),sc = task.%Save()}
go to post Eduard Lebedyuk · May 23, 2023 WRC doesn't know everything. Now that's slander 😀 They know everything.
go to post Eduard Lebedyuk · May 23, 2023 I try to ask all non-sensitive questions on community so that the info would be available publicly.
go to post Eduard Lebedyuk · May 18, 2023 There was actually supposed to be a hard mode, where rotation can happen in any (of two) directions, but I removed that.