go to post Eduard Lebedyuk · Feb 8, 2018 Okay.Another idea: you can define your session event class, and set it as a session event class for your web application. That way you can track:What pages and partials are requestedHow long does the session lastsHow long does it take to execute the request
go to post Eduard Lebedyuk · Feb 8, 2018 If I do a direct link without using the router it works fineHow fo you test directly? If you're doing it from a terminal, then that terminal process works as your OS user. Ensemble works under another OS user. Check that this user has access to file.
go to post Eduard Lebedyuk · Feb 7, 2018 In what context are you encountering IDKEY?While Primary Key, ID and IDKEY refer to the same concept, there are some nuances:Primary Key - is something that uniquely identifies a row or an object (it's usually a property or several properties)ID is a default name of the Primary Key property (persistent cache classes/tables have ID property by default and it's a Primary Key) IDKEY is an index over Primary Key property (regardless of the actual property name)
go to post Eduard Lebedyuk · Feb 6, 2018 Angular pages are often templates filled with data (via REST) and so it' possible to use that. In the root broker of the application add request tracking (who accessed what and when). OnPreDispatch method works for that purpose. /// This method Gets called prior to dispatch of the request. Put any common code here /// that you want to be executed for EVERY request. If pContinue is set to 0, the /// request will NOT be dispatched according to the UrlMap. If this case it's the /// responsibility of the user to return a response. ClassMethod OnPreDispatch(pUrl As %String, pMethod As %String, ByRef pContinue As %Boolean) As %Status { Quit $$$OK }
go to post Eduard Lebedyuk · Feb 6, 2018 Here's how you can do itExtend %CSP.PageLookup class and redefine ShowStyleSheet method there.Create custom tag calling your new search pageDocumentation:Custom tagsCSP:Search
go to post Eduard Lebedyuk · Feb 5, 2018 My assumption is that you are suggesting to define a class and create a list of objects which then get passed back to the BPLYes, something like that. Or you can pass only id's of saved objects back. That makes ensemble messages lighter.
go to post Eduard Lebedyuk · Feb 3, 2018 Check this article on delegated authentication.I am setting the software defined username in the Properties("Comment") array and wanting to reference it in the Rest Service Dispatch class.Do you see delegated user getting created?Properties("Comment") should be available as this user Comment property.is there a way to return more specific messaging regarding the failure to the calling web application?iirc both ZAUTHENTICATE main entry point and GetCredentials entry point return %Status so you can pass the error there.
go to post Eduard Lebedyuk · Feb 2, 2018 Snapshot is a very technical abstraction.If possible, it's better to convert it to business object(s) and pass that.
go to post Eduard Lebedyuk · Feb 1, 2018 I think that's not it. There was some keyboard command that formatted all commands/functions.@Alexander Koblov?
go to post Eduard Lebedyuk · Feb 1, 2018 What is your question?Declarative programming is somewhat related.
go to post Eduard Lebedyuk · Feb 1, 2018 Use SET command: set ^A("ID1")="Name\Abb\Map" set ^A("ID2")="Name\Abb\Map" set ^A("ID3")="Name\Abb\Map" Why do you want to set classes storage directly?
go to post Eduard Lebedyuk · Feb 1, 2018 You can use this SQL directly: SELECT COUNT(1) FROM Your.Table Or if you want to pass class name as an argument, you can wrap it in SQL procedure: Class Utils.Dictionary { /// Call from SQL: SELECT Utils.Dictionary_GetExtentSize('Utils.Persistent') As ExtentSize /// write ##class(Utils.Dictionary).GetExtentSize("Utils.Persistent") ClassMethod GetExtentSize(class) As %Integer [ SqlProc ] { /// Convert class name to table name. /// You can skip this step if you have table name already #define ClassSQLTable(%c) ($$$comClassKeyGet(%c,$$$cCLASSsqlschemaname)_"."_$$$comClassKeyGet(%c,$$$cCLASSsqltablename)) set table = $$$ClassSQLTable(class) /// Quoter2 is called to escape table name if required set table = ##class(%CSP.UI.Portal.SQL.Home).Quoter2(table) /// Execute dynamic SQL /// Really %sqlcq.<NAMESPACE>.cls<NUMBER> #dim rs As %SQL.ISelectResult set rs = ##class(%SQL.Statement).%ExecDirect(,"SELECT COUNT(1) AS extentSize FROM " _ table) /// Get first result do rs.%Next() set extentSize = rs.extentSize quit extentSize } } And call like this: SELECT Utils.Dictionary_GetExtentSize('Utils.Persistent') As ExtentSize
go to post Eduard Lebedyuk · Feb 1, 2018 It's better to use more readable approach in these cases. It's somewhat doubtful that your app spends much time on local sets.Use ^PERFMON to track performance issues. Also @Murray Oldfield wrote a series of articles on performance, check it out.
go to post Eduard Lebedyuk · Jan 31, 2018 Okay, what does GUID means in your case? I get how people have GUIDs and holidays have GUIDs, but the purpose for the GUID of a person+holiday combo escapes me.
go to post Eduard Lebedyuk · Jan 31, 2018 Can you elaborate on your data model? What are your two tables, and what information joining them generates.Consider the following database: it has clients and products -and each client and each product has a guid.The join between clients and products would mean semantically - what client bought which products.But it's probably be better to store this information in another table - orders and just add properties/fk/relationships to clients and products.You want GUIDs - a mark of persistency, but you want them in a transient query. I think it would be better to create another table and populate it with the relevant data and new GUIDs and return that new GUIDs.Another approach would be exposing hash function as an sql procedure and passing both GUIDs into it and returning a hash to a client.
go to post Eduard Lebedyuk · Jan 31, 2018 Post your isc.REST code.Your web app config looks ok, but you need to check that:UnknowUser is enabledUnknownUser can access USER namespace (if it's a dev box just give him %ALL role)License consumption is not 100%