go to post Eduard Lebedyuk · Dec 3, 2021 You do it by chaining GetStored methods: Class Document Extends %Persistent { Property Filename As %VarString; } Class Question As %Persistent { // Or relationship Property Document As Document; Property Filename As %String [ Calculated, SqlComputeCode = {set {*}=##class(Document).FilenameGetStored({Document})}, SqlComputed ]; }
go to post Eduard Lebedyuk · Nov 25, 2021 I'm not really sure what is it that you want (please consider providing more information), but this project can be used to both read and write excel files.
go to post Eduard Lebedyuk · Nov 24, 2021 Try it like this: Class User.ResultsMessage Extends (%Persistent, %XML.Adaptor) { Property PersonIDs As list Of %String(XMLITEMNAME = "PersonID", XMLNAME = "PersonIDs", XMLPROJECTION = "WRAPPED"); XData Data { <Results> <PersonIDs> <PersonID>1000000</PersonID> <PersonID>1000001</PersonID> <PersonID>1000005</PersonID> </PersonIDs> </Results> } /// do ##class(User.ResultsMessage).Test() ClassMethod Test() { Set text = ##class(%Dictionary.XDataDefinition).IDKEYOpen($classname(), "Data").Data Set reader = ##class(%XML.Reader).%New() Set sc=reader.OpenStream(text) Do reader.Correlate("Results","User.ResultsMessage") While reader.Next(.msg,.sc) { Write !,"Count(): "_msg.PersonIDs.Count(),! } Write:$$$ISERR(sc) $System.Status.GetErrorText(sc) } } Docs.
go to post Eduard Lebedyuk · Nov 19, 2021 Have you tried connecting to this second DSN right from the start?
go to post Eduard Lebedyuk · Nov 16, 2021 Congratulations! We are almost 6 years together! Not almost - already. For example, this early post dates November 9th.
go to post Eduard Lebedyuk · Nov 14, 2021 You can use this syntax on calculated properties: /// This property holds the document state. Serialization is JSON. Property JSON As %Library.DynamicAbstractObject; /// This is an automatically calculated property "$.firstName" Property firstName As %VarString [ SqlComputeCode = { set {*}=$$%EvaluatePathOne^%DocDB.Document({JSON},"$.firstName")}, SqlComputed, SqlComputeOnChange = %Doc ]; /// Index on firstName property Index firstName On firstName;
go to post Eduard Lebedyuk · Nov 11, 2021 Well, enjoy. UPD: it was missing isc.util.dbf.Field. Class isc.util.DBF.Field Extends %SerialObject [ ClassType = serial, ProcedureBlock ] { Property name As %String(TRUNCATE = 1); Property type As %String(TRUNCATE = 1); Property length As %Integer; Property decimals As %Integer; }
go to post Eduard Lebedyuk · Nov 11, 2021 Are there really no other options (CSV, JSON, XML)? I have some code for a DBF reader, if you're interested I can share it and you can create a DBF writer by analogue.
go to post Eduard Lebedyuk · Nov 10, 2021 Check out my series of articles: Debugging Web. Add this code to see call parameters: set %response.ContentType = "html" do ##class(%CSP.Utils).DisplayAllObjects() return $$$OK
go to post Eduard Lebedyuk · Nov 10, 2021 Like this: Class ... Extends %CSP.REST { XData UrlMap [ XMLNamespace = "http://www.intersystems.com/urlmap" ] { <routes> <route call="logout" method="GET" url="/logout"> </routes> } /// Logout user from current session ClassMethod logout() As %Status { #dim %session As %CSP.Session set sc = %session.Logout(1) set %session.EndSession = 1 return sc } }
go to post Eduard Lebedyuk · Nov 10, 2021 1. Implement %iFind.Transformation.Abstract interface with the custom transformation that would remove all property names (I assume you know property names beforehand). After that set TRANSFORMATIONSPEC index parameter to your transformation implementation. 2. Maybe User Dictionaries could also be used. 3. Are you sure you need analytic queries? Simpler iFind indices (Minimal, Basic) can be advantageous in some situations. Calling @Benjamin De Boe