Skip to main content
Question

.Net SDK MetaDataTemplateUpdate

  • May 21, 2025
  • 1 reply
  • 13 views

Forum|alt.badge.img

 

I'm getting this error when I try to add a new option to a metadata template drop-down field.

 

"An unhandled exception of the type 'System.Reflection.TargetInvocationException' occurred in mscorlib.dll.  Additional Information: Exception has been thrown by the target of an invocation."

 

I know this is abstracting the true exception, but I'm doing something wrong in the last line of my code.

 

Dim MetaDataMgr As Box.V2.Managers.BoxMetadataManager
        Dim TemplateName As String
        Dim FieldName As String
        Dim FieldKey As Integer
        Dim fld As Box.V2.Models.BoxMetadataTemplateField
        Dim fo As Box.V2.Models.BoxMetadataTemplateFieldOption
        Dim folist As New List(Of String)
        Dim TmpUpdtList As New List(Of Box.V2.Models.BoxMetadataTemplateUpdate)
        Dim TmpUpdt As New Box.V2.Models.BoxMetadataTemplateUpdate
        Dim fldkeys As New List(Of String)


        TemplateName = Me.cbBoxTemplate.SelectedItem
        FieldName = Me.cbBoxTemplateField.SelectedItem.ToString
        FieldKey = Me.cbBoxTemplateField.SelectedIndex
        MetaDataMgr = BoxClient.MetadataManager
        MetaDataTemp = Await MetaDataMgr.GetMetadataTemplate("enterprise", TemplateName)
        fld = MetaDataTemp.Fields(FieldKey)

        
        'Push the update
        fldkeys.Add("Test Option")
        TmpUpdt.Op = Box.V2.Models.MetadataTemplateUpdateOp.addEnumOption

        TmpUpdt.FieldKey = FieldKey
        TmpUpdt.EnumOptionKeys = fldkeys
        TmpUpdtList.Add(TmpUpdt)

        Await MetaDataMgr.UpdateMetadataTemplate(TmpUpdtList, "enterprise", TemplateName)

 

Here is the TemplateUpdate object I'm passing to the update sub. Per the documentation, I'm passing a collection of Box.V2.Models.BoxMetadataTemplateUpdate objects. In those, I'm not using 'data', but adding the list of strings for the new options to the FieldEnumOptionKeys property.

 

? tmpupdtlist
Count = 1
    collection: Count = 1
    (0): {Box.V2.Models.BoxMetadataTemplateUpdate}
? tmpupdtlist(0) {Box.V2.Models.BoxMetadataTemplateUpdate} Data: Nothing EnumOptionKeys: Count = 1 FieldData: "data" FieldEnumOptionKeys: "enumOptionKeys" FieldFieldKey: "fieldKey" FieldFieldKeys: "fieldKeys" FieldKey: "0" FieldKeys: Nothing FieldOp: "op" Op: addEnumOption {0}
? tmpupdtlist(0).EnumOptionKeys Count = 1 collection: Count = 1 (0): "Test Option"
? tmpupdtlist(0).EnumOptionKeys(0) "Test Option"

 Any ideas?

1 reply

Forum|alt.badge.img

Answered my own question again. Per the API reference, MetadataTemplateUpdate in addEnumOption mode requires .data to be provided, not EnumOptionKeys.

 

Possible Template Operations:

  • addEnumOption: Adds an enum option at the end of the enum option list for the specified field
    Params:
    data: JSON object of the enum option to be added
    fieldKey: The key of the field to add the enum option. Must refer to an enum field
    Example: {"op":"addEnumOption","fieldKey":"category","data":{"key":"Technology"}}. This will add a new enum option Technologyunder the field category.

This code works:

Dim MetaDataMgr As Box.V2.Managers.BoxMetadataManager
        Dim TemplateName As String
        Dim FieldName As String
        Dim FieldKey As Integer
        Dim fld As Box.V2.Models.BoxMetadataTemplateField
        Dim fo As Box.V2.Models.BoxMetadataTemplateFieldOption
        Dim folist As New List(Of String)
        Dim TmpUpdtList As New List(Of Box.V2.Models.BoxMetadataTemplateUpdate)
        Dim TmpUpdt As New Box.V2.Models.BoxMetadataTemplateUpdate
        'Dim fldkeys As New List(Of String)
        Dim fldkeys As New Dictionary(Of String, String)

        TemplateName = Me.cbBoxTemplate.SelectedItem
        FieldName = Me.cbBoxTemplateField.SelectedItem.ToString
        FieldKey = Me.cbBoxTemplateField.SelectedIndex
        MetaDataMgr = BoxClient.MetadataManager
        MetaDataTemp = Await MetaDataMgr.GetMetadataTemplate("enterprise", TemplateName)
        fld = MetaDataTemp.Fields(FieldKey)

        
        fldkeys.Add("key", "Test Option")
        TmpUpdt.Op = Box.V2.Models.MetadataTemplateUpdateOp.addEnumOption
        TmpUpdt.Data = fldkeys
        TmpUpdt.FieldKey = FieldName
        'TmpUpdt.EnumOptionKeys = fldkeys
        TmpUpdtList.Add(TmpUpdt)

        Dim TmpNew As Box.V2.Models.BoxMetadataTemplate
        Try
            TmpNew = Await MetaDataMgr.UpdateMetadataTemplate(TmpUpdtList, "enterprise", TemplateName)
        Catch ex As Exception
            MsgBox("Failed saving changes. Error message from Box is: " & ex.Message)
            'Debug.Print(ex.Message)
        End Try