Yes, there is, at least "everything" IRIS is aware of, so some item maybe missing but can be added.

In SMP, Iteroperability -> List -> Productions, select the production and click "Export" button.

Or, open production configuration, production settings, actions, Export button.

All production items are selected and you can manually add additional classes/components like search tables, custom schema, deployable system default settings, data transformations, etc.

Then, when you deploy your production you can also create a rollback file, in case you want to rollback, see:

https://docs.intersystems.com/irisforhealth20222/csp/docbook/DocBook.UI....

Enrico

Personally I'd rather use a default numeric ID and if needed an additional UUID/GUID unique property.

To implement what you asked you can use something like:

Class My.TestClass Extends %Persistent
{
Property PrimaryUUID As %String [ InitialExpression = {$system.Util.CreateGUID()} ];
Property MyOtherData As %String;

Index PrimaryUUIDIndex On PrimaryUUID [ IdKey, Unique ];
}

In this way the primary key (PrimaryUUID) is automatically assigned, no need to set it manually, in SQL is mapped as ID (as well as PrimaryUUID).

Enrico

I would  send the message to a Business Operation and set state as deferred, then "later" (when? what trigger? from where?) using some logic, choose the message(es) and send response to that BO from somewhere (Business Service? Any other Business Host? ...to little info to know) to continue the process.

Not enough info to elaborate it further.

Enrico

I don't think is possible, ANY IRIS.DAT can be mounted and named as desired when mounted (configured) in an IRIS instance.

If the database is mounted, then it's possible to find out the name and path of the IRIS.DAT that correspond to a mounted database: System Management Portal -> System Operations - Databases, there you have the list of configured databases with name and corresponding path.

If you have a "spare" unmounted/unconfigured database then you can mount it (add it to the IRIS configuration) and check the content and see what it contains to understand what was used for.

Enrico

Often SqlComputed is used for properties that are also calculated like:

Property TestCalc As %String [ Calculated, SqlComputeCode = { Set {*} = ..#TestParam }, SqlComputed ];

but in that case ..#ParamName does not work, this works:

Property TestCalc As %String [ Calculated, SqlComputeCode = { Set {*} = ##class(test.CalcParm).#TestParam }, SqlComputed ];

Enrico