Schedule
A Schedule enables you to execute Logic Flows automatically on a time-based schedule. Instead of waiting for user actions or entity events, Schedules proactively run your business logic at defined intervals—every minute, hour, day, week, or month.
The Need for Scheduled Execution
Many business processes don't fit neatly into event-driven patterns. They need to run regularly regardless of user activity:
- Daily reports generated every morning before business hours
- Weekly data cleanup removing stale records every Sunday night
- Monthly invoicing creating invoices on the first of each month
- Hourly synchronization keeping external systems up to date
- Periodic health checks monitoring data quality at regular intervals
Without scheduled execution, these processes would require manual triggering or complex workarounds.
How Schedules Work
When you create a Schedule in FlowOn Logic:
- Configuration: You define the schedule parameters (frequency, interval, start date)
- Job Creation: FlowOn automatically creates a native Dynamics 365 background job
- Automatic Execution: The CRM job engine runs your Logic Flow at the specified intervals
- Status Tracking: The system tracks when the flow last ran and when it will run next
Schedule Structure
| Component | Description | Required |
|---|---|---|
| Name | Unique identifier for the schedule | Yes |
| Project | The FlowOn Project this schedule belongs to | Yes |
| Logic Flow | The Flow to execute on schedule | Yes |
| Frequency | Time unit for recurrence (Minute, Hour, Day, Week, Month) | Yes |
| Interval | Number of frequency units between executions | Yes |
| Start Date | When the schedule becomes active | Yes |
| Next Run Date | When the flow will next execute (auto-calculated) | Auto |
| Last Run Date | When the flow last executed (auto-updated) | Auto |
| Status | Current state: Started or Stopped | Auto |
Frequency Options
| Frequency | Description | Example Use Cases |
|---|---|---|
| Minute | Runs every N minutes | Near real-time sync, frequent polling, SLA monitoring |
| Hour | Runs every N hours | Regular data updates, periodic checks, cache refresh |
| Day | Runs every N days | Daily reports, nightly cleanup, daily aggregations |
| Week | Runs every N weeks | Weekly summaries, periodic maintenance, weekly alerts |
| Month | Runs every N months | Monthly invoicing, monthly reports, quarterly reviews |
Interval Configuration
The Interval specifies how many frequency units pass between executions:
| Frequency | Interval | Result |
|---|---|---|
| Minute | 5 | Every 5 minutes |
| Minute | 15 | Every 15 minutes |
| Hour | 1 | Every hour |
| Hour | 4 | Every 4 hours |
| Day | 1 | Every day |
| Day | 3 | Every 3 days |
| Week | 1 | Every week |
| Week | 2 | Every 2 weeks (biweekly) |
| Month | 1 | Every month |
| Month | 3 | Every 3 months (quarterly) |
Schedule Status
| Status | Description | CRM Job State |
|---|---|---|
| Started | Schedule is active and will execute at intervals | Running/Waiting |
| Stopped | Schedule is deactivated and will not execute | Paused |
When you create a schedule, its status is automatically set to Started and a native CRM background job is created. To pause execution, deactivate the schedule—status changes to Stopped and the CRM job is paused.
Date Tracking
The system automatically maintains two date fields:
Next Run Date: Calculated based on frequency, interval, and either the start date (for new schedules) or the last run date (for existing schedules). This tells you exactly when the flow will execute next.
Last Run Date: Updated each time the scheduled flow executes. This provides an audit trail and helps troubleshoot if executions are being missed.
Example Schedules
Daily Sales Report
Schedule: DailySalesReport
Project: Sales Analytics
Logic Flow: GenerateDailySalesReport
┌─────────────────────────┬────────────────────────────────────────────┐
│ Property │ Value │
├─────────────────────────┼────────────────────────────────────────────┤
│ Frequency │ Day │
├─────────────────────────┼────────────────────────────────────────────┤
│ Interval │ 1 │
├─────────────────────────┼────────────────────────────────────────────┤
│ Start Date │ 2026-01-15 06:00:00 (6 AM) │
├─────────────────────────┼────────────────────────────────────────────┤
│ Status │ Started │
├─────────────────────────┼────────────────────────────────────────────┤
│ Next Run Date │ 2026-01-16 06:00:00 │
├─────────────────────────┼────────────────────────────────────────────┤
│ Last Run Date │ 2026-01-15 06:00:00 │
└─────────────────────────┴────────────────────────────────────────────┘
Purpose: Generates and emails daily sales summary report every morning
at 6 AM before business hours begin.
Hourly External System Sync
Schedule: HourlyCRMSync
Project: Integration Hub
Logic Flow: SyncToExternalCRM
┌─────────────────────────┬────────────────────────────────────────────┐
│ Property │ Value │
├─────────────────────────┼────────────────────────────────────────────┤
│ Frequency │ Hour │
├─────────────────────────┼────────────────────────────────────────────┤
│ Interval │ 1 │
├─────────────────────────┼────────────────────────────────────────────┤
│ Start Date │ 2026-01-15 00:00:00 │
├─────────────────────────┼────────────────────────────────────────────┤
│ Status │ Started │
└─────────────────────────┴────────────────────────────────────────────┘
Purpose: Synchronizes new and modified records to external CRM system
every hour to maintain near real-time data consistency.
Weekly Data Cleanup
Schedule: WeeklyDataCleanup
Project: Data Maintenance
Logic Flow: CleanupStaleRecords
┌─────────────────────────┬────────────────────────────────────────────┐
│ Property │ Value │
├─────────────────────────┼────────────────────────────────────────────┤
│ Frequency │ Week │
├─────────────────────────┼────────────────────────────────────────────┤
│ Interval │ 1 │
├─────────────────────────┼────────────────────────────────────────────┤
│ Start Date │ 2026-01-19 02:00:00 (Sunday 2 AM) │
├─────────────────────────┼────────────────────────────────────────────┤
│ Status │ Started │
└─────────────────────────┴────────────────────────────────────────────┘
Purpose: Archives completed activities older than 90 days and removes
temporary records every Sunday at 2 AM during low-usage hours.
Monthly Invoice Generation
Schedule: MonthlyInvoicing
Project: Finance Automation
Logic Flow: GenerateMonthlyInvoices
┌─────────────────────────┬────────────────────────────────────────────┐
│ Property │ Value │
├─────────────────────────┼────────────────────────────────────────────┤
│ Frequency │ Month │
├─────────────────────────┼────────────────────────────────────────────┤
│ Interval │ 1 │
├─────────────────────────┼────────────────────────────────────────────┤
│ Start Date │ 2026-02-01 00:00:00 (1st of month) │
├─────────────────────────┼────────────────────────────────────────────┤
│ Status │ Started │
└─────────────────────────┴────────────────────────────────────────────┘
Purpose: Generates invoices for all billable activities from the
previous month on the 1st of each month.
Five-Minute SLA Monitor
Schedule: SLAMonitor
Project: Service Management
Logic Flow: CheckSLABreaches
┌─────────────────────────┬────────────────────────────────────────────┐
│ Property │ Value │
├─────────────────────────┼────────────────────────────────────────────┤
│ Frequency │ Minute │
├─────────────────────────┼────────────────────────────────────────────┤
│ Interval │ 5 │
├─────────────────────────┼────────────────────────────────────────────┤
│ Start Date │ 2026-01-15 00:00:00 │
├─────────────────────────┼────────────────────────────────────────────┤
│ Status │ Started │
└─────────────────────────┴────────────────────────────────────────────┘
Purpose: Checks for cases approaching or breaching SLA targets every
5 minutes and sends alerts to supervisors.
Schedule Management
Creating a Schedule
- Define the schedule name and assign to a project
- Select the Logic Flow to execute
- Configure frequency and interval
- Set the start date/time
- Save—status automatically becomes Started
- Native CRM job is created and begins executing
Deactivating a Schedule
To pause a schedule without deleting it:
- Open the schedule record
- Deactivate the record
- Status changes to Stopped
- The native CRM job is paused
- No further executions occur until reactivated
Reactivating a Schedule
To resume a stopped schedule:
- Open the schedule record
- Activate the record
- Status changes to Started
- The native CRM job resumes
- Next Run Date is recalculated from the current time
Best Practices
Choose Appropriate Frequencies: Don't run schedules more frequently than necessary. Minute-level schedules consume more resources than daily schedules. Match frequency to actual business needs.
Consider Time Zones: Start dates are typically in UTC. Plan your schedules accounting for your users' time zones. A "daily morning report" should run at morning time in the relevant time zone.
Avoid Peak Hours: For resource-intensive flows, schedule execution during off-peak hours (nights, weekends) when possible. This reduces impact on user experience.
Design Flows for Scheduled Execution: Flows run by schedules don't have a triggering record or user context. Design them to:
- Query for the records they need to process
- Handle empty result sets gracefully
- Process records in batches for large datasets
Monitor Execution: Regularly check Last Run Date to ensure schedules are executing as expected. Investigate if dates don't update as anticipated.
Use Meaningful Names: Include frequency and purpose in schedule names (e.g., "DailyMorningReport", "HourlySyncToSalesforce", "WeeklyCleanup").
Handle Failures Gracefully: Scheduled flows should include error handling. Log errors, send notifications for critical failures, and avoid letting one record's error stop processing of remaining records.
Document the Schedule: Use the Flow's description to document what the schedule does, why it runs at its frequency, and any dependencies.
Start Small with High-Frequency Schedules: If implementing a minute-level schedule, start with a longer interval (15 or 30 minutes) and reduce only if business needs require it.
Plan for Overlap: If a flow takes longer to run than the interval between executions, you may have overlapping runs. Design flows to handle this or increase the interval.