From a100b4fe9453d79e19053a7b77ea63f9dff73e7e Mon Sep 17 00:00:00 2001 From: labkey-susanh Date: Thu, 19 Feb 2026 14:07:24 -0800 Subject: [PATCH 01/10] Add new ActionType enum values --- api/src/org/labkey/api/workflow/WorkflowService.java | 5 ++++- 1 file changed, 4 insertions(+), 1 deletion(-) diff --git a/api/src/org/labkey/api/workflow/WorkflowService.java b/api/src/org/labkey/api/workflow/WorkflowService.java index 55e22cb6602..ac8c8cd710a 100644 --- a/api/src/org/labkey/api/workflow/WorkflowService.java +++ b/api/src/org/labkey/api/workflow/WorkflowService.java @@ -7,7 +7,10 @@ public interface WorkflowService { enum ActionType { - AssayImport("assay types", "Imported assay data"); + AssayImport("assay types", "Imported assay data"), + DeriveSamples("sample type parameters", "Derived samples"), + AliquotSamples("sample type parameters", "Aliquot samples"), + PoolSamples("sample type parameters", "Pooled samples"); private final String _inputDescription; private final String _auditMessage; From 2964087a0ea03b3a11d20e0bb75964dda76dafd8 Mon Sep 17 00:00:00 2001 From: labkey-susanh Date: Thu, 19 Feb 2026 14:09:07 -0800 Subject: [PATCH 02/10] update messaging (though it won't be used currently) --- api/src/org/labkey/api/workflow/WorkflowService.java | 6 +++--- 1 file changed, 3 insertions(+), 3 deletions(-) diff --git a/api/src/org/labkey/api/workflow/WorkflowService.java b/api/src/org/labkey/api/workflow/WorkflowService.java index ac8c8cd710a..5b9246b74f2 100644 --- a/api/src/org/labkey/api/workflow/WorkflowService.java +++ b/api/src/org/labkey/api/workflow/WorkflowService.java @@ -8,9 +8,9 @@ public interface WorkflowService enum ActionType { AssayImport("assay types", "Imported assay data"), - DeriveSamples("sample type parameters", "Derived samples"), - AliquotSamples("sample type parameters", "Aliquot samples"), - PoolSamples("sample type parameters", "Pooled samples"); + DeriveSamples("derivation sample type parameters", "Derived samples"), + AliquotSamples("aliquot sample type parameters", "Aliquot samples"), + PoolSamples("pooling sample type parameters", "Pooled samples"); private final String _inputDescription; private final String _auditMessage; From bf10a8f10b935fdaf9c9fb2621b6a8736c86805f Mon Sep 17 00:00:00 2001 From: labkey-susanh Date: Wed, 4 Mar 2026 11:01:13 -0800 Subject: [PATCH 03/10] Add samples to jobs if created from job action (and use more streams) --- .../org/labkey/api/workflow/WorkflowService.java | 14 +++++++++++++- .../experiment/api/SampleTypeUpdateServiceDI.java | 9 +++++++++ 2 files changed, 22 insertions(+), 1 deletion(-) diff --git a/api/src/org/labkey/api/workflow/WorkflowService.java b/api/src/org/labkey/api/workflow/WorkflowService.java index 5b9246b74f2..ec8a15a1006 100644 --- a/api/src/org/labkey/api/workflow/WorkflowService.java +++ b/api/src/org/labkey/api/workflow/WorkflowService.java @@ -1,10 +1,18 @@ package org.labkey.api.workflow; import org.jetbrains.annotations.NotNull; -import org.labkey.api.data.Container;import org.labkey.api.security.User;import org.labkey.api.services.ServiceRegistry; +import org.labkey.api.data.Container; +import org.labkey.api.dataiterator.DataIteratorBuilder; +import org.labkey.api.security.User;import org.labkey.api.services.ServiceRegistry; public interface WorkflowService { + enum WorkflowConfigs + { + ActionId, + JobId, + } + enum ActionType { AssayImport("assay types", "Imported assay data"), @@ -44,4 +52,8 @@ static WorkflowService get() void onActionComplete(@NotNull Container container, @NotNull User user, @NotNull Long actionId); void onActionComplete(@NotNull Container container, @NotNull User user, @NotNull Long taskId, @NotNull ActionType actionType); + + DataIteratorBuilder getSampleCreationDataIteratorBuilder(DataIteratorBuilder data, Container container, User user); + + DataIteratorBuilder getActionAuditDataIteratorBuilder(DataIteratorBuilder data, Container container, User user); } diff --git a/experiment/src/org/labkey/experiment/api/SampleTypeUpdateServiceDI.java b/experiment/src/org/labkey/experiment/api/SampleTypeUpdateServiceDI.java index bd8273f8d99..e51b7bea4c1 100644 --- a/experiment/src/org/labkey/experiment/api/SampleTypeUpdateServiceDI.java +++ b/experiment/src/org/labkey/experiment/api/SampleTypeUpdateServiceDI.java @@ -108,6 +108,7 @@ import org.labkey.api.util.StringUtilsLabKey; import org.labkey.api.util.logging.LogHelper; import org.labkey.api.view.UnauthorizedException; +import org.labkey.api.workflow.WorkflowService; import org.labkey.experiment.ExpDataIterators; import org.labkey.experiment.SampleTypeAuditProvider; @@ -416,6 +417,14 @@ public DataIteratorBuilder createImportDIB(User user, Container container, DataI if (sampleType.getAutoLinkTargetContainer() != null && StudyPublishService.get() != null && !context.getInsertOption().updateOnly/* TODO support link to study on update? */) dib = LoggingDataIterator.wrap(new ExpDataIterators.AutoLinkToStudyDataIteratorBuilder(dib, getSchema(), userSchema.getContainer(), userSchema.getUser(), sampleType)); + if (WorkflowService.get() != null && context.getErrors().getExtraContext() != null) + { + if (context.getErrors().getExtraContext().get(WorkflowService.WorkflowConfigs.ActionId.name()) != null) + { + dib = WorkflowService.get().getSampleCreationDataIteratorBuilder(dib, userSchema.getContainer(), userSchema.getUser()); + dib = WorkflowService.get().getActionAuditDataIteratorBuilder(dib, userSchema.getContainer(), userSchema.getUser()); + } + } } return dib; } From 67893136ff60b5887f703d3c6e61131ca6434129 Mon Sep 17 00:00:00 2001 From: labkey-susanh Date: Wed, 4 Mar 2026 16:34:23 -0800 Subject: [PATCH 04/10] Updates for passing action and job ids to server side through extraContext --- api/src/org/labkey/api/workflow/WorkflowService.java | 3 +++ query/src/org/labkey/query/controllers/QueryController.java | 5 ++++- 2 files changed, 7 insertions(+), 1 deletion(-) diff --git a/api/src/org/labkey/api/workflow/WorkflowService.java b/api/src/org/labkey/api/workflow/WorkflowService.java index ec8a15a1006..9cd0b989ac5 100644 --- a/api/src/org/labkey/api/workflow/WorkflowService.java +++ b/api/src/org/labkey/api/workflow/WorkflowService.java @@ -5,6 +5,8 @@ import org.labkey.api.dataiterator.DataIteratorBuilder; import org.labkey.api.security.User;import org.labkey.api.services.ServiceRegistry; +import java.util.Map; + public interface WorkflowService { enum WorkflowConfigs @@ -50,6 +52,7 @@ static WorkflowService get() return ServiceRegistry.get().getService(WorkflowService.class); } + void populateConfigParams(Map provided, Map configParameters); void onActionComplete(@NotNull Container container, @NotNull User user, @NotNull Long actionId); void onActionComplete(@NotNull Container container, @NotNull User user, @NotNull Long taskId, @NotNull ActionType actionType); diff --git a/query/src/org/labkey/query/controllers/QueryController.java b/query/src/org/labkey/query/controllers/QueryController.java index 874f0a0ad70..c089be45ace 100644 --- a/query/src/org/labkey/query/controllers/QueryController.java +++ b/query/src/org/labkey/query/controllers/QueryController.java @@ -267,6 +267,7 @@ import org.labkey.api.view.ViewServlet; import org.labkey.api.view.WebPartView; import org.labkey.api.view.template.PageConfig; +import org.labkey.api.workflow.WorkflowService; import org.labkey.api.writer.HtmlWriter; import org.labkey.api.writer.ZipFile; import org.labkey.data.xml.ColumnType; @@ -4659,11 +4660,13 @@ protected JSONObject executeJson(JSONObject json, CommandType commandType, boole } } - Map extraContext = json.has("extraContext") ? json.getJSONObject("extraContext").toMap() : new CaseInsensitiveHashMap<>(); + Map extraContext = json.has("extraContext") ? new CaseInsensitiveHashMap(json.getJSONObject("extraContext").toMap()) : new CaseInsensitiveHashMap<>(); Map auditDetails = json.has("auditDetails") ? json.getJSONObject("auditDetails").toMap() : new CaseInsensitiveHashMap<>(); Map configParameters = new HashMap<>(); + if (WorkflowService.get() != null) + WorkflowService.get().populateConfigParams(extraContext, configParameters); // Check first if the audit behavior has been defined for the table either in code or through XML. // If not defined there, check for the audit behavior defined in the action form (json). From 9c111b64c55beb16b3f144cf9694c99a153ef5c6 Mon Sep 17 00:00:00 2001 From: labkey-susanh Date: Thu, 5 Mar 2026 09:43:31 -0800 Subject: [PATCH 05/10] Config parameters for file import --- api/src/org/labkey/api/workflow/WorkflowService.java | 3 +++ .../org/labkey/experiment/api/SampleTypeUpdateServiceDI.java | 2 +- .../experiment/controllers/exp/ExperimentController.java | 3 +++ 3 files changed, 7 insertions(+), 1 deletion(-) diff --git a/api/src/org/labkey/api/workflow/WorkflowService.java b/api/src/org/labkey/api/workflow/WorkflowService.java index 9cd0b989ac5..238c8ac8015 100644 --- a/api/src/org/labkey/api/workflow/WorkflowService.java +++ b/api/src/org/labkey/api/workflow/WorkflowService.java @@ -1,5 +1,6 @@ package org.labkey.api.workflow; +import jakarta.servlet.http.HttpServletRequest; import org.jetbrains.annotations.NotNull; import org.labkey.api.data.Container; import org.labkey.api.dataiterator.DataIteratorBuilder; @@ -53,6 +54,8 @@ static WorkflowService get() } void populateConfigParams(Map provided, Map configParameters); + + void populateConfigParams(HttpServletRequest request, Map configParameters); void onActionComplete(@NotNull Container container, @NotNull User user, @NotNull Long actionId); void onActionComplete(@NotNull Container container, @NotNull User user, @NotNull Long taskId, @NotNull ActionType actionType); diff --git a/experiment/src/org/labkey/experiment/api/SampleTypeUpdateServiceDI.java b/experiment/src/org/labkey/experiment/api/SampleTypeUpdateServiceDI.java index e51b7bea4c1..b297dc5bdb3 100644 --- a/experiment/src/org/labkey/experiment/api/SampleTypeUpdateServiceDI.java +++ b/experiment/src/org/labkey/experiment/api/SampleTypeUpdateServiceDI.java @@ -419,7 +419,7 @@ public DataIteratorBuilder createImportDIB(User user, Container container, DataI dib = LoggingDataIterator.wrap(new ExpDataIterators.AutoLinkToStudyDataIteratorBuilder(dib, getSchema(), userSchema.getContainer(), userSchema.getUser(), sampleType)); if (WorkflowService.get() != null && context.getErrors().getExtraContext() != null) { - if (context.getErrors().getExtraContext().get(WorkflowService.WorkflowConfigs.ActionId.name()) != null) + if (context.getConfigParameter(WorkflowService.WorkflowConfigs.ActionId) != null) { dib = WorkflowService.get().getSampleCreationDataIteratorBuilder(dib, userSchema.getContainer(), userSchema.getUser()); dib = WorkflowService.get().getActionAuditDataIteratorBuilder(dib, userSchema.getContainer(), userSchema.getUser()); diff --git a/experiment/src/org/labkey/experiment/controllers/exp/ExperimentController.java b/experiment/src/org/labkey/experiment/controllers/exp/ExperimentController.java index ade152c4c0f..8678008f209 100644 --- a/experiment/src/org/labkey/experiment/controllers/exp/ExperimentController.java +++ b/experiment/src/org/labkey/experiment/controllers/exp/ExperimentController.java @@ -252,6 +252,7 @@ import org.labkey.api.view.WebPartView; import org.labkey.api.view.template.ClientDependency; import org.labkey.api.view.template.PageConfig; +import org.labkey.api.workflow.WorkflowService; import org.labkey.experiment.ChooseExperimentTypeBean; import org.labkey.experiment.ConfirmDeleteView; import org.labkey.experiment.CustomPropertiesView; @@ -4448,6 +4449,8 @@ protected int importData( tInfo = ExperimentService.get().createMaterialTable(new SamplesSchema(getUser(), getContainer()), ContainerFilter.current(this), null); updateService = tInfo.getUpdateService(); } + if (WorkflowService.get() != null) + WorkflowService.get().populateConfigParams(getViewContext().getRequest(), _context.getConfigParameters()); int count = importData(dl, tInfo, updateService, _context, auditEvent, getUser(), getContainer()); From 7ad3364cbe88c789045af52231fae4f94e73048d Mon Sep 17 00:00:00 2001 From: labkey-susanh Date: Mon, 9 Mar 2026 16:01:01 -0700 Subject: [PATCH 06/10] Remove obsolete check for extraContext --- .../org/labkey/experiment/api/SampleTypeUpdateServiceDI.java | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/experiment/src/org/labkey/experiment/api/SampleTypeUpdateServiceDI.java b/experiment/src/org/labkey/experiment/api/SampleTypeUpdateServiceDI.java index b297dc5bdb3..5aaa85810bc 100644 --- a/experiment/src/org/labkey/experiment/api/SampleTypeUpdateServiceDI.java +++ b/experiment/src/org/labkey/experiment/api/SampleTypeUpdateServiceDI.java @@ -417,7 +417,7 @@ public DataIteratorBuilder createImportDIB(User user, Container container, DataI if (sampleType.getAutoLinkTargetContainer() != null && StudyPublishService.get() != null && !context.getInsertOption().updateOnly/* TODO support link to study on update? */) dib = LoggingDataIterator.wrap(new ExpDataIterators.AutoLinkToStudyDataIteratorBuilder(dib, getSchema(), userSchema.getContainer(), userSchema.getUser(), sampleType)); - if (WorkflowService.get() != null && context.getErrors().getExtraContext() != null) + if (WorkflowService.get() != null) { if (context.getConfigParameter(WorkflowService.WorkflowConfigs.ActionId) != null) { From 6ef7ede2ac452fff44fbd6e7e8f9f573a5ac50f3 Mon Sep 17 00:00:00 2001 From: labkey-susanh Date: Mon, 23 Mar 2026 16:19:55 -0700 Subject: [PATCH 07/10] Add some null checks and number format exception handling --- api/src/org/labkey/api/workflow/WorkflowService.java | 5 +++-- .../controllers/exp/ExperimentController.java | 10 +++++++++- 2 files changed, 12 insertions(+), 3 deletions(-) diff --git a/api/src/org/labkey/api/workflow/WorkflowService.java b/api/src/org/labkey/api/workflow/WorkflowService.java index 238c8ac8015..4e9a6593040 100644 --- a/api/src/org/labkey/api/workflow/WorkflowService.java +++ b/api/src/org/labkey/api/workflow/WorkflowService.java @@ -4,6 +4,7 @@ import org.jetbrains.annotations.NotNull; import org.labkey.api.data.Container; import org.labkey.api.dataiterator.DataIteratorBuilder; +import org.labkey.api.query.ValidationException; import org.labkey.api.security.User;import org.labkey.api.services.ServiceRegistry; import java.util.Map; @@ -53,9 +54,9 @@ static WorkflowService get() return ServiceRegistry.get().getService(WorkflowService.class); } - void populateConfigParams(Map provided, Map configParameters); + void populateConfigParams(Map provided, Map configParameters) throws ValidationException; - void populateConfigParams(HttpServletRequest request, Map configParameters); + void populateConfigParams(HttpServletRequest request, Map configParameters) throws ValidationException; void onActionComplete(@NotNull Container container, @NotNull User user, @NotNull Long actionId); void onActionComplete(@NotNull Container container, @NotNull User user, @NotNull Long taskId, @NotNull ActionType actionType); diff --git a/experiment/src/org/labkey/experiment/controllers/exp/ExperimentController.java b/experiment/src/org/labkey/experiment/controllers/exp/ExperimentController.java index 8678008f209..2a81a1b988f 100644 --- a/experiment/src/org/labkey/experiment/controllers/exp/ExperimentController.java +++ b/experiment/src/org/labkey/experiment/controllers/exp/ExperimentController.java @@ -178,6 +178,7 @@ import org.labkey.api.query.SchemaKey; import org.labkey.api.query.UserSchema; import org.labkey.api.query.UserSchemaAction; +import org.labkey.api.query.ValidationException; import org.labkey.api.reader.ColumnDescriptor; import org.labkey.api.reader.DataLoader; import org.labkey.api.reader.DataLoaderFactory; @@ -4450,7 +4451,14 @@ protected int importData( updateService = tInfo.getUpdateService(); } if (WorkflowService.get() != null) - WorkflowService.get().populateConfigParams(getViewContext().getRequest(), _context.getConfigParameters()); + try + { + WorkflowService.get().populateConfigParams(getViewContext().getRequest(), _context.getConfigParameters()); + } + catch (ValidationException e) + { + errors.addRowError(e); + } int count = importData(dl, tInfo, updateService, _context, auditEvent, getUser(), getContainer()); From f93ad27dc2b7b74f64e3164ee7ec60e169dd73aa Mon Sep 17 00:00:00 2001 From: labkey-susanh Date: Mon, 23 Mar 2026 19:53:12 -0700 Subject: [PATCH 08/10] Pass through parameters from workflow config to QueryImportPipelineJob --- .../api/query/AbstractQueryImportAction.java | 12 ++++++++++++ .../api/query/QueryImportPipelineJob.java | 18 ++++++++++++++++++ 2 files changed, 30 insertions(+) diff --git a/api/src/org/labkey/api/query/AbstractQueryImportAction.java b/api/src/org/labkey/api/query/AbstractQueryImportAction.java index d79e2088c89..0f7da7664f6 100644 --- a/api/src/org/labkey/api/query/AbstractQueryImportAction.java +++ b/api/src/org/labkey/api/query/AbstractQueryImportAction.java @@ -69,6 +69,7 @@ import org.labkey.api.view.ViewBackgroundInfo; import org.labkey.api.webdav.WebdavResource; import org.labkey.api.webdav.WebdavService; +import org.labkey.api.workflow.WorkflowService; import org.labkey.vfs.FileLike; import org.springframework.validation.BindException; import org.springframework.web.multipart.MultipartFile; @@ -609,6 +610,17 @@ else if (!dataFileDir.exists()) .setAllowLineageColumns(allowLineageColumns()) .setJobDescription(getQueryImportDescription()) .setJobNotificationProvider(getQueryImportJobNotificationProviderName()); + if (WorkflowService.get() != null) + { + Map workflowConfig = new HashMap<>(); + WorkflowService.get().populateConfigParams(getViewContext().getRequest(), workflowConfig); + if (!workflowConfig.isEmpty()) + { + Map workflowParams = new HashMap<>(); + workflowConfig.forEach((k, v) -> workflowParams.put(k.name(), v)); + importContextBuilder.setWorkflowParams(workflowParams); + } + } importContextBuilder.setTransactionDetails(transactionDetails); QueryImportPipelineJob job = new QueryImportPipelineJob(getQueryImportProviderName(), info, root, importContextBuilder); diff --git a/api/src/org/labkey/api/query/QueryImportPipelineJob.java b/api/src/org/labkey/api/query/QueryImportPipelineJob.java index 28295ba5041..9ccbba66729 100644 --- a/api/src/org/labkey/api/query/QueryImportPipelineJob.java +++ b/api/src/org/labkey/api/query/QueryImportPipelineJob.java @@ -16,6 +16,7 @@ import org.labkey.api.reader.DataLoader; import org.labkey.api.util.URLHelper; import org.labkey.api.view.ViewBackgroundInfo; +import org.labkey.api.workflow.WorkflowService; import org.labkey.vfs.FileLike; import java.util.HashMap; @@ -62,6 +63,7 @@ public static class QueryImportAsyncContextBuilder boolean _allowLineageColumns = false; Map _optionParamsMap = new HashMap<>(); LookupResolutionType _lookupResolutionType = null; + Map _workflowParams = null; String _jobDescription; @@ -212,6 +214,17 @@ public QueryImportAsyncContextBuilder setOptionParamsMap(Map workflowParams) + { + _workflowParams = workflowParams; + return this; + } + + public Map getWorkflowParams() + { + return _workflowParams; + } + public LookupResolutionType getLookupResolutionType() { return _lookupResolutionType; @@ -311,6 +324,11 @@ public void run() DataIteratorContext diContext = createDataIteratorContext(ve, getContainer()); + if (_importContextBuilder.getWorkflowParams() != null) + { + WorkflowService.get().populateConfigParams(_importContextBuilder.getWorkflowParams(), diContext.getConfigParameters()); +// diContext.getConfigParameters().putAll(_importContextBuilder.getWorkflowParams()); + } TransactionAuditProvider.TransactionAuditEvent auditEvent = null; if (diContext.isCrossTypeImport() || (_importContextBuilder.getAuditBehaviorType() != null && _importContextBuilder.getAuditBehaviorType() != AuditBehaviorType.NONE)) auditEvent = createTransactionAuditEvent(getContainer(), diContext.getInsertOption().auditAction, _importContextBuilder.getTransactionDetails()); From ed226563b73955433c38deca9979a5064bd6c033 Mon Sep 17 00:00:00 2001 From: labkey-susanh Date: Tue, 24 Mar 2026 06:27:59 -0700 Subject: [PATCH 09/10] A little code cleaning --- .../labkey/api/query/AbstractQueryImportAction.java | 10 ++-------- .../org/labkey/api/query/QueryImportPipelineJob.java | 1 - api/src/org/labkey/api/workflow/WorkflowService.java | 1 + 3 files changed, 3 insertions(+), 9 deletions(-) diff --git a/api/src/org/labkey/api/query/AbstractQueryImportAction.java b/api/src/org/labkey/api/query/AbstractQueryImportAction.java index 0f7da7664f6..51ecac86358 100644 --- a/api/src/org/labkey/api/query/AbstractQueryImportAction.java +++ b/api/src/org/labkey/api/query/AbstractQueryImportAction.java @@ -612,14 +612,8 @@ else if (!dataFileDir.exists()) .setJobNotificationProvider(getQueryImportJobNotificationProviderName()); if (WorkflowService.get() != null) { - Map workflowConfig = new HashMap<>(); - WorkflowService.get().populateConfigParams(getViewContext().getRequest(), workflowConfig); - if (!workflowConfig.isEmpty()) - { - Map workflowParams = new HashMap<>(); - workflowConfig.forEach((k, v) -> workflowParams.put(k.name(), v)); - importContextBuilder.setWorkflowParams(workflowParams); - } + Map workflowParams = WorkflowService.get().getConfigParameters(getViewContext().getRequest()); + importContextBuilder.setWorkflowParams(workflowParams); } importContextBuilder.setTransactionDetails(transactionDetails); diff --git a/api/src/org/labkey/api/query/QueryImportPipelineJob.java b/api/src/org/labkey/api/query/QueryImportPipelineJob.java index 9ccbba66729..8e8815033e6 100644 --- a/api/src/org/labkey/api/query/QueryImportPipelineJob.java +++ b/api/src/org/labkey/api/query/QueryImportPipelineJob.java @@ -327,7 +327,6 @@ public void run() if (_importContextBuilder.getWorkflowParams() != null) { WorkflowService.get().populateConfigParams(_importContextBuilder.getWorkflowParams(), diContext.getConfigParameters()); -// diContext.getConfigParameters().putAll(_importContextBuilder.getWorkflowParams()); } TransactionAuditProvider.TransactionAuditEvent auditEvent = null; if (diContext.isCrossTypeImport() || (_importContextBuilder.getAuditBehaviorType() != null && _importContextBuilder.getAuditBehaviorType() != AuditBehaviorType.NONE)) diff --git a/api/src/org/labkey/api/workflow/WorkflowService.java b/api/src/org/labkey/api/workflow/WorkflowService.java index 4e9a6593040..69a82878405 100644 --- a/api/src/org/labkey/api/workflow/WorkflowService.java +++ b/api/src/org/labkey/api/workflow/WorkflowService.java @@ -57,6 +57,7 @@ static WorkflowService get() void populateConfigParams(Map provided, Map configParameters) throws ValidationException; void populateConfigParams(HttpServletRequest request, Map configParameters) throws ValidationException; + Map getConfigParameters(HttpServletRequest request) throws ValidationException; void onActionComplete(@NotNull Container container, @NotNull User user, @NotNull Long actionId); void onActionComplete(@NotNull Container container, @NotNull User user, @NotNull Long taskId, @NotNull ActionType actionType); From c73a2140857e457afe1ff84efab29b2bf276db74 Mon Sep 17 00:00:00 2001 From: labkey-susanh Date: Tue, 24 Mar 2026 06:40:39 -0700 Subject: [PATCH 10/10] Small code clean up --- api/src/org/labkey/api/query/QueryImportPipelineJob.java | 2 +- api/src/org/labkey/api/workflow/WorkflowService.java | 3 ++- .../labkey/experiment/api/SampleTypeUpdateServiceDI.java | 7 ++++--- .../experiment/controllers/exp/ExperimentController.java | 2 ++ .../src/org/labkey/query/controllers/QueryController.java | 2 +- 5 files changed, 10 insertions(+), 6 deletions(-) diff --git a/api/src/org/labkey/api/query/QueryImportPipelineJob.java b/api/src/org/labkey/api/query/QueryImportPipelineJob.java index 8e8815033e6..c40ca372464 100644 --- a/api/src/org/labkey/api/query/QueryImportPipelineJob.java +++ b/api/src/org/labkey/api/query/QueryImportPipelineJob.java @@ -324,7 +324,7 @@ public void run() DataIteratorContext diContext = createDataIteratorContext(ve, getContainer()); - if (_importContextBuilder.getWorkflowParams() != null) + if (_importContextBuilder.getWorkflowParams() != null && WorkflowService.get() != null) { WorkflowService.get().populateConfigParams(_importContextBuilder.getWorkflowParams(), diContext.getConfigParameters()); } diff --git a/api/src/org/labkey/api/workflow/WorkflowService.java b/api/src/org/labkey/api/workflow/WorkflowService.java index 69a82878405..2f0f710e585 100644 --- a/api/src/org/labkey/api/workflow/WorkflowService.java +++ b/api/src/org/labkey/api/workflow/WorkflowService.java @@ -5,7 +5,8 @@ import org.labkey.api.data.Container; import org.labkey.api.dataiterator.DataIteratorBuilder; import org.labkey.api.query.ValidationException; -import org.labkey.api.security.User;import org.labkey.api.services.ServiceRegistry; +import org.labkey.api.security.User; +import org.labkey.api.services.ServiceRegistry; import java.util.Map; diff --git a/experiment/src/org/labkey/experiment/api/SampleTypeUpdateServiceDI.java b/experiment/src/org/labkey/experiment/api/SampleTypeUpdateServiceDI.java index e1573e65cea..8d0e8fac75c 100644 --- a/experiment/src/org/labkey/experiment/api/SampleTypeUpdateServiceDI.java +++ b/experiment/src/org/labkey/experiment/api/SampleTypeUpdateServiceDI.java @@ -417,12 +417,13 @@ public DataIteratorBuilder createImportDIB(User user, Container container, DataI if (sampleType.getAutoLinkTargetContainer() != null && StudyPublishService.get() != null && !context.getInsertOption().updateOnly/* TODO support link to study on update? */) dib = LoggingDataIterator.wrap(new ExpDataIterators.AutoLinkToStudyDataIteratorBuilder(dib, getSchema(), userSchema.getContainer(), userSchema.getUser(), sampleType)); - if (WorkflowService.get() != null) + WorkflowService workService = WorkflowService.get(); + if (workService != null) { if (context.getConfigParameter(WorkflowService.WorkflowConfigs.ActionId) != null) { - dib = WorkflowService.get().getSampleCreationDataIteratorBuilder(dib, userSchema.getContainer(), userSchema.getUser()); - dib = WorkflowService.get().getActionAuditDataIteratorBuilder(dib, userSchema.getContainer(), userSchema.getUser()); + dib = workService.getSampleCreationDataIteratorBuilder(dib, userSchema.getContainer(), userSchema.getUser()); + dib = workService.getActionAuditDataIteratorBuilder(dib, userSchema.getContainer(), userSchema.getUser()); } } } diff --git a/experiment/src/org/labkey/experiment/controllers/exp/ExperimentController.java b/experiment/src/org/labkey/experiment/controllers/exp/ExperimentController.java index 2a81a1b988f..64c09400e43 100644 --- a/experiment/src/org/labkey/experiment/controllers/exp/ExperimentController.java +++ b/experiment/src/org/labkey/experiment/controllers/exp/ExperimentController.java @@ -4451,6 +4451,7 @@ protected int importData( updateService = tInfo.getUpdateService(); } if (WorkflowService.get() != null) + { try { WorkflowService.get().populateConfigParams(getViewContext().getRequest(), _context.getConfigParameters()); @@ -4459,6 +4460,7 @@ protected int importData( { errors.addRowError(e); } + } int count = importData(dl, tInfo, updateService, _context, auditEvent, getUser(), getContainer()); diff --git a/query/src/org/labkey/query/controllers/QueryController.java b/query/src/org/labkey/query/controllers/QueryController.java index 343bf310ced..5c9c92f86aa 100644 --- a/query/src/org/labkey/query/controllers/QueryController.java +++ b/query/src/org/labkey/query/controllers/QueryController.java @@ -4660,7 +4660,7 @@ protected JSONObject executeJson(JSONObject json, CommandType commandType, boole } } - Map extraContext = json.has("extraContext") ? new CaseInsensitiveHashMap(json.getJSONObject("extraContext").toMap()) : new CaseInsensitiveHashMap<>(); + Map extraContext = json.has("extraContext") ? new CaseInsensitiveHashMap<>(json.getJSONObject("extraContext").toMap()) : new CaseInsensitiveHashMap<>(); Map auditDetails = json.has("auditDetails") ? json.getJSONObject("auditDetails").toMap() : new CaseInsensitiveHashMap<>();