How to cast a CDT into an new local variable, updating a field ?

Certified Senior Developer

Hi,

I'm trying to save into a local variable some data retrieved from an ER. But I would need to update some fields before to store it into my new local var.

Is there any way to do it ?

With the code below I can either cast the data, either create a new CDT local var with the new field value, but I did not succeed to do both. 

(as my CDT could contain more than 50 fields I do not want to override all theses 50 fields in the code below).

a!localVariables(
  local!vehicle: rule!TST_GetVehiclesWithFilters(
    id: 1
  ).data,
  
  local!vehicleCast: cast('type!{urn:com:appian:types:tst}TST_Vehicles', local!vehicle),
  local!vehicleUpdate: 'type!{urn:com:appian:types:tst}TST_Vehicles'(
    make: "New Make"
  ),

  {
    local!vehicleCast,
    local!vehicleUpdate
  }
)

Example : my initial data retreived by the ER is :

TST_Vehicles :

    • id : 1
      • make : "make1"
        • model : "model1"
          • ...
          • ...
          • ...
          • is_active : true

          and I would like my transformed data like this :

          TST_Vehicles

            • id : 1
              • make : "New make"
                • model : "model1"
                  • ...
                  • ...
                  • ...
                  • is_active : true

                    Discussion posts and replies are publicly visible

                  Parents Reply
                  • 0
                    Certified Lead Developer
                    in reply to cedric01

                    oh, also - at the end of your example code you're only outputting the value of local!vehicle, not of local!vehicleUpdateCdt - so we would expect the output you're seeing to only be the original and not the updated version.

                    Instead your code should look like this:

                    a!localVariables(
                      local!vehicle: rule!TST_GetVehiclesWithFilters(
                        id: 1
                      ).data[1],
                      local!vehicleUpdateCDT: updatedictionary(
                        dictionary: local!vehicle,
                        fieldsAndValues: {
                          make: "test2"
                        }
                      ),
                      
                      local!vehicleUpdateCDT
                    )

                  Children