Quintiq file version 2.0 
 | 
#parent: #root 
 | 
Method MessageSendViaSOAP (LibDMF_SystemOnChannel soc_i, NamedValueTree nvt_i) 
 | 
{ 
 | 
  TextBody: 
 | 
  [* 
 | 
    // Send via SOAP 
 | 
    soapInterface := LibDMF_SOAPClient::CreateInterface(); 
 | 
     
 | 
    event := null( Object ); 
 | 
    root  := this.CommunicationChannelRoot(); 
 | 
     
 | 
    // Target-dataset 
 | 
    globalparam := root.GlobalParameters(); 
 | 
    datasetKind := globalparam.DM_DatasetKind(); 
 | 
    datasetPath := globalparam.DM_DatasetFolder(); 
 | 
    datasetName := globalparam.DM_DatasetName(); 
 | 
    host        := globalparam.DM_Host(); 
 | 
    port        := globalparam.DM_Port(); 
 | 
     
 | 
    // SOAPReceiver 
 | 
    receiverKind := datasetKind; 
 | 
    receiverName := LibDMF_CommunicationChannel::DatasetNameSOAPReceiver(); 
 | 
     
 | 
    // If there is no SystemOnChannel then assume that the call must be send to the SOAPReceiver of the DataManager 
 | 
    // and use the settings as provided in the LibDMF_GlobalParameters. This should point to dataset SOAPReceiver. 
 | 
    // Otherwise use the settings of the SystemOnChannel (especially the DatasetKind is important). 
 | 
    if( not isnull( soc_i ) ) 
 | 
    { 
 | 
      // Target-dataset 
 | 
      datasetKind := soc_i.DatasetKind(); 
 | 
      datasetPath := soc_i.DatasetPath(); 
 | 
      datasetName := soc_i.DatasetName(); 
 | 
      host        := soc_i.HostName(); 
 | 
      port        := soc_i.PortNr(); 
 | 
     
 | 
      // Update the SOAPReceiver dataset kind 
 | 
      receiverKind := datasetKind; 
 | 
     
 | 
      event := root.EventGetLast( datasetKind, datasetName ); 
 | 
     
 | 
      // If a requesting dataset has been registered, then use thát dataset as target. 
 | 
      // Make sure to get the event first, otherwise it will be null (because of the change in datasetKind and -Name). 
 | 
      if( soc_i.HasRequestingDataset() ) 
 | 
      { 
 | 
        datasetKind := soc_i.RequestingDatasetKind(); 
 | 
        datasetName := soc_i.RequestingDatasetName(); 
 | 
     
 | 
        // Reset after use. 
 | 
        soc_i.ResetRequestingDataset(); 
 | 
      } 
 | 
    } 
 | 
     
 | 
    // If the recipient's hostname is the same with the current machine's hostname, change it to 'localhost' instead. 
 | 
    // A temporary workaround as SOAP is unable to send to the same machine using absolute hostname. 
 | 
    host := ifexpr( host = OS::ComputerName(), "localhost", host ); 
 | 
     
 | 
    // Set the SOAP settings 
 | 
    LibDMF_Util::SetSOAPClientInterfaceConfiguration( soapInterface, host, port, "SOAPServer", "ReceiveMessage", receiverKind, receiverName ); 
 | 
     
 | 
    // Turn the NVT into a message (i.e. the payload of the SOAP-call). 
 | 
    message := LibDMF_CommunicationChannel::NVTSerialize( nvt_i ); 
 | 
     
 | 
    root.EventLogActivity( event, 
 | 
                           "Sending message asynchronously via SOAP" ); 
 | 
     
 | 
    // Do the call asynchronous. 
 | 
    soapInterface.ASync_ReceiveMessage( datasetKind, datasetPath, datasetName, message, this, root.EventGetID( event ) ); 
 | 
  *] 
 | 
} 
 |