go to post Eduard Lebedyuk · Jul 11, 2017 So far NodeJS is only used as a general dev environment and build pipeline manager.Maybe front-end would communicate with Caché backend via REST API? Or websockets?
go to post Eduard Lebedyuk · Jul 11, 2017 You can convert binary openssl output to base64 and write that to file: s cmd=$$$FormatText("openssl dgst -sha256 -sigopt rsa_padding_mode:pss -sigopt rsa_pss_saltlen:-1 -sign %1 %2 | base64 > %3",fileKey,fileMsg,file64) base64 is available in most linux flavors, and on Windows in various GNU CoreUtils builds and in Git (usually under C:\Program Files\Git\usr\bin\). Also in an a business operation filenames should be generated randomly (probably via ##clss(%File).TempFilename(ext)) to avoid conflicts.
go to post Eduard Lebedyuk · Jul 11, 2017 Export relevant globals to xml file(1 file per namespace) and compare hash sums. Also there's a lot of tools to display XML diffs if hash sums would differ.Otherwise it's per global iteration and compare. I'd write some method to calculate global hash maybe (complete iteration and hash of keys and value). So:Get lists of globals in both nsIterate over lists, and calculate hashes for each global separatelyCompare lists (iterate over one list and delete each same value from both lists, all that's left is diff)Report if global is in one list and not in the otherReport if global hashes differ across lists(Optional) Display detailed compare for globals with different hashes
go to post Eduard Lebedyuk · Jul 11, 2017 I didn't know that #include %occCPTJSgen Redefines $$$TAB. Seems useful. Thanks.
go to post Eduard Lebedyuk · Jul 11, 2017 Please note that $$$TAB macro is actually a whitespace: ClassMethod GetTab() [ CodeMode = expression ] { $$$TAB } Call to GetTab returns: USER>zzdump ##class(Utils.Persistent).GetTab() 0000: 20 I usually use either $c(9) or user-defined macro for tabulation.
go to post Eduard Lebedyuk · Jul 10, 2017 You'll need a Business Service and a Business Operation.Business service runs every X seconds (or you can configure a more complicated schedule) gets a list of hosts and calls Business Operation. Business Operation performs the request.
go to post Eduard Lebedyuk · Jul 9, 2017 do ##class(%Compiler.UDL.TextServices).GetTextAsString(namespace, class, .text) write text
go to post Eduard Lebedyuk · Jul 6, 2017 You can write custom queries and create custom result sets that iterate over globals, etc. and expose them via ODBC.
go to post Eduard Lebedyuk · Jun 29, 2017 Make plaintext property triggered computed on insert/update rather than always computed. Property PlainText As %String(MAXLEN="") [ SqlComputeCode = {set {*} = ##class(%iKnow.Source.Converter.Html).StripTags({HtmlText}}, SqlComputed, SqlComputeOnChange = (%%INSERT, %%UPDATE) ];
go to post Eduard Lebedyuk · Jun 27, 2017 There's no need to search for the /s1/s2/s3 in the second template, as the first template would send every node into the second template. So your XSLT should probably look like this: <?xml version="1.0"?> <xsl:stylesheet xmlns:xsl="http://www.w3.org/1999/XSL/Transform" version="1.0"> <xsl:output method="xml" indent="yes"/> <xsl:template match="//@* | //node()"> <xsl:copy> <xsl:apply-templates select="@*"/> <xsl:apply-templates select="node()"/> </xsl:copy> </xsl:template> <xsl:template match="//s3" > <xsl:copy> <xsl:apply-templates select="@*"/> Content Replaced </xsl:copy> </xsl:template> </xsl:stylesheet>
go to post Eduard Lebedyuk · Jun 27, 2017 As both Angular and Zen manage page state, combining them it does not seem particularly promising.
go to post Eduard Lebedyuk · Jun 26, 2017 Thank you, Benjamin.I thought TRANSFORMATIONSPEC parameter could have been used somehow, but I'll try your suggested approach.
go to post Eduard Lebedyuk · Jun 26, 2017 Are these (Caché and Ensemble) systems in production or development?Emsemble is Caché + Some classes. So the easiest solution would be to move Caché application into Ensemble instance.Example of calling Ensemble from Caché is available in Demo.ZenService.Zen.WeatherReportForm class, GetWeatherReport method in ENSDEMO namespace.
go to post Eduard Lebedyuk · Jun 25, 2017 Install latest version (we're currently on v4) from here. Installation instructions are there too (just download and import, that's all).
go to post Eduard Lebedyuk · Jun 24, 2017 Here's Ensemble Event Log Viewer with multi-namespace support. In uses custom query to pull data from different namespaces.
go to post Eduard Lebedyuk · Jun 21, 2017 I think the most important part of source control file structure is mirroring package structure in Studio, since that is the view we spend the most time with. That said it looks something like this: root/ Package1/ Class.cls Class2.cls Routine.mac Include.inc Package2/ Class.cls Class2.cls Routine.mac Include.inc Additionally: Web app should be stored in a separate repository.If there's docs/dictionaries/etc, then all sources should be in a /src folder instead of repository root.All libs/modules/etc should be moved into their separate repositories each and plugged in as a submodules.Builds, if any should not be stored in a repo but rather meta-managed (releases).Commit messages and granular commit history is one of the most helpful things when analysing project history, enforce commit message style (title is the most important i.e. PART/SUBPART - thing done in a commit).