go to post Eduard Lebedyuk · Mar 28, 2019 While messages do have priority, it seems to be internal property. You can try to check it on a dev system but I'd advise against changing it on a production system.The easiest way is to have two operations - one for priority source, another for everything else and route messages to one or another operation.
go to post Eduard Lebedyuk · Mar 27, 2019 Yes. To get a full list of reserved works execute: zw ^%qCacheSQL("reservewords")
go to post Eduard Lebedyuk · Mar 27, 2019 But this also means that you can't ship the whole vendor copy of the global as you will overwrite the onsite ID counter node.You can! When you load globals specify /mergeglobal flag to merge the global with existing data instead of overwriting it: set sc = $system.OBJ.Load("global.xml", "/mergeglobal=1") seed the ID counter at the site to a really high number Bitmap indices would really slow down from that.
go to post Eduard Lebedyuk · Mar 27, 2019 $zf(-100) has different signature: set cmd = """C:\Program Files (x86)\WinRAR\Rar.exe""" set args(1) = "x" set args(2) = path _ "*.dbf" set args(3) = pathToExt set sc = $ZF(-100,"/SHELL", cmd,.args)
go to post Eduard Lebedyuk · Mar 26, 2019 If you're on pre 2019.1 you can use %ZEN.Auxiliary.jsonProvider and %ZEN.Auxiliary.altJSONProvider to convert arbitrary object to and from JSON.If you're on 2019.1 you can use %JSON.Adaptor class which is similar to %XML.Adaptor.
go to post Eduard Lebedyuk · Mar 26, 2019 Error shows that it's access/user error:ERROR_NOLOGON_WORKSTATION_TRUST_ACCOUNT 1808 (0x710) The account used is a computer account. Use your global user account or local user account to access this server.
go to post Eduard Lebedyuk · Mar 26, 2019 Cache runs as a service under SYSTEM account.Check that this user has access to a network drive.
go to post Eduard Lebedyuk · Mar 26, 2019 This applies to properties of a class correct? Not just methods?Correct.You have several solutions:Application level control. You have one table Term { Name, Type} and on the application level you decide for edits to go or not based on type. It is the fastest solution, but you need to write a application code and remember to check for type.Class-level control as described by you.Row-level security. Control access row by row.
go to post Eduard Lebedyuk · Mar 25, 2019 The easiest way is to use JSON_OBJECT for everything. Fastest would be just writing to device from resultset. Combine these approaches to get the performance you need (add this code to Parent class and call Test method): Query Display() As %SQLQuery { SELECT JSON_OBJECT( 'ID':%ID, 'Name': Name, 'Description': Description, 'Children': Example.Parent_GetChildrenInfo(%ID) ) FROM Example.Parent } /// do ##class(Example.Parent).Test() ClassMethod Test(count = 0) { if count>0 { do ##class(Example.Child).%KillExtent() do ..%KillExtent() do ##class(Example.Child).Populate(count,,,,$$$NO) do ..Populate(count,,,,$$$NO) } do ..DisplayFunc().%Display() } ClassMethod GetChildrenInfo(id) As %String [ SqlProc ] { #define CRLF $c(13,10) #define ZENJSISNUM(%val) ($IsValidNum(%val)&&(%val=+(%val))) #define ZENJSNUM(%num) $fnumber(%num,"LON") #; JSON utility macros that use the JSON translation table instead of the JS translation table #define ZENJSTABLE(%format) ("JS"_$S(%format["u":"ML",1:"")) #define ZENJSONTABLE(%format) ("JSON"_$S((%format["u"):"ML",1:"")) #define ZENJSONESCAPE(%str,%format) $S(%format["s":$ZCVT(%str,"O",$$$ZENJSONTABLE(%format)),1:$Replace($ZCVT(%str,"O",$$$ZENJSTABLE(%format)),"\'","'")) #define ZENJSONSTR(%str,%format) (""""_$$$ZENJSONESCAPE(%str,%format)_"""") #define ZENJSONPROP(%prop,%format) $$$ZENJSONSTR(%prop,%format) #define ZENJSONVALUE(%val,%format) $S($$$ZENJSISNUM(%val):$$$ZENJSNUM(%val),$C(0)=(%val)||$ListValid(%val):"""""",1:$$$ZENJSONSTR(%val,%format)) #define ZENJSONPAIR(%pr,%val,%format) $$$ZENJSONPROP(%pr,%format)_":"_$$$ZENJSONVALUE(%val,%format) set out = "[" set ids = ..ChildrenGetStored(id) set ptr=0 set separator=0 while $listnext(ids,ptr,value) { set value = $lg(value) set:separator out = out _ "," set out = out _ "{" set out = out _ $$$ZENJSONPAIR("Name",##class(Example.Child).NameGetStored(value),"") _"," set out = out _ $$$ZENJSONPAIR("Description",##class(Example.Child).DescriptionGetStored(value),"") set out = out _ "}" set separator = 1 } set out = out _ "]" quit out }
go to post Eduard Lebedyuk · Mar 25, 2019 I mean how many children parent has on average? 10? 100? 1000?
go to post Eduard Lebedyuk · Mar 25, 2019 what's the expected average/max cardinality on that relationship?
go to post Eduard Lebedyuk · Mar 25, 2019 I think it would be better to do with REST, but SQLQuery tag can do what you want.
go to post Eduard Lebedyuk · Mar 21, 2019 I once separated one Ensemble database (with code and data) into two databases (one db for code, one db for data) on a running system.It was not difficult actually:Exported code from one databaseCreated new database.Imported code into new database.In a namespace switched code database from old database to a newly created one.Deleted classes from old database.But in my situation the code itself didn't change.
go to post Eduard Lebedyuk · Mar 20, 2019 You're calling an Operation, right?Operations can be called in async mode.
go to post Eduard Lebedyuk · Mar 20, 2019 Another check. Properties can't be SQL reserved words. I often name properties "Date", etc. only to forget that they can't be used in SQL as is only quoted, so I need to go to Class view and rename them to something else.
go to post Eduard Lebedyuk · Mar 20, 2019 The main check we need is parametrization. SQL should not be concattenated from user input, but user input should be passed as an argument.
go to post Eduard Lebedyuk · Mar 20, 2019 Well, what do you want to do with that list? Depending on your use case, the solution may differ.For example to get a list of dashboards execute this query: SELECT * FROM %DeepSee_Dashboard.Definition And to get a list of Pivots execute this one: SELECT * FROM %DeepSee_Dashboard.Pivot And in MDX2JSON project I need to get a list of dashboards visible to the current user. I use custom result set for that (because user may have access to dashes but not to SQL).
go to post Eduard Lebedyuk · Mar 19, 2019 And Tuesday, April 23rd at 11am EDT we would be running an English version of the webinar.Register here.