
Quick Start: Low-Code Modeling
Practice creating onRenders, OnChanges, and Protocol Actions using the Quick Start: Low-Code Worfklow in your L7|ESP 3.5 Training Sandbox.
The Quick Start: Low-Code Workflow includes a variety of low-code features; we suggest stepping through it first in L7 LIMS to see how it's configured. From there, you'll modify the process by extending, updating, and creating new low-code actions to further automate and improve the Workflow.
The Quick Start: Low-Code Workflow includes a variety of low-code features; we suggest stepping through it first in L7 LIMS to see how it's configured. From there, you'll modify the process by extending, updating, and creating new low-code actions to further automate and improve the Workflow.
Tip: Enable the Launch LIMS Experiment feature
Rather than going to the Projects app to create a new Experiment each time you want to test a process you're developing in L7|MASTER, you can launch a LIMS Experiment directly from L7|MASTER's Workflow builder. If you haven't already done so, follow the steps below to enable this feature.
Steps to setup Launch LIMS Experiment:
Steps to setup Launch LIMS Experiment:
-
Go to the Configuration App
-
Select the feature_flags configuration file
-
Switch to Code view
-
Go to the master code block
-
Update workflows experiment_launch to enabled
-
Click Save
-
---------------------------------------------------
-
Go to the Projects App
-
Click + New Project
-
Enter Low-Code Modeling as the project's Name
-
Click Save
You will now see a Launch LIMS Experiment button added to the Workflow builder in L7|MASTER.
onRender
Custom behavior triggered when a Protocol (Step) renders
-
Evaluated by the back-end
-
Written in JavaScript
-
Uses Client LIMS API
Best Practices
-
Be mindful of functions that trigger API calls
-
Use switch statements for multiple if/else statements.
-
Reusable functions should be written as invokables(.js) that get called from the onRender or onChange
-
Avoid using asynchronous calls. If unavoidable, put asynchronous calls behind buttons, display a loading indicator, and disable the button until the call is completed
-
Don’t set values using an onRender, instead use an expression (via data link or default value)
-
If retrieving data from a shared field, use getSharedDataAt instead of getDataAt
-
Boolean (checkbox) values need to be converted to strings
Example 1: Add URL link to worksheet action area
Using the api.addProtocolLink method, URL links can be added to the worksheet's action area.
-
----- L7|MASTER App -----
-
Go to the Workflow builder in L7|MASTER
-
Click the Quick Start: Low-Code Workflow
-
Double click on the first Protocol in the Workflow, LC1 - Exp Setup
-
Expand the On Render textbox, located in the Protocol Details panel
-
At the first line, add the following code to create a new URL link
-
Be sure to add a ; when adding to the start or middle of a list
-
Save the Protocol
-
Click Launch LIMS Experiment from the Workflow view
-
If you don't see Launch LIMS Experiment, return to the Getting Started Tip at the top of the Quick Start. Or, create a new Experiment in the Projects app.
-
----- L7 LIMS App -----
-
From the worksheet, confirm a link named L7 Informatics has been added to the worksheet action area
-
Click L7 Informatics to confirm the correct URL opens in a new window
Example 2: Hide fields
Using the api.hideFields method, you can hide fields when the worksheet renders. This is useful in Sample Protocols, where the Entity metadata fields are typically added to the protocol and displayed to the user. But if the values are unknown or not applicable at this stage in the process, then you can use an onRender to hide them.
-
----- L7|MASTER App -----
-
From the Quick Start: Low-Code Worfklow, double click on the second Protocol, LC2 - Sample Creation
-
Expand the On Render textbox, located in the Protocol Details panel
-
Update the existing onRender to also hide the Concentration (ng/uL) field, since the concentration is unknown until after further processing
-
Note, hideFields references a field's Display Name, note the ID name
-
Save the Protocol
-
Click Launch LIMS Experiment from the Workflow view
-
If you don't see Launch LIMS Experiment, return to the Getting Started Tip at the top of the Quick Start. Or, create a new Experiment in the Projects app.
-
----- L7 LIMS App -----
-
From the worksheet, complete the required fields and advance to the second Protocol
-
Confirm the Concentration (ng/uL) field is hidden
-
Note, to see and control hidden fields from the worksheet, click the Columns panel on the right. Unmarked field names are hidden.
Example 3: Conditionally hide/show fields on render
Using the api.showFields and api.hideFields methods, you can conditionally display or hide fields when the worksheet renders.
This example is intended to be used in combination with the onChange added to the "Material Type" field (see the conditionally hide/show onChange example). Several fields are hidden by default, but appear conditionally based on the selected Material Type. However, these fields will reset to hidden when the sheet is saved and re-rendered. To ensure the onChange behavior persists, a complimentary onRender needs to be added to ensure any re-rendering of the sheet doesn't change the sheets appearance.
This example is intended to be used in combination with the onChange added to the "Material Type" field (see the conditionally hide/show onChange example). Several fields are hidden by default, but appear conditionally based on the selected Material Type. However, these fields will reset to hidden when the sheet is saved and re-rendered. To ensure the onChange behavior persists, a complimentary onRender needs to be added to ensure any re-rendering of the sheet doesn't change the sheets appearance.
-
----- L7|MASTER App -----
-
From the Quick Start: Low-Code Worfklow, double click on the first Protocol, LC1 - Exp Setup
-
Expand the On Render textbox, located in the Protocol Details panel
-
Scroll to the bottom, there's an example that conditionally displays fields based on the value selected in the Material Type field.
-
Update the condition to also show Remaining Mass (g) when Solid is selected, and Volume Remaining (uL) when Liquid is selected.
-
Save the Protocol
-
Click Launch LIMS Experiment from the Workflow view
-
If you don't see Launch LIMS Experiment, return to the Getting Started Tip at the top of the Quick Start. Or, create a new Experiment in the Projects app.
-
----- L7 LIMS App -----
-
From the worksheet, select Solid as the Material Type
-
Click Save, confirm the Remaining Mass (g) field is present
-
Change the Material Type to Liquid, Save, and confirm Volume Remaining (uL) is present
onChange
Custom behavior triggered when a field value changes (this includes entering an initial value)
-
Evaluated by the front-end
-
Written in JavaScript
-
Uses Client LIMS API
Best Practices
-
Carefully evaluate if the function should be a custom invokable or custom expression
-
Reusable functions should be written as invokables(.js) that get called from the onRender or onChange
-
Use switch statements for multiple if/else statements.
-
Be mindful of functions that trigger API calls
-
Be careful of cascading onChanges
-
Be mindful of looping logic
-
If retrieving data from a shared field, use getSharedDataAt instead of getDataAt
-
If setting data in a shared field, use setSharedDataAt instead of setDataAt
-
Boolean (checkbox) values need to be converted to strings
-
To reference the most recent value recorded in the field where the onChange occurs, use newValue instead of getDataAt
-
When manipulating data in many fields, use setDataAtSilent instead of setDataAt, with a redraw data refresh at the end
Example 1: Conditionally hide/show fields
Using the api.showFields and api.hideFields methods, you can conditionally display or hide fields, respectively.
In this example, fields are conditionally displayed based on what type of material is selected. If the Material Type is Solid, then display the fields used to record data in units of grams and hide the uL fields. If the Material Type is Liquid, then display the fields used to record data in uL and hide the gram fields.
Update the existing example to also conditionally display the "Remaining Mass (g)" and "Volume Remaining (uL)" fields (note, by default both are configured to be hidden).
In this example, fields are conditionally displayed based on what type of material is selected. If the Material Type is Solid, then display the fields used to record data in units of grams and hide the uL fields. If the Material Type is Liquid, then display the fields used to record data in uL and hide the gram fields.
Update the existing example to also conditionally display the "Remaining Mass (g)" and "Volume Remaining (uL)" fields (note, by default both are configured to be hidden).
-
----- L7|MASTER App -----
-
From the Quick Start: Low-Code Worfklow, double click on the first Protocol, LC1 - Exp Setup
-
Click the Material Type field to open its Field Details
-
Scroll to the bottom, expand the Event Handler
-
Expand the onChange textbox
-
Update the condition to also show Remaining Mass (g) when Solid is selected, and Volume Remaining (uL) when Liquid is selected.
-
Save the Protocol
-
Click Launch LIMS Experiment from the Workflow view
-
If you don't see Launch LIMS Experiment, return to the Getting Started Tip at the top of the Quick Start. Or, create a new Experiment in the Projects app.
-
----- L7 LIMS App -----
-
From the worksheet, select Solid as the Material Type
-
Confirm the Remaining Mass (g) field appears and Volume Remaining (uL) is hidden
-
Change the Material Type to Liquid, and confirm now Volume Remaining (uL) is displayed and Remaining Mass (g) is hidden
-
What happens when you click Save?
If both fields disappear again regardless of the selected Material Type, then refer to the onRender example about conditionally hiding/showing fields. You will need to setup a complimentary onRender to ensure your conditional displays persist when the worksheet re-renders on a Save.
Example 2: Retrieve additional data about a selected Inventory Item
After an item has been selected from an Inventory Item Use field, an onChange can pull in more information about the Item, including its metadata.
In the LC3 - Items and Equipment Protocol, you'll find two Items are being used: Solvents and Eppendorf Tubes. The Solvent Used field already has an onChange setup to pull in additional data. In this example, you'll add an onChange to the Eppendorf Tube Used field to dynamically pull in the item's status and tube size.
In the LC3 - Items and Equipment Protocol, you'll find two Items are being used: Solvents and Eppendorf Tubes. The Solvent Used field already has an onChange setup to pull in additional data. In this example, you'll add an onChange to the Eppendorf Tube Used field to dynamically pull in the item's status and tube size.
-
----- L7|MASTER App -----
-
From the Quick Start: Low-Code Worfklow, double click on the third Protocol, LC3 - Items and Equipment
-
Click the Eppendorf Tube Used field to open its Field Details
-
Scroll to the bottom, expand the Event Handler
-
Expand the onChange textbox
-
Copy and paste the code below:
-
CLOSER LOOK: In another window, go to L7|MASTER -> Item Types -> Eppendorf Tube -> Fields tab. Here you will see the "Size" field being referenced.
-
Save the Protocol
-
Click Launch LIMS Experiment from the Workflow view
-
If you don't see Launch LIMS Experiment, return to the Getting Started Tip at the top of the Quick Start. Or, create a new Experiment in the Projects app.
-
----- L7 LIMS App -----
-
From the worksheet, complete the required fields and advance to third Protocol
-
Click Eppendorf Used field to select an item
-
Confirm data is being pulled into the Tube Size and Tube Status fields
-
Click Save
-
----- L7 Inventory App -----
-
CLOSER LOOK: In another window, go to L7 Inventory -> Eppendorf Tube -> select the one being used -> confirm its status and tube size matches the values pulled into the worksheet.
Example 3: Retrieve additional data about a selected Equipment
After scanning a piece of Equipment, an onChange can pull in more information about the Equipment, including its metadata.
In the LC3 - Items and Equipment Protocol, you'll find two types of equipment being used: Centrifuge and Freezer. The Centrifuge Barcode field already has an onChange setup to pull in additional data. In this example, you'll add an onChange to the Freezer Bardcode field to dynamically pull in the equipment's name in the form of a resource link, its status, and the room # of where its being stored.
In the LC3 - Items and Equipment Protocol, you'll find two types of equipment being used: Centrifuge and Freezer. The Centrifuge Barcode field already has an onChange setup to pull in additional data. In this example, you'll add an onChange to the Freezer Bardcode field to dynamically pull in the equipment's name in the form of a resource link, its status, and the room # of where its being stored.
-
----- L7|MASTER App -----
-
From the Quick Start: Low-Code Worfklow, double click on the third Protocol, LC3 - Items and Equipment
-
Click the Freezer Barcode field to open its Field Details
-
Scroll to the bottom, expand the Event Handler
-
Expand the onChange textbox
-
Copy and paste the code below:
-
CLOSER LOOK: In another window, go to L7|MASTER -> Equipment Types -> Freezer -> Fields tab. Here you will see the "Room #" field being referenced.
-
Save the Protocol
-
Click Launch LIMS Experiment from the Workflow view
-
If you don't see Launch LIMS Experiment, return to the Getting Started Tip at the top of the Quick Start. Or, create a new Experiment in the Projects app.
-
----- L7 LIMS App -----
-
From the worksheet, complete the required fields and advance to third Protocol
-
Click Freezer Barcode field
-
Copy and paste the following barcode into the cell, confirm the fields are populating with values from the correct Equipment
Freezer #1 barcode: 144b90dc-7ef2-4c9b-87e4-3f4624da32eq -
DID YOU KNOW: Copying and pasting barcodes can simulate a barcode scanner.
-
Copy and paste the following barcode into either a different cell or the same or the same one to confirm the fields are populating with values from the correct Equipment
Freezer #2 barcode: 882980pc-4rr1-4h9b-p763-kw1624da3f3q -
Try copying and pasting a barcode from a different type of Equipment in L7 Assets to confirm it triggers an error message.
Centrifuge A barcode: 2flez976-44k4-8kl3-nb04-72xb00e9ki2e
Centrifuge B barcode: 57ced8a7-08d1-440b-aab3-312551ecc5f2 -
----- L7 Assets App -----
-
CLOSER LOOK: In another window, go to L7 Assets -> Equipment -> select the one Freezers being used -> confirm its status and room # matches the values pulled into the worksheet.
Protocol Action
Custom behavior triggered when a condition is satisfied while processing/saving a Protocol
-
Evaluated by the back-end
-
Written in Python
-
Uses ESP Expressions (see User Docs -> Section 6)
Best Practices
-
Informative Name and Description fields help in error reporting, logging, and useful for documenting the intent of the action
-
Add ”only once” to Actions that should only be triggered once
-
Reusable custom Actions should be written in invokables.py or protocol_actions.py
Example 1: Tagging and/or untagging Entities during processing
Tags can be added to most resources in L7|ESP as a way to search for and reference resources programmatically. Protocol Actions can automatically add or remove tags from active worksheet Entities.
In this example, you'll create a new Protocol Action that will conditionally apply a tag to Entities when specific criteria is met.
In this example, you'll create a new Protocol Action that will conditionally apply a tag to Entities when specific criteria is met.
-
----- L7|MASTER App -----
-
From the Quick Start: Low-Code Worfklow, double click on the second Protocol, LC2 - Sample Creation
-
Click the Is Processing Time Sensitive? field to open its Field Details
-
Scroll to the parameters, notice this is a picklist field with options of Yes and No. You'll create a Protocol Action that is triggered when "Yes" is selected
-
Click the Actions tab
-
Click + Add Action
-
Enter Tag Time Sensitive Samples as the Name
-
Enter Tag time sensitive samples as the Description
-
Select Any rows match an expression as the IF statement
-
Enter the following expression to define the criteria for when the action should be triggered
-
Select Tag row samples as the THEN statement
-
Type time sensitive as the Tag
-
Click Enter/Return to apply the tag, it should now appear as blue text
-
Click Save
-
Click Launch LIMS Experiment from the Workflow view, submit 2 Entities
-
If you don't see Launch LIMS Experiment, return to the Getting Started Tip at the top of the Quick Start. Or, create a new Experiment in the Projects app.
-
----- L7 LIMS App -----
-
From the worksheet, complete the required fields and advance to second Protocol
-
For the first Entity, select Yes in the Is Processing Time Sensitive? field
-
For the second Entity, select No in the Is Processing Time Sensitive? field
-
Click Save, this is required for the Protocol Action to be evaluated by the back-end
-
Click the name of the first Entity in the worksheet (the one that has Yes selected) to view its details,
-
----- L7 Entities App -----
-
Confirm the time sensitive Tag has been applied
-
Return to the LIMS worksheet
-
----- L7 LIMS App -----
-
Click the name of the second Entity in the worksheet (the one that has No selected) to view its details,
-
----- L7 Entities App -----
-
Confirm the time sensitive Tag has NOT been applied
Example 2: Conditionally trigger a notification
ESP notifications can be sent out to specific users, roles, and workgroups to inform users about important milestones, information, or actions need to be communicated.
In this example, you'll create a Protocol Action that conditionally sends a notification based on a specific value recorded in a field.
In this example, you'll create a Protocol Action that conditionally sends a notification based on a specific value recorded in a field.
-
----- L7|MASTER App -----
-
From the Quick Start: Low-Code Worfklow, double click on the second Protocol, LC2 - Sample Creation
-
Click the Notify Lab Managers? field to open its Field Details
-
Scroll to the parameters, notice this is a picklist field with options of Yes and No. You'll create a Protocol Action that is triggered when "Yes" is selected
-
Click the Actions tab
-
Click + Add Action
-
Enter Notify Lab Manger as the Name
-
Enter Notify lab managers when samples are being sent to the lab as the Description
-
Select Any rows match an expression as the IF statement
-
Enter the following expression to define the criteria for when the action should be triggered
-
Select Notify Workgroup as the THEN statement
-
Enter Lab Manager as the Workgroup, this will notify all users assigned to the Lab Manager Workgroup
-
Note: You are assigned to the "Lab Manager" Workgroup and the "Training" Role. When testing, you should be able to receive and confirm notifications are working properly.
-
Enter Lab Manager Action Required as the notification's Title
-
Enter Samples are being sent to the lab for processing as the Message
-
Click Save
-
Click Launch LIMS Experiment from the Workflow view, submit 2 Entities
-
If you don't see Launch LIMS Experiment, return to the Getting Started Tip at the top of the Quick Start. Or, create a new Experiment in the Projects app.
-
----- L7 LIMS App -----
-
From the worksheet, complete the required fields and advance to second Protocol
-
For the first Entity, select No in the Notify Lab Manger? field
-
Click Save to trigger the Protocol Action evaluation and confirm the notification message is NOT triggered
-
For the second Entity, select Yes in the Notify Lab Manager? field
-
Click Save to trigger the Protocol Action evaluation and confirm the notification message now appears
-
Note: When a notification is triggered, you'll see the pop-up toast notification and a notification will be sent to the bell icon in the upper right corner or the menu bar.
-
Note: The Is Processing Time Sensitive? field also triggers a notification when set to Yes, so pay attention to which notifications are appears
-
Tip: If you interact with the worksheet again, then click Save again, notice that the notification message will be triggered again. If you want it to only be triggered once, then modify the Protocol Action to add a second IF statement of Only once.
Example 3: Synchronize process data with Entity data
Data can be captured during processing in Protocol Fields as process data, or recorded in Entity Fields as Entity metadata. At times you may need to push and pull information between the process models and the Entity data models. Protocol Actions can push Protocol process data to the active Entity's metadata, while pulling an Entity Field value to a Protocol Field would use the entity_value expression in a data link.
In this example, you'll create a Protocol Action that pushes a recorded worksheet value to the active Entity's metadata.
In this example, you'll create a Protocol Action that pushes a recorded worksheet value to the active Entity's metadata.
-
----- L7|MASTER App -----
-
From the Quick Start: Low-Code Worfklow, double click on the fourth Protocol, LC4 - Results
-
Notice the fields Volume (mL), Concentration (ng/uL), and Equipment Used fields have different Display Names and ID names. You will reference the ID name in Protocol Actions.
-
In another window, open a separate L7|ESP and go to L7|MASTER -> Entity Types -> Diagnostic Sample.
Notice it also has custom fields that correspond to the data that will be captured in the Protocol. -
Return to the window with the LC4 - Results Protocol
-
Click the Actions tab
-
Notice one Protocol Action has already been created to synchronize the volume values.
-
Click + Add Action
-
Enter Sync Results to Entity as the Name
-
Enter Push the concentration and the equipment used back to the Entity's metadata as the Description
-
Select Any row completed as the IF statement
-
Select Synchronize Field Value to Entity as the THEN statement
-
Enter concentration as the Source Field, this is the ID name of the field in the Protocol
-
Syntax is sensitive to capitalizations and spelling errors. Always double check the spelling of your source and target fields.
-
Enter Concentration (ng/uL) as the Target Field, this is the ID name of the field on the Diagnostic Sample Entity Type
-
Click the + on the far right of the action to layer in a second THEN statement to synchronize another field
-
Select Synchronize Field Value to Entity for the second THEN statement
-
Enter equipment_used as the Source Field
-
Enter analyzed_on as the Target Field
-
Save the Protocol
-
Click Launch LIMS Experiment from the Workflow view, submit 2 Entities
-
If you don't see Launch LIMS Experiment, return to the Getting Started Tip at the top of the Quick Start, or create a new Experiment in the Projects app.
-
----- L7 LIMS App -----
-
From the worksheet, complete the required fields and advance to fourth Protocol
-
Notice the Diagnostic Sample Entities are created in LC2 - Sample Creation Protocol. By default, Entity metadata fields will render in Sample Protocols. If the Entity values are unknown at this stage in the process, then an onRender can be used to hide the fields from the user. To see if any fields have been hidden, expand the Columns panel on the left; hidden fields will be unmarked. Checkout the onRender example for how to hide fields.
-
Enter values for every field in the LC4 - Results Protocol for the first Entity
-
Mark the first Entity as Complete and Save
-
Hover your cursor over the completed Entity's name, in the popup you can confirm the values you entered in the worksheet have been synched to the Entity's metadata. Alternatively you can click on the Entity's name to go to its details page.
-
Continue processing your remaining Entities, confirm that the values are synchronized after any row is completed.
Copyright © 2026 L7 Informatics Inc. All rights reserved.
