Hello,
I am developing a protocol to receive a command from an automation and return processed data. Looking at the documentation I saw that there are the InterApp classes, but It's not working.
These are the model classes I created:
I created an executor using the DIS Snippet and this is the CreateReturnMessage method:
This is the Executor Trigger
Below is the automation script code that sends the command and waits for the response from the element.
Am I missing something?
Thanks in advance
Hi João, It's working now.
The problem is that the dll library Skyline.DataMiner.Core.DataMinerSystem.Common.dll was missing
Thanks
Hi,
At first glance, the logic seems correct, however I would check the following things to make sure:
- Could you confirm in which part the flow is not working? Is it the QAction that is not receiving anything or is the automation that is not receiving a reply?
- As per the note in this page, the classes used must have the same namespace and when just placing them on a QAction or Automaction script they will have different namespaces
- Verify that the rest of the executor is correctly implemented and is reaching the CreateReturnMessage method (see: InterApp Executor)
I found an error in a QAction, but it still not working. The send command was missing:
returnMessage.Send(
protocol.SLNet.RawConnection,
message.ReturnAddress.AgentId,
message.ReturnAddress.ElementId,
message.ReturnAddress.ParameterId, knownTypes);
Hi João,
Apparently, the automation does not receive the return message, the automation enters in Timeout waiting for the response. The API classes are in the same namespace (InterApp) in both protocol and automation. Below is the executor class.
///
/// Executor class.
///
public class AlarmCommandExecutor : MessageExecutor
{
public AlarmCommandExecutor(AlarmCommand message) : base(message)
{
}
///
/// Creates a return Message.
///
/// A message representing the response for the processed message.
public override Message CreateReturnMessage()
{
var valor = “ReturnMessageTest”;
var returnMessage = new AlarmCommandResult()
{
Guid = Message.Guid,
Source = Message.Source,
ReturnAddress = Message.ReturnAddress,
Resultado = valor,
};
return returnMessage;
}
///
/// Reads data from SLProtocol, Engine or other data sources.
///
/// SLProtocol, Engine, or other data sources.
public override void DataGets(object dataSource)
{
throw new System.NotImplementedException();
}
///
/// Writes data to SLProtocol, Engine, or another data destination.
///
/// SLProtocol, Engine, or another data destination.
public override void DataSets(object dataDestination)
{
SLProtocol protocol = dataDestination as SLProtocol; // Can be replaced if other dataDestination type is used.
if (protocol != null)
{
throw new System.NotImplementedException();
}
}
///
/// Modifies retrieved data and Message data into a correct format for setting.
///
public override void Modify()
{
var receivedMessage = Message;
throw new System.NotImplementedException();
}
///
/// Parses the data retrieved from a data source in DataGets.
///
public override void Parse()
{
throw new System.NotImplementedException();
}
///
/// Validates received data for validity.
///
/// A boolean indicating if the received data is valid.
public override bool Validate()
{
if (String.IsNullOrWhiteSpace(Message.Interval))
{
return false;
}
return true;
}
}