Quintiq file version 2.0 
 | 
#parent: #root 
 | 
Method MessageSend (LibDMF_SystemOnChannel soc_i, String messageType_i, NamedValueTree nvt_i,  
 | 
  String sourceKind_i, String sourceName_i, DateTime lastUpdate_i) 
 | 
{ 
 | 
  TextBody: 
 | 
  [* 
 | 
    event := null( Object ); 
 | 
     
 | 
    datasetKind := ""; 
 | 
    datasetName := ""; 
 | 
     
 | 
    root := this.CommunicationChannelRoot(); 
 | 
     
 | 
    // Retrieve the last event of the requester 
 | 
    if( not isnull( soc_i ) ) 
 | 
    { 
 | 
      datasetKind := soc_i.DatasetKind(); 
 | 
      datasetName := soc_i.DatasetName(); 
 | 
      event       := root.EventGetLast( datasetKind, datasetName ); 
 | 
    } 
 | 
     
 | 
    // Use a QuintiqKey as the unique ID of a message. 
 | 
    messageID := [String]Key::NextPersistentKey(); 
 | 
     
 | 
    // Get some characteristics of the Message out of the header. 
 | 
    isRequest := LibInt_MessageAccessor::HasHeaderProperty( nvt_i, LibDMF_CommunicationChannel::HEADER_IS_REQUEST() ) and 
 | 
                 LibInt_MessageAccessor::GetHeaderPropertyAsBoolean( nvt_i, LibDMF_CommunicationChannel::HEADER_IS_REQUEST() ); 
 | 
     
 | 
    isError := LibInt_MessageAccessor::HasHeaderProperty( nvt_i, LibDMF_CommunicationChannel::HEADER_IS_ERROR() ) and 
 | 
               LibInt_MessageAccessor::GetHeaderPropertyAsBoolean( nvt_i, LibDMF_CommunicationChannel::HEADER_IS_ERROR() ); 
 | 
     
 | 
    // Add additional information to the header of the NTV. 
 | 
    LibInt_MessageAccessor::SetHeaderProperty( nvt_i, LibDMF_CommunicationChannel::HEADER_COMMUNICATIONCHANNEL(), this.Name()   ); 
 | 
    LibInt_MessageAccessor::SetHeaderProperty( nvt_i, LibDMF_CommunicationChannel::HEADER_MESSAGETYPE(),          messageType_i ); 
 | 
    LibInt_MessageAccessor::SetHeaderProperty( nvt_i, LibDMF_CommunicationChannel::HEADER_MESSAGEID(),            messageID     ); 
 | 
    LibInt_MessageAccessor::SetHeaderProperty( nvt_i, LibDMF_CommunicationChannel::HEADER_SOURCEKIND(),           sourceKind_i  ); 
 | 
    LibInt_MessageAccessor::SetHeaderProperty( nvt_i, LibDMF_CommunicationChannel::HEADER_SOURCENAME(),           sourceName_i  ); 
 | 
     
 | 
    if( not isRequest and not isError ) 
 | 
    { 
 | 
      LibInt_MessageAccessor::SetHeaderProperty( nvt_i, LibDMF_CommunicationChannel::HEADER_LAST_UPDATED(), lastUpdate_i ); 
 | 
    } 
 | 
     
 | 
    // Update the IntegrationEvent 
 | 
    root.EventUpdateTraceInfo( event, messageID, this.RequestID(), messageType_i, this.IntegrationTechnology() ); 
 | 
     
 | 
    // Add the RequestID if it has been registered. 
 | 
    // Mind: when a RequestID registered this indicates that a *Response* to a Request is being send, the Request itself has already been processed. 
 | 
    if( this.RequestID() <> LibDMF_CommunicationChannel::REQUEST_NO_ID() ) 
 | 
    { 
 | 
      LibInt_MessageAccessor::SetHeaderProperty( nvt_i, LibDMF_CommunicationChannel::HEADER_REQUESTID(), this.RequestID() ); 
 | 
    } 
 | 
     
 | 
    // Send the message based on the selected Integration Technology 
 | 
    if( this.IntegrationTechnology() = LibDMF_CommunicationChannel::INTEGRATION_TECHNOLOGY_SOAP() ) 
 | 
    { 
 | 
      this.MessageSendViaSOAP( soc_i, nvt_i ); 
 | 
    } 
 | 
    // LibMF disable temporarily 
 | 
    //else if( this.IntegrationTechnology() = LibDMF_CommunicationChannel::INTEGRATION_TECHNOLOGY_MESSAGE_FRAMEWORK() ) 
 | 
    //{ 
 | 
    //  this.MessageSendViaMF( soc_i, nvt_i ); 
 | 
    //} 
 | 
    else 
 | 
    { 
 | 
      root.EventLogActivityError( event, 
 | 
                                  "Unexpected Integration Technology '" + this.IntegrationTechnology() + "' encountered", 
 | 
                                  "Unexpected Integration Technology '" + this.IntegrationTechnology() + "' encountered; CommunicationChannel = " + this.Name() ); 
 | 
    } 
 | 
  *] 
 | 
} 
 |