upgrade to 2016.2

What is the reason of this step?

This is a first version with Frozen Plans. If this feature is not needed then upgrade to 2018.1 directly (provided OS compatibility - you're absolutely right about it).

Cache 2017.2 (our App's supported version) turned to be incompatible with Ubuntu 18, which was chosen as on OS for IRIS.

What's the official way to upgrade in that case? I usually just power down an instance, remove it from autostart, upgrade OS to the version supported by a new release, upgrade instance to a new version.

This way Cache/IRIS never runs on unsupported OS. Do you have a case with WRC on this topic?

Get 0th array element from your array:

Class test.Provider Extends (%RegisteredObject, %JSON.Adaptor)
{

Property physicianFirstName As %String;

Property physicianLastName As %String;

Property physicianMiddleNameInitial As %String;

Property physicianSpecialty As %String;

Property physicianNPI As %String;

Property physicianMPIN As %String;

Property physicianTaxID As %String;

Property physicianADRId As %String;

Property physicianAddressLine1 As %String;

Property physicianCity As %String;

Property physicianState As %String;

Property physicianZip As %String;

Property physicianZipPlus4 As %String;

Property physicianPhone As %String;

Property facilityNPI As %String;

Property facilityAddressLine1 As %String;

Property facilityCity As %String;

Property facilityState As %String;

Property facilityZip As %String;

Property error As %String(MAXLEN = 200);

Property "cdsm_Physician_Issue_ID" As %String;

ClassMethod GetJSON() [ CodeMode = expression ]
{
[
    {
        "physicianFirstName": "STEVENSON",
        "physicianLastName": "HOWARD",
        "physicianMiddleNameInitial": "W",
        "physicianSpecialty": "null",
        "physicianNPI": "null",
        "physicianMPIN": "null",
        "physicianTaxID": "null",
        "physicianADRId": "null",
        "physicianAddressLine1": "null",
        "physicianCity": "null",
        "physicianState": "null",
        "physicianZip": "null",
        "physicianZipPlus4": "null",
        "physicianPhone": "null",
        "facilityNPI": "null",
        "facilityAddressLine1": "\"\"",
        "facilityCity": "\"\"",
        "facilityState": "\"\"",
        "facilityZip": "\"\"",
        "error": "Invalid NPI. Requested NPI should contain 10 numeric digits",
        "cdsm_Physician_Issue_ID": "null"
    }
]
}

/// do ##class(test.Provider).Test()
ClassMethod Test()
{
    set json = ..GetJSON()
    
    set obj = ..%New()
    set sc = obj.%JSONImport(json.%Get(0))
    
    zw sc,obj
}

}

First of all I would recommend reading these two documents available on WRC (Software Distribution - Docs):

  • InterSystems IRIS Adoption Guide
  • InterSystems IRIS In Place Conversion Guide

First one explains the differences between Cache and InterSystems IRIS and the second one is about automated in-place conversion from Cache to InterSystems IRIS.

I would recommend the following steps:

  • upgrade to 2016.2
    • This is the place to uplift your application - on the one hand it's still Cache so upgrade is simple, on the other the code, even with the new 2016.2 features would probably run fine on InterSystems IRIS
    • if you're using SQL - start using frozen plans
    • if you're using JSON - new JSON features become available here (dynamic objects)
  • upgrade to 2018.1 (latest micro)
  • perform in-place conversion to the latest InterSystems IRIS

IndexHash+7 tries to access ^rINDEXCLASS global from CACHESYS database.

As the user does not have R (or possibly W, but probably R) privilege on %DB_CACHESYS  resource the <PROTECT> event is raised.

To solve this you need either: