Eduard Lebedyuk · Jun 29, 2019 go to post

It sets object id directly instead of setting oref.

Consider these 2 classes:

Class Person Extents %Persistent {

Property EmployedAt As Company;

}


Class Company Extends %Persistent {

}

Usually you assign Company to Person this way:

set person = ##class(Person).%New()
set companyId = 123
set company = ##class(Company).%OpenId(companyId)
set person.EmployedAt = company

But with PropertySetObjectId you can expedite things

set person = ##class(Person).%New()
set companyId = 123
do person.EmployedAtSetObjectId(companyId)

The main advantage is that company object doesn't have to be opened.

Eduard Lebedyuk · Jun 29, 2019 go to post

That's explicit if you code it.

By default PropertyGet()  method exists, but hidden - it's an implicit getter.

Getters defined via SQLComputeCode work for both SQL and objects iirc.

Eduard Lebedyuk · Jun 29, 2019 go to post

Is it Xades?

I've done Xades signing, but not with RSA algorithms. Still, might be useful for you. Drop me your GitHub username if you need the code.

To add Xades support I used a reference implementation in .Net - read the Xades docs on how it's supposed to work, then decompiled .Net libraries to see how it all actually works, and recreated it in ObjectScript.

Eduard Lebedyuk · Jun 27, 2019 go to post

This is possible:

Class MyClass As %Persistent {

Method SaveToNs(Namespace = {$namespace}) As %Status
{
  new $namespace = ""
  set $namespace = Namespace
  quit:'##class(%Dictionary.CompiledClass).%ExistsId(..%ClassName(1)) $$$ERROR($$$GeneralError, "Class is undefined in: " _ Namespace)
  set sc = ..%Save()
  quit sc

}

}
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.