Vitaliy Serdtsev · Apr 11, 2022 go to post

Any event that occurs outside of the modal group (such as a mouse click) automatically hides the modal groupproof.

Use Popup windows with modal=yes or Dialogs.

PS: if you really need to use "Model Groups", then you need to do two things for this:

  1. override the method onCanEndModalHandler
  2. override the method hideGroup(). This is necessary to prohibit the close button in the upper right corner
 

Here is a small variant:

Class dс.test Extends %ZEN.Component.page
{

XData Contents [ XMLNamespace "http://www.intersystems.com/zen" ]
{
<page xmlns="http://www.intersystems.com/zen">
  <button caption="Show modal group" onclick="zenPage.show();"/>
  <modalGroup id="mgStatic" groupTitle="Popup">
    <text id="mgText" label="Value:" />
    <button caption="OK" onclick="zenPage.mgBtnClick();"/>
  </modalGroup>
</page>
}

ClientMethod show() [ Language = javascript ]
{
  zenPage.__canClose false;
  var mg zen('mgStatic');
  
  mg.onCanEndModalHandler this.onCanEndModalHandler();
  mg.hideGroup=this.hideGroup;

  mg.show();
}

ClientMethod mgBtnClick() [ Language = javascript ]
{
  zenPage.__canClose=true;
  zen('mgStatic').onCanEndModalHandler=null;

  zenAlert('User entered: ' +  zen('mgText').getValue());
  
  // hide the modal group
  zenPage.endModal();
}

ClientMethod onCanEndModalHandler() [ Language = javascript ]
{
  return true;
}

/// Hide the group.
ClientMethod hideGroup() [ Language = javascript ]
{
  if (!zenPage.__canClose) return;
  
  if (this.groupType == 'dialog'this._canClose true;
  var div this.getFloatingDiv();
  if (div) {
    div.style.opacity = 0;
  }
  if ((!zenIsHTML5) || (!window.TransitionEnd)) {
    if (!this._closing) {
      zenPage.endModal();
      this._closing true;
    }
  }
}

}
Vitaliy Serdtsev · Apr 11, 2022 go to post

Hi Ben.

For some reason, only IRIS 2021.1CE is available for Windows, although IRIS 2021.2CE is available for many other operating systems, such as MacOSX.

Is it possible for Windows to update the version to 2021.2 too?

Vitaliy Serdtsev · Apr 11, 2022 go to post

You should always check the SQLCODE after the embedded query.
If you do this, you will see that the SQLCODE returns the value 100 for your case. In this case, you should ignore host variables.

Host Variables

Vitaliy Serdtsev · Apr 7, 2022 go to post

One of the options:

<FONT COLOR="#0000ff">s </FONT><FONT COLOR="#800000">rs</FONT><FONT COLOR="#000000">=</FONT><FONT COLOR="#000080">##class</FONT><FONT COLOR="#000000">(</FONT><FONT COLOR="#008080">%ScrollableResultSetdoc</FONT><FONT COLOR="#000000">).</FONT><FONT COLOR="#0000ff">%New</FONT><FONT COLOR="#000000">()
</FONT><FONT COLOR="#0000ff">d </FONT><FONT COLOR="#800000">rs</FONT><FONT COLOR="#000000">.</FONT><FONT COLOR="#0000ff">Prepare</FONT><FONT COLOR="#000000">(</FONT><FONT COLOR="#800000">sql</FONT><FONT COLOR="#000000">)
</FONT><FONT COLOR="#0000ff">d </FONT><FONT COLOR="#800000">rs</FONT><FONT COLOR="#000000">.</FONT><FONT COLOR="#0000ff">Execute</FONT><FONT COLOR="#000000">()
</FONT><FONT COLOR="#0000ff">w </FONT><FONT COLOR="#800000">rs</FONT><FONT COLOR="#000000">.</FONT><FONT COLOR="#0000ff">Count</FONT><FONT COLOR="#000000">()</FONT>
Vitaliy Serdtsev · Apr 7, 2022 go to post

Is it OK to use this partially rebuilt index if I don't care about data that isn't indexed? Did you do this before?

I didn't build indexes manually, except for tests. If the index is not built for all data, then the query will see only the data for which the index exists.

 

Try simple example:

Class dc.test Extends %Persistent
{

Index iF On F;

Property As %Integer;

ClassMethod Fill(10)
{
  ^dc.testD,^dc.testI

  ^dc.testD=4
  ^dc.testD(1)=$lb("",22)
  ^dc.testD(2)=$lb("",11)
  ^dc.testD(3)=$lb("",44)
  ^dc.testD(4)=$lb("",33)
  

  d $system.SQL.TuneTable($classname(),$$$YES)
  d $system.OBJ.Compile($classname(),"cu-d")
  
  ^dc.testI
  
  ##class(%SQL.Statement).%ExecDirect(,"select * from dc.test").%Display()

  ^dc.testI("iF",1,22)="" !!

  ##class(%SQL.Statement).%ExecDirect(,"select * from dc.test").%Display()

  ^dc.testI("iF",4,33)=""  !!

  ##class(%SQL.Statement).%ExecDirect(,"select * from dc.test").%Display()
}

}
Vitaliy Serdtsev · Apr 7, 2022 go to post

If we open the source code of the class for the Status field, we will see the following:

<FONT COLOR="#000080">Class Ens.DataType.MessageStatus Extends %Integer
</FONT><FONT COLOR="#000000">{

</FONT><FONT COLOR="#000080">Parameter </FONT><FONT COLOR="#000000">DISPLAYLIST = </FONT><FONT COLOR="#800080">",Created,Queued,Delivered,Discarded,Suspended,Deferred,Aborted,Error,Completed"</FONT><FONT COLOR="#000000">;

</FONT><FONT COLOR="#000080">Parameter </FONT><FONT COLOR="#000000">VALUELIST = </FONT><FONT COLOR="#800080">",1,2,3,4,5,6,7,8,9"</FONT><FONT COLOR="#000000">;

}</FONT>

Therefore , the following conclusions can be drawn:

  1. For Embedded SQL the RuntimeMode is Logical
  2. For SQL Explorer (Portal) the RuntimeMode is Display

Hence the leapfrog in the results.

Vitaliy Serdtsev · Apr 7, 2022 go to post

Try this:

<FONT COLOR="#000080">ClassMethod </FONT><FONT COLOR="#000000">OnStartRequest() </FONT><FONT COLOR="#000080">As %Status
</FONT><FONT COLOR="#000000">{
  </FONT><FONT COLOR="#0000ff">#dim </FONT><FONT COLOR="#800000">%response </FONT><FONT COLOR="#0000ff">As </FONT><FONT COLOR="#008080">%CSP.Response
  
  </FONT><FONT COLOR="#008000">;s %response.ContentType="text/html",%response.Expires=-1
  </FONT><FONT COLOR="#0000ff">s </FONT><FONT COLOR="#800000">%response</FONT><FONT COLOR="#000000">.</FONT><FONT COLOR="#0000ff">Status</FONT><FONT COLOR="#000000">=</FONT><FONT COLOR="#000080">##class</FONT><FONT COLOR="#000000">(</FONT><FONT COLOR="#008080">%CSP.REST</FONT><FONT COLOR="#000000">).</FONT><FONT COLOR="#0000ff">#HTTP403FORBIDDEN
  q $$$OK
</FONT><FONT COLOR="#000000">}</FONT>
Or this:
<FONT COLOR="#000080">/// Event handler for <b>PreHTTP</b> event: this is invoked before
/// the HTTP headers for a CSP page have been sent.  All changes to the
/// <class>%CSP.Response</class> class, such as adding cookies, HTTP headers,
/// setting the content type etc. must be made from within the OnPreHTTP() method.
/// Also changes to the state of the CSP application such as changing
/// %session.EndSession or %session.AppTimeout must be made within the OnPreHTTP() method.
/// It is prefered that changes to %session.Preserve are also made in the OnPreHTTP() method
/// as this is more efficient, although it is supported in any section of the page.
/// Return <b>0</b> to prevent <method>OnPage</method> from being called.
ClassMethod </FONT><FONT COLOR="#000000">OnPreHTTP() </FONT><FONT COLOR="#000080">As %Boolean </FONT><FONT COLOR="#000000">[ </FONT><FONT COLOR="#000080">ServerOnly </FONT><FONT COLOR="#000000">= 1 ]
{
  </FONT><FONT COLOR="#0000ff">s </FONT><FONT COLOR="#800000">%response</FONT><FONT COLOR="#000000">.</FONT><FONT COLOR="#0000ff">Status</FONT><FONT COLOR="#000000">=</FONT><FONT COLOR="#008000">"403 Forbidden"
  </FONT><FONT COLOR="#0000ff">q </FONT><FONT COLOR="#000000">0
}</FONT>
Vitaliy Serdtsev · Apr 7, 2022 go to post

We need to look at your full code, since there is nothing suspicious in the specified piece of code. I made a small example and there is no highlighting of the last line:

 

Source code

Class dс.test Extends %ZEN.Component.page
{

XData Contents [ XMLNamespace "http://www.intersystems.com/zen" ]
{
<page xmlns="http://www.intersystems.com/zen">
  <tablePane
      width="1200px"
      id="ItemsTable" 
      OnCreateResultSet="GetLog"
      maxRows="20000" 
      pageSize="20" 
      showRowNumbers="false"
      showRowSelector="false"
      showZebra="false"
      valueColumn="ID" 
      nowrap="false"
      showValueInTooltip="true"
      showFilters="true"
      autoExecute="true"
      initialExecute="false"
      useSnapshot="true" 
      onselectrow="">
  <parameter />
  <parameter />
  <parameter />
  <parameter />
  <parameter />
  <parameter />
  <parameter />
      <column colName="Sit" header="Sit name" width="50%" style="text-align:left;" filterType="text" filterOp="[" />
      <column colName="Label"  header="Label" width="10%" filterType="text" filterOp="["/>
      <column colName="userno" header="Packed By" width="10%" filterType="text" filterOp="["/>
      <column colName="LogedDate" header="Packed Date" width="10%" />
      <column colName="LogedTime" header="Packed Time" width="10%" />
      <column colName="TimeSpent" header="Spent Time" width="10%" style="text-align:left;"/>
    
  </tablePane>
  <tableNavigatorBar tablePaneId="ItemsTable"/>
</page>
}

Method GetLog(
  ByRef pSC,
  ByRef tParams)
{
  sql = 5
  sql(1)="SELECT 0 ID,'Sit' Sit,'Label' Label,'userno' userno,current_date LogedDate,current_date LogedTime,null TimeSpent"
  sql(2)="union"
  sql(3)="SELECT 1,'Sit','Label','userno',current_date,current_date,null"
  sql(4)="union"
  sql(5)="SELECT 2,'Sit','Label','userno',current_date,current_date,null"

  st=##class(%SQL.Statement).%New()
  st.%SelectMode=2
  ##class(%SQL.Statement).%ExecDirect(st,.sql)
}

}
Vitaliy Serdtsev · Apr 7, 2022 go to post

I confirm (used the following code):

<FONT COLOR="#0000ff">#include </FONT><FONT COLOR="#000000">%systemInclude
</FONT><FONT COLOR="#0000ff">n
try</FONT><FONT COLOR="#800080">{

  </FONT><FONT COLOR="#0000ff">s </FONT><FONT COLOR="#800000">sql</FONT><FONT COLOR="#000000">=</FONT><FONT COLOR="#008000">"select  from (select 0 field union select 1) where 0=1"      </FONT><FONT COLOR="#0000ff">#dim </FONT><FONT COLOR="#800000">rs </FONT><FONT COLOR="#0000ff">As </FONT><FONT COLOR="#008080">%SQL.StatementResult</FONT><FONT COLOR="#000000">=</FONT><FONT COLOR="#000080">##class</FONT><FONT COLOR="#000000">(</FONT><FONT COLOR="#008080">%SQL.Statement</FONT><FONT COLOR="#000000">).</FONT><FONT COLOR="#0000ff">%ExecDirect</FONT><FONT COLOR="#000000">(,</FONT><FONT COLOR="#800000">sql</FONT><FONT COLOR="#000000">)   </FONT><FONT COLOR="#0000ff">w </FONT><FONT COLOR="#800000">rs</FONT><FONT COLOR="#000000">.</FONT><FONT COLOR="#0000ff">%SQLCODE      s </FONT><FONT COLOR="#800000">st </FONT><FONT COLOR="#000000">= </FONT><FONT COLOR="#000080">##class</FONT><FONT COLOR="#000000">(</FONT><FONT COLOR="#008080">%SQL.Statement</FONT><FONT COLOR="#000000">).</FONT><FONT COLOR="#0000ff">%New</FONT><FONT COLOR="#000000">()   </FONT><FONT COLOR="#0000ff">$$$ThrowOnError</FONT><FONT COLOR="#000000">(</FONT><FONT COLOR="#800000">st</FONT><FONT COLOR="#000000">.</FONT><FONT COLOR="#0000ff">%Prepare</FONT><FONT COLOR="#000000">(</FONT><FONT COLOR="#800000">sql</FONT><FONT COLOR="#000000">))   </FONT><FONT COLOR="#0000ff">s </FONT><FONT COLOR="#800000">rs </FONT><FONT COLOR="#000000">= </FONT><FONT COLOR="#800000">st</FONT><FONT COLOR="#000000">.</FONT><FONT COLOR="#0000ff">%Execute</FONT><FONT COLOR="#000000">()   </FONT><FONT COLOR="#0000ff">w </FONT><FONT COLOR="#000000">!,</FONT><FONT COLOR="#008000">"---"</FONT><FONT COLOR="#000000">,!,</FONT><FONT COLOR="#800000">rs</FONT><FONT COLOR="#000000">.</FONT><FONT COLOR="#0000ff">%SQLCODE      </FONT><FONT COLOR="#800080">&sql(</FONT><FONT COLOR="#0000ff">select </FONT><FONT COLOR="#000080"> from </FONT><FONT COLOR="#000000">(</FONT><FONT COLOR="#0000ff">select </FONT><FONT COLOR="#000000">0 </FONT><FONT COLOR="#008000">field </FONT><FONT COLOR="#000080">union </FONT><FONT COLOR="#0000ff">select </FONT><FONT COLOR="#000000">1) </FONT><FONT COLOR="#000080">where </FONT><FONT COLOR="#000000">0=1</FONT><FONT COLOR="#800080">)   </FONT><FONT COLOR="#0000ff">w </FONT><FONT COLOR="#000000">!,</FONT><FONT COLOR="#008000">"---"</FONT><FONT COLOR="#000000">,!,</FONT><FONT COLOR="#800000">SQLCODE

</FONT><FONT COLOR="#800080">}</FONT><FONT COLOR="#0000ff">catch</FONT><FONT COLOR="#000000">(</FONT><FONT COLOR="#800000">ex</FONT><FONT COLOR="#000000">)</FONT><FONT COLOR="#800080">{   </FONT><FONT COLOR="#0000ff">w </FONT><FONT COLOR="#008000">"Error "</FONT><FONT COLOR="#000000">, </FONT><FONT COLOR="#800000">ex</FONT><FONT COLOR="#000000">.</FONT><FONT COLOR="#0000ff">DisplayString</FONT><FONT COLOR="#000000">(),! </FONT><FONT COLOR="#800080">}</FONT>

Output: 0

0

100

Quote from the documentation:
When retrieving results, first check for successful execution by examining %SQLCODE. For many statement types, success/failure is all that is needed. The %SQLCODE property contains the SQL error code value. Successful completion values are 0 (successful completion) and 100 (the operation has either found no data or reached the end of the data).proof
Vitaliy Serdtsev · Apr 5, 2022 go to post

My choice of a comparison tool was determined by the OS on which Studio is running. But you are free to choose something more platform-independent, such as Java or Qt.

By the way, SQL Data Lens (written in Java) already has the ability to view and upload sources to a file. It would be nice to add integration with a third-party tool for comparing items (by analogy with Studio).

I hope @Andreas Schneider will read this wish.

Vitaliy Serdtsev · Apr 5, 2022 go to post

Can we find out what you need it for?

See Collation

Example:

<FONT COLOR="#0000ff">s </FONT><FONT COLOR="#800000">sub1</FONT><FONT COLOR="#000000">=</FONT><FONT COLOR="#000080">##class</FONT><FONT COLOR="#000000">(</FONT><FONT COLOR="#008080">%Collation</FONT><FONT COLOR="#000000">).</FONT><FONT COLOR="#0000ff">SqlString</FONT><FONT COLOR="#000000">(111),
 </FONT><FONT COLOR="#800000">sub2</FONT><FONT COLOR="#000000">=</FONT><FONT COLOR="#0000ff">$system</FONT><FONT COLOR="#008080">.Util</FONT><FONT COLOR="#000000">.</FONT><FONT COLOR="#0000ff">Collation</FONT><FONT COLOR="#000000">(444,8)
     
</FONT><FONT COLOR="#0000ff">k </FONT><FONT COLOR="#800000">t
</FONT><FONT COLOR="#0000ff">s </FONT><FONT COLOR="#800000">t</FONT><FONT COLOR="#000000">(</FONT><FONT COLOR="#800000">sub1</FONT><FONT COLOR="#000000">,</FONT><FONT COLOR="#800000">sub2</FONT><FONT COLOR="#000000">)=</FONT><FONT COLOR="#008000">""
</FONT><FONT COLOR="#0000ff">s </FONT><FONT COLOR="#800000">t</FONT><FONT COLOR="#000000">(</FONT><FONT COLOR="#800000">sub2</FONT><FONT COLOR="#000000">,</FONT><FONT COLOR="#800000">sub1</FONT><FONT COLOR="#000000">)=</FONT><FONT COLOR="#008000">""
</FONT><FONT COLOR="#0000ff">zw </FONT><FONT COLOR="#800000">t</FONT>

Output:

t(" 111"," 444")=""
t(" 444"," 111")=""
Vitaliy Serdtsev · Apr 5, 2022 go to post
This Compare only works when working with the studio, correct?
Yes, Studio does the following:
  1. uploads the first source code to a temporary directory (for example c:\windows\temp)
  2. uploads the second source code to a temporary directory
  3. starts WinMerge by passing in the command line links to previously uploaded files: WinMerge Command line

You can do all this yourself from a batch file. In this case, you can compare items not only in different databases, but also on different servers.

Vitaliy Serdtsev · Apr 5, 2022 go to post

Most of the above is true for WinMerge, with one exception - WinMerge is free. WinMerge has plugins for comparing images, PDF, Word, Visio, Excel, PowerPoint, etc.

Vitaliy Serdtsev · Mar 17, 2022 go to post

You can use Caché SQL Gateway (Link Table via JDBC or ODBC) This, your data migration query will be of the form:

<FONT COLOR="#0000ff">insert </FONT><FONT COLOR="#000080">into </FONT><FONT COLOR="#008000">mssql</FONT><FONT COLOR="#000000">.</FONT><FONT COLOR="#008000">table</FONT><FONT COLOR="#000000">(</FONT><FONT COLOR="#008000">field1</FONT><FONT COLOR="#000000">,..,</FONT><FONT COLOR="#008000">fieldN</FONT><FONT COLOR="#000000">) </FONT><FONT COLOR="#0000ff">select </FONT><FONT COLOR="#008000">field1</FONT><FONT COLOR="#000000">,..,</FONT><FONT COLOR="#008000">fieldN </FONT><FONT COLOR="#000080">from </FONT><FONT COLOR="#008000">cache</FONT><FONT COLOR="#000000">.</FONT><FONT COLOR="#008000">table</FONT>

Or use third-party utilities to migrate data from/to any DBMS via JDBC/ODBC, for example SQL Data Lens (aka Caché Monitor): Local query cloud (there is a video)

Also there the Bulk Export

@Andreas Schneider - the author of this tools

Vitaliy Serdtsev · Mar 7, 2022 go to post

size = 31

<FONT COLOR="#000080">ClassMethod </FONT><FONT COLOR="#000000">Validate(</FONT><FONT COLOR="#ff00ff">s </FONT><FONT COLOR="#000080">As %String</FONT><FONT COLOR="#000000">) </FONT><FONT COLOR="#000080">As %Boolean
</FONT><FONT COLOR="#000000">{
 </FONT><FONT COLOR="#0000ff">q $MATCH</FONT><FONT COLOR="#000000">(</FONT><FONT COLOR="#800000">s</FONT><FONT COLOR="#000000">,</FONT><FONT COLOR="#008000">"[1-3].*[A-CRS]"</FONT><FONT COLOR="#000000">)
}</FONT>
Vitaliy Serdtsev · Mar 7, 2022 go to post

size = 30

<FONT COLOR="#000080">ClassMethod </FONT><FONT COLOR="#000000">Validate(</FONT><FONT COLOR="#ff00ff">s </FONT><FONT COLOR="#000080">As %String</FONT><FONT COLOR="#000000">) </FONT><FONT COLOR="#000080">As %Boolean
</FONT><FONT COLOR="#000000">{
 </FONT><FONT COLOR="#0000ff">q </FONT><FONT COLOR="#008000">"ABCRS"</FONT><FONT COLOR="#000000">[</FONT><FONT COLOR="#0000ff">$e</FONT><FONT COLOR="#000000">(</FONT><FONT COLOR="#800000">s</FONT><FONT COLOR="#000000">,*)*123[</FONT><FONT COLOR="#0000ff">$e</FONT><FONT COLOR="#000000">(</FONT><FONT COLOR="#800000">s</FONT><FONT COLOR="#000000">)
}</FONT>
Vitaliy Serdtsev · Mar 4, 2022 go to post

It is worth mentioning that the "DATEDIFF" function does not always calculation as expected, eg:

><FONT COLOR="#0000ff">w $system</FONT><FONT COLOR="#008080">.SQL</FONT><FONT COLOR="#000000">.</FONT><FONT COLOR="#0000ff">DATEDIFF</FONT><FONT COLOR="#000000">(</FONT><FONT COLOR="#008000">"yy"</FONT><FONT COLOR="#000000">,</FONT><FONT COLOR="#0000ff">$zdh</FONT><FONT COLOR="#000000">(</FONT><FONT COLOR="#008000">"31.12.2022"</FONT><FONT COLOR="#000000">), </FONT><FONT COLOR="#0000ff">$zdh</FONT><FONT COLOR="#000000">(</FONT><FONT COLOR="#008000">"01.01.2023"</FONT><FONT COLOR="#000000">))</FONT>
1

<FONT COLOR="#0000ff">w $system</FONT><FONT COLOR="#008080">.SQL</FONT><FONT COLOR="#000000">.</FONT><FONT COLOR="#0000ff">DATEDIFF</FONT><FONT COLOR="#000000">(</FONT><FONT COLOR="#008000">"mm"</FONT><FONT COLOR="#000000">,</FONT><FONT COLOR="#0000ff">$zdh</FONT><FONT COLOR="#000000">(</FONT><FONT COLOR="#008000">"31.12.2022"</FONT><FONT COLOR="#000000">), </FONT><FONT COLOR="#0000ff">$zdh</FONT><FONT COLOR="#000000">(</FONT><FONT COLOR="#008000">"01.01.2023"</FONT><FONT COLOR="#000000">))</FONT> 1

This is stated in the documentation for SQL DATEDIFF
Vitaliy Serdtsev · Mar 4, 2022 go to post
You might find it interesting to download the Community Edition <..> and see if the bugs you reported are still present there or not. What do you think about that approach?

<..> we still create an SU version of Caché <..> because some of our large partners/APs rely on it for people to learn on <..>

I have already written that, as well as your large partners/APs who prefer to stay on Caché, IRIS does not interest me in this case. Why would I check something that I won't be using in the foreseeable future, even if there are fixes there?

And yes, for the sake of hobby, I have been using IRIS CE for a long time.

Vitaliy Serdtsev · Mar 4, 2022 go to post

Hi Jeffrey.

By far the vast majority of users that want Caché are existing customers - so you can get this easily through the WRC.
I have indicated why I already can't get Caché now, even the SU version:
<..>, until the technical support ended. <..> in future versions of Caché, which I can no longer check.
Vitaliy Serdtsev · Mar 3, 2022 go to post
you could download the Community Edition of InterSystems IRIS and just install Studio from that if you wish
That's exactly what I'm doing now. But agree, downloading hundreds of megabytes for the sake of Studio and drivers is inefficient.
Also, is there a reason you want the SingleUser version of Caché rather than the InterSystems IRIS Community Edition
IRIS does not interest me in this case. Over the years I have "tormented" WRC about the bugs I found in Caché (in some way I acted as a free beta tester), until the technical support ended. Some fixes at that time were included only in future versions of Caché , which I can no longer check. I would be interested to check out these fixes on the free version.

Maybe there are other reasons why there is still a single-user version of Caché, especially only for those who already have a full-featured version, but for me they are not obvious.

Vitaliy Serdtsev · Mar 3, 2022 go to post

Do I understand correctly that Caché Evaluation and IRIS Studio (full kit) are only available through WRC, which is not available to everyone, but only for supported customers? It seemed to me that these products are designed for everyone. By the way, the same goes for ODBC, JDBC and CSPGateway.

Vitaliy Serdtsev · Feb 9, 2022 go to post

I decided to check the size of the code using an officially allowed method.

ClassMethod length(
  class = {$classname()},
  method "Solve"As %Integer CodeMode = expression ]
{
##class(%Dictionary.MethodDefinition).IDKEYOpen(classmethod).Implementation.Size
}

So,

size = 46 (43)

ClassMethod Solve(As %StringAs %Integer
{
 f  s c=$p(o,",",$i(i)) q:'$lf($lfs(o),-c) c}

size = 48 (45)

ClassMethod Solve(As %StringAs %Integer
{
 f  s c=$p(o,",",$i(i)) ret:'$lf($lfs(o),-cc
}