From a100b4fe9453d79e19053a7b77ea63f9dff73e7e Mon Sep 17 00:00:00 2001 From: labkey-susanh Date: Thu, 19 Feb 2026 14:07:24 -0800 Subject: [PATCH 1/6] 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 2/6] 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 3/6] 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 4/6] 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 5/6] 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 6/6] 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) {