# Try function issue

**URL:** <https://forum.inductiveautomation.com/t/try-function-issue/91073>\
**Category:** Ignition\
**Tags:** vision\
**Created:** [May 29, 2024, 2:09pm UTC](https://forum.inductiveautomation.com/t/try-function-issue/91073 "2024-05-29T14:09:20Z")\
**Posts on this page:** 20\
**Page:** 1

<div class="post-metadata">

**Author:** ![Ly17](https://avatars.discourse-cdn.com/v4/letter/l/c57346/32.png) [@Ly17](https://forum.inductiveautomation.com/u/Ly17)\
**Post date:** [May 29, 2024, 2:09pm UTC](https://forum.inductiveautomation.com/t/try-function-issue/91073/1 "2024-05-29T14:09:20Z")

</div>

When I use the Try function, it goes to failover but when I remove it, the expression calculates correctly. Why is that? I'm probably doing something wrong. How would I fix this?

Here is the code:

```python
try(
	if(now()>=todate(tostr(dateformat(if(todate(tostr(dateformat({[.]Production Shift 1/Working Date}, 'MM/dd/yyyy')) + ' ' + {[.]Production Shift 1/Hours/Breaks}[5,4] + ':00')>=todate(tostr(dateformat({[.]Production Shift 1/Working Date}, 'MM/dd/yyyy')) + ' ' + '00:00' + ':00') &&
										todate(tostr(dateformat({[.]Production Shift 1/Working Date}, 'MM/dd/yyyy')) + ' ' + {[.]Production Shift 1/Hours/Breaks}[5,4] + ':00')<todate(tostr(dateformat({[.]Production Shift 1/Working Date}, 'MM/dd/yyyy')) + ' ' + {[.]Production Shift 1/Hours/Breaks}[0,4] + ':00'),
										addDays({[.]Production Shift 1/Working Date},1), {[.]Production Shift 1/Working Date}
										), 
							'MM/dd/yyyy')) + ' ' + {[.]Production Shift 1/Hours/Breaks}[5,4] + ':00') && 
	now()<todate(tostr(dateformat(if(todate(tostr(dateformat({[.]Production Shift 1/Working Date}, 'MM/dd/yyyy')) + ' ' + {[.]Production Shift 1/Hours/Breaks}[5,5] + ':00')>=todate(tostr(dateformat({[.]Production Shift 1/Working Date}, 'MM/dd/yyyy')) + ' ' + '00:00' + ':00') &&
									todate(tostr(dateformat({[.]Production Shift 1/Working Date}, 'MM/dd/yyyy')) + ' ' + {[.]Production Shift 1/Hours/Breaks}[5,5] + ':00')<todate(tostr(dateformat({[.]Production Shift 1/Working Date}, 'MM/dd/yyyy')) + ' ' + {[.]Production Shift 1/Hours/Breaks}[0,4] + ':00'),
									addDays({[.]Production Shift 1/Working Date},1), {[.]Production Shift 1/Working Date}
									), 
						'MM/dd/yyyy')) + ' ' + {[.]Production Shift 1/Hours/Breaks}[5,5] + ':00') && 
	{[.]Production Shift 1/Hours/Shift Var}!=11, 
	secondsbetween(now(), todate(tostr(dateformat(if(todate(tostr(dateformat({[.]Production Shift 1/Working Date}, 'MM/dd/yyyy')) + ' ' + {[.]Production Shift 1/Hours/Breaks}[5,5] + ':00')>=todate(tostr(dateformat({[.]Production Shift 1/Working Date}, 'MM/dd/yyyy')) + ' ' + '00:00' + ':00') &&
													todate(tostr(dateformat({[.]Production Shift 1/Working Date}, 'MM/dd/yyyy')) + ' ' + {[.]Production Shift 1/Hours/Breaks}[5,5] + ':00')<todate(tostr(dateformat({[.]Production Shift 1/Working Date}, 'MM/dd/yyyy')) + ' ' + {[.]Production Shift 1/Hours/Breaks}[0,4] + ':00'),
													addDays({[.]Production Shift 1/Working Date},1), {[.]Production Shift 1/Working Date}
													), 
										'MM/dd/yyyy')) + ' ' + {[.]Production Shift 1/Hours/Breaks}[5,5] + ':00')
					),
			if(now()<todate(tostr(dateformat(if(todate(tostr(dateformat({[.]Production Shift 1/Working Date}, 'MM/dd/yyyy')) + ' ' + {[.]Production Shift 1/Hours/Breaks}[5,4] + ':00')>=todate(tostr(dateformat({[.]Production Shift 1/Working Date}, 'MM/dd/yyyy')) + ' ' + '00:00' + ':00') &&
												todate(tostr(dateformat({[.]Production Shift 1/Working Date}, 'MM/dd/yyyy')) + ' ' + {[.]Production Shift 1/Hours/Breaks}[5,4] + ':00')<todate(tostr(dateformat({[.]Production Shift 1/Working Date}, 'MM/dd/yyyy')) + ' ' + {[.]Production Shift 1/Hours/Breaks}[0,4] + ':00'),
												addDays({[.]Production Shift 1/Working Date},1), {[.]Production Shift 1/Working Date}
											 	), 
								'MM/dd/yyyy')) + ' ' + {[.]Production Shift 1/Hours/Breaks}[5,4] + ':00'), 
			secondsbetween(todate(tostr(dateformat(if(todate(tostr(dateformat({[.]Production Shift 1/Working Date}, 'MM/dd/yyyy')) + ' ' + {[.]Production Shift 1/Hours/Breaks}[5,4] + ':00')>=todate(tostr(dateformat({[.]Production Shift 1/Working Date}, 'MM/dd/yyyy')) + ' ' + '00:00' + ':00') &&
													todate(tostr(dateformat({[.]Production Shift 1/Working Date}, 'MM/dd/yyyy')) + ' ' + {[.]Production Shift 1/Hours/Breaks}[5,4] + ':00')<todate(tostr(dateformat({[.]Production Shift 1/Working Date}, 'MM/dd/yyyy')) + ' ' + {[.]Production Shift 1/Hours/Breaks}[0,4] + ':00'),
													addDays({[.]Production Shift 1/Working Date},1), {[.]Production Shift 1/Working Date}
													), 
										'MM/dd/yyyy')) + ' ' + {[.]Production Shift 1/Hours/Breaks}[5,4] + ':00'),
							todate(tostr(dateformat(if(todate(tostr(dateformat({[.]Production Shift 1/Working Date}, 'MM/dd/yyyy')) + ' ' + {[.]Production Shift 1/Hours/Breaks}[5,5] + ':00')>=todate(tostr(dateformat({[.]Production Shift 1/Working Date}, 'MM/dd/yyyy')) + ' ' + '00:00' + ':00') &&
													todate(tostr(dateformat({[.]Production Shift 1/Working Date}, 'MM/dd/yyyy')) + ' ' + {[.]Production Shift 1/Hours/Breaks}[5,5] + ':00')<todate(tostr(dateformat({[.]Production Shift 1/Working Date}, 'MM/dd/yyyy')) + ' ' + {[.]Production Shift 1/Hours/Breaks}[0,4] + ':00'),
													addDays({[.]Production Shift 1/Working Date},1), {[.]Production Shift 1/Working Date}
													), 
										'MM/dd/yyyy')) + ' ' + {[.]Production Shift 1/Hours/Breaks}[5,5] + ':00')
							),
			0)
	),
99)

```

Thanks,

---

<div class="post-metadata">

**Author:** ![Transistor](https://sea1.discourse-cdn.com/inductiveautomation/user_avatar/forum.inductiveautomation.com/transistor/32/3380_2.png) [@Transistor](https://forum.inductiveautomation.com/u/Transistor)\
**Post date:** [May 29, 2024, 2:25pm UTC](https://forum.inductiveautomation.com/t/try-function-issue/91073/2 "2024-05-29T14:25:47Z")

</div>

Yuck! What are you checking?  
Why are you not working with DateTime datatypes throughout?

---

<div class="post-metadata">

**Author:** ![Ly17](https://avatars.discourse-cdn.com/v4/letter/l/c57346/32.png) [@Ly17](https://forum.inductiveautomation.com/u/Ly17)\
**Post date:** [May 29, 2024, 2:43pm UTC](https://forum.inductiveautomation.com/t/try-function-issue/91073/3 "2024-05-29T14:43:14Z")

</div>

I'm using a dataset with time string only and need to do some conversions.

---

<div class="post-metadata">

**Author:** ![Transistor](https://sea1.discourse-cdn.com/inductiveautomation/user_avatar/forum.inductiveautomation.com/transistor/32/3380_2.png) [@Transistor](https://forum.inductiveautomation.com/u/Transistor)\
**Post date:** [May 29, 2024, 2:50pm UTC](https://forum.inductiveautomation.com/t/try-function-issue/91073/4 "2024-05-29T14:50:14Z")

</div>

1. Why are you using time strings? Usually we try to keep datetime as datetime datatype until the point of display.
2. What is the source of the dataset? If it is a query then why not return datetime?

---

<div class="post-metadata">

**Author:** ![Ly17](https://avatars.discourse-cdn.com/v4/letter/l/c57346/32.png) [@Ly17](https://forum.inductiveautomation.com/u/Ly17)\
**Post date:** [May 29, 2024, 3:12pm UTC](https://forum.inductiveautomation.com/t/try-function-issue/91073/5 "2024-05-29T15:12:19Z")

</div>

It's a memory dataset tag that users are using to setup their hours so there is no need for date.

I'm trying to understand the issue I'm having with the Try function and why it's not working as I would expect it.

---

<div class="post-metadata">

**Author:** ![Cory.grube](https://sea1.discourse-cdn.com/inductiveautomation/user_avatar/forum.inductiveautomation.com/cory.grube/32/20476_2.png) [@Cory.grube](https://forum.inductiveautomation.com/u/Cory.grube)\
**Post date:** [May 29, 2024, 3:25pm UTC](https://forum.inductiveautomation.com/t/try-function-issue/91073/6 "2024-05-29T15:25:22Z")

</div>

Dropping the expression into a code editor, it appears you're missing....10 closing parentheses throughout the expression. So that's the immediate answer to your question.

But I'd **strongly** consider reworking the approach here, this will be immensely hard to maintain in the future.

---

<div class="post-metadata">

**Author:** ![Ly17](https://avatars.discourse-cdn.com/v4/letter/l/c57346/32.png) [@Ly17](https://forum.inductiveautomation.com/u/Ly17)\
**Post date:** [May 29, 2024, 3:30pm UTC](https://forum.inductiveautomation.com/t/try-function-issue/91073/7 "2024-05-29T15:30:58Z")

</div>

I don't think I'm missing any parentheses. I mean it works if I remove the Try function. I don't get a bad expression error message.

---

<div class="post-metadata">

**Author:** ![Cory.grube](https://sea1.discourse-cdn.com/inductiveautomation/user_avatar/forum.inductiveautomation.com/cory.grube/32/20476_2.png) [@Cory.grube](https://forum.inductiveautomation.com/u/Cory.grube)\
**Post date:** [May 29, 2024, 3:38pm UTC](https://forum.inductiveautomation.com/t/try-function-issue/91073/8 "2024-05-29T15:38:01Z")

</div>

My mistake, VSCode was rendering open/close parentheses pairs incorrectly. Ctrl+F indicated that you have an equal number of them. All 111 pairs.

Perhaps there's a soft limit to how deep you can nest in a Try expression? Seems unlikely but I've been surprised before. The devs might be able to speak on that.

Otherwise, I don't have much to offer beyond my initial comment

---

<div class="post-metadata">

**Author:** ![Ly17](https://avatars.discourse-cdn.com/v4/letter/l/c57346/32.png) [@Ly17](https://forum.inductiveautomation.com/u/Ly17)\
**Post date:** [May 29, 2024, 3:39pm UTC](https://forum.inductiveautomation.com/t/try-function-issue/91073/9 "2024-05-29T15:39:27Z")

</div>

I just tried replacing the If statement inside the dateformat function with now() and it worked. So, there is something with If statement being nested causing the failover result when using the Try function.

---

<div class="post-metadata">

**Author:** ![JordanCClark](https://sea1.discourse-cdn.com/inductiveautomation/user_avatar/forum.inductiveautomation.com/jordancclark/32/83362_2.png) [@JordanCClark](https://forum.inductiveautomation.com/u/JordanCClark)\
**Post date:** [May 29, 2024, 3:40pm UTC](https://forum.inductiveautomation.com/t/try-function-issue/91073/10 "2024-05-29T15:40:16Z")

</div>

You could probably clean this up with [timeBetween()](https://www.docs.inductiveautomation.com/docs/8.1/appendix/expression-functions/date-and-time/timeBetween).

---

<div class="post-metadata">

**Author:** ![Ly17](https://avatars.discourse-cdn.com/v4/letter/l/c57346/32.png) [@Ly17](https://forum.inductiveautomation.com/u/Ly17)\
**Post date:** [May 29, 2024, 3:44pm UTC](https://forum.inductiveautomation.com/t/try-function-issue/91073/11 "2024-05-29T15:44:38Z")

</div>

You may be right with the limitation of the Try function based on what I previously mentioned with the test I did.

---

<div class="post-metadata">

**Author:** ![Transistor](https://sea1.discourse-cdn.com/inductiveautomation/user_avatar/forum.inductiveautomation.com/transistor/32/3380_2.png) [@Transistor](https://forum.inductiveautomation.com/u/Transistor)\
**Post date:** [May 29, 2024, 4:00pm UTC](https://forum.inductiveautomation.com/t/try-function-issue/91073/12 "2024-05-29T16:00:48Z")

</div>

You really owe it to whoever has to maintain this after you to fix it. It's a horrible mess.

> [@Ly17](#):
>
> so there is no need for date.

Then why are there 30 instances of `todate(tostr(dateformat({[.]Production Shift 1/Working Date}, 'MM/dd/yyyy')))`?

---

<div class="post-metadata">

**Author:** ![JordanCClark](https://sea1.discourse-cdn.com/inductiveautomation/user_avatar/forum.inductiveautomation.com/jordancclark/32/83362_2.png) [@JordanCClark](https://forum.inductiveautomation.com/u/JordanCClark)\
**Post date:** [May 29, 2024, 4:13pm UTC](https://forum.inductiveautomation.com/t/try-function-issue/91073/13 "2024-05-29T16:13:02Z")

</div>

The time gets appended to it then converted back to a date.

timeBetween() would eliminate having to use the specific date for each one.

---

<div class="post-metadata">

**Author:** ![paul-griffith](https://sea1.discourse-cdn.com/inductiveautomation/user_avatar/forum.inductiveautomation.com/paul-griffith/32/37249_2.png) [@paul-griffith](https://forum.inductiveautomation.com/u/paul-griffith)\
**Post date:** [May 29, 2024, 4:19pm UTC](https://forum.inductiveautomation.com/t/try-function-issue/91073/14 "2024-05-29T16:19:55Z")

</div>

For your own sake and that of everyone who comes after you, extract this into multiple intermediate 'stages' using intermediate custom properties. It's **so much** easier to debug an expression that's layered together like that than a single monolithic one like this.

---

<div class="post-metadata">

**Author:** ![jlandwerlen](https://avatars.discourse-cdn.com/v4/letter/j/bc8723/32.png) [@jlandwerlen](https://forum.inductiveautomation.com/u/jlandwerlen)\
**Post date:** [May 29, 2024, 5:09pm UTC](https://forum.inductiveautomation.com/t/try-function-issue/91073/15 "2024-05-29T17:09:22Z")

</div>

If you do leave as-is, please add a comment above the code that includes your name, address and phone number. 🙂

---

<div class="post-metadata">

**Author:** ![lrose](https://sea1.discourse-cdn.com/inductiveautomation/user_avatar/forum.inductiveautomation.com/lrose/32/62724_2.png) [@lrose](https://forum.inductiveautomation.com/u/lrose)\
**Post date:** [May 29, 2024, 8:08pm UTC](https://forum.inductiveautomation.com/t/try-function-issue/91073/16 "2024-05-29T20:08:31Z")

</div>

I've been pretty deep into the expression language for module development, and as far as I know there is no such nesting limitation. Obviously, I'm don't have the same knowledge as some of the IA devs. I'm pretty confident though.

Too my eyes there are some things here that can be changed.

For instance, why use `tostr()` on `dateformat()`? It already returns a string value.  
And why convert a date (pretty sure it is a date) to a string, just to add hours to it and then convert it back? There is quite literally an addHours expression for that purpose.

I think you can cut a lot of your expression down make it far more readable and manageable.

If as @transistor suggested, we just work with dates as dates and we use the expressions to do so, then your expression can be paired down significantly to this:

```python
try(
	if(
		dateIsAfter(
			now(),
			addHours(
				if( dateIsAfter(
						addHours({[.]Production Shift 1/Working Date},toInt({[.]Production Shift 1/Hours/Breaks}[5,4])),
						midnight({[.]Production Shift 1/Working Date})
					)
					&& dateIsBefore(
						addHours({[.]Production Shift 1/Working Date}, toInt({[.]Production Shift 1/Hours/Breaks}[5,4])),
						addHours({[.]Production Shift 1/Working Date}, toInt({[.]Production Shift 1/Hours/Breaks}[0,4]))
					),
					addDays({[.]Production Shift 1/Working Date},1),
					{[.]Production Shift 1/Working Date}
				),
				toInt({[.]Production Shift 1/Hours/Breaks}[5,4])
			))
		)
		&& dateIsBefore(
			now(),
			addHours(
				if( dateIsAfter(
						addHours({[.]Production Shift 1/Working Date}, toInt({[.]Production Shift 1/Hours/Breaks}[5,5])),
						midnight({[.]Production Shift 1/Working Date})
					)
					&& dateIsBefore(
						addHours({[.]Production Shift 1/Working Date}, toInt({[.]Production Shift 1/Hours/Breaks}[5,5])),
						addHours({[.]Production Shift 1/Working Date}, toInt({[.]Production Shift 1/Hours/Breaks}[0,4]))
					),
					addDays({[.]Production Shift 1/Working Date},1),
					{[.]Production Shift 1/Working Date}
				), 
				toInt({[.]Production Shift 1/Hours/Breaks}[5,5])
			))
		&& {[.]Production Shift 1/Hours/Shift Var} != 11,
		secondsbetween(
			now(), 
			addHours(
				if( dateIsAfter(
						addHours({[.]Production Shift 1/Working Date}, toInt({[.]Production Shift 1/Hours/Breaks}[5,5])),
						midnight({[.]Production Shift 1/Working Date})
					)
					&& dateIsBefore(
						addHours({[.]Production Shift 1/Working Date}, toInt({[.]Production Shift 1/Hours/Breaks}[5,5])),
						addHours({[.]Production Shift 1/Working Date}, toInt({[.]Production Shift 1/Hours/Breaks}[0,4]))
					),
					addDays({[.]Production Shift 1/Working Date},1), 
					{[.]Production Shift 1/Working Date}
				), 
				toInt({[.]Production Shift 1/Hours/Breaks}[5,5])
			),
		),
		if( dateIsBefore(
					now(),
					addHours(
						if(dateIsAfter(
								addHours({[.]Production Shift 1/Working Date}, toInt({[.]Production Shift 1/Hours/Breaks}[5,4])),
								midnight({[.]Production Shift 1/Working Date})
							)
							&& dateIsBefore(
								addHours({[.]Production Shift 1/Working Date}, toInt({[.]Production Shift 1/Hours/Breaks}[5,4])),
								addHours({[.]Production Shift 1/Working Date}, toInt({[.]Production Shift 1/Hours/Breaks}[0,4]))
							),
							addDays({[.]Production Shift 1/Working Date},1), 
							{[.]Production Shift 1/Working Date}
						), 
						toInt({[.]Production Shift 1/Hours/Breaks}[5,4])
					)
				), 
			secondsBetween(
				addHours(
					if(dateIsAfter(
							addHours({[.]Production Shift 1/Working Date}, toInt({[.]Production Shift 1/Hours/Breaks})),
							midnight({[.]Production Shift 1/Working Date})
						)
						&& dateIsBefore(
							addHours({[.]Production Shift 1/Working Date}, toInt({[.]Production Shift 1/Hours/Breaks}[5,4]))
							addHours({[.]Production Shift 1/Working Date}, toInt({[.]Production Shift 1/Hours/Breaks}[0,4]))
						),
						addDays({[.]Production Shift 1/Working Date},1), 
						toInt({[.]Production Shift 1/Working Date})
					)
					toInt({[.]Production Shift 1/Hours/Breaks}[5,4])
				),
				addHours(
					if(dateIsAfter(
							addHours({[.]Production Shift 1/Working Date}, toInt({[.]Production Shift 1/Hours/Breaks}[5,5])),
							midnight({[.]Production Shift 1/Working Date})
						)
						&& dateIsBefore(
							addHours({[.]Production Shift 1/Working Date}, toInt({[.]Production Shift 1/Hours/Breaks}[5,5])),
							addHours({[.]Production Shift 1/Working Date}, toInt({[.]Production Shift 1/Hours/Breaks}[0,4]))
						),
						addDays({[.]Production Shift 1/Working Date},1), 
						{[.]Production Shift 1/Working Date}
					), 
					toInt({[.]Production Shift 1/Hours/Breaks}[5,5])
				),
			),
		0)
	),
99)

```

I don't know about you, but I find that a lot more readable.

If you follow @paul-griffith's advice, hopefully now you can better see that there is a lot of receptiveness in this expression, that could be factored out to other expression tags.

Specifically the parts like this:

```python
addHours(
	if( dateIsAfter(
			addHours({[.]Production Shift 1/Working Date},toInt({[.]Production Shift 1/Hours/Breaks}[5,4])),
			midnight({[.]Production Shift 1/Working Date})
		)
		&& dateIsBefore(
			addHours({[.]Production Shift 1/Working Date}, toInt({[.]Production Shift 1/Hours/Breaks}[5,4])),
			addHours({[.]Production Shift 1/Working Date}, toInt({[.]Production Shift 1/Hours/Breaks}[0,4]))
		),
		addDays({[.]Production Shift 1/Working Date},1),
		{[.]Production Shift 1/Working Date}
	),
	toInt({[.]Production Shift 1/Hours/Breaks}[5,4])
)

```

Then your final expression becomes something like:

```python
try(
    if( dateIsAfter(now(), someDate1) 
       && dateIsBefore(now(), someDate2)
       && {[.]Production Shift 1/Shift Var} != 11,
       secondsBetween(now(), someDate2),
       if(dateIsBefore(now(),someDate1),
           secondsBetween(someDate1, someDate2),
          0)
    ),
    99
)

```

Which is far, far better, to work with.

NOTE: Obviously, I did not test this, but I did my best to insure that the logic stayed in tact. Do your own testing and adjust as needed.

---

<div class="post-metadata">

**Author:** ![Transistor](https://sea1.discourse-cdn.com/inductiveautomation/user_avatar/forum.inductiveautomation.com/transistor/32/3380_2.png) [@Transistor](https://forum.inductiveautomation.com/u/Transistor)\
**Post date:** [May 29, 2024, 8:11pm UTC](https://forum.inductiveautomation.com/t/try-function-issue/91073/17 "2024-05-29T20:11:52Z")

</div>

> [@lrose](#):
>
> `{[.]Production Shift 1/Hours/Breaks}[5,4]`

Can someone enlighten me. What does the `[5, 4]` syntax do? I don't think I've come across it before.

---

<div class="post-metadata">

**Author:** ![ryan.white](https://sea1.discourse-cdn.com/inductiveautomation/user_avatar/forum.inductiveautomation.com/ryan.white/32/73193_2.png) [@ryan.white](https://forum.inductiveautomation.com/u/ryan.white)\
**Post date:** [May 29, 2024, 8:14pm UTC](https://forum.inductiveautomation.com/t/try-function-issue/91073/18 "2024-05-29T20:14:04Z")

</div>

> [@Transistor](#):
>
> What does the `[5, 4]` syntax do?

This is the expression equivalent of `dataset.getValueAt(row, column)`. I use it occasionally and always forget which number is the row and which is the column.

---

<div class="post-metadata">

**Author:** ![Transistor](https://sea1.discourse-cdn.com/inductiveautomation/user_avatar/forum.inductiveautomation.com/transistor/32/3380_2.png) [@Transistor](https://forum.inductiveautomation.com/u/Transistor)\
**Post date:** [May 29, 2024, 8:16pm UTC](https://forum.inductiveautomation.com/t/try-function-issue/91073/19 "2024-05-29T20:16:29Z")

</div>

Thanks. I didn't realise the tag was a dataset.

---

<div class="post-metadata">

**Author:** ![paul-griffith](https://sea1.discourse-cdn.com/inductiveautomation/user_avatar/forum.inductiveautomation.com/paul-griffith/32/37249_2.png) [@paul-griffith](https://forum.inductiveautomation.com/u/paul-griffith)\
**Post date:** [May 29, 2024, 8:49pm UTC](https://forum.inductiveautomation.com/t/try-function-issue/91073/20 "2024-05-29T20:49:06Z")

</div>

> **[Expression Language and Syntax | Ignition User Manual](https://www.docs.inductiveautomation.com/docs/8.1/platform/expression-language-and-syntax#dataset-access)**
>
> Expression Language
