-
Notifications
You must be signed in to change notification settings - Fork 0
Training Build a Weather Lookup Screen V2 Store Readings
Add-on to Training: Build a Weather Lookup Screen. Build V1 first — this picks up exactly where it left off and assumes you have the working
Weather APIconnection, the deployedWeather Lookup Flow, and theWeather Lookupscreen.
What you'll learn: how to turn a one-shot lookup into something that remembers — add a data model, write each result into it from the flow, dedupe by ZIP + date so the same lookup updates instead of piling up duplicates, and show a running history on the screen. You need: Administrator or Developer access type. V1 completed. Time: 30–40 minutes.
In V1 the user types a ZIP, clicks Get Weather, the form's data transform runs $executeFlow('weatherLookupFlow', { zip }), and the response is rendered as markdown. Nothing is saved — every lookup is throwaway.
ZIP ─▶ Get Weather ─▶ Form.loadData ─▶ $executeFlow(flow) ─▶ wttr.in ─▶ markdown on screen
V2 adds persistence: the flow also writes the reading into a data model, keyed so the same ZIP on the same day updates one row instead of inserting many, and the screen shows the saved history.
ZIP ─▶ Source ─▶ Set Context (stash zip) ─▶ HTTP ─▶ JSONata reshape ─┬─▶ Response (weather → screen)
└─▶ Mutate (UPSERT WeatherReading, key = zip|date)
Screen history table (WeatherReading)
Use the Application Designer for models, not the old Schema Designer. In Fuuz, build data models from App Designer → Data Model (or open a saved one from the Workspace tree). The standalone "Schema Designer" canvas is the legacy tool.
-
Create the model. App Designer → Data Model → New Model: Name
WeatherReading, ModuleTraining Module(a module is required — it's also what makes the model appear in the App Designer Workspace tree), TypeTransactional. -
Add the fields (App Designer → the model → Field):
Field Type Notes keyString!the dedup key, zip|date— mark it unique (below)zipString!the looked-up ZIP dateDate!observation date locationStringcity regionStringstate/region conditionsStringcurrent conditions windDirStringwind direction tempFIntcurrent temp °F feelsLikeFIntfeels-like °F humidityInt% windMphIntmph forecastJSONthe 3-day forecast array, stored whole -
Add a unique index on
key. In the model's indices, add{ name: "unique_key", unique: true, fields: ["key"] }. This is the crucial bit: a unique field generates aWeatherReadingWhereUniqueInput { key }, which the upsert below matches on. Samekey→ update; newkey→ insert. -
Deploy the model. (V1's lesson holds: nothing is callable until deployed.)
Why
key = zip\|dateand not a compound index? Upsert matches on aWhereUniqueInput, which is built from single unique fields. Packing ZIP and date into one uniquekeystring gives the upsert a single field to match — the cleanest dedup.
Open Weather Lookup Flow in the flow designer.
The ZIP problem — and why we use flow context. You'd think you could just read the ZIP back out of the weather response, but wttr.in doesn't echo the US ZIP you sent — its
request[0].querycomes back as a resolved"Lat 34.08 and Lon -118.35". The clean ZIP only exists on the flow's input, and by the time the reshape runs, the HTTP response has replaced the payload. The fix is to stash the ZIP in the flow context before the HTTP call, then read it back out in the Mutate. Flow context persists across nodes, including across the HTTP request.
-
Stash the ZIP in context. Add a Set Context node (Toolbox → Context → Set Context) right after the Source, wired Source → Set Context → HTTP (remove the old Source → HTTP link so the chain runs through Set Context). Set its Transform to:
{ "zip": zip }This writes
{ zip: "90210" }into the flow context. Usezip(the field), not$—$would store the whole payload object underzip, and concatenating an object into the key later throws an error (which surfaces, confusingly, as a Mutate error: Variable "$payload" … was not provided). -
Add a Mutate node after the reshape (Toolbox → Fuuz → Mutate). Configure:
-
API:
Application -
Mutation:
mutation ($payload:[WeatherReadingUpsertPayloadInput!]!){ upsertWeatherReading(payload:$payload){ id key } }
-
Variables Transform (builds the upsert payload — pulls the ZIP from context, everything else from the reshaped weather):
{ "payload": [{ "where": { "key": $state.context.zip & "|" & date }, "create": { "key": $state.context.zip & "|" & date, "zip": $state.context.zip, "date": date, "location": location, "region": region, "conditions": conditions, "windDir": windDir, "tempF": $number(tempF), "feelsLikeF": $number(feelsLikeF), "humidity": $number(humidity), "windMph": $number(windMph), "forecast": forecast }, "update": { "location": location, "region": region, "conditions": conditions, "windDir": windDir, "tempF": $number(tempF), "feelsLikeF": $number(feelsLikeF), "humidity": $number(humidity), "windMph": $number(windMph), "forecast": forecast } }] }$state.context.zipreads the value the Set Context node stashed;$number(...)casts the API's string values to the model's Int fields;datecomes from the reshaped output.
-
API:
-
Wire reshape → Mutate. The flow still returns the reshaped object to the screen (the markdown still works); the Mutate runs the upsert as a side effect.
-
Re-deploy the flow.
Upsert = dedup. Because the upsert matches on the unique
key(zip|date), running the same ZIP twice on the same day updates the one row; a different ZIP or a new day inserts a new row. No duplicate combinations.
Editor tip. Typing
$state.context.zipinto a Fuuz code editor pops a member-completion list that can swallow the rest of your line. If that bites you, write it as$lookup($lookup($state,"context"),"zip")— same result, no dots to trigger the popup.
Debugging tip. The flow designer's Console prints a per-node trace (each node's input, output, and context) when you run the flow. It's the fastest way to see whether
$state.context.zipis set where you expect.
Open the Weather Lookup screen.
- Drag a Table (Data palette) onto the screen and set its Data Model to
WeatherReading, APIApplication, Auto Load on. (A model-bound table works fine — only a model-less table errors.) -
Tell the query which fields to fetch. In the table's Data → Additional Query Fields, list every field your columns need:
This is the step that's easy to miss: a column's Data Path sets what to display, but the table only queries the fields in this list (it defaults to just
["id","key","zip","date","location","region","conditions","windDir","tempF","feelsLikeF","humidity","windMph"]
["id"]). Leave a field out and that column comes back blank. - Add columns by dragging a Table Column into the table for each field —
date,zip,location,region,conditions,tempF,feelsLikeF,humidity,windMph,windDir. The column's field picker is single-select, so set each column's Data Path and Column Label directly (one column per field). String and Int fields display fine with the default Text format. -
Fix the Date column. A
Datefield shows blank under the defaultTextformat. Select the Date column → Behavior → Format =Date, and set a Time Zone (e.g.Fuuz Setting) — a Date won't render without one. - Give the table a fixed Height (e.g.
400px) so it doesn't collapse, and optionally, after the Get Weather button'sloadDatastep, call$components.Table2.fn.search()so the history refreshes immediately after a lookup (otherwise it refreshes on the next screen load / Auto Load). - Save + deploy the screen.
Look up 90210. Look it up again — the history table still shows one row (the upsert updated it). Look up a different ZIP like 33139 — a second row appears, storing the ZIP you typed. The table is your audit trail, deduped by ZIP + day.
| Nuance | What to do |
|---|---|
| Where to build models | Application Designer → Data Model (not the legacy Schema Designer). |
| Model not in the Workspace tree | Assign it a Module — the App Designer Workspace groups by module. |
| Dedup | Unique key field = zip|date + upsert{Model} matching on key. |
| API returns strings, model wants Int | Cast with $number(...) in the Mutate variables transform. |
| Getting the entered ZIP into the row | wttr.in doesn't echo the ZIP — stash it with a Set Context node ({ "zip": zip }) before HTTP, read it back in the Mutate via $state.context.zip. |
| Set Context stores an object, not the value | Use { "zip": zip } (the field), not { "zip": $ } (whole payload) — the latter breaks the key concat and shows up as a Mutate "$payload not provided" error. |
$state.context.zip autocomplete eats your typing |
Write it as $lookup($lookup($state,"context"),"zip"). |
| A column is blank even though its Data Path is set | Add the field name to the table's Data → Additional Query Fields list. Data Path = what to display; that list = what the query actually fetches (defaults to just ["id"]). |
| Date column renders blank | Set the column's Format = Date and a Time Zone (e.g. Fuuz Setting). The default Text format can't render a Date. |
| Table collapses to a thin bar | Give the Table a fixed Height (e.g. 400px). |
| Nothing persists | Re-deploy the model and the flow after the changes. |
| History won't refresh | Call $components.Table2.fn.search() after the lookup (or rely on Auto Load to refresh on screen open). |
-
Trend view — chart
tempFoverdatefor a ZIP using the stored history. - Scheduled capture — a Flow Schedule that upserts readings for a set of ZIPs every morning, building history without anyone opening the screen.
-
One row per forecast day — promote
forecastfrom JSON into a childForecastDaymodel with a relation, for true per-day querying.
Training: Build a Weather Lookup Screen (V1) · Training: Create a Data Model · Training: Create a Data Flow · Training: Explore the GraphQL API
Getting Started (14)
- Access Field Level Help within the Fuuz Platform
- Field-Level Help
- Fuuz Platform 101: Low/No-Code Technology in Manufacturing
- Fuuz Platform Architecture
- Getting to Know the Fuuz Platform
- Logging into Fuuz – Cloud Access
- Manage what displays in Field Level Help throughout Fuuz
- Recovering Your Fuuz Account
- Sharing A Page
- Switching Between Apps in Fuuz
- Switching between Fuuz Environments (Build, QA, Production)
- Trouble Logging Into Fuuz
- Unique Email Plus Addressing
- Welcome To Industry Accelerators!
Training Guides (52)
Applications
- Brand and Configure Your Application
- Create an Application
- Deactivate (Retire) an Application
- Find Pages Beyond the Left Menu
- Install a Fuuz Package
- Navigate the Application Designer
- Retire an Application
Access & Users
- Approve Access Requests
- Approve Application Access Requests
- Configure the Internal Password Policy
- Create a Role
- Create an API Key
- Deactivate and Reactivate a User
- Grant Permissions with Policies
- Investigate Login Activity
- Invite a User to an Application
- Manage App Users
- Request Access to an Application
- Switch Applications, Roles, and Environments
- Understand Developer Access
- Understand Web Access
- Use the User Menu (Profile, Theme, and More)
Data Models & Schema
- Add a Custom Field
- Create a Data Model
- Create a Sequence
- Design Model Fields in the Schema Designer
- Relate Two Data Models
Screens
Weather Lookup Series — guided 3-part build
- Part 1 · Build the Screen (Beginner)
- Part 2 · Store the Readings (Intermediate)
- Part 3 · Watched Locations & Scheduled Capture (Advanced)
Data Flows & Integrations
- Call an External API with a Flow
- Connect to External Systems
- Create a Data Flow
- Create a Notification Channel
- Create a Webhook
- Save Queries, Scripts, and Data Mappings
- Schedule a Data Flow
- Use the Script Editor
Data, Reporting & Monitoring
- Browse Data with Data Explorer
- Build a Document (Report or Label)
- Check Component References
- Create Configuration Records (Modules, Units, Calendars, and More)
- Explore the GraphQL API
- Export Data
- Import Data into an Application
- Investigate Application Logs
- Save an Export Configuration
- Trace a Data Change
Enterprise & Organizations
Platform Concepts & Architecture (10)
- Bridging the Red and Blue Data Divide - How Fuuz Became the First Industrial Platform to Merge Operational and Business Intelligence
- Claude AI Skills for the Fuuz Platform
- Cool Things we built with Fuuz Episode 1 12.5.2025 (Public)
- Differences between MES and ERP from an ERP Consultant Eric Kimberling
- Fuuz can be your "Connected Worker Platform"
- Listen and Learn what MES is and what makes it unique
- Manufacturers struggle with Build versus Buy for their MES and what are the Core 4 Elements
- Stock Price Application
- Why All Manufacturers Build their MES System Part 1
- Why All Manufacturers Build their MES System Part 2
Screens & Application Design (17)
- Application Designer Guide
- Array Input
- Combobox
- Dynamic Field Configurations
- Fuuz Deployment Methodologies
- Fuuz Form Detail Screen Specification
- Historical Data Table Screen Design Standard
- JSON
- JSON Form Fields in Action Steps
- JSON Schema Inputs
- Master Data Table Screen Design Standard
- Mobile Screen Design Standard
- Screen Context Container
- Screen Generation (AI) Flow Template V1.5.1
- Setup Data Table Screen Design Standard
- Table Column Conditional Formatting
- Transform Data in a Column
Data Models & Schema (8)
Data Flows & Scripting (51)
Designing Flows
- Data Flow Design Standards
- Data Flow Logs
- Debugging and Testing our Fuuz Data Flows
- Flow Schedules
- Fuuz Data Flows enable DataOps at Scale, ETL, iPaaS and more
- How to Create APIs Using Data Flows in Fuuz
- How To General E-Commerce Integrations using Data Flows in Fuuz iPaaS
- How to Setup a daily file import using Fuuz Data Flows
- Managing Large Datasets in Fuuz: Data Flow Engine Performance Optimization
- The Power of Data Flows - Unlocking Industrial Intelligence with Fuuz
- Using Fuuz with FTP integrations and Data Flows iPaaS
Data Flow Nodes
- Data Flow Nodes Reference
- Debugging & Context Nodes
- Flow Control Nodes
- Fuuz Platform Nodes
- IIoT & Gateway Nodes
- Integration Nodes
- Notification Nodes
- Source & Trigger Nodes
- Transform Nodes
JSONata Reference
- Aggregation Functions
- Array Functions
- Boolean Functions
- Boolean Operators
- Comparison Operators
- Composition
- Construction
- Constructs
- Custom Fuuz Only JSONata Library
- Date Time Functions
- Date Time Processing
- Expressions
- Fuuz Bindings: $predicateFilter
- Higher Order Functions
- Jsonata Tutorial
- Numeric Functions
- Numeric Operators
- Object Functions
- Other Operators
- Path Operators
- Predicate Expressions
- Processing Model
- Regex
- Simple Queries
- Slow Transform Performance: JSONata vs JavaScript Optimization Guide
- Sorting Grouping and Aggregation
- String Functions
Scripting
Integrations & Connectors (30)
General & iPaaS
- API Keys
- Cloud Connectors - Complete Reference Guide
- Connecting a CRM with your ERP using Fuuz
- Connecting a Vending Machine to your ERP system using Fuuz
- Creating a Scheduled Integration & Sending a CSV File in an Email
- Debug a NetSuite SOAP API integration
- Fuuz Connections help you integrate your Systems and Devices
- Fuuz has lists of Connectors and Drivers you can use
- Fuuz has pre-built integration Connectors
- How to create a check an ODBC connection with another system
- How to Create a RESTful API Using the Fuuz Platform
- How to create a simple Integration and Store data in Fuuz
- How To Design or Configure Policies and Policy Groups for my App in Fuuz
- How to Integrate Fuuz with another product or another API
- How to Integrate with an HR system like ADP using Fuuz iPaaS
- How to use API Explorer and GraphQL to Query Data in Fuuz for Beginners
- How you Integrate your ERP with your MES
- Industry 3 and Industry 4 differences in ERP and MES Integrations
- Integrated Carrier Package
- Make REST-Based Calls With An API Key
- Policy Groups
- System connectivity validation - testing a connection when your 3rd party moves its hosting
- Using Fuuz as an iPaaS to Connect - to an API, Collect - Data from the API, Store - that data in Fuuz tables
Plex
- How to connect using Plex UX datasources from Fuuz iPaaS
- How to integrate with Plex Classic using Fuuz iPaaS
- How to Setup and Connect to Plex APIs
EDI
IIoT & Edge Gateway (18)
- Edge Connections: Complete Industrial Integration Reference
- Edge Gateway Flows
- Edge Gateway Installation Step-by-Step
- Edge to Cloud Infrastructure
- Gateway Deployment & Architecture
- Gateway System Requirements
- How IIoT fits into the Industrial Data "Stack"
Physical Device Connectors
- Connecting To Kepware OPCUA Server
- Fanuc Robot Connectivity using Edge Gateway
- HMI Template Standard - ISA-101 Compliant
- How to connect OPC/UA simulator to the Edge Gateway
- Modbus TCP
- MQTT
- Omron PLC/HMI NX102 Connectivity with Edge Gateway
Edge Data Connectors
Reporting, Documents & Dashboards (8)
- Building a Non-Conformance Report (NCR) Application in Fuuz
- Create responsive structured dashboard layouts using the Grid Container and Grid Cell components
- How to add visualizations (charts and graphs) to reports in Fuuz for Beginners
- How to build real-time reports in Fuuz from scratch for Beginners
- How to modify existing reports in Fuuz for Beginners
- Non-Conformance Report Accelerator
- Printing Documents
- Printing Documents From Fuuz
Administration & Access Control (27)
- Access Control
- Access Requests
- Access Requests: Overview
- Access Type Overview
- Access Types
- Add Users to Fuuz Apps
- App Admin Access
- App Management
- App Users
- Applications (Tenants)
- Authentication Events
- Change a User's Access Type
- Configurations
- Create Users and Set Access Type
- Enterprise Admin Overview
- Enterprise Users
- Enterprise Users vs Access Requests
- How To Login to your Fuuz Enterprise - Non Single Sign On
- How To Login to your Fuuz Enterprise - Single Sign On
- Identity Providers
- Notifications
- Notifications
- Organizations
- Roles
- Settings
- Switching my active Role within Fuuz
- Troubleshooting User Login Errors Due to Identity Provider Misconfiguration
Data Management (8)
Accelerators, Templates & Packages (8)
- Create a Quality Batch Golden Record Analysis Tool in Fuuz
- Fuuz Developer 101 Bootcamp - 2026 Schedule & Enrollment
- Fuuz Developer 101 Bootcamp - Program Overview
- Fuuz Industry Accelerators - Installation & Best Practices
- Fuuz Industry Accelerators - Overview
- How-To: Managing Green/Blue Deployments with Fuuz Package Management Zero-Downtime
- Model Agnostic Scheduling System APS
- Setting up In-House Fuuz
Design Standards (1)
How-To Guides (8)
- Connecting to Fuuz from a remote system to execute a Fuuz API
- Connecting to Fuuz from a remote system to execute a Fuuz API - Extended Features Part 2
- Data Mapping
- Document your Application using Atlassian Confluence and our Pre-Built App
- Fuuz Platform Capabilities
- How to add multiple data records to the Fuuz database with a single API call
- How to on Best Practices for Designing Flows in Fuuz
- Using the Transformation Explorer
FAQ & Troubleshooting (1)
Release Notes (117)
2026
- 2026.1 (January 2026)
- 2026.2 (February 2026)
- 2026.3 (March 2026)
- 2026.4 (April 2026)
- 2026.5 (May 2026)
- 2026.6 (June 2026)
2025
- 2025.1 (January 2025)
- 2025.10 (October 2025)
- 2025.11 (November 2025)
- 2025.12 (December 2025)
- 2025.2 (February 2025)
- 2025.4 (April 2025)
- 2025.5 (May 2025)
- 2025.6 (June 2025)
- 2025.7 (July 2025)
- 2025.8 (August 2025)
- 2025.9 (September 2025)
2024
- 2024.1 (January 2024)
- 2024.10 (October 2024)
- 2024.11 (November 2024)
- 2024.12 (December 2024)
- 2024.2 (February 2024)
- 2024.3 (March 2024)
- 2024.4 (April 2024)
- 2024.5 (May 2024)
- 2024.6 (June 2024)
- 2024.7 (July 2024)
- 2024.8 (August 2024)
- 2024.9 (September 2024)
2023
- 2023.5 (May 2023)
- 2023.1 (January 2023)
- 2023.10 (October 2023)
- 2023.11 (November 2023)
- 2023.12 (December 2023)
- 2023.2 (February 2023)
- 2023.3 (March 2023)
- 2023.4 (April 2023)
- 2023.6 (June 2023)
- 2023.7 (July 2023)
- 2023.8 (August 2023)
- 2023.9 (September 2023)
2022
- 2022 Q1 Fuuz Package Updates (03/11/2022)
- 2022 Q1 Fuuz Release Notes v3.87.0 (03/17/2022)
- 2022 Q1 MFGx Release Notes v3.78.0 (01/06/2022)
- 2022 Q1 MFGx Release Notes v3.79.0 (01/13/2022)
- 2022 Q1 MFGx Release Notes v3.80.0 (01/20/2022)
- 2022 Q1 MFGx Release Notes v3.81.0 (01/27/2022)
- 2022 Q1 MFGx Release Notes v3.82.0 (02/03/2022)
- 2022 Q1 MFGx Release Notes v3.83.0 (02/10/2022)
- 2022 Q1 MFGx Release Notes v3.85.0 (02/28/2022)
- 2022 Q2 Fuuz Release Notes v3.90.0 (04/14/2022)
- 2022 Q2 Fuuz Release Notes v3.91.0 (04/21/2022)
- 2022 Q2 Fuuz Release Notes v3.92.0 (04/28/2022)
- 2022 Q2 Fuuz Release Notes v3.93.0 (05/06/2022)
- 2022 Q2 Fuuz Release Notes v3.94.0 - v3.97.0 (June 13, 2022)
- 2022 Q2 Fuuz Release Notes v3.98.0 (06/16/2022)
- 2022 Q2 Fuuz Release Notes v3.99.0 (06/30/2022)
- 2022 Q3 Fuuz Release Notes v3.100.0 🎉 (07/06/2022)
- 2022 Q3 Fuuz Release Notes v3.101.0 (07/21/2022)
- 2022 Q3 Fuuz Release Notes v3.102.0 (08/11/2022)
- 2022 Q3 Fuuz Release Notes v3.103.0 (08/18/2022)
- 2022 Q4 Fuuz Release Notes v3.107.0 - v3.109.0 (10/27/2022)
2021
- 2021 Q1 MFGx Release Notes v3.29.0 (1/7/2021)
- 2021 Q1 MFGx Release Notes v3.30.0 (1/14/2021)
- 2021 Q1 MFGx Release Notes v3.34.0 (2/4/2021)
- 2021 Q1 MFGx Release Notes v3.37.0 (2/26/2021)
- 2021 Q1 MFGx Release Notes v3.38.0 (3/5/2021)
- 2021 Q1 MFGx Release Notes v3.40.0 (3/25/2021)
- 2021 Q1 MFGx.io Release Notes v3.32.0 (1/21/2021)
- 2021 Q1 MFGx.io Release Notes v3.33.0 (1/28/2021)
- 2021 Q2 MFGx Release Notes v3.41.0 (4/1/2021)
- 2021 Q2 MFGx Release Notes v3.42.0 (4/8/2021)
- 2021 Q2 MFGx Release Notes v3.43.0 (4/16/2021)
- 2021 Q2 MFGx Release Notes v3.44.0 (4/22/2021)
- 2021 Q2 MFGx Release Notes v3.45.0 (4/29/2021)
- 2021 Q2 MFGx Release Notes v3.47.0 (5/13/2021)
- 2021 Q2 MFGx Release Notes v3.48.0 (5/20/2021)
- 2021 Q2 MFGx Release Notes v3.48.0 (5/27/2021)
- 2021 Q2 MFGx Release Notes v3.50.0 (6/03/2021)
- 2021 Q2 MFGx Release Notes v3.51.0 (6/10/2021)
- 2021 Q2 MFGx Release Notes v3.52.0 (6/17/2021)
- 2021 Q2 MFGx Release Notes v3.54.0 (6/28/2021)
- 2021 Q3 Fuuz Release Notes v3.58.0 (7/22/2021)
- 2021 Q3 MFGx Release Notes v3.55.0 (7/1/2021)
- 2021 Q3 MFGx Release Notes v3.60.0 (8/5/2021)
- 2021 Q3 MFGx Release Notes v3.61.0 (8/17/2021)
- 2021 Q3 MFGx Release Notes v3.62.0 (8/19/2021)
- 2021 Q4 MFGx Release Notes v3.68.0 (10/8/2021)
- 2021 Q4 MFGx Release Notes v3.69.0 (10/14/2021)
- 2021 Q4 MFGx Release Notes v3.70.0 (10/21/2021)
- 2021 Q4 MFGx Release Notes v3.71.0 (10/28/2021)
- 2021 Q4 MFGx Release Notes v3.72.0 (11/04/2021)
- 2021 Q4 MFGx Release Notes v3.73.0 (11/11/2021)
- 2021 Q4 MFGx Release Notes v3.74.0 (11/19/2021)
- 2021 Q4 MFGx Release Notes v3.75.0 (12/02/2021)
- 2021 Q4 MFGx Release Notes v3.76.0 (12/09/2021)
- 2021 Q4 MFGx Release Notes v3.77.0: The Holiday Update (12/16/2021)
2020
- 2020 Q2 MFGx Release Notes v2.32.0 (4/9/2020)
- 2020 Q2 MFGx Release Notes v2.33.0 (4/16/2020)
- 2020 Q2 MFGx Release Notes v2.35.0 (4/30/2020)
- 2020 Q2 MFGx Release Notes v3.5.0 (6/18/2020)
- 2020 Q2 MFGx Release Notes v3.6.0 (6/25/2020)
- 2020 Q2 MFGx.io Release Notes v2.32.0 (4/9/2020)
- 2020 Q3 MFGx Release Notes v3.10.0 (7/23/2020)
- 2020 Q3 MFGx Release Notes v3.11.0 (7/30/2020)
- 2020 Q3 MFGx Release Notes v3.13.0 (8/13/2020)
- 2020 Q3 MFGx Release Notes v3.17.0 (9/21/2020)
- 2020 Q3 MFGx Release Notes v3.7.0 (7/6/2020)
- 2020 Q3 MFGx Release Notes v3.8.0 (7/9/2020)
- 2020 Q4 MFGx Release Notes v3.20.0 (10/13/2020)
- 2020 Q4 MFGx Release Notes v3.21.0 (10/15/2020)
- 2020 Q4 MFGx Release Notes v3.22.1 (10/22/2020)
- 2020 Q4 MFGx Release Notes v3.23.0 (11/5/2020)
- 2020 Q4 MFGx Release Notes v3.24.0 (11/12/2020)
- 2020 Q4 MFGx Release Notes v3.26.0 (12/3/2020)
- 2020 Q4 MFGx Release Notes v3.27.0 (12/10/2020)
- 2020 Q4 MFGx Release Notes v3.28.0 (12/17/2020)