Skip to main content
Solved

Action Flow filter incorrectly evaluates expression

  • April 30, 2026
  • 4 replies
  • 19 views

afif.shiha
Level 3
Forum|alt.badge.img+6

In a Celonis Action Flow triggered by Microsoft SharePoint Online (Watch Items), a filter evaluates to FALSE even though it should logically evaluate to TRUE. The filter expression used is substring(lower(23.Fields.Title); length(23.Fields.Title) - 1; 1) = 's', where 23.Fields.Title is a SharePoint list Title field. At runtime, the resolved value of 23.Fields.Title (confirmed via the Filter Inspector and the SharePoint bundle payload) is C310-260430061344S, which clearly ends with the character S, so the expected result is that the filter condition evaluates to TRUE and allows the bundle to pass. However, the actual result is that the bundle does not pass the filter, and the execution log reports “The bundle did not pass through the filter,” with no errors or warnings.

As we are currently facing errors when attempting to raise a ticket via Celopeers and the email support channel is not available, we are posting this in the community to seek guidance on whether this behavior is a defect or an undocumented characteristic of the Action Flow filter engine (for example, related to how substring() or length() are evaluated for SharePoint fields), and to understand the correct and reliable behavior or recommended resolution.

Best answer by m.sanchezmedina

I think the issue is the use of the third parameter ‘1’ which is leading the function to output an empty string.

Can you try: substring(lower(23.Fields.Title); length(23.Fields.Title) - 1) = "s" ?

Alternatively, you can try: substring(lower(23.Fields.Title); length(23.Fields.Title) - 1; length(23.Fields.Title)) = "s" .

4 replies

m.sanchezmedina
Celonaut

Is it possible that your condition is checking for underscore ‘s’ not capital ‘S’? In you case, I would use a function like lower(‘S’) or the sort to avoid this scenario.

EDIT: I see you’re using it. Don’t mind my comment.


m.sanchezmedina
Celonaut

I think the issue is the use of the third parameter ‘1’ which is leading the function to output an empty string.

Can you try: substring(lower(23.Fields.Title); length(23.Fields.Title) - 1) = "s" ?

Alternatively, you can try: substring(lower(23.Fields.Title); length(23.Fields.Title) - 1; length(23.Fields.Title)) = "s" .


afif.shiha
Level 3
Forum|alt.badge.img+6
  • Author
  • Level 3
  • April 30, 2026

I think the issue is the use of the third parameter ‘1’ which is leading the function to output an empty string.

Can you try: substring(lower(23.Fields.Title); length(23.Fields.Title) - 1) = "s" ?

Alternatively, you can try: substring(lower(23.Fields.Title); length(23.Fields.Title) - 1; length(23.Fields.Title)) = "s" .

Thanks for the explanation and suggestions! ✅
You’re right — I can confirm that the second solution works as expected:
substring(lower(23.Fields.Title); length(23.Fields.Title) - 1; length(23.Fields.Title)) = "s"

 

The issue was my misunderstanding of how substring() works in Celonis Action Flows. I was confusing it with SQL substring, where the third parameter represents the string length. In Celonis, it represents the end position, which is why using 1 resulted in an empty string.

 

Appreciate the help and clarification!


gagan1
Level 9
Forum|alt.badge.img+3
  • Level 9
  • April 30, 2026

@afif.shiha  Glad you got it working! And great catch on the parameter indexing, ​@m.sanchezmedina .

Just to add a quick best practice tip for anyone finding this thread in the future: You can actually avoid the complex substring() and length() math entirely.
 

In the Action Flow filter module, you can simply map the field 

{{23.Fields.Title}}

, select the native Text operators: Ends with (case insensitive) from the condition dropdown, and just type s.
 

It keeps the filter UI much cleaner to read and completely avoids string-length math errors! Cheers!