go to post Eduard Lebedyuk · Nov 1, 2016 No, it's open-source. Any bugs/feature requests should be reported on GitHub. It's very stable, though.
go to post Eduard Lebedyuk · Nov 1, 2016 There is Cache web terminal project. It emalates terminal connection to Caché from a web page.
go to post Eduard Lebedyuk · Nov 1, 2016 Call: Write ##class(%EnsembleMgr).EnableNamespace(Namespace, 1)
go to post Eduard Lebedyuk · Oct 31, 2016 This line causes an error: Write tMessage.Name,! Your class does not have Name property, so it causes an error. The following method works : /// Do ##class(Testing.Messages.Session).test() ClassMethod test() { Set messagedata = "<?xml version=""1.0"" encoding=""UTF-8""?><session><sessionId>124364</sessionId><cabinet>demo</cabinet><eventType>IN</eventType><eventTime>20161006160154</eventTime><login>test</login><loginFirstName>test</loginFirstName><loginLastName>test</loginLastName></session>" Set reader = ##class(%XML.Reader).%New() Set status = reader.OpenString(messagedata) Do reader.Rewind() If $$$ISERR(status) {do $System.Status.DisplayError(status)} // Associate a class name with the XML element name Do reader.CorrelateRoot("Testing.Messages.Session") // Read objects from xml data While (reader.Next(.tMessage,.status)) { Do:$$$ISERR(status) $System.Status.DisplayError(status) Write tMessage.sessionId,! } } Terminal: USER >do ##class(Testing.Messages.Session).test() 124364
go to post Eduard Lebedyuk · Oct 27, 2016 The correct way to accomplish that is to use source control and CI:Developers push code into a central repositoryCI system gets the code, tests it and deploys to the server
go to post Eduard Lebedyuk · Oct 19, 2016 It would, because cache for that chunk would be invalidated, and cache for other chunks would still be valid. But OP wants to invalidate cache for a whole cube, and for that inserting one fact is not enough.
go to post Eduard Lebedyuk · Oct 19, 2016 It would only invalidate one chunk (most probably first, but ultimately it depends on id) of cube data, not all of them.
go to post Eduard Lebedyuk · Oct 18, 2016 Disclaimer. I am not familiar with EDI.Some solutions would be:Get official EDI 271 xsd schema files and import them into CachéAlternatively you can read EDI 271 specification/check examples and write your own classesThen you need a dtl to transform incoming message into your new classes. If there's a lot of them maybe it would be better to write one generic transformer or write a transformer generator based on class (which would generate transformation method based on class properties).After that you can transform your class object into json via several ways:Old json via %ZEN.proxyObject/%ZEN.auxillary.jsonProviderNew json via dynamic objects
go to post Eduard Lebedyuk · Oct 18, 2016 If you have classes (persistent or not) producing JSON is much easier.
go to post Eduard Lebedyuk · Oct 17, 2016 The caveat with relationships is that all of the many objects are loaded or none are. That may present a performance problem if you have a one-many relationship with thousands of rows on the many side.
go to post Eduard Lebedyuk · Oct 17, 2016 Generally yes, but here's some thoughts: Use List, instead of Array whenever possibleSpecify STORAGEDEFAULT as "array" to project list collection properties as child tables Property Providers as List of ProviderList(SQLProjection = "table/column", STORAGEDEFAULT = "array");
go to post Eduard Lebedyuk · Oct 17, 2016 The CALLIN^%ZSTART entry point gets executed when an external program begins or completes a callin. You can add logging there to see if something initiates callin.
go to post Eduard Lebedyuk · Oct 17, 2016 Write the same dataset loop (with embedded sql) in Caché ObjectScript and see how much time does it take to fetch the same rows.
go to post Eduard Lebedyuk · Oct 14, 2016 You can modify users account via Security.Users class.So:Write a method that modifies users securityCall it from bash script via csession with arguments