Wtih -1 the connection probably "dies" on the other server.

The Passthrough Operation does not know it died, so FTP is going to fail, immediately. Then it will retry if E=R is set on the Action and within the timeout period, it will reconnect and then transfer the file, but soon the next file will come and same will happen if the connection died.

I recommend changing that setting to 0 first and monitoring what happens.

UPDATED:
To ensure delivery

  • Stay Connected: 0
  • Reply Code Actions: E=R
  • Failure Timeout: -1

So this code runs on Server A?

Server A handles the passthrough and then needs to check that the file landed on Server B, correct?

If that is the case, the solution is not going to be this simple. You will have to have another operation called by the BP to check if the file is on Server B. In short

  • A custom operation that uses the FTP Outbound Adaptor to FTP to Server B and pull a list of files.
  • The operation will need the filename and should be provided by the Ensemble message from the BP.
  • The operation should then check if the filename received in the Ensemble message is in the File List on Server B. You might be able to filter for the filename directly with FTP, I will have to confirm that.
  • The operation should then return a message to the BP that contains a "result" of the check. The BP can then act on that by creating an Alert Message and sending it to Ens.Alert.

I hope this helps. Let me know if I am misunderstanding the requirement.

Thank you for clarifying. That makes sense.

It would have been nice to still have that information accessible somehow. If you add audit logs and other things based on triggers, you lose that traceability if SMP is used. This does create a bit of a gap in the audit trail if you are keeping one based on trigger events. The Dynamic SQL audit event can be used, but you can't link it directly to a record that has been updated or deleted, if you are using information that is only available in %session.

Can the InBackground behaviour be changed in a configuration?

I am back on this posting again.
I started running the tests on a Ubuntu serv

The %objlasterror still contained the error about being unable to stop the %Monitor, but this is very misleading.

What the cause of the issue was, and this might not be obvious to everyone, is the line terminators in the coverage.list file.

On Windows it was CRLF, which worked fine. When using those files on Ubuntu, the file lines are read, but including the trailing CR, which caused it not to detect the packages listed in the file correctly:(PKG(CR) '= PKG

It would be a nice to have the file loader strip out the CR's from the filestream before performing the readlines on a *nix OS.

It does not seem like the XData block parameters for the JSON mappings supports something like that.
I did the following to get a different output value on the JSON. It is not the prettiest solution.

Class Test.JSONThings Extends (%Persistent, %XML.Adaptor, %JSON.Adaptor)
{

Property Name As %String;

Property Surname As %String;

Property Gender As %String(DISPLAYLIST = ",Male,Female", JSONLISTPARAMETER = "DISPLAYLIST", VALUELIST = ",M,F");

Property SomeOtherGender As %String(DISPLAYLIST = ",Man,Vrou", JSONLISTPARAMETER = "DISPLAYLIST", VALUELIST = ",M,F") [ Calculated, SqlComputeCode = { set {*}={Gender} }, SqlComputed, Transient ];

Property Age As %Integer; Property Notes As %String(MAXLEN = ""); Property Code As Test.JSONRef(%JSONREFERENCE = "ID");

XData NSMapping
{
<Mapping xmlns="http://www.intersystems.com/jsonmapping">
        <Property Name="Name" FieldName="Name"/>
        <Property Name="Surname" FieldName="Surname"/>
        <Property Name="SomeOtherGender" FieldName="Gender"/>
</Mapping>
}

}

Hiya,

Should it be a WebSocket, or can it be a TCP counted socket connection?

If TCP counted, there are adapters available in Ensemble/IRIS, you  just need to create the business operation for the server-side, and the business service for the client-side.
You can use the EnsLib.TCP.CountedXMLOutboundAdapter  adapter, and the related inbound adapter.
In the operation you will have to serialise the Ensemble message to XML, and vice versa on the service.
Both these adapters have built-in functionality to ensure connections are up and running, and you can set up alerting controls on it.

I have never sent Ensemble messages directly like this to another instance, so I can't comment on if it will work or not.

Hiya,

Look at the %Library.String documentation.

You can use the JSONLISTPARAMETER
Property Type As %String(DISPLAYLIST ",Sveže,Zmrznjeno,Dodelava"VALUELIST ",FRE,FRO,FIN",JSONLISTPARAMETER=",Sveže,Zmrznjeno,Dodelava");

I have found that setting this parameter to the DISPLAYLIST parameter did not work, so I just put the same values in this parameter.

I dug around a bit.
It works from the dictionary classes to create the table being displayed.
I did see in there that if you add an XData block to your class called "FormDefinition" and omit that property, then it will not display it.

Have a look at this:
InterSystems CSP AutoForm

I also saw that the table generator goes up to 4 levels deep of recursive processing of a message's properties.

Hi,

Can you please provide an example of what you are doing in the DTL?

As far as I know, the DTL does not handle the line-endings, but rather at deserialization of the input to the source object, and at the serialization of the target object into whichever format it is put it, which is after the executed of the DTL.

i.e. Source Data -> Deserialize into object -> DTL -> serialize object into File/XML, etc.

The source and targets can be Record Maps, Virtual Docs and any other object you can think of.