do ##class(%Compiler.UDL.TextServices).GetTextAsString(namespace, class, .text) write text
- Log in to post comments
do ##class(%Compiler.UDL.TextServices).GetTextAsString(namespace, class, .text) write text
You can write custom queries and create custom result sets that iterate over globals, etc. and expose them via ODBC.
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) ];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>As both Angular and Zen manage page state, combining them it does not seem particularly promising.
Thank you, Benjamin.
I thought TRANSFORMATIONSPEC parameter could have been used somehow, but I'll try your suggested approach.
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.
Probably not.
Here's Ensemble Event Log Viewer with multi-namespace support. In uses custom query to pull data from different namespaces.
up
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:
Can you execute in SMP:
SELECT cast('0x1F' AS varbinary(1549))Not sure why
0x1F8B08000000...
is unescaped though.
How do you propose to store static strings?
That was fast.
I'm assuming you don't want spoilers here beyond that?
Yes, for now.
I would like to, on every file change export the whole project to XML
What do you want to achieve with that?
Then stored sql procedures/custom queries or result sets are the way to go.
You'll need to write a method that returns what you need and expose it to SQL via one of the abovementioned methods.
You can project collection property as a child table.
Property MyList as list of Object(STORAGEDEFAULT="array");
Note that it changes class storage, so existing data should be moved to the correct new place.
Several months ago I wrote a small utility class to accomplish exactly that.
Or if you don't have a lot of different classes and data dependencies, you can just export to XML, add STORAGEDEFAULT and import XML.
Is it possible to change underlying data model so that 1 row = 1 main object?
Class UserPrefs {
Property Username;
/// Color/Number are keys, and this can be indexed
Property Preferences As Array Of %String(SQLPROJECTION = "table/column");
Parameter ROWLEVELSECURITY = 1;
///Updated for each row when the property 'Preferences' changes
Property %READERLIST As %String [ SqlComputeCode = {set {*} = ##class(Users).%SecurityPolicy()}, SqlComputed, SqlComputeOnChange = Preferences ];
}You can use SQL to insert into child table. Not sure if it would actually trigger a %READERLIST recalculation (maybe try %%INSERT) but worth a try.
16.2 has %ZEN.Auxiliary.altJSONProvider, which has same method signatures but may be preferable (faster).
Excel can import data from any ODBC data source.
Traced stuff to %SOAP.WebBase and for example in WriteSOAPHeaders there are these lines:
$$$XMLSetBuffer(" </"_..#SOAPPREFIX_":Header>")
$$$XMLWriteLineI guess there's really no way to remove new lines without a very heavy customization.
Using SQLComputeCode and SQLComputeOnChange %READERLIST property is stored but gets recalculated on every SQL and Object INSERT/UPDATE/%Save:
Class Utils.RLS Extends %Persistent
{
Parameter ROWLEVELSECURITY = 1;
Property %READERLIST As %String [ SqlComputeCode = {set {*} = ##class(Utils.RLS).GetAccess({%%ID})}, SqlComputed, SqlComputeOnChange = (%%INSERT, %%UPDATE) ];
Property data As %String;
ClassMethod GetAccess(Id) As %String
{
return:Id>3 "_SYSTEM"
return "%All"
}
/// do ##class(Utils.RLS).Fill()
ClassMethod Fill(N = 5)
{
do ..%KillExtent()
for i=1:1:N {
&sql(insert into Utils.RLS(data) values(:i))
}
zw ^demo.testD,^demo.testI
do ##class(%SQL.Statement).%ExecDirect(,"select * from "_$classname()).%Display()
}Target system is very fastidious about XML. I aim to eliminate all possible variables that may affect XML processing.
Show user SQL result without opening objects?
What's the use case for iterating over all (or even a big slice of) objects?