go to post Eduard Lebedyuk · Dec 4, 2019 You need to index columns used in conditions, for the specified query: etatTitre numRemise If there are less than 6400 possible values you can use bitmap indices. Start with individual indices (so the number of indices equals the number of condition columns).
go to post Eduard Lebedyuk · Dec 3, 2019 Can/will moving to an async style of API help this? No. long strings aren't enabled in our instance(s) of Cache You should enable long strings. That's been the default for years. Anyway, use streams for response processing, they ignore string limits altogether.
go to post Eduard Lebedyuk · Dec 3, 2019 Check Web Gateway timeouts, specifically Server Response Timeout setting. Also Web Server can impose additional limitations. That said, I'd advice you to move to async style of API, here's how. Currently you have one call, say /GetData and it takes 10 minutes. Split it into 2 calls: /StartTask - JOBs a task (GetData) and returns GUID (child pid in the most simple case) /GetTask/:GUID - returns current JOB status and if it's done returns the data Here's a sample ASYNC REST broker. This will save you a lot of problems down the line.
go to post Eduard Lebedyuk · Dec 3, 2019 RabbitMQ adapter can work with Cache (in non-interoperability environments).
go to post Eduard Lebedyuk · Dec 2, 2019 I'm using the same workaround. It works like this because $zf(-1) spawns a new process. If you want to change the environment variable for a current process, you can use this utility.
go to post Eduard Lebedyuk · Dec 2, 2019 You need to set $HOME and run the program in one call: set sc='$zf(-1,"export HOME=/tmp && soffice") Here's an example.
go to post Eduard Lebedyuk · Dec 2, 2019 You can change the $HOME for cacheusr to some other dir, /home/cacheusr probably.
go to post Eduard Lebedyuk · Dec 2, 2019 Well, as a cacheusr you don't have access to /root. Why not write into some temp directory?
go to post Eduard Lebedyuk · Dec 2, 2019 That's for Docker. GCP, while it uses containers, has a setup where all container's ports could possibly be available, but firewall prevents all access except specified firewall allow rules. Adding firewall access, as specified by @Dmitry Maslennikov should help.
go to post Eduard Lebedyuk · Dec 2, 2019 You can use any ODBC/JDBC database management software. I use DataGrip. It has code completion for table/field names and standard SQL syntax. Here's my URL template jdbc:Cache://{host}[:{port}]/{database}
go to post Eduard Lebedyuk · Dec 2, 2019 First of all I encourage you to update to 2016.2 or a later version, because JSON syntax differs considerably on 2016.1. Since 2016.2 we have a syntax-stable JSON API. Anyway, on 2016.1 you can do this: write obj.$toJSON()
go to post Eduard Lebedyuk · Nov 29, 2019 Note that instead of: do ##class(isc.py.util.Shell).Shell() Python Shell can be entered by simply typing zpy In there you can just directly type python code: exec(open('disk:/path/to/your/folder/testfile.py').read()) Or don't open the shell and call: set sc=##class(isc.py.Main).SimpleString("exec(open('disk:/path/to/your/folder/testfile.py').read())",,,.sc)
go to post Eduard Lebedyuk · Nov 29, 2019 set enMsg = "hello" set esMsg = "hola" set obj = {"language1":(enMsg),"language2":(esMsg)} write obj.%ToJSON() Outputs: {"language1":"hello","language2":"hola"}
go to post Eduard Lebedyuk · Nov 29, 2019 This should work for Python Gateway: set filename = "/path/to/code.py" set file = ##class(%Stream.FileCharacter).%New() set sc = file.LinkToFile(filename) set sc = ##class(isc.py.Main).ExecuteCode(file)
go to post Eduard Lebedyuk · Nov 28, 2019 1. Underscored properties are extracted. Get them by quoting property name (case is important too): set centro.codCias = objeto.GetAt(i)."cod_cias" 2. You don't need to init json provider as you're calling a classmethod, replace: set claseAux = ##class(%ZEN.Auxiliary.jsonProvider).%New() set tSC= claseAux.%ConvertJSONToObject(.linea,"EsquemasDatos.miSCS.GestionFavoritos.tns.infoCentro",.objeto,1) with: set tSC= ##class(%ZEN.Auxiliary.jsonProvider).%ConvertJSONToObject(.linea,"EsquemasDatos.miSCS.GestionFavoritos.tns.infoCentro",.objeto,1) or even better: set class = ##class(EsquemasDatos.miSCS.GestionFavoritos.tns.infoCentro).%ClassName(1) set tSC= ##class(%ZEN.Auxiliary.jsonProvider).%ConvertJSONToObject(.linea,class,.objeto,1) 3. Iterators for JSON. Recommended approach is upgrading to 2016.2+ as it contains way better json handling (dynamic objects) with iterators. For %ZEN.proxy object you can call %CopyToArray and iterate over it. set tSC = ##class(%ZEN.Auxiliary.jsonProvider).%ConvertJSONToObject("{""prop_a"":1,""prop_b"":2}",,.obj) do obj.%CopyToArray(.array) for { set key=$order(array(key),1,val) quit:key="" write key," = ",val,! } 4. Iterators for classes. Use a method generator to write the code iterating over properties. Relevant discussion.