Hello @Pietro Montorfano 

You can try to write your own export method.
Using %Library.RoutineIndex looks good.  Example to export all ".MAC" :

set tRes = ##class(%SQL.Statement).%ExecDirect(.tStmt,"select name||'.'||type as itemName  from %Library.RoutineIndex where type = ? and $Extract(name,1) <> '%'","MAC")
While tRes.%Next() {
	Do $SYSTEM.OBJ.ExportUDL(tRes.%Get("itemName"),"<dir>/"_tRes.%Get("itemName"))
}

For adding a member, this is the IP of the first member (primary).  It's correct.
No matter the virtual IP, it's the role of the arbiter\agent to communicate who is primary in case of a switch.  

However, a virtual IP is convenient for access to your applications.

For example, with web applications: If the system switches from node A to node B, it is more convenient to use a virtual IP address.  You can use this in your web server configuration so that it always points to the primary node.

Thank you for this very interesting post @Stefan Cronje 

You're right, for example, there are packages today useless because IRIS now provides features.

I have a package which I think should be deleted (to discuss with admin).

About OpenAPI-Suite, I use a lot of dependencies with packages owned by myself or not to avoid code duplication (for this development I make a pull request to an existing package)

A first clean, could be not shown in OpenExchange these dependencies: openapi-client-gen, openapi-server-gen, openapi-common-lib, swagger-validator-cli, swagger-converter-cli.  It's useless, peoples need the complete solution, not the dependencies.

If we create a larger community package on the "REST" topic, of course, I will contribute to the integration.

Hi Pedro,

In addition to the reply of @Cristiano Silva ,  you can use %Dictionary.CompiledClass instead of PropertyDefinition to retrieve also properties in parents classes.

There is a query available : 

select *
from %Dictionary.CompiledClassQuery_MemberSummary('class.name','a')

See class reference

query MemberSummary(classname As %String, kind As %String)
Selects Name As %String(MAXLEN=256)

Return a list of members of this specific kind which is one of the following:

  • a - Property
  • f - Foreign key
  • i - Index
  • j - Projection
  • m - Method
  • n - Constraint
  • o - System method
  • p - Parameter
  • q - Query
  • s - Storage defintion
  • t - Trigger
  • u - Comment text block
  • x - XData

Hi @Stefan Cronje ,

Indeed the repository template used for this development uses it.
If you have an instance with IPM (ZPM), you can install openapi-suite just with : 

zpm "install openapi-suite"
; and optionally swagger-ui
zpm "install swagger-ui"

All dependencies will be automatically installed.

It needs a namespace with Ensemble enabled.  You can easily enable Ensemble on a namespace just like that : 

Do ##class(%Library.EnsembleMgr).EnableNamespace($Namespace, 1)

Haha Thank you @Guillaume Rongier 

Roughly 2 years ago I worked on a client generator for specification 2.0 because the server-side generator (^%REST) support 2.0 only.
I was expecting a support V 3.0 for ^%REST, but I wasn't sure InterSystems had planned this development.

So, I decided to develop a "Suite" with client, production and REST server generator for version 3.

Thank you for your praise about UI, to be honest, today, it's just a simple CSP using Bootstrap , I would like to develop a more advanced interface using Angular, but not possible for the contest timing.  I have a few ideas, but that will come later.