.Net SDK MetaDataTemplateUpdate
Answered
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?
-
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
Please sign in to leave a comment.
Comments
1 comment