Need to understand how this rule is defined in the attachment. Does the item[ ]

Need to understand how this rule is defined in the attachment. Does the item[ ] refer to ri!item or is it some array object?

OriginalPostID-146357

OriginalPostID-146357

  Discussion posts and replies are publicly visible

  • Hi Nikhil, from screenshot: rule!CASE_APP_random(length(ri!item)) is some rule which is returning(expected to return) a integer. This integer will be used to index into the item. So, item is an array.
  • item can also be a dictionary like item = [firstname: "ABC", lastName: "XYZ"] . In that case, the rule rule!CASE_APP_random is expected to return a property.(in this example "firstName" or "lastName")
  • Thanks Chetan...
    so when I tried using typename(typeof(item[...])), it returned text and not a list.
  • I just imported the case managment App form forum. I also checked that rule. It is confusing since there is rule input item, ri!item and also just item used like an array name.. Not sure yet
  • Hi, I found how the rule works. In The item[], the item is the same as rule input. Now copy paste the below code into interface designer(just for verifying..)
    Please define a rule input called 'item' with Any Type.

    a!dashboardLayout(
    firstColumnContents: {
    a!textField(
    label: "Test",
    value: rule!CASE_APP_randomItemFromArray(item: ri!item)
    )
    }
    )

    To Test it out, let us assume you have employee cdt and DS with some fields in employee cdt like id, fname and lname. Also assume that you have a query rules like getEmployeeById(id) which returns the specific employee based on id. I am assuming you have atleast 5 records of employee in DS.

    Now Test this rule in interface designer. While gving the input in interface designer, give the input like this: {getEmployeeByid(1), getEmployeeByid(2), getEmployeeByid(3)}

    Each time you execute/test this rule, you will get a different output. In short, the above rule just takes an array of "items", where items can be any type of CDT.(might be something other than employee, this is just an example.). This rule then selects a random 'item' i.e random CDT from the input array and returns it.

    Now, the same rule definition in screenshot can be rewritten as :
    =ri!item[rule!CASE_APP_random(length(ri!item))] instead of
    =item[rule!CASE_APP_random(length(ri!item))]

    It does not change the meaning. It just returns a random cdt from the passed array of cdts.
  • 0
    Certified Lead Developer
    The answer to your original question, I think, is Yes - the first instance of "item" should actually be called as "ri!item" in the rule. But i think it'll work without that, confusion aside.

    The simplest way to demonstrate this rule would be to call it from another expression rule. Since ri!item is of "Any Type" type, you can't actually force in an array when you use the "Test" functionality in the expression editor. But if you create a new / unsaved expression, you can pass in an array. Such as:
    rule!CASE_APP_randomItemFromArray(
    { "first", "second", "third", "fourth" }
    )
  • Pardon the confusion.. I actually wrote this rule.. It was designed to be used in the data loader for the Case Management Framework.. The rule input of "item" is designed to take in an array of any type and randomly return an item from the array.. We didn't expect it to be one of the common components designers would re-use.. but if you are, I'd love to hear your use case.

    This was designed for use in the Order Generator Data Loader and Service Request Data Loader in the Case Management Framework specifically..

    As you noticed, rule inputs may also be referenced by name directly.. without the ri! in an expression rule..