go to post Stefan Wittmann · Mar 15, 2016 Correct, bandwidth is not so much of an issue. Latency can be an issue as a high latency will make all actions that require server interaction be perceived slowly.Also, you should be aware that Studio runs a server status check on a regular basis by default. If your latency or connection is bad you should increase the timeouts, otherwise, you will see a popup asking for a reconnection pretty often. The setting can be found here: Tools->Options, go to Environment->Advanced and take a look at the "Enable server status check" setting.
go to post Stefan Wittmann · Mar 11, 2016 Again, it depends on what you are comparing to. Just looping over a global can be compared to a simple full table scan and the runtime performance should be pretty much the same.If you have a complex query that can't be boosted by adding just another index or by running tune table, you can probably write your own custom logic. An even better solution is to implement a custom index that can be leveraged by SQL.You have to keep in mind that the %SQL.CustomResultSet approach does not lead to reusable code. It can be used to solve a very specific problem, but it can't be reused for a similar problem on a different data set.
go to post Stefan Wittmann · Mar 11, 2016 Well, that obviously depends on how good your owl logic is. I only recommend this approach if the standard interface is insufficient for a specific need and you have to optimize further. Writing your own logic does not leverage optimizations from newer versions and you have to maintain it.A major benefit of %SQL.CustomResultSet is that you can query any accessible data source, e.g. globals and files.
go to post Stefan Wittmann · Mar 11, 2016 %Library.Result is the old SQL interface and it is recommended to use the new interface %SQL.Statement. %SQL.Statement is capable of providing metadata about the result set and performs better than the old interface in many cases.
go to post Stefan Wittmann · Mar 10, 2016 This looks much better and should work.Thanks for providing a workaround.Stefan
go to post Stefan Wittmann · Mar 9, 2016 Jochen, this code will only work if the template dispatch mode is enabled. If you are running in standard mode, this is the code you need to make the sample work:ClientMethod StartEvent(key,eventType,value) [ Language = javascript ]{var st = zenPage.getTemplate();st.[eventType](key,value,'mainView');}
go to post Stefan Wittmann · Mar 8, 2016 Hi Benjamin,regarding your questions:1) String concatenation is possible with the underscore "_" character. For example:set myquery = "SELECT * FROM " _ tableNameDon't use the plus "+" character as this is the addition operator. It will evaluate your string and convert it into a number. Unless your string starts with a number, it will be evaluated to 0. 2) Multiline statements are not supported in Caché Object Script, so you have to concatenate your string if you want to spread the query on multiple lines.HTH,Stefan
go to post Stefan Wittmann · Mar 8, 2016 Dropdownmenuitems did not attach event handlers when a key is present, which is a bug. This is fixed in the next release Zen Mojo 1.1.1. The new version is currently verified by QD, so you can expect a release within the next 2 weeks.
go to post Stefan Wittmann · Mar 4, 2016 A couple of years ago I built my own UML class diagram viewer, but it was more for the fun of it. I just like to visualize relationships and workflows as I believe it helps the mind to understand complex entities better.There is a UML Explorer tool available at this GitHub repo:https://github.com/intersystems-ru/UMLExplorer
go to post Stefan Wittmann · Mar 4, 2016 Just as a note, this is something you would usually tackle with a gulp or grunt task, e.g. https://www.npmjs.com/package/gulp-minifyThese watch external files and run a task every time they change. This means a gulp/grunt task can minify JavaScript files after you compiled your Zen/Zen Mojo classes.
go to post Stefan Wittmann · Mar 4, 2016 John,I just tried the link and it worked fine for me. I guess it took a while to get published for real. Sometime the cache is just in the way.Please try again,Stefan
go to post Stefan Wittmann · Mar 3, 2016 Projections are indeed very powerful. A use case within the product is the generation of JavaScript, CSS and localization files when you compile a Zen or Zen Mojo page.Projections are a good tool if you have to do something every time you compile a class.
go to post Stefan Wittmann · Mar 3, 2016 I have played with Visual Studio Code, but at its core, it is nothing more than a smart text editor like TextMate2 with some extensions for running tasks. It includes the runtime and can, therefore, add a debugger, which is nice. But it is not a full blown IDE.VS Code has a user group, but it is not build to allow more complex workflow integration, which is something Atelier wants to offer at some point.I am sure Bill can provide more insight.
go to post Stefan Wittmann · Mar 1, 2016 Congratulations! I am looking forward to meeting you at the Global Summit.Stefan
go to post Stefan Wittmann · Feb 26, 2016 For the moment, I subscribed to all group and post activity in my subscription tab. Make sure to select "content types". This way I get a mail for any activity, which can be noisy, but at least, I am sure I am not missing anything.I hope for better days. ;)
go to post Stefan Wittmann · Feb 26, 2016 Sounds like a use case for a DTL if you ask me. Even if it's not and you have to be very generic, I would start with a DTL and take a look at the compiled code as a starting point.
go to post Stefan Wittmann · Feb 17, 2016 Take a look at the work queue manager. Tom posted a thread here:https://community.intersystems.com/post/using-work-queue-manager-process-data-multiple-coresIn Zen applications, you can make use of asynchronous background tasks, but you can only observe one task at a time.
go to post Stefan Wittmann · Feb 17, 2016 You can define quoted property names, e.g.:Property "not_a_number" As %String;same for runtime properties:set object."not_a_number" = "28456"
go to post Stefan Wittmann · Feb 17, 2016 Thanks Eduard for posting the working solution. The reason why this works is that you actually create an object of your registered class and assign the values. The jsonProvider API can now walk the object and project the types properly.In the non-working example, you created a zenProxyObject and assigned the values on your own. The zenProxyObject just deals with auto-types and guesses the best possible type fit. As you see, this guess can't be correct all the time as in this case.If you want to create a JSON structure with specific types, either use a) the new JSON support in 2016.1 (recommended if 2016.1 is available) or b) create a subclass from %RegisteredObject and use the jsonProvider API.
go to post Stefan Wittmann · Feb 17, 2016 What Eduard means is that you can create a registered class, with typed properties (a boolean and a numeric in your case), populate it and then transform to JSON using the jsonProvider.That is the only valid approach to control JSON types in versions before 2016.1. Everything else is a hack.