issue on file upload component and grid

I am currently working on a file upload component and do not require any process model for my use case. I have successfully uploaded an Excel file containing data for five users. To read this data, I have written an expression rule, which is functioning correctly. However, I am encountering an issue: after uploading the Excel file and clicking the submit button, I need to display the data in a read-only grid. Could anyone provide a suggestion or solution for this matter?

Thank you in advance for your assistance.

a!localVariables(
  a!formLayout(
    label: "",
    contents: {
      a!sectionLayout(
        label: "Create Users in Bulk",
        contents: {
          a!linkField(
            instructions: "Add additional rows with user information based on the header",
            links: {
              a!documentDownloadLink(
                label: "CSV Template",
                document: cons!GUM_USER_CSV_DOC
              )
            }
          ),
          a!fileUploadField(
            label: "User List",
            labelPosition: "ABOVE",
            target: cons!TAP_TARGET_FOLDER,
            maxSelections: 1,
            value: ri!excelDocument,
            saveInto: { ri!excelDocument },
            required: true,
            
          )
        }
      )
    },
    buttons: a!buttonLayout(
      primaryButtons: {
        a!buttonWidget(
          label: "Submit",
          value: false,
          saveInto: ri!cancel,
          submit: true,
          style: "SOLID",
          loadingIndicator: true
        )
      },
      secondaryButtons: {
        a!buttonWidget(
          label: "Cancel",
          value: true,
          saveInto: { ri!cancel },
          submit: true,
          style: "OUTLINE",
          validate: false
        )
      }
    )
  ),
  rule!TAP_upload(
    userdata: ri!excelDocument,
    showwhen: ri!cancel = true()
  )
)

#uicode -tap_upload#
a!localVariables(
  local!userData: rule!TAP_ReadUsers(document:ri!userdata),
  
  {
    a!sectionLayout(
      label: "",
      contents: {
        a!gridField(
          data: local!userData,
          columns: {
            a!gridColumn(
              label: "Username",
              sortField: "username",
              value: fv!row.username
            ),
            a!gridColumn(
              label: "First Name",
              sortField: "firstName",
              value: fv!row.firstName
            ),
            a!gridColumn(
              label: "Last Name",
              sortField: "lastName",
              value: fv!row.lastName
            ),
            a!gridColumn(
              label: "Email",
              sortField: "email",
              value: fv!row.email
            )
          }
        )
      },
      showWhen: ri!showwhen
    )
  }
)


  Discussion posts and replies are publicly visible

Parents
  • Hi. The formLayout() component is a top-level component, meaning you can't have multiple components at the same level. To prevent your interface from throwing an error, you can place your "rule!TAP_upload" interface inside the "contents" parameter of formLayout(). Refer the example below:

    a!formLayout(
      label: "Form",
      contents: {
        a!sectionLayout(
          label: "Section",
          contents: {}
        ),
        rule!TAP_upload(
          userdata: ri!excelDocument,
          showwhen: ri!cancel = true()
        )
      },
      buttons: a!buttonLayout(
        primaryButtons: {
          a!buttonWidget(
            label: "Submit",
            submit: true,
            style: "SOLID",
            loadingIndicator: true
          )
        },
        secondaryButtons: {
          a!buttonWidget(
            label: "Cancel",
            value: true,
            saveInto: {},
            submit: true,
            style: "OUTLINE",
            validate: false
          )
        }
      )
    )

Reply
  • Hi. The formLayout() component is a top-level component, meaning you can't have multiple components at the same level. To prevent your interface from throwing an error, you can place your "rule!TAP_upload" interface inside the "contents" parameter of formLayout(). Refer the example below:

    a!formLayout(
      label: "Form",
      contents: {
        a!sectionLayout(
          label: "Section",
          contents: {}
        ),
        rule!TAP_upload(
          userdata: ri!excelDocument,
          showwhen: ri!cancel = true()
        )
      },
      buttons: a!buttonLayout(
        primaryButtons: {
          a!buttonWidget(
            label: "Submit",
            submit: true,
            style: "SOLID",
            loadingIndicator: true
          )
        },
        secondaryButtons: {
          a!buttonWidget(
            label: "Cancel",
            value: true,
            saveInto: {},
            submit: true,
            style: "OUTLINE",
            validate: false
          )
        }
      )
    )

Children
No Data