Hey Yone.

In "C:\InterSystems\HealthShare_2\" there should be a file called iris.cpf. Have you tried editing the entry for DefaultPort to a known open port?

Take a copy of this file before editing it in case this makes things worse :)

Just as a little addition to this.

Be careful when implementing the ##Class(Backup.General).ExternalSetHistory() and then running the script independent to actually taking backups from your external system.

Default journal retention is usually 2 days OR 2 backups. If this is called a few times without a backup, you will have effectively deleted your journals past the point of your most recent backup.

Hey everyone.

From speaking with WRC, it would appear that the defaults are used.

Hey Jeffrey.

That's done the trick - I wrongly assumed that not specifying the locale in the outformat would assume the current locale.

Thank you for your help!

I've cobbled the following together from other posts that come close to this (for example, here and here) and running each line in terminal should disable all the services from the production in the namespace you run it in:

zn "NAMEOFNAMESPACEHERE"

Set tRS = ##class(%ResultSet).%New("Ens.Config.Production:EnumerateConfigItems")

Set tStatus = tRS.%Execute("Production.Name.Here", 1)

While tRS.%Next(.tStatus) {set sc = ##class(Ens.Director).EnableConfigItem(tRS.%Get("ConfigName"), 0, 1)}

Line 1 sets your namespace, 2 and 3 bring back the list of services (the flag set to 1 on the third line specifies listing the services, setting this to 3 will bring all operations)

Line 4 is a while loop to iterate through the result set and to then use Ens.Director.EnableConfigItem to disable the config item by name (flag 1 is the enable/disable flag, and the second is to tell it to update the production).

This could probably be made nicer and more efficient (eg. disabling all of the config names without updating the production and then updating the production once using "##class(Ens.Director).UpdateProduction()" to avoid doing it once per entry) however I hope it works as a starting point.

I believe that the HL7 Router which you are using to send to the operation should have a configuration item for setting the response target (called ResponseTargetConfigNames).

So the route the message would take is:

Ahh that explains where I went wrong, thanks!

In my mind, the write action was writing the data to the object while it was still server-side, and then it was the save that actually commits it to the destination, which is why I was only looking at the status of the save method.

Hey Scott.

If you were open to having a Service in your production which is what your function sends its two variables (and the service then passes it onto your Operation) you could have something like this:

ClassMethod SendPage(PagerNumber As %String, Message As %String) As %Status
{
    //The String passed to Ens.Director must match a service name within the active production
    set tsc = ##class(Ens.Director).CreateBusinessService("Pager From Function Service",.tService)
    
    if ($IsObject(tService))
    {
        set input = ##class(osuwmc.Page.DataStructures.Page).%New()
        set input.PagerNumber = PagerNumber
        Set input.Message = Message
        
        set tsc = tService.ProcessInput(input)
        Quit tsc
                
    }
    else
    { 
    Quit 0
    }
}

and then you have a custom service that looks a little like this:

Class osuwmc.Services.PageService Extends Ens.BusinessService
{
Property TargetConfigName As Ens.DataType.ConfigName;

Parameter SETTINGS = "TargetConfigName";

Method OnProcessInput(pRequest As osuwmc.Page.DataStructures.Page) As %Status
{
    set tsc=..SendRequestAsync(..TargetConfigName, pRequest)
    
    Quit tsc
}

}

Then when you add the service to your production (remembering to match it to the name declared in the service code), you can select your target operation as a config item, and when the function is triggered it should go Function -->Service-->Operation.

Edit: my Service Class example had an error in the SETTINGS parameter, I have corrected it. 

Hey Scott.

I think you can achieve this by setting the second parameter to a comma delimted list of the request names, and then pass each value afterwards (in the same order you have the names).

For example:

Method Sample(pReq As osuwmc.Page.DataStructures.Page, Output pResp As %Net.HttpResponse) As %Status
{

    Set FormItems = "PNo,PMsg"
    
    set tSC = ..Adapter.Post(.tResponse,FormItems,pReq.PagerNumber,pReq.Message)

    if ('tSC)

    {

        $$$LOGERROR(tSC)

    }

    quit tSC

}