From 0eff2c193ae148665587e96593ca062f1d14f6ff Mon Sep 17 00:00:00 2001 From: Kristian Bendiksen Date: Fri, 18 Sep 2026 10:06:53 +0200 Subject: [PATCH] #14772 exportPropertyInViews: Keep write failures as errors Only a missing property in a view was a warning in the legacy command; a failed write aborted with COMMAND_ERROR. The forwarding turned every failure into a warning. Add RimEclipseView_exportCurrentProperty::hasCurrentProperty() so the Ricf command can distinguish the two cases without parsing error strings. --- .../RicfExportPropertyInViews.cpp | 23 ++++++++++----- .../RimcEclipseView.cpp | 29 +++++++++++++++---- .../RimcEclipseView.h | 8 +++++ 3 files changed, 47 insertions(+), 13 deletions(-) diff --git a/ApplicationLibCode/CommandFileInterface/RicfExportPropertyInViews.cpp b/ApplicationLibCode/CommandFileInterface/RicfExportPropertyInViews.cpp index a3318bf8ab..fe7aa1dcc4 100644 --- a/ApplicationLibCode/CommandFileInterface/RicfExportPropertyInViews.cpp +++ b/ApplicationLibCode/CommandFileInterface/RicfExportPropertyInViews.cpp @@ -25,6 +25,7 @@ #include "Rim3dView.h" #include "RimEclipseCase.h" +#include "RimEclipseCellColors.h" #include "RimEclipseView.h" #include "RimcEclipseView.h" @@ -99,18 +100,26 @@ caf::PdmScriptResponse RicfExportPropertyInViews::execute() for ( RimEclipseView* view : viewsForExport ) { + // Legacy behavior: a missing property in one view is a warning, not an error, and the export continues + if ( !RimEclipseView_exportCurrentProperty::hasCurrentProperty( view ) ) + { + QString warning = QString( "%1: Could not find property. Case ID %2, time step %3, property '%4'" ) + .arg( commandName ) + .arg( m_caseId() ) + .arg( view->currentTimeStep() ) + .arg( view->cellResult()->resultVariableUiShortName() ); + RiaLogging::warning( warning.toStdString() ); + response.updateStatus( caf::PdmScriptResponse::COMMAND_WARNING, warning ); + continue; + } + RimEclipseView_exportCurrentProperty method( view ); method.setExportFile( propertiesDir.filePath( RimEclipseView_exportCurrentProperty::defaultFileBaseName( view ) ) ); method.setUndefinedValue( m_undefinedValue() ); + // A failed write is an error, as in the legacy command auto result = method.execute(); - if ( !result ) - { - // Legacy behavior: a missing property in one view is a warning, not an error, and the export continues - QString warning = QString( "%1: %2" ).arg( commandName ).arg( result.error() ); - RiaLogging::warning( warning.toStdString() ); - response.updateStatus( caf::PdmScriptResponse::COMMAND_WARNING, warning ); - } + if ( !result ) return RicfForwarding::errorResponse( result.error(), commandName ); } return response; diff --git a/ApplicationLibCode/ProjectDataModelCommands/RimcEclipseView.cpp b/ApplicationLibCode/ProjectDataModelCommands/RimcEclipseView.cpp index 064e124487..ec14845769 100644 --- a/ApplicationLibCode/ProjectDataModelCommands/RimcEclipseView.cpp +++ b/ApplicationLibCode/ProjectDataModelCommands/RimcEclipseView.cpp @@ -137,12 +137,7 @@ std::expected RimEclipseView_exportCurrentProper RimEclipseCase* eclipseCase = view->eclipseCase(); if ( !eclipseCase || !eclipseCase->eclipseCaseData() ) return std::unexpected( "The view has no case data." ); - const int mainGridIndex = 0; - - cvf::ref resultAccessor = RigResultAccessorFactory::createFromResultDefinition( eclipseCase->eclipseCaseData(), - mainGridIndex, - view->currentTimeStep(), - view->cellResult() ); + cvf::ref resultAccessor = currentPropertyAccessor( view ); const QString propertyName = view->cellResult()->resultVariableUiShortName(); @@ -171,6 +166,28 @@ std::expected RimEclipseView_exportCurrentProper return nullptr; } +//-------------------------------------------------------------------------------------------------- +/// +//-------------------------------------------------------------------------------------------------- +cvf::ref RimEclipseView_exportCurrentProperty::currentPropertyAccessor( const RimEclipseView* view ) +{ + if ( !view || !view->eclipseCase() || !view->eclipseCase()->eclipseCaseData() ) return nullptr; + + const int mainGridIndex = 0; + return RigResultAccessorFactory::createFromResultDefinition( view->eclipseCase()->eclipseCaseData(), + mainGridIndex, + view->currentTimeStep(), + view->cellResult() ); +} + +//-------------------------------------------------------------------------------------------------- +/// +//-------------------------------------------------------------------------------------------------- +bool RimEclipseView_exportCurrentProperty::hasCurrentProperty( const RimEclipseView* view ) +{ + return currentPropertyAccessor( view ).notNull(); +} + //-------------------------------------------------------------------------------------------------- /// //-------------------------------------------------------------------------------------------------- diff --git a/ApplicationLibCode/ProjectDataModelCommands/RimcEclipseView.h b/ApplicationLibCode/ProjectDataModelCommands/RimcEclipseView.h index ff633be7fe..3632fe7841 100644 --- a/ApplicationLibCode/ProjectDataModelCommands/RimcEclipseView.h +++ b/ApplicationLibCode/ProjectDataModelCommands/RimcEclipseView.h @@ -26,9 +26,12 @@ #include "cafPdmObjectMethod.h" #include "cafPdmPtrArrayField.h" +#include "cvfObject.h" + #include class RimEclipseView; +class RigResultAccessor; class RimFaultInView; //================================================================================================== @@ -67,7 +70,12 @@ public: /// Default file base name: --T