Quintiq file version 2.0
|
#parent: #root
|
Method ProcessDataFromQI (
|
NamedValueTree responseNVT_i,
|
String integratorID_i
|
) as LibDIF_IntegrationDataset
|
{
|
Description: 'Trigger ProcessDataFromQI using the QIntegrator(-route) with the provided ID.'
|
TextBody:
|
[*
|
// Retrieve the data from the Body of the replied NVT.
|
bodyNode := responseNVT_i.Root().Child( responseNVT_i.GetHandle( "Body" ) );
|
|
// Remove the appendix "As3DSpace" from the IntegratorID if applicable.
|
integratorID := ifexpr( integratorID_i.EndsWith( LibDIF_IntegrationDataset::AS_3DSPACE() ),
|
integratorID_i.SubString( 0, integratorID_i.Length() - LibDIF_IntegrationDataset::AS_3DSPACE().Length() ),
|
integratorID_i );
|
|
// See if the response is 'raw' JSON or a NVT.
|
if( LibDIF_PlatformAPICall::IsRawResponse( responseNVT_i ) )
|
{
|
// See if the data should be processed.
|
doProcess := this.DoNotProcessDataFromQI().Find( integratorID ) < 0;
|
if( doProcess )
|
{
|
// Get the JSON-data from the body and parse it.
|
json := JSON::Parse( bodyNode.GetValueAsString() );
|
|
// Call the method that must be overridden and implemented at the Implementation Level.
|
if( this.DoProcessDataFromQI( json, integratorID ) )
|
{
|
// All OK...
|
}
|
else
|
{
|
// Raise an error if the QIntegrator(-route) was not found.
|
LibDIF_Util::Error( this.DefinitionName() + ".DoProcessDataFromQI( json_i, integratorID_i ) is not implemented for QIntegrator(-route) | IntegratorID = '" + integratorID + "'. "
|
+ "Either implement the method for the IntegratorID, or add the IntegratorID to method DoNotProcessDataFromQI()." );
|
}
|
}
|
}
|
else
|
{
|
datasetNode := bodyNode.Child( responseNVT_i.GetHandle( this.DefinitionName() ) );
|
|
// Import the NVT as a temporary instance of the Integration-dataset that owns the imported integration objects.
|
tempIntegrationDataset := NamedValueTreeIO::ImportObject( responseNVT_i, datasetNode, typeofexpression( this ) );
|
|
// Call the method that must be overridden and implemented at the Implementation Level.
|
if( this.DoProcessDataFromQI( tempIntegrationDataset, integratorID ) )
|
{
|
// All OK...
|
}
|
else
|
{
|
// Raise an error if the QIntegrator(-route) was not found.
|
LibDIF_Util::Error( this.DefinitionName() + ".DoProcessDataFromQI( tempIntegrationDataset_i ) is not implemented for QIntegrator(-route) | IntegratorID = '" + integratorID + "'" );
|
}
|
}
|
|
// Return a stream that can be reacted on.
|
return this;
|
*]
|
}
|