Hi!

You need first convert the formatted date and time string to a standard timestamp. Unfortunately, the built-in TO_TIMESTAMP function is not suitable for your case.
Next, you need determine whether the time zone will be taken into account or not.

For tests, you can use https://www.timestamp-converter.com / (ISO 8601 section).

Here is a small example:

Class dc.test Extends %RegisteredObject
{

ClassMethod ISO2TS(
  strISO As %String,
  withTZ As %Boolean 0As %TimeStamp SqlProc ]
{
  tsUTC=##class(%TimeStamp).XSDToLogical(strISO)
  q $s(withTZ:##class(%UTC).ConvertUTCtoLocal(tsUTC),1:tsUTC)
}

ClassMethod Test()
{
   s="2024-06-23T06:03:00Z","2024-06-23T06:03:00-02:45" {
     iso=s,
       utc=##class(%TimeStamp).XSDToLogical(iso),
       tz=##class(%UTC).ConvertUTCtoLocal(utc)

     w $$$FormatText("ISO 8601 = %2%1Date Time (UTC) = %3%1Date Time (your time zone) = %4%1",$$$NL,iso,utc,tz),!
   }
}

}

Result (for me):

USER>##class(dc.test).Test()
ISO 8601 = 2024-06-23T06:03:00Z
Date Time (UTC) = 2024-06-23 06:03:00
Date Time (your time zone) = 2024-06-23 09:03:00.000
 
ISO 8601 = 2024-06-23T06:03:00-02:45
Date Time (UTC) = 2024-06-23 08:48:00
Date Time (your time zone) = 2024-06-23 11:48:00.000

Using via SQL:

SELECT
  YEAR(ts"YEAR",
  MONTH(ts"MONTH",
  DAY(ts"DAY",
  {fn HOUR(ts)} "HOUR",
  {fn MINUTE(ts)} "MINUTE",
  {fn SECOND(ts)} "SECOND"
FROM (SELECT dc.test_ISO2TS('2024-06-23T06:03:00Z',0) ts)
 
Try this example
How would you like to solve it, using ObjectScript?
 
For example, like this:

We have our own challenge with very specific conditions and goals: #Code Golf
And what is the purpose of your challenge, I do not quite understand: speed, code size, etc? Rewriting the code in ObjectScript is too simple and not interesting.

 
esthetic()

Try this:

ClassMethod GetTreeInfo(
  pRoot As %String,
  Output pTree,
  ByRef pParmsAs %Status
{
  Set MyId=..GetId,pos=1
  &Sql(Select Name,ID into :name,:id from MSDS_COM.Loc where Parent=:MyId)
  Set:SQLCODE (name,id)=""
  if pRoot=""
  {
    Set pTree(0,"ch",1) = ""
    Set pTree(1) = $LB(name,id,1,"","")
  }
  Quit $$$OK
}

For further examples, see the class ZENTest.DynaTreeTest in the SAMPLES namespace.

Through %ZEN.proxyObject is unlikely to work, since the q parameter cannot be disabled in this case

q - output numeric values unquoted even when they come from a non-numeric property

Use your own class, for example:

Class dc.proxyObject Extends %RegisteredObject
{

Property ID As %VarString;

}
set object ##class(dc.proxyObject).%New()
set object.ID = 123456

set ##class(%ZEN.Auxiliary.jsonProvider).%WriteJSONStreamFromObject(.json,object,,,,"aelotw")

Output:

{
  "ID":"123456"
}

I do not observe any differences in the behavior of xDBC and Portal.

Given:

Class dc.test Extends %Persistent
{

Property s1 As %String(MAXLEN 2TRUNCATE 1);

Property s2 As %String(MAXLEN 2);
}
  • insert into dc.test(s1,s2)values('abc','ab')
    Result
    ID s1 s2
    1 ab ab
  • insert into dc.test(s1,s2)values('abc','abc')

    Result for any JDBC/ODBC tools (DBVisualizer, SQL Data Lens, etc.):

    [SQLCODE: <-104>:<Field validation failed in INSERT>]
    <Field 'dc.test.s2' Truncation (Varchar Value: 'abc ...' Length: 3) > maxlen:  (2)>]

    Result for Management Portal:

    [SQLCODE: <-104>:<Field validation failed in INSERT>]
    
      [%msg: <Field 'dc.test.s2' (value 'abc') failed validation>]

Check your TRUNCATE parameter.

Common Parameters:TRUNCATE
TRUNCATE — Specifies whether to truncate the string to MAXLEN characters, where 1 is TRUE and 0 is FALSE. This parameter is used by the Normalize() and IsValid() methods but is not used by database drivers.

Class dc.test Extends %Persistent
{

Property s1 As %String(TRUNCATE 1);

Property s2 As %String;

ClassMethod Test()
{
  ..%KillExtent(,$$$YES)

   t=..%New()
   t.s1=$tr($j("",51)," ","a")
   sc=t.%Save()
   "s1: ",$s($$$ISERR(sc):$system.Status.GetErrorText(sc),1:"OK"),!

   t=..%New()
   t.s2=$tr($j("",51)," ","a")
   sc=t.%Save()
   "s2: ",$s($$$ISERR(sc):$system.Status.GetErrorText(sc),1:"OK"),!
}

}

USER>##class(dc.test).Test()
s1: OK
s2: ERROR #7201: Datatype value 'aaaa..aa' length longer than MAXLEN allowed of 50
    > ERROR #5802: Datatype validation failed on property 'dc.test:s2', with value equal to "aaaa..aa"

The same error occurs in the Management Portal.

I noticed that you are using the {Stream} syntax, which is typical for trigger code or calculated field.
Could you check the following code at your place:

Class dc.test Extends %Persistent
{

Property stream As %GlobalCharacterStream;

Trigger NewTrigger1 [ Event = INSERT ]
{
 i $IsObject({stream}{
   t={stream}
   ^||tmp=t.Size
 }
}

ClassMethod Test()
{
  ..%KillExtent(,$$$YES)
  
  f=##class(%Stream.FileBinary).%New()
  f.LinkToFile("C:\test.jpg")
  
  &sql(insert into dc.test(streamvalues(:f))
  'SQLCODE {
    &sql(select CHAR_LENGTH(streaminto :len from dc.test where %id=1)
    len," ",^||tmp,!
  }
}

}

I have saved a 16 MB file without any problems:

USER>##class(dc.test).Test()
16446809 16446809