How to update 2 CDT's with each other values in a process model

I am new to Appian. Still learning the basics.

I have two tables

1. Attachments - for adding attachment relate details like fileId,fileName, fileExt, fileSize etc and

2. AttachmentDetails - for description, comments etc

Below is the requirement -

When i upload a document I save them to the attachment table with attachmentDetails primary key (attachmentDetailsId)

After the documents are saved in the attachment table I need to save the attachment tables primary key (attachmentId) to the attachmentDetails table

The problem is i am not sure how to update when there are multiple attachments.

For Example - If i  upload 2 attachments and update attachmentDetails

Attachments Table

attachmentId fileId attachmentDetailsId
1 123 1
2 234 2

 Attachment Details Table

attachmentDetailsId Description attachmentId
1 Evidence 1
2 Tracker 2

I will first save the 2 attachmentDetails (array) to the db first. (at this point attachmentId will be null and I will have the attachmentDetailsId's)

Before saving the attachments to the table i need to map each attachment with attachmentDetailsId. How do i map attachmentDetailsId-1  with first attachment and  attachmentDetailsId-2 with second attachment?

After I map the above I will save them to the attachments table (at this point I will have the attachmentId's)

How do i now map attachmentId-1 to the attachmentDetailsId-1 and How do i now map attachmentId-2 to the attachmentDetailsId-2?

  Discussion posts and replies are publicly visible

Parents
  • +1
    Certified Lead Developer

    Hi, if there is one to one relationship I can't think of any use case where we need to maintain two tables. But in case you want this and there is some use case for the same. Below is one of the possible ways to do it

    a!localVariables(
      /* Assuming this to be the initial state */
      local!attachment: {
        {
          attachmentId: null,
          fileId: 123,
          attachmentDetailsId: null
        },
        {
          attachmentId: null,
          fileId: 234,
          attachmentDetailsId: null
        }
      },
      local!attachmentDetail: {
        {
          attachmentDetailsId: null,
          Description: "Evidence",
          attachmentId: null
        },
        {
          attachmentDetailsId: null,
          Description: "Tracker",
          attachmentId: null
        }
      },
      /* Wrtitng local!attachmentDetail to database using write 
      to datastore entity will give back the Ids for the same */
      local!attachmentDetailAfterWrite: {
        {
          attachmentDetailsId: 1,
          Description: "Evidence",
          attachmentId: null
        },
        {
          attachmentDetailsId: 1,
          Description: "Tracker",
          attachmentId: null
        }
      },
      /* We can use below to map the attachment detail in the
    attachment table
    */
    local!attachmentBeforeWrite:  a!forEach(
        items: local!attachment,
        expression: updatedictionary(
          fv!item,
          {
            attachmentDetailsId: property(
              index(
                local!attachmentDetailAfterWrite,
                fv!index,
                {}
              ),
              "attachmentDetailsId",
              {}
            )
          }
        )
      )
      
    /* You can then write the attachment to database thus generating
    the Ids for the same and then use the similar way to map
    atatchment Ids to the attachment detail 
    */
    )

    The output of the mapping forloop will be something like this

     

    Hope it helps

Reply Children
No Data