Eduard Lebedyuk · Jun 26, 2019 go to post

Are you sure about:

Property PatientId As %Stream.FileCharacter;
Property PatientName As %Stream.FileCharacter;

Both of these fields are less than 3 641 144 characters in size, so

Property PatientId As %VarString;
Property PatientName As %VarString;

Would probably work.

You can add ToStream() method to your class to provide serialization, if you need to (Or just add JSON or XML adaptors to generate XML or JSON (de)serializations automatically).

Eduard Lebedyuk · Jun 25, 2019 go to post

What do you mean not getting called?

Is the child process created (check with $zchild/$test)?

Does it start work (set some global in the beginning)?

Eduard Lebedyuk · Jun 21, 2019 go to post

FOR CE ONLY.

I recommend creating non-production namespace with one database and calling

set sc = ##class(%EnsembleMgr).EnableNamespace(namespace, 1)
Eduard Lebedyuk · Jun 21, 2019 go to post

You mean these categories?

Fell free to use them as extensively as you want. There's absolutely no effect on performance.

Eduard Lebedyuk · Jun 19, 2019 go to post

I need to run Ensemble Service with special environment variables set, so it's current process for me.

Eduard Lebedyuk · Jun 17, 2019 go to post

You can use Apache POI library (or call PS, but cursory googling shows that Word is a requirement via COM objects) for example to get this information. As for how explorer gets doc info - I have honestly no idea.

Eduard Lebedyuk · Jun 14, 2019 go to post

It's not a file property. Docx is just a zip archive, inside it is docProps/app.xml file. Here's how it looks like:

<?xml version="1.0" encoding="UTF-8" standalone="yes"?>
<Properties>
    <TotalTime>4</TotalTime>
    <Pages>8</Pages>
    <Words>1882</Words>
    <Characters>10731</Characters>
    <Application>Microsoft Office Word</Application>
    <Lines>89</Lines>
    <Paragraphs>25</Paragraphs>
    <CharactersWithSpaces>12588</CharactersWithSpaces>
</Properties>

Explorer reads the app.xml file and gets information from it.

You can do the same I suppose, here's an article on that.

In your case you don't want to unpack the whole docx, check this unzip implementation for ObjectScript.

Eduard Lebedyuk · Jun 13, 2019 go to post

Fastest (and in non-prod environments easiest) way to save every global would be:

  1. Dismount the database
  2. Copy CACHE.dat
  3. Mount the database
Eduard Lebedyuk · Jun 13, 2019 go to post

Docker for windows allows switching between Linux containers and native Windows containers; if you want to use Linux containers (i.e. IRIS), make sure you enabled that mode

See this section in the documentation.

Eduard Lebedyuk · Jun 12, 2019 go to post

Looks like a locale problem.

Add to the beginning of the script:

import locale
locale.setlocale(locale.LC_ALL, 'en_US.utf8')
Eduard Lebedyuk · Jun 11, 2019 go to post

You need to check access to table.

Try

write $SYSTEM.SQL.CheckPriv($username,"1,<TABLE>","a")

Replace <Table> with your table.

Eduard Lebedyuk · Jun 10, 2019 go to post

Check Purge method of Ens.MessageHeader class for example. Here's how it determines cast-off date:

set %tDoNotDeleteDate = $$$timeUTCHtoUTC($s($ztimezone'<0:($H-pDaysToKeep+1)_","_($ztimezone*60),1:($H-pDaysToKeep)_","_($ztimezone*60+86400)))

So 24 hours.

Eduard Lebedyuk · Jun 10, 2019 go to post

How do I search?

Tried:

https://github.com/search?q=language%3Aobjectscript&type=Code

but it yielded zero results.

Eduard Lebedyuk · Jun 7, 2019 go to post

1. Modern editors color variable based on scope. p/t in the beginning is unnecessary.

7. I mean if you develop an API all methods should accept either primitives or ByRefs or json. Not object arguments in one method, primitives in another, etc.

8. If you return %Status always return it. If you return $this always return self.

9. If your class has several instance methods and each has, let's say "debug" argument, remove this argument from methods and add "debug" as a class property.

Eduard Lebedyuk · Jun 7, 2019 go to post

Check this article on iterating dynamic object.

Instead of just displaying the fields you can use %Dictionary package to generate corresponding class.

After that use new %JSON.Adaptor class (or old   %ZEN.Auxiliary.jsonProvider class) to parse JSON into objects.