From 1ebe43fe6f46d75690a106aaf6e68338ea8653f1 Mon Sep 17 00:00:00 2001 From: Darin Kelkhoff Date: Tue, 7 Mar 2023 15:18:39 -0600 Subject: [PATCH] Support for run scripts process on table query screen --- .../actions/processes/RunProcessAction.java | 14 ++++- .../processes/QFrontendStepMetaData.java | 20 +++++++ .../scripts/ScriptsMetaDataProvider.java | 52 +++++++++++++++++++ 3 files changed, 85 insertions(+), 1 deletion(-) diff --git a/qqq-backend-core/src/main/java/com/kingsrook/qqq/backend/core/actions/processes/RunProcessAction.java b/qqq-backend-core/src/main/java/com/kingsrook/qqq/backend/core/actions/processes/RunProcessAction.java index 3aad0ffd..322a7898 100644 --- a/qqq-backend-core/src/main/java/com/kingsrook/qqq/backend/core/actions/processes/RunProcessAction.java +++ b/qqq-backend-core/src/main/java/com/kingsrook/qqq/backend/core/actions/processes/RunProcessAction.java @@ -63,6 +63,7 @@ import com.kingsrook.qqq.backend.core.state.StateProviderInterface; import com.kingsrook.qqq.backend.core.state.StateType; import com.kingsrook.qqq.backend.core.state.UUIDAndTypeStateKey; import com.kingsrook.qqq.backend.core.utils.CollectionUtils; +import com.kingsrook.qqq.backend.core.utils.StringUtils; import com.kingsrook.qqq.backend.core.utils.ValueUtils; import org.apache.commons.lang.BooleanUtils; @@ -339,11 +340,22 @@ public class RunProcessAction RunBackendStepInput runBackendStepInput = new RunBackendStepInput(processState); runBackendStepInput.setProcessName(process.getName()); runBackendStepInput.setStepName(backendStep.getName()); - runBackendStepInput.setTableName(process.getTableName()); runBackendStepInput.setCallback(runProcessInput.getCallback()); runBackendStepInput.setFrontendStepBehavior(runProcessInput.getFrontendStepBehavior()); runBackendStepInput.setAsyncJobCallback(runProcessInput.getAsyncJobCallback()); + runBackendStepInput.setTableName(process.getTableName()); + if(!StringUtils.hasContent(runBackendStepInput.getTableName())) + { + //////////////////////////////////////////////////////////////// + // help support generic (e.g., not tied-to-a-table) processes // + //////////////////////////////////////////////////////////////// + if(runProcessInput.getValue("tableName") != null) + { + runBackendStepInput.setTableName(ValueUtils.getValueAsString(runProcessInput.getValue("tableName"))); + } + } + /////////////////////////////////////////////////////////////// // if 'basepull' values are in the inputs, add to step input // /////////////////////////////////////////////////////////////// diff --git a/qqq-backend-core/src/main/java/com/kingsrook/qqq/backend/core/model/metadata/processes/QFrontendStepMetaData.java b/qqq-backend-core/src/main/java/com/kingsrook/qqq/backend/core/model/metadata/processes/QFrontendStepMetaData.java index 42635626..68b7c8db 100644 --- a/qqq-backend-core/src/main/java/com/kingsrook/qqq/backend/core/model/metadata/processes/QFrontendStepMetaData.java +++ b/qqq-backend-core/src/main/java/com/kingsrook/qqq/backend/core/model/metadata/processes/QFrontendStepMetaData.java @@ -26,6 +26,7 @@ import java.util.ArrayList; import java.util.HashMap; import java.util.List; import java.util.Map; +import com.fasterxml.jackson.annotation.JsonIgnore; import com.kingsrook.qqq.backend.core.model.metadata.fields.QFieldMetaData; @@ -320,4 +321,23 @@ public class QFrontendStepMetaData extends QStepMetaData return (this); } + + + /******************************************************************************* + ** Get a list of all of the input fields used by this function + *******************************************************************************/ + @JsonIgnore // because this is a computed property - we don't want it in our json. + @Override + public List getInputFields() + { + List rs = new ArrayList<>(); + + if(formFields != null) + { + rs.addAll(formFields); + } + + return (rs); + } + } diff --git a/qqq-backend-core/src/main/java/com/kingsrook/qqq/backend/core/model/scripts/ScriptsMetaDataProvider.java b/qqq-backend-core/src/main/java/com/kingsrook/qqq/backend/core/model/scripts/ScriptsMetaDataProvider.java index 356230c4..7a6b2e82 100644 --- a/qqq-backend-core/src/main/java/com/kingsrook/qqq/backend/core/model/scripts/ScriptsMetaDataProvider.java +++ b/qqq-backend-core/src/main/java/com/kingsrook/qqq/backend/core/model/scripts/ScriptsMetaDataProvider.java @@ -29,6 +29,7 @@ import com.kingsrook.qqq.backend.core.actions.dashboard.widgets.ChildRecordListR import com.kingsrook.qqq.backend.core.actions.dashboard.widgets.DefaultWidgetRenderer; import com.kingsrook.qqq.backend.core.exceptions.QException; import com.kingsrook.qqq.backend.core.model.actions.tables.query.QFilterOrderBy; +import com.kingsrook.qqq.backend.core.model.automation.TableTrigger; import com.kingsrook.qqq.backend.core.model.dashboard.widgets.WidgetType; import com.kingsrook.qqq.backend.core.model.data.QRecordEntity; import com.kingsrook.qqq.backend.core.model.metadata.QInstance; @@ -36,18 +37,27 @@ import com.kingsrook.qqq.backend.core.model.metadata.code.QCodeReference; import com.kingsrook.qqq.backend.core.model.metadata.dashboard.QWidgetMetaData; import com.kingsrook.qqq.backend.core.model.metadata.fields.AdornmentType; import com.kingsrook.qqq.backend.core.model.metadata.fields.FieldAdornment; +import com.kingsrook.qqq.backend.core.model.metadata.fields.QFieldMetaData; +import com.kingsrook.qqq.backend.core.model.metadata.fields.QFieldType; import com.kingsrook.qqq.backend.core.model.metadata.joins.JoinOn; import com.kingsrook.qqq.backend.core.model.metadata.joins.JoinType; import com.kingsrook.qqq.backend.core.model.metadata.joins.QJoinMetaData; import com.kingsrook.qqq.backend.core.model.metadata.layout.QIcon; import com.kingsrook.qqq.backend.core.model.metadata.possiblevalues.QPossibleValueSource; import com.kingsrook.qqq.backend.core.model.metadata.processes.QBackendStepMetaData; +import com.kingsrook.qqq.backend.core.model.metadata.processes.QComponentType; +import com.kingsrook.qqq.backend.core.model.metadata.processes.QFrontendComponentMetaData; +import com.kingsrook.qqq.backend.core.model.metadata.processes.QFrontendStepMetaData; import com.kingsrook.qqq.backend.core.model.metadata.processes.QProcessMetaData; import com.kingsrook.qqq.backend.core.model.metadata.tables.Capability; import com.kingsrook.qqq.backend.core.model.metadata.tables.QFieldSection; import com.kingsrook.qqq.backend.core.model.metadata.tables.QTableMetaData; import com.kingsrook.qqq.backend.core.model.metadata.tables.TablesPossibleValueSourceMetaDataProvider; import com.kingsrook.qqq.backend.core.model.metadata.tables.Tier; +import com.kingsrook.qqq.backend.core.processes.implementations.etl.streamedwithfrontend.NoopTransformStep; +import com.kingsrook.qqq.backend.core.processes.implementations.etl.streamedwithfrontend.StreamedETLWithFrontendProcess; +import com.kingsrook.qqq.backend.core.processes.implementations.scripts.RunRecordScriptExtractStep; +import com.kingsrook.qqq.backend.core.processes.implementations.scripts.RunRecordScriptLoadStep; import com.kingsrook.qqq.backend.core.processes.implementations.scripts.StoreScriptRevisionProcessStep; @@ -68,6 +78,7 @@ public class ScriptsMetaDataProvider defineStandardScriptsWidgets(instance); instance.addPossibleValueSource(TablesPossibleValueSourceMetaDataProvider.defineTablesPossibleValueSource(instance)); instance.addProcess(defineStoreScriptRevisionProcess()); + instance.addProcess(defineRunRecordScriptProcess()); } @@ -88,6 +99,32 @@ public class ScriptsMetaDataProvider + /******************************************************************************* + ** + *******************************************************************************/ + private QProcessMetaData defineRunRecordScriptProcess() + { + QProcessMetaData processMetaData = StreamedETLWithFrontendProcess.processMetaDataBuilder() + .withName("runRecordScript") + .withLabel("Run Script") + .withIcon(new QIcon().withName("data_object")) + .withSupportsFullValidation(false) + .withExtractStepClass(RunRecordScriptExtractStep.class) + .withTransformStepClass(NoopTransformStep.class) + .withLoadStepClass(RunRecordScriptLoadStep.class) + .getProcessMetaData(); + + processMetaData.addStep(0, new QFrontendStepMetaData() + .withName("input") + .withComponent(new QFrontendComponentMetaData().withType(QComponentType.EDIT_FORM)) + .withFormField(new QFieldMetaData("scriptId", QFieldType.INTEGER).withPossibleValueSourceName(Script.TABLE_NAME)) + ); + + return (processMetaData); + } + + + /******************************************************************************* ** *******************************************************************************/ @@ -199,6 +236,7 @@ public class ScriptsMetaDataProvider rs.add(enrich(backendDetailEnricher, defineScriptRevisionTable(backendName))); rs.add(enrich(backendDetailEnricher, defineScriptLogTable(backendName))); rs.add(enrich(backendDetailEnricher, defineScriptLogLineTable(backendName))); + rs.add(enrich(backendDetailEnricher, defineTableTriggerTable(backendName))); return (rs); } @@ -234,6 +272,20 @@ public class ScriptsMetaDataProvider + /******************************************************************************* + ** + *******************************************************************************/ + private QTableMetaData defineTableTriggerTable(String backendName) throws QException + { + return (defineStandardTable(backendName, TableTrigger.TABLE_NAME, TableTrigger.class) + .withRecordLabelFields("id") + .withSection(new QFieldSection("identity", new QIcon().withName("badge"), Tier.T1, List.of("id"))) + .withSection(new QFieldSection("contents", new QIcon().withName("data_object"), Tier.T2, List.of("tableName", "filterId", "scriptId", "priority", "postInsert", "postUpdate"))) + .withSection(new QFieldSection("dates", new QIcon().withName("calendar_month"), Tier.T3, List.of("createDate", "modifyDate")))); + } + + + /******************************************************************************* ** *******************************************************************************/