How to filter negative values from readonly grid

I have a requirement to filter negative values from readonly  grid and It needs to get configured from expression rule but Im not able to filter the negative values.

I tried using "<" as operator for that particular field but still not filtering out.

please help me achieve this

  Discussion posts and replies are publicly visible

Parents Reply Children
  • but the requirement is that user can enter any value like 41 and 42 but grid should give values till 42.99 .

    is it possible to make chnages in expression rule so that if user puts 41 and 42 then grid could give values like 42.5 or something like that?

    user should be sorted in his mind if he enters value 41 and  42 then any value around 42 will be populated like 42.2 or 42.4 etc

  • but the requirement is that user can enter any value like 41 and 42 but grid should give values till 42.99

    ok, and that's why i said this:

    Or you could just override the filter value and add 1 to whatever the user enters, so it would match all values up to the next higher integer

    Did you try that already?

  • I didnt get you, you mean to say i have to use sum() add 1 to selected value ?

    as I have tried on selectedvalue as

    sum(local!selectedLatititudeTo,0.9)

  • you mean to say i have to use sum() add 1 to selected value ?

    sum() doesn't really play into this.  you can simply add 1 to the user-entered value when feeding it into your queryFilter.  If you're not sure how to do that, you can post the actual code from your queryfilter and i can tell you how to modify it.  Generally you'd put something like,

    a!queryFilter(
      field: "latitude",
      operator: "<",
      value: ri!userSelectedValue + 1
    )

  • but according to the above solution result could be like this:

    if user enters 41 and 42 then grid will display value between 41 and 43?

  • 42 then grid will display value between 41 and 43?

    If the user enters an upper value of 42 and you add 1 to it when actually performing the filter, as in my example code above, and the operator is "<", that means any values less than 43 will be returned, up to and including i.e. "42.999" etc.  For the lower-end filter you would want to use the ">=" filter and just pass the user's original value, i.e. it would start matching values at 41 and all incrementals above that (41.00001, 41.3, 41.9, 42, 42.5, etc).

  • can you please tell me how can I apply on my code:

    here data type of lat from ,lat to and long from long to is decimal

    and On interface I have taken floatingpointfield value

    my UI looks like this 

    /*range between latitude from and latitude to*/
    
    a!queryFilter(
            field: 'recordType!{9441efd7-521a-4695-82a7-d661a237c67d}SLS Site Sync.fields.{499d2d44-21c8-41dc-a3be-2dbd3ee0356f}absY',
            operator: ">=",
            value: ri!latFrom,
            applyWhen: and(
              not(
                rule!APN_isEmpty(ri!latFrom)
              ),
              rule!APN_isEmpty(ri!latTo)
            ),
          ),
          a!queryFilter(
            field: 'recordType!{9441efd7-521a-4695-82a7-d661a237c67d}SLS Site Sync.fields.{499d2d44-21c8-41dc-a3be-2dbd3ee0356f}absY',
            operator: "<=",
            value: ri!latTo,
            applyWhen: and(
              not(
                rule!APN_isEmpty(ri!latTo)
              ),
              rule!APN_isEmpty(ri!latFrom)
            ),
          ),
          a!queryFilter(
            field: 'recordType!{9441efd7-521a-4695-82a7-d661a237c67d}SLS Site Sync.fields.{499d2d44-21c8-41dc-a3be-2dbd3ee0356f}absY',
            operator: "between",
            value: {
              ri!latFrom,
              ri!latTo
              },
              applyWhen: and(
                not(isnull(ri!latFrom)),
                not(isnull(ri!latTo))
              ),
          ),
          
          
         /* range between longitude from and longitude to*/
         
               a!queryFilter(
            field: 'recordType!{9441efd7-521a-4695-82a7-d661a237c67d}SLS Site Sync.fields.{eb9a14a1-50e1-4d5a-9d81-ca3a8db3563c}absX',
            operator: ">=",
            value: ri!longFrom,
            applyWhen: and(
              not(
                rule!APN_isEmpty(ri!longFrom)
              ),
              rule!APN_isEmpty(ri!longTo)
            ),
          ),
          a!queryFilter(
            field: 'recordType!{9441efd7-521a-4695-82a7-d661a237c67d}SLS Site Sync.fields.{eb9a14a1-50e1-4d5a-9d81-ca3a8db3563c}absX',
            operator: "<=",
            value: ri!longTo,
            applyWhen: and(
              not(
                rule!APN_isEmpty(ri!longTo)
              ),
              rule!APN_isEmpty(ri!longFrom)
            ),
          ),
          a!queryFilter(
            field: 'recordType!{9441efd7-521a-4695-82a7-d661a237c67d}SLS Site Sync.fields.{eb9a14a1-50e1-4d5a-9d81-ca3a8db3563c}absX',
            operator: "between",
            value: {
              ri!longFrom,
              ri!longTo
            },
            applyWhen: and(
              not(isnull(ri!longFrom)),
              not(isnull(ri!longTo))
            ),
          ),

  • can you please tell me how can I apply on my code

    I'm not sure I understand.  If you're allowing the user to enter decimal filter values, the code you have here looks like it'll work basically as expected.

    If a user enters "41.8" for instance on the "From" value, wouldn't they expect to ONLY see values from "41.8" and higher?  What are you expecting to happen that isn't happening?

    As an aside, one other thing I'd point out is, you shouldn't really need to do this bending-over-backwards to switch to the "between" operator; you can just use the "from" and "to" individual filters by themselves and when a user has both entered, they'll simply both apply, functionally taking care of a "between" operation on their own, and without having to have so many conditions on all the operators.

  • you mean to say my operator for both from to is correct only i have to remove between condition and to remove applywhen condition to specific from to else nothing to change right?

  • I mean you can generally replace the "between" operation just by having "from" and "to" operations separately that both activate when they're required - when both of them activate at the same time, they will "stack" with each other (presuming that your logicalExpression is using the "AND" joiner), and essentially behave like the "between" operation.  So it's redundant.  But I assume this does not necessarily answer your main question here - just a tip for efficiency in coding filters.

    you mean to say my operator for both from to is correct only i have to remove between condition and to remove applywhen condition to specific from to else nothing to change right?