go to post Eduard Lebedyuk · Nov 6, 2017 You can try to use %SIMILARITY function available in Cache SQL.
go to post Eduard Lebedyuk · Nov 6, 2017 You can use Session Events for logging, it provides OnStartRequest and OnEndRequest callbacks. Is it possible to know the user through the session, in the broker, or in the triggers? Yes, you can store data in %session object and retrieve it on a later date.Also, check out my series of articles (part1, especially part2) on web debugging.
go to post Eduard Lebedyuk · Nov 6, 2017 @Murray Oldfield wrote a great series of articles focused on performance and detecting bottlenecks. Check it out.
go to post Eduard Lebedyuk · Nov 5, 2017 Here's some steps you can take to debug this query:1. Add BREAK after executing query2. Start BO in a terminal3. Get to BREAK4. Execute: write $System.Status.GetErrorText(%objlasterror)
go to post Eduard Lebedyuk · Oct 31, 2017 You'll need to:write authorization codecontrol current authorization state check that it all works as expected so you don't consume more that one license per userThere's no reason to do that, as standard Caché tools, such as Login page provide all required capabilities.
go to post Eduard Lebedyuk · Oct 31, 2017 Do you mean web-app settings like in the following screenshot?Yes.But why not using basic authentication? Can I consider using it?It's way better to use CLP because this way Caché tracks authorization and licenses and you don't need to think about it in your app.Here's some recommendations on securing REST + CSP web apps:All brokers effectively have Parameter UseSession = 1;REST web application and client web application allow only authenticated (i.e. password) access.REST web application and client web application have reasonable Session timeout (i.e. 900, 3600).REST web application and client web application have the same GroupById value.REST web application and client web application have the same cookie path.Client web application can have a custom Login Page (or just use default login page, that's okay too).
go to post Eduard Lebedyuk · Oct 27, 2017 I'm not adding any method to existing classes or adding new superclass.
go to post Eduard Lebedyuk · Oct 27, 2017 Hello, Amir!That was just a quick testing in the existing class. For the actual project of course I would write this method in a separate utility class. you are completely right on that. Still, I edited my code to avoid bad examples.I need a method to return storage position of property in $lb at runtime, and I also can't modify existing classes to achieve that (for example by generating a method for each class with precomputed property name=storage position values).Impossible, because 2. That said I do agree that idea with method generators is good, just not applicable in this exact case.
go to post Eduard Lebedyuk · Oct 26, 2017 write stream.ContentType Provided stream is an object of %CSP.Stream class.
go to post Eduard Lebedyuk · Oct 25, 2017 Hello, Amir!Can ECP be configured in the case where one of the server is on the internal network? So server1 can see and get replies from server2 but server2 can't access server1 by itself?
go to post Eduard Lebedyuk · Oct 20, 2017 You need to parse CSV. Here's how to do that in Caché: Provided you have this csv: car,2000,100.51,27.10.2016, phone,2003,65.8,15.01.2017, You can import it into class Test.CSV: 1. Generate a persistent class Test.CSV set rowtype = "name VARCHAR(50),year INTEGER,amount NUMERIC(9,2),date DATE" set filename = "D:\data.csv" do ##class(%SQL.Util.Procedures).CSVTOCLASS(2, .rowtype, filename,,,,"Test.CSV") 2. Import file or files do ##class(Test.CSV).Import(2,filename) Usually you can't import your CSV right away - the dates are in a different format, etc. You need to modify Import method and property definitions. For example I often: Add FORMAT=4 property parameter for dates to import dates in dd/mm/yyyy format.Find&replace Library. Add this else line in Import method: if $$$ISOK(tStatus) { set tCounter = tCounter + 1 } else { w $System.Status.GetErrorText(tStatus) return} If you have a tab separated file, you need to change Import method signature from: pDelimiter As %String = "," to: pDelimiter As %String = {$c(9)} You may need to additionally modify Import method to accept streams instead of files.
go to post Eduard Lebedyuk · Oct 20, 2017 Additionally in web app settings specify:Serve Files: AlwaysServe Files Timeout: 0Note, that it would disable caching completely.
go to post Eduard Lebedyuk · Oct 17, 2017 XPAth can solve that, you dont need to parse XML to object in that case.
go to post Eduard Lebedyuk · Oct 17, 2017 Not sure if choiceGetCount is a public API to do that.You want to count a number of occurances of a particular node in some path?