go to post Eduard Lebedyuk · Feb 7, 2020 You can try %ZEN.Auxiliary.altJSONProvider or %ZEN.Auxiliary.JSONProvider.
go to post Eduard Lebedyuk · Feb 6, 2020 The reason I say this is that the method has extra parameters that don't correspond to the SQL %Fimd.Highlight SQL function. What do you mean? Highlight method signature: ClassMethod Highlight(pText As %String, pSearchString As %String, pSearchOption As %String = {$$$IFSEARCHNORMAL}, pTags As %String = {$$$IFDEFAULTHLTAGS}, pLimit As %Integer = 0, pLanguage As %String = "en", Output pSC As %Status) As %String [ SqlName = Highlight, SqlProc ] Shows that it is available in SQL context (bolded). All classmethod arguments (except sc) can be passed from SQL.
go to post Eduard Lebedyuk · Feb 6, 2020 Try double quotes inside: SELECT %iFind.Highlight(Text , :pSearchString , ,'<span style="background-color:yellow;">') into :results FROM SSA_OCR.TempSearchable I checked on my dataset and this query works for me: SELECT *, %iFind.Highlight(Text,'hello', , '<span style="background-color:yellow;">') FROM Test.Data WHERE %ID %FIND search_index(TextIndex,'hello')
go to post Eduard Lebedyuk · Feb 6, 2020 Read method does read 32000 characters by default, you can specify an amount of characters up to $$$MaxStringLength (3 641 144 characters). If you want to set property to a stream you can do it like this: do objInArrMain.%Set("Content", fileStreamBase64, "stream") I'm not sure when it became available, here's a simple check code: set stream = ##class(%Stream.TmpCharacter).%New() do stream.Write(123) d obj.%Set("prop", stream, "stream") It should output: {"prop":"123"} One other note: you're using file streams for temporary outputs (when building fileStreamBase64), replace file stream with temp stream for better performance.
go to post Eduard Lebedyuk · Feb 6, 2020 You should initialize the Signature object not with %New method, but with Create or Create509 method. set sig=##class(%XML.Security.Signature).CreateX509(cert) do sig.SetSignatureMethod($$$SOAPWSrsasha1)
go to post Eduard Lebedyuk · Feb 6, 2020 Since ##class(%iFind.Utils).Highlight and %iFind.Highlight are the same method, you can pass fourth pTags argument to it: SELECT %iFind.Highlight(Narrative,'"visibility [1-4] mile*" AND "temp* ? degrees"', , "<span>")
go to post Eduard Lebedyuk · Feb 5, 2020 You can get columns like this: $$$LOGINFO("current result print: " _ result.clave) Instead of set printed = result.%CurrentResult.%Print() $$$LOGINFO("current result print: "_printed) printed value is 1 because %Print outputs data into the current device and returns %Status.
go to post Eduard Lebedyuk · Feb 5, 2020 These particular bindings are deprecated. Replacements are listed in the InterSystems IRIS Adoption Guide which is available in WRC (Downloads - Documents).
go to post Eduard Lebedyuk · Feb 5, 2020 Another suggestion. You can define a %ZSTOP routine which would automatically clear ^HITLIST global on job end. You can also use PPG which would be automatically deleted when job ends.
go to post Eduard Lebedyuk · Feb 4, 2020 Hi Neerav! I agree that postconditionals are an acquired taste :)
go to post Eduard Lebedyuk · Feb 4, 2020 Recommended approach - always use macros for al your GLVN needs (see: DeepSee, %Dictionary). This way reporting is easy - just open inc file and you're done. %Compiler package contains Traveler/Visitor implementation for ObjectScript but it's not officially supported - use at your own risk. Although the task is unfortunately unsolvable at compile-time due to the abundant meta programming, such as indirection and xecute. In your proposed solution you can enable checkbox "Use Wildcards" in Find & Replace and search for * which is essentially everything.
go to post Eduard Lebedyuk · Feb 4, 2020 <PROTECT> error means you can't access database in the /folder/NSOne_SRC/ directory. Give the user required rights (at the very least R on that DB) and start a new session.
go to post Eduard Lebedyuk · Jan 30, 2020 From InterSystems IRIS adoption guide: Python Binding Applications using the Python Binding should migrate to PyODBC. 2019.1.1 does not have Python Native API - you'll need 2020.1 preview or 2019.2+ container release for that.
go to post Eduard Lebedyuk · Jan 29, 2020 Have you tried sending the message to several recipients directly? Not CC but TO: do m.To.Insert("mail1@domain.com") do m.To.Insert("mail2@domain.com") Or you can send the same email object to several recipients one by one: for to = "mail1@domain.com", "mail2@domain.com" { do m.To.Clear() do m.To.Insert(to) set status = ..Adapter.SendMail(m) do:$$$ISERR(status) $system.OBJ.DisplayError(status) }
go to post Eduard Lebedyuk · Jan 29, 2020 Check Apache POI integration LibreOffice integration Apache POI would be faster and more specialized, LibreOffice is the best bet on converting arbitrary documents between arbitrary formats.
go to post Eduard Lebedyuk · Jan 29, 2020 cpp directory was renamed into iris-callin. python directory should be there in your dev directory. InterSystems IRIS also offers a brand new Python Native API. Check out community Python Gateway - a new and easy way to interface with Python from InterSystems IRIS.
go to post Eduard Lebedyuk · Jan 24, 2020 Here's what I came up with: Query ClassListAll() As %SQLQuery { SELECT Name FROM %Dictionary.ClassDefinition } Query ClassListNS(namespace) As %SQLQuery { SELECT Name FROM %Dictionary.ClassDefinitionQuery_SubclassOf('%XML.Adaptor') c WHERE 1=1 AND EXISTS (SELECT 1 FROM %Dictionary.ParameterDefinition WHERE parent = c.Name AND Name = 'NAMESPACE' AND _Default = :namespace) } /// Should be rewritten to return only non-empty namespaces Query NSList() As %SQLQuery { SELECT DISTINCT _Default Name FROM %Dictionary.ParameterDefinition WHERE 1=1 AND Name = 'NAMESPACE' } /// do ##class().ExportAllSchemas() ClassMethod ExportAllSchemas() { set rs = ..NSListFunc() while rs.%Next() { write "Exporting: ", rs.Name,! do ..ExportSchema(rs.Name) } } /// do ##class().ExportSchema() ClassMethod ExportSchema(namespace) { kill %objlasterror set schema=##class(%XML.Schema).%New() set schema.DefaultNamespace=namespace #dim empty As %Boolean = $$$YES #dim rs As %SQL.ISelectResult set rs = ..ClassListNSFunc(namespace) while rs.%Next() { set empty = $$$NO set sc = schema.AddSchemaType(rs.Name) write:$$$ISERR(sc) $System.Status.GetErrorText(sc) } if empty { write "Empty namespace",! quit } do ..AddImports(namespace, schema) set schema=schema.GetSchema(namespace) #dim writer As %XML.Writer = ##class(%XML.Writer).%New() set writer.NoXMLDeclaration = $$$YES set writer.Indent = $$$YES set writer.SuppressXmlns = $$$YES do writer.AddSchemaNamespace("s") do writer.OutputToFile(..NsToFullFileName(namespace)) do writer.AddSchemaNamespace() do writer.AddNamespace(namespace) set sc = writer.DocumentNode(schema) write:$$$ISERR(sc) $System.Status.GetErrorText(sc) } ClassMethod AddImports(namespace, schema As %XML.Schema) { set rs = ..NSListFunc() while rs.%Next() { set curNS = rs.Name continue:curNS=namespace do schema.DefineLocation(curNS, ..NsToLocalFileName(curNS)) } } ClassMethod NsToFullFileName(namespace) As %String [ CodeMode = expression ] { ##class(%File).SubDirectoryName($system.Util.ManagerDirectory(), "Temp", 1) _ ..NsToLocalFileName(namespace) } ClassMethod NsToLocalFileName(namespace) As %String [ CodeMode = expression ] { ..NsToFileName(namespace) _ ".xsd" } ClassMethod NsToFileName(namespace) As %String [ CodeMode = expression ] { $p(namespace, "/", *-1) }
go to post Eduard Lebedyuk · Jan 23, 2020 Interesting article. Note that comparison with 1 would always be the fastest regardless of where it is: Here's your code on my PC: Time for If: .037652 seconds Time for ElseIf #1: .045029 seconds Time for ElseIf #2: .057766 seconds Time for Else: .053267 seconds And here's a modified code with comparison to 1 third: ClassMethod Run3() { For i=1:1:4 { Set time(i,"start")=$zh For j=1:1:1000000 { If i=3 { set a=1 } ElseIf i=2 { set a=1 } ElseIf i=1 { set a=1 } Else { set a=1 } } Set time(i,"end")=$zh } W "Time for If: ",time(1,"end")-time(1,"start")," seconds",! W "Time for ElseIf #1: ",time(2,"end")-time(2,"start")," seconds",! W "Time for ElseIf #2: ",time(3,"end")-time(3,"start")," seconds",! W "Time for Else: ",time(4,"end")-time(4,"start")," seconds",! } Running this code yields these results: Time for If: .109513 seconds Time for ElseIf #1: .048419 seconds Time for ElseIf #2: .029746 seconds Time for Else: .059306 seconds Regardless of where comparison to 1 happens it would be the fastest one.
go to post Eduard Lebedyuk · Jan 20, 2020 Why is select * from MyTable where MyFieldName like ‘%[^a-zA-Z0-9 !”%#$&”()*+,-./:;<=>?@]%’ not a solution?