Unable to take properties into a forEach() for a fv!item

Certified Associate Developer

I'm having some issues understanding how to use indexes into a forEach taking the items from a expression rule.

I'll explain my problem a little bit deeper; I'm trying to get some of the properties from the RecordType "Anomalie", i would like to use the expression rule with get me all of the anomalies linked to a specific pension by the pensionid, and get the description, the name, the action related to it. But i'm having trubles indexing these properties once I call the expression rule. When I try to use fv!item.description into the description rich text field it seems like it doesn't recognize the object as a record type. 

I pasted the code snippet for the forEach i have in the interface, does anyone had some similar issues and may give me suggestions on what to try to make it work? Thank you so much!!

(my finished product should be a card for each anomaly found linked to the record Beneficiary, each with their description, name and related action)

a!forEach(items: rule!SRI_AnomaliePensione(pensioneId: ri!record['recordType!SRI beneficiario.relationships.pensione.fields.chiavePensioneCorrente']),
expression: a!cardLayout(
contents: {
a!richTextDisplayField(
labelPosition: "COLLAPSED",
value: {
a!richTextItem(text: { "Anomalia" }, style: { "STRONG" })
}
),
a!richTextDisplayField(
labelPosition: "COLLAPSED",
value: { "Descrizione anomalia" } */should be fv!item.description/*
),

a!sideBySideLayout(
items: {
a!sideBySideItem(
item: a!tagField(
labelPosition: "COLLAPSED",
tags: {
a!tagItem(
text: "Aperta", */should be fv!item.status/*
backgroundColor: "#cc0000"
)
}
)
),
a!sideBySideItem(
item: a!buttonArrayLayout(
buttons: {
a!buttonWidget(
label: "Sana anomalia", */should be the recordActionField "sana anomalia" with identifie: fv!identifier /*
size: "SMALL",
width: "MINIMIZE",
style: "SOLID"
)
},
align: "END",
marginBelow: "NONE"
)
)
}
)
},
height: "AUTO",
style: "#efefef",
shape: "SEMI_ROUNDED",
marginBelow: "STANDARD",
borderColor: "#1155cc",
showShadow: true
))

  Discussion posts and replies are publicly visible

Parents
  • 0
    Certified Lead Developer

     

    The rule returns a DataSubset, not a plain list.
    Add .data after your rule call to get the actual rows(rule!SRI_AnomaliePensione(...).data).
    Use bracket notation fv!item[recordType!...] instead of fv!item.description.

  • 0
    Certified Lead Developer
    in reply to Shubham Aware
    The rule returns a DataSubset, not a plain list.

    FYI, a!forEach() can inherently handle a simple array OR a dataSubset, and the properties are accessed via fv!item inside the forEach loops just the same.

    EDIT: it appears this is somewhat outdated info at least in the case of recordtype data queries - the ".data" is needed either in the "items" or "expression" parameter of the a!forEach() in order for the properties to index properly.

    To confirm, what I described above is how CDT / data store style queried DataSubsets work in a!forEach(), apparently there's an inconsistency with the behavior of a dataSubset that contains recordtype data...

    Final note: I just remembered, the cause of this is because queryRecordType() returns a map, not a dataSubset (it's just dataSubset-shaped).  This causes all sorts of "fun" issues Face palm

  • 0
    Certified Associate Developer
    in reply to Mike Schmitt

    Thank you for answering!

    One question: if this is the case what is wrong that i can't see or reference the properties of the dataSubset from the fv!item inside the forEach? 

    As people suggested with the index( fv!item,'recordType!{SRI anomaliepensione.fields.description'," "), the forEach is working, is there another way to avoid using the index function?

Reply Children
  • 0
    Certified Lead Developer
    in reply to francescagulinelli

    Whoops, it appears I'm slightly wrong - apparently at least for RecordType data, it does make a difference to leave out the ".data" in either the "items" parameter or "value" parameter of the forEach loop.  I believe traditional CDT-style queried data did not work this way, but now I'll have to go back and double check.

    So you have the choice, you can either add ".data" in the "items" parameter or the "expression" parameter - in this example i've added it in the "expression" parameter and we can see it works.

    Edit: the data array is better off if you do it with the ".data" in the "items" parameter, as you get a cleaner list of data.