go to post Dmitry Maslennikov · Oct 24, 2016 So let's suggest you have some object with such properties (Legs=4, Fur=True, Tail=True, Attitude=100). In a global it will looks something like this ^MyPets("Cat")=$lb(4,1,1,100) And in this case, we should have any pointer block in anyway, and while we don't have so many data in our global, yet. Type for pointer block will be 70 Block Repair Function (Current Block 3): 44 Block # 44 Type: 70 TOP/BOTTOM POINTER Link Block: 0 Offset: 40 Count of Nodes: 1 Collate: 5 --more-- # Node POINTER 1 ^MyPets 78 But we also have not so big value for our object, and data block can store subscripts in this block, as well as a value. Block Repair Function (Current Block 44): 78 Block # 78 Type: 8 DATA Link Block: 0 Offset: 60 Count of Nodes: 2 Collate: 5 Big String Nodes: 0 Pointer Length:6 Next Pointer Length:0 Diff Byte:Hex 0 Pointer Reference: ^MyPets Next Pointer Reference: Next pointer stored? No --more-- # Node Data 1 ^MyPets 2 ^MyPets("Cat") $lb(4,1,1,100) Or our global could be looks a bit different ^MyPets("Cat","Attitude")=100 ^MyPets("Cat","Fur")=1 ^MyPets("Cat","Legs")=4 ^MyPets("Cat","Tail")=1 But change nothing. Block Repair Function (Current Block 44): 78 Block # 78 Type: 8 DATA Link Block: 0 Offset: 108 Count of Nodes: 5 Collate: 5 Big String Nodes: 0 Pointer Length:6 Next Pointer Length:0 Diff Byte:Hex 0 Pointer Reference: ^MyPets Next Pointer Reference: Next pointer stored? No --more-- # Node Data 1 ^MyPets 2 ^MyPets("Cat","Attitude") 100 * 3 ^MyPets("Cat","Fur") 1 * 4 ^MyPets("Cat","Legs") 4 * 5 ^MyPets("Cat","Tail") 1 * So, we can see that yes, our subscripts now stores only in data block, yes it is, but they represent here as a nodes, and could be named as branches in a tree, we still have to store data in a data block, but we also need to store information about global, that's why we can see it here. And when will get more data than could be stored in one block, this block will be splitted, and in a parent block will see two nodes, for first nodes in a children blocks.
go to post Dmitry Maslennikov · Oct 21, 2016 Yes, but in this code, for me is too mach, and also, postconditionals should be quite short, like sc, and should not be more or close to length of real statement
go to post Dmitry Maslennikov · Oct 20, 2016 Just found board UP, it is a Raspberry Pi compatible board but on Intel Atom. Available mSATA SSD shield. Looks very good as an alternative to Raspberry, where I think would be possible to run Caché.
go to post Dmitry Maslennikov · Oct 20, 2016 Just noticed, that some time, my HAPI-FHIR server which connected to Ensemble, responses too long on some queries. And found that on Ensemble side, too many lock, and looks looks some of them in a dead-lock, and not sure why is happens yet.
go to post Dmitry Maslennikov · Oct 19, 2016 Thanks for sharing this. But some comments about code.postconditionals is a very good part of our language, but here is too much, and quite difficult to read such code. In this case much better will be simple if elsereturn in try block is a bad idea, you should throw an error, which will be caught anywaywe can do new $namespace, but in your code, this method returns to wrong namespace, look at my previous pointinstead of $replace(database,"/","\"), use ##class(%File).NormalizeDirectory(database), in this case you should not check on OS, even you forgot some of OS's, and in this case NormalizeDirectory/NormalizeFilename, a bit better.verbose mode will be better to do with a macros, something like $$$DebugInfo("some message")In your code I see so many checks on errors, and looks like, after such error we should exit, but you go further. You should look at some system macroses like $$$ThrowOnError() and so on, I think you should use it. And code will much more clear for readersand at the end you have some call to method checkRW, I think you should remove it, or show this method, because it's not clear what it doesAnd, before publishing, please change tabs to spaces, because tabs here is too big. And width of lines should be a bit less, because read such long lines a bit difficult. I fixed tabs here, for more readability.
go to post Dmitry Maslennikov · Oct 19, 2016 I'm just looked at another examples in other dialects. I'm not so good in Java yet, and even in Hibernate, and not sure that my way is correct.
go to post Dmitry Maslennikov · Oct 17, 2016 XLS, files much more difficult that plain CSV. And depends on which version you want. XLS - it is a binary format, but XLSX already bunch of XML files but compressed in one file.You can try to use ZEN reports, which supports XLS as one of output formats.
go to post Dmitry Maslennikov · Oct 17, 2016 I think not so many people know about Ultiview and even how it could be connected with Caché. So, in this case, you should some more details in your topic, how it connected, and how this question depends on Caché.
go to post Dmitry Maslennikov · Oct 17, 2016 There are lots of ways how to export data in CSV format in Caché. Add here your or code, or some more information. How you did it, and after that we may help.
go to post Dmitry Maslennikov · Oct 17, 2016 And demo server still available here, just switch to map, at the toolbar close to combobox with a list of databases.
go to post Dmitry Maslennikov · Oct 17, 2016 You can use this linkhttps://community.intersystems.com/rss
go to post Dmitry Maslennikov · Oct 15, 2016 Please add more details. What HTML report? And what the final goal, you have to achieve ?Looks like you have to use %Net.HttpRequest, but I'm not sure, because of your description.
go to post Dmitry Maslennikov · Oct 14, 2016 While it is possible to do with COS, there are so many different ways to achieve it.Most easiest and preferable way, is to write some code on server side, and call it from batch script.To work with users, you can use class Security.Users.Also you can look at %Installer manifest, which has some functionality about security.Terminal scripts, can help to automate some things. And how to run it.And even you can read this article, about COS and Linux. It is quite simple, but as an example.
go to post Dmitry Maslennikov · Oct 11, 2016 I'm just repeat my answer from google groupsThis process names decompile, and it is quite difficult process, and may not be legal in some cases I think. I saw only one very old project, for version 5 or less.And actually answer is yes, it is possible, but we don't have such tool now. To do it, you should know exactly how works compiler, and it's lots of work.
go to post Dmitry Maslennikov · Oct 11, 2016 Yes, Studio, it is just a part of client components for the database. You can install only studio if you want, but you should use full installer.But you can try to use Atelier, which standalone application, with own installer.
go to post Dmitry Maslennikov · Oct 11, 2016 Your clarification does not help actually. But any way, deleting any object, leave just ID on a link, and again, everything here depends on your application. In most cases it could cause for some different issues, when application have not expected deleted object. And I would recommend to use some flag like "isDeleted", which can help to hide such objects in most of places, and still have an access to the content of this object, to show if it would be needed. Completely delete object recommended only in case when no any other objects has links to this one.
go to post Dmitry Maslennikov · Oct 11, 2016 It is completely depends on application which you use. Some developers create their own table for users independent from Caché users.Or maybe you talking about HealthShare or TrakCare?
go to post Dmitry Maslennikov · Oct 11, 2016 Thanks for review, and I think you right, and fixed as you offer.