Robert Cemper · Sep 14, 2023 go to post

You can see 2 examples of the adoption of orphaned  OEX packages here:
Besides the pure bug fixes, I applied some other enhancements for comfort

  • pointer to the orphaned predecessor
  • fixed Dockerfile to be version-independent
  • fixed pending mapping of SuperServer
  • added support for IPM
  • added installation guide
  • added quality tag
  • added demo server
  • added screenshots
  • enhanced README

Case #1) https://openexchange.intersystems.com/package/JSONExportManyToMany
GitHub:  https://github.com/rcemper/JSONExport-ManyToMany-AD

Case #2) https://openexchange.intersystems.com/package/Samples-FHIR-Oximeter-Devices
GitHub:  https://github.com/rcemper/Samples-FHIR-Oximeter-Devices-AD
The packages on OEX are still pending for approval and not public yet.

Robert Cemper · Sep 9, 2023 go to post

Today I had to process a rather sad exercise. 😢

For about 15 recognized packages in OEX I had to cancel my previous reviews
because the packages were broken. 
They could have been fixéd easily as there were PRs ready.
But for more than 3 months these fixes were just ignored by their owners.
On top of it:
A significant part of them was highly awarded in previous contests

I'm deeply disappointed, as the Quality of Packages in OEX was a personal focus.
However, I have to accept that quality has lost importance also in this
narrow section of my life.

😞

Robert Cemper · Sep 5, 2023 go to post

Thank you @John Murray !
As I haven't been forced to use VCS up to now I leave the check to someone more experienced.
I use personally WebTerminal just for access to the Demo Server.
So I have no direct pain. It's more a warning

Robert Cemper · Sep 5, 2023 go to post
  1. SMP > System Operation > Databases shows the size o your DB   8192 is the default
    you have to match te blocksize of your backup source
  2. /usr/lib/iris/mgr/ is IRISSYS or the HS equivalent
    a direct restore may destroy your running installation.
    restore it in a parallel DB and import only uncritical parts.
  3. in SMP > System Adnin > Config > Sys Config > Local DB 
    you can set the Blocksize of the DB before creation:
    Blocksize might be hardwired in Community Distribution 
Robert Cemper · Sep 5, 2023 go to post

cross check in ObjectScript

set d="/dev/nul"  open d use d read xx close d zwrite xx
xx=""

QAD

Robert Cemper · Sep 5, 2023 go to post

Investigating WebTerminal.core shows a top-quality redirect construct
designed specifically for ObjectScript.
I doubt that Embedded Py is able to make use of it.

Robert Cemper · Sep 5, 2023 go to post

I think I found the deeper cause of the problem.
In WebTeminal both $P and $I point to  a /nul device
Standard input from a NUL device is a NUL_string in any programming language I know
As you can see this is happening here;

I assume this is a design issue of WebTerminal and a mismatch with Embedded Py
 

Robert Cemper · Aug 29, 2023 go to post

I like it!
I wonder if this would work also for Horse Races or Roulette or BlackJack or Baccarat.

Robert Cemper · Aug 29, 2023 go to post

The variable can't be the problem
BUT the typical default structure is /iris/sys/<instance name>/mgr/<namespace>

Robert Cemper · Aug 28, 2023 go to post

The "L" in your Open makes me nervous.
From the description, it seems to hang and wait for unlock not In IRIS but at OS-FileSystem Level.
The description of "L" seems to give some chance for such a conflict. 

L   Locked Exclusive: Use this mode with the “W” (Write) mode to specify exclusive write access to a file. “WL” or “WRL” specifies that the current process has exclusive write access to the file. A file opened with “RL” may still have shared read access. The effects of the “L” mode on concurrent opens are different in Windows and UNIX®. Refer to the “OPEN Mode Locking” section, below, for further details. On UNIX® systems if one process specifies “WL” (or “WRL”) access to a file, other processes requesting read access to that file must specify “RL” so that UNIX® can coordinate file locking.

suggested testing:

  • Check the situation without "L"
  • If there is a difference: find out who else may lock at OS level  
Robert Cemper · Aug 26, 2023 go to post

Hi @Lorenzo Scalese 
I guess you are looking for class(%Utility).FormatString()

USER>set lb=$lb(1,"Lorenzo",2023,"RCC"_$c(13,10))
USER>write lb
      LorenzoçRCC
 
USER>zzdump lb
0000: 03 04 01 09 01 4C 6F 72 65 6E 7A 6F 04 04 E7 07         .....Lorenzo..ç.
0010: 07 01 52 43 43 0D 0A                                    ..RCC..
;;;;;  this is it
USER>set viewlb=##class(%Utility).FormatString(lb)
 
USER>write viewlb
$lb(1,"Lorenzo",2023,"RCC"_$c(13,10))
USER>zwrite viewlb
viewlb="$lb(1,""Lorenzo"",2023,""RCC""_$c(13,10))"
Robert Cemper · Aug 26, 2023 go to post

Objectscript uses double quotes for strings.
Single quote is Negation 
 'Sample Data  looks for variable  Sample >>> NOT Sample

Robert Cemper · Aug 25, 2023 go to post

Totally correct.
This is what the example describes:
and the consequence is that you have to spin through ALL GetOrgUpdatesResponse objects
A less impressive design.
So you need to add an index on the ELEMENTS of your  Property Organizations
to find all affected objects.
some example of how to

Robert Cemper · Aug 24, 2023 go to post

in this case store it in  +$HOROLOG format as explained
and leave the conversion to   YYYY-MM-DDT00:00:00Z  to output
using

  • $system.SQL.TOCHAR(+$h,"YYYY-MM-dd")_"T00:00:00Z" or
  • $zd(+$h,3)_"T00:00:00Z"

+$h stands for your property DOB as %Date

Robert Cemper · Aug 23, 2023 go to post

Your transformation produces  a YYYY-MM-DD HH:mm:SS string
in contradiction 
Property DOB As %Date;   expects an Integer similar to +$h 
The error is reported during Validation before %Save() of  your record

  • either you change  Property DOB As %String;
  • or use '$zdateh(source.DOB,7,,,,,,,,"")'   then ##class(%Date).IsValid(...)  is happy
Robert Cemper · Aug 18, 2023 go to post
/// example of an extra light output to CSV 
Class dc.SQLExport Extends %CSP.Page
{
ClassMethod content() As %Status
{
  set sep=";"
  set sqlStatement="SELECT ...... FROM ....."
    ,query = ##class(%ResultSet).%New()
    ,sc = query.Prepare(sqlStatement)
  set:sc sc=query.Execute()
  quit:'sc sc
  set cols=query.GetColumnCount()
  for col=1:1:cols { if col>1 write sep
    write query.GetColumnHeader(col)
  }
  write !
  while query.Next() {
    for col=1:1:cols { if col>1 write sep
      write query.GetData(col)
    }
    write !
  }
  quit $$$OK
}
/// filename should end with ".csv"
ClassMethod toFile(filename As %String) As %Status
{
  open filename:"WNS":1 
  else   quit $system.Status.Error(5005,filename)
  use filename
  set sc=..content()
  close filename 
  quit sc
}
}
Robert Cemper · Aug 16, 2023 go to post

add this line to your method OnPreHTTP()

 set %response.Headers("Content-Disposition")="attachment; filename=""your-file-name.some"""
Robert Cemper · Aug 15, 2023 go to post

good point:
there are only  17 rules referring to BUGS:

In total the quality check shows 106 rules

So there is more and I personally deeply disagree with some of them

Robert Cemper · Aug 15, 2023 go to post

Not a ready-to-use solution, but a way to take

  1. export the global by SMP or embed %system.OBJ.Export to create *.XML file
  2. download it using <a href="~file_location~" download> explanation