Interface

Certified Associate Developer

I using a record relationship (1 - Many) (Dept -- Employee (multiple)). I am trying to create a interface, where in top grab the Dept details and in bottom Employee details for that Department , which is Editable grid. When I try to addRowLink - its not creating a new row. Pls see the code below and let me know , what is the issue.

a!localVariables(
local!emp : 'recordType!{f4411d12-5d9e-43b0-9eb3-430ef2ea01b9}Emp.fields.{a808753b-fbba-4fd9-bd49-058256eae7a2}empno' : "",
local!empnme : 'recordType!{f4411d12-5d9e-43b0-9eb3-430ef2ea01b9}Emp.fields.{62b2206f-9897-4495-9957-8fc3c3a6253a}ename': "",
local!job : 'recordType!{f4411d12-5d9e-43b0-9eb3-430ef2ea01b9}Emp.fields.{47784a4a-362f-4104-a42d-4762074fddec}job':"",
local!sal : 'recordType!{f4411d12-5d9e-43b0-9eb3-430ef2ea01b9}Emp.fields.{2d76dd3c-1e76-4924-af64-24652c4f3b4f}sal':"",
a!formLayout(
label: "Department & Employee Relationship",
contents: {
a!sectionLayout(
label: "Department",
contents: {
a!textField(
label: "Department No",
labelPosition: "ADJACENT",
value: ri!Dept['recordType!{52f2ed75-d5b5-46ce-b6ec-43c3a900feb1}Department.fields.{cde21b2f-05db-4f33-ac0c-e062d24a1f17}deptno'],
saveInto: {ri!Dept['recordType!{52f2ed75-d5b5-46ce-b6ec-43c3a900feb1}Department.fields.{cde21b2f-05db-4f33-ac0c-e062d24a1f17}deptno']},
refreshAfter: "UNFOCUS",
validations: {}
),
a!textField(
label: "Department Name",
labelPosition: "ADJACENT",
value : ri!Dept['recordType!{52f2ed75-d5b5-46ce-b6ec-43c3a900feb1}Department.fields.{5f09405f-001c-41c3-bc2e-5524c0f97428}dname'],
saveInto: {ri!Dept['recordType!{52f2ed75-d5b5-46ce-b6ec-43c3a900feb1}Department.fields.{5f09405f-001c-41c3-bc2e-5524c0f97428}dname']},
refreshAfter: "UNFOCUS",
validations: {}
),
a!sectionLayout(
label: "Employee Details",
contents: {
a!gridLayout(
label: "",
labelPosition: "ABOVE",
headerCells: {
a!gridLayoutHeaderCell(label: "Employee Number"),
a!gridLayoutHeaderCell(label: "Employee Name"),
a!gridLayoutHeaderCell(label: "Job"),
a!gridLayoutHeaderCell(label: "Salary")
},
columnConfigs: {},
rows: {
a!forEach(
items : ri!Dept['recordType!{52f2ed75-d5b5-46ce-b6ec-43c3a900feb1}Department.relationships.{71959808-8139-4958-b7aa-0ad4bdc3b517}DeptToEmployee'],
expression: a!gridRowLayout(
contents: {
a!textField(
label : "Employee Number",
value: fv!item['recordType!{f4411d12-5d9e-43b0-9eb3-430ef2ea01b9}Emp.fields.{a808753b-fbba-4fd9-bd49-058256eae7a2}empno'],
saveInto: fv!item['recordType!{f4411d12-5d9e-43b0-9eb3-430ef2ea01b9}Emp.fields.{a808753b-fbba-4fd9-bd49-058256eae7a2}empno']
),
a!textField(
label : "Employee Name",
value: fv!item['recordType!{f4411d12-5d9e-43b0-9eb3-430ef2ea01b9}Emp.fields.{62b2206f-9897-4495-9957-8fc3c3a6253a}ename'],
saveInto: fv!item['recordType!{f4411d12-5d9e-43b0-9eb3-430ef2ea01b9}Emp.fields.{62b2206f-9897-4495-9957-8fc3c3a6253a}ename']
),
a!textField(
label : "Job",
value: fv!item['recordType!{f4411d12-5d9e-43b0-9eb3-430ef2ea01b9}Emp.fields.{47784a4a-362f-4104-a42d-4762074fddec}job'],
saveInto: fv!item['recordType!{f4411d12-5d9e-43b0-9eb3-430ef2ea01b9}Emp.fields.{47784a4a-362f-4104-a42d-4762074fddec}job']
),
a!textField(
label : "Salary",
value: fv!item['recordType!{f4411d12-5d9e-43b0-9eb3-430ef2ea01b9}Emp.fields.{2d76dd3c-1e76-4924-af64-24652c4f3b4f}sal'],
saveInto: fv!item['recordType!{f4411d12-5d9e-43b0-9eb3-430ef2ea01b9}Emp.fields.{2d76dd3c-1e76-4924-af64-24652c4f3b4f}sal']
)
}
)

)
},
addRowLink: a!dynamicLink(
label : "Add Employee",
saveInto:
{
a!save(ri!Emp,append('recordType!{f4411d12-5d9e-43b0-9eb3-430ef2ea01b9}Emp.fields.{a808753b-fbba-4fd9-bd49-058256eae7a2}empno',local!emp)),
a!save(ri!Emp,append('recordType!{f4411d12-5d9e-43b0-9eb3-430ef2ea01b9}Emp.fields.{62b2206f-9897-4495-9957-8fc3c3a6253a}ename',local!empnme)),
a!save(ri!Emp,append('recordType!{f4411d12-5d9e-43b0-9eb3-430ef2ea01b9}Emp.fields.{47784a4a-362f-4104-a42d-4762074fddec}job',local!job)),
a!save(ri!Emp,append('recordType!{f4411d12-5d9e-43b0-9eb3-430ef2ea01b9}Emp.fields.{2d76dd3c-1e76-4924-af64-24652c4f3b4f}sal',local!sal)),
}

),
selectionSaveInto: {},
validations: {},
rowHeader: 1,
shadeAlternateRows: true
)
}
)
}
)
},
buttons: a!buttonLayout(
primaryButtons: {
a!buttonWidget(
label: "Submit",
submit: true,
style: "PRIMARY",
loadingIndicator: true
)
},
secondaryButtons: {
a!buttonWidget(
label: "Cancel",
value: true,
saveInto: {},
submit: true,
style: "NORMAL",
validate: false
)
}
)
)

  Discussion posts and replies are publicly visible

  • 0
    Certified Senior Developer

    Check the below link for more details

    https://docs.appian.com/suite/help/23.4/recipe-add-edit-and-remove-data-in-an-inline-editable-grid.html

    And use insert -> code option to insert the code so that it will be easily readable

  • Hi , first define in this way,

    local!gridData: {
    'recordType!CMN Document'(
    'recordType!CMN Document.fields.appId': local!applId,
    'recordType!CMN Document.fields.isActive': true,
    'recordType!CMN Document.fields.isLitigation': false,
    'recordType!CMN Document.fields.addedBy': local!loggedInUser,
    'recordType!CMN Document.fields.addedOn': now()
    )
    }

    and then write addRowLink in below mentioned way

    addRowlink: 
    a!dynamicLink(
    label: "Add New Document",
    value: ri!documentsData,
    saveInto: {
    a!save(
    local!gridData,
    append(local!gridData, local!nullGrid)
    )
    },
    ),

    hope this gives you the answer Slight smile

  • 0
    Certified Senior Developer

    Hi ,
    you can take reference from this code, In this I just replaced your record with mine having 1-many relations to add a new row.
    hope it will help you
    thankyou
      

    a!localVariables(
      a!formLayout(
        label: "Department & Employee Relationship",
        contents: {
          a!sectionLayout(
            label: "Department",
            contents: {
              a!textField(
                label: "EMail",
                labelPosition: "ADJACENT",
                value: ri!userDetails['recordType!{d8d2946d-462b-404a-ba5e-d96036a0edc1}UA User Detail.fields.{7a392978-7d23-4f26-b793-21b77b8dcd7a}Email'],
                saveInto: ri!userDetails['recordType!{d8d2946d-462b-404a-ba5e-d96036a0edc1}UA User Detail.fields.{7a392978-7d23-4f26-b793-21b77b8dcd7a}Email'],
                refreshAfter: "UNFOCUS",
                validations: {}
              ),
              a!textField(
                label: "userId",
                labelPosition: "ADJACENT",
                value :ri!userDetails['recordType!{d8d2946d-462b-404a-ba5e-d96036a0edc1}UA User Detail.fields.{9a3cb925-d459-4387-8650-c358cd83c200}userIdPk'],
                saveInto: ri!userDetails['recordType!{d8d2946d-462b-404a-ba5e-d96036a0edc1}UA User Detail.fields.{9a3cb925-d459-4387-8650-c358cd83c200}userIdPk'],
                refreshAfter: "UNFOCUS",
                validations: {}
              ),
              a!sectionLayout(
                label: "Employee Details",
                contents: {
                  a!gridLayout(
                    label: "",
                    labelPosition: "ABOVE",
                    headerCells: {
                      a!gridLayoutHeaderCell(label: "Employee Number"),
                      a!gridLayoutHeaderCell(label: "Employee Name"),
                    },
                    columnConfigs: {},
                    rows: {
                      a!forEach(
                        items : ri!userDetails['recordType!{d8d2946d-462b-404a-ba5e-d96036a0edc1}UA User Detail.relationships.{da25471d-3af8-4d3a-8a55-262c411d41d6}uaEmailAuthentication'],
                        expression: a!gridRowLayout(
                          contents: {
                            a!textField(
                              label : "emailAuthenticationId",
                              value: fv!item['recordType!{d0cb3fc5-719f-4354-a800-13932d8ce546}UA Email Authentication.fields.{1b8832e2-14cb-4072-834d-55961f1348ad}EmailAuthenticationidPk'],
                              saveInto: fv!item['recordType!{d0cb3fc5-719f-4354-a800-13932d8ce546}UA Email Authentication.fields.{1b8832e2-14cb-4072-834d-55961f1348ad}EmailAuthenticationidPk']
                            ),
                            a!textField(
                              label : "Email",
                              value: fv!item['recordType!{d0cb3fc5-719f-4354-a800-13932d8ce546}UA Email Authentication.fields.{420c92b7-55eb-4b85-9466-c479d537c596}emailId'],
                              saveInto: fv!item['recordType!{d0cb3fc5-719f-4354-a800-13932d8ce546}UA Email Authentication.fields.{420c92b7-55eb-4b85-9466-c479d537c596}emailId']
                            )
                          }
                        )
    
                      )
                    },
                    addRowLink: a!dynamicLink(
                      label : "Add Employee",
                      saveInto:
                      {
                        a!save(
                          ri!email,
                          append(
                            ri!email,
                            'recordType!{d0cb3fc5-719f-4354-a800-13932d8ce546}UA Email Authentication'(
                              'recordType!{d0cb3fc5-719f-4354-a800-13932d8ce546}UA Email Authentication.fields.{420c92b7-55eb-4b85-9466-c479d537c596}emailId': null,
                              'recordType!{d0cb3fc5-719f-4354-a800-13932d8ce546}UA Email Authentication.fields.{1b8832e2-14cb-4072-834d-55961f1348ad}EmailAuthenticationidPk': null
                            )
                          )
                        ),
                        a!save(
                          ri!userDetails,
                        'recordType!{d8d2946d-462b-404a-ba5e-d96036a0edc1}UA User Detail'(
                          'recordType!{d8d2946d-462b-404a-ba5e-d96036a0edc1}UA User Detail.fields.{9a3cb925-d459-4387-8650-c358cd83c200}userIdPk': ri!userDetails['recordType!{d8d2946d-462b-404a-ba5e-d96036a0edc1}UA User Detail.fields.{9a3cb925-d459-4387-8650-c358cd83c200}userIdPk'],
                          'recordType!{d8d2946d-462b-404a-ba5e-d96036a0edc1}UA User Detail.fields.{7a392978-7d23-4f26-b793-21b77b8dcd7a}Email': ri!userDetails['recordType!{d8d2946d-462b-404a-ba5e-d96036a0edc1}UA User Detail.fields.{7a392978-7d23-4f26-b793-21b77b8dcd7a}Email'],
                          'recordType!{d8d2946d-462b-404a-ba5e-d96036a0edc1}UA User Detail.relationships.{da25471d-3af8-4d3a-8a55-262c411d41d6}uaEmailAuthentication': ri!email
                        )
                        )
                      }
    
                    ),
                    selectionSaveInto: {},
                    validations: {},
                    rowHeader: 1,
                    shadeAlternateRows: true
                  )
                }
              )
            }
          )
        },
        buttons: a!buttonLayout(
          primaryButtons: {
            a!buttonWidget(
              label: "Submit",
              submit: true,
              style: "PRIMARY",
              loadingIndicator: true
            )
          },
          secondaryButtons: {
            a!buttonWidget(
              label: "Cancel",
              value: true,
              saveInto: {},
              submit: true,
              style: "NORMAL",
              validate: false
            )
          }
        )
      )
    ) 

  • 0
    Certified Associate Developer
    in reply to nasirs4970

    Thanks for your reply.

    I clicked the Add Employee link twice - in array I can see 2 rows, but in the Grid I don't see 2 rows to enter my details. 

  • 0
    Certified Senior Developer
    in reply to saravanang0001

    Hii ,
    since you are using the foreach() in the rows parameter of gridLayout on the dept rule input you have to also append this to the dept rule input you can take reference to my code and let me know if you face any issues.
    thankyou

  • The issue with the addRowLink is that it is not saving the new employee record into the database. The saveInto property of the addRowLink is using the append() function to create a new record in memory, but it is not actually persisting the record to the database. You need to use the insert() function elastic man instead of the append() function. The insert() function takes the record type and the record values as arguments, and it persists the record to the database.

  • 0
    Certified Lead Developer
    in reply to reynaldor2500

    !!!!! ATTENTION !!!!!!!

    "The insert() function takes the record type and the record values as arguments, and it persists the record to the database."

    THIS IS COMPLETE NONSENSE! THE insert() FUNCTION DOES NOT INSERT ANYTHING INTO ANY DATABASE!!!!!

  • 0
    Certified Associate Developer
    in reply to nasirs4970

    Prefect , thanks - it works. I have to refer the master record type (Dept).

  • THIS IS COMPLETE NONSENSE! THE insert() FUNCTION DOES NOT INSERT ANYTHING INTO ANY DATABASE!!!!!

    ChatGPT strikes again, maybe?

  • +1
    Certified Senior Developer
    in reply to saravanang0001

    Hii  ,
    If you are satisfied with this, please verify it, as this confirmation can boost my confidence
    Thank you