'--------------------------------------------------------------------------' SetMetadata()'--------------------------------------------------------------------------Sub SetMetadata(ByRef objAsset, ByRef arrMetadata, ByVal strMetadataGUID, ByVal strNewValue) 'Set Asset Status dim AssetMD on error resume next set AssetMD = objAsset.MetaData(arrMetadata) if (AssetMD.count = 0) and (err.number = 0) then Dim MDDef, mMetaDataToRevise, metaDataValue, gNewValue set mMetaDataToRevise = objSession.CreateObjectCollection Set MDDef = objSession.GetMetadataDefinition(strMetadataGUID) ' Report missing metadata wscript.echo "*** Applying " & MDDef.Name & " metadata to Asset [" & objAsset.Identifier & "] " & objAsset.Name Set metaDataValue = MDDef.CreateMetaDataValue() If (metaDataValue.IsMultipleValue) Then ' if multiselect metadata value, set value as array dim arrValues if (IsArray(strNewValue)) then arrValues = strNewValue else Dim strValue on error resume next strValue = CStr( strNewValue ) if ( err.number <> 0 ) then err.clear exit sub end if if ( len(strElementDelineator) > 0 ) and ( len(strValue) >= (len(strElementDelineator) * 2) ) then strValue = Replace( Left(strNewValue, 1), strElementDelineator, "") & Mid( strNewValue, 2, Len(strNewValue) - 2) & Replace( Right(strNewValue, 1), strElementDelineator, "") end if arrValues = split( strValue, strElementDelineator & strArrayDelimiter & strElementDelineator ) 'arrValues = Array(strNewValue) end if dim ix for ix = LBound(arrValues) To UBound(arrValues) select case objMDValue.Type case IntegerMetaData, IntegerChoiceMetaData arrValues(ix) = CLng(arrValues(ix)) case DoubleMetaData, DoubleChoiceMetaData arrValues(ix) = CDbl(arrValues(ix)) case DateTimeMetaData if (IsDate(arrValues(ix))) then arrValues(ix) = CDate(arrValues(ix)) else arrValues(ix) = Now end if case BooleanMetaData arrValues(ix) = CBool(arrValues(ix)) case else ' MDTypeStringEdit, MDTypeStringChoice, MDTypeUNCFileName, MDTypeURLLink arrValues(ix) = CStr(arrValues(ix)) End Select next metaDataValue.SetValue arrValues Else ' Only a single value dim vntDataValue select case metaDataValue.Type case BooleanMetaData 'Dim strValue strValue = lcase(CStr(strNewValue)) if ( strValue = "yes" ) then vntDataValue = True elseif ( strValue = "no" ) then vntDataValue = False elseif ( strValue = "true" ) or ( strValue = "false" ) then vntDataValue = CBool(strNewValue) else 'Error Invalid data for Boolean, exit w/ SetValue = False exit sub end if case IntegerMetaData, IntegerChoiceMetaData vntDataValue = CLng(strNewValue) case DoubleMetaData, DoubleChoiceMetaData vntDataValue = CDbl(strNewValue) case DateTimeMetaData On Error Resume Next if (IsDate(strNewValue)) then vntDataValue = CDate(strNewValue) else vntDataValue = Now end if case BooleanMetaData vntDataValue = CBool(strNewValue) case else vntDataValue = CStr(strNewValue) End Select metaDataValue.SetValue vntDataValue End If metaDataValue.SetValue strNewValue mMetaDataToRevise.Add metaDataValue objAsset.ReviseMetaData mMetaDataToRevise, Nothing wscript.echo "*** Finished updating " & MDDef.Name & " to '" & strNewValue & "'" end if err.Clearend sub'--------------------------------------------------------------------------
I have tested with String List metadata, and it works. The client insists on using Value List for a particular metadata.
dim objAsset dim mdArray dim mdValue 'Get Asset set objAsset = g_objSession.GetAsset( AssetID ) 'Create an instance of the value list metadata setting the value to the second element in the list set mdValue = g_objSession.CreateMetaDataValue( MetadataID, 1 ) 'Create a metadata array and add the newly created metadata instance set mdArray = g_objSession.CreateObjectCollection mdArray.Add mdValue 'Revise the asset's metadata objAsset.ReviseMetadata mdArray
if (x <> "") thenset mdValue = MediaBinServerObject.CreateMetaDataValue(metadataId, x)'end if elseset mdValue = arrMeta(i).CreateMetaDataValue()end ifset mdArray = MediaBinServerObject.CreateObjectCollectionmdArray.Add mdValueasset.ReviseMetaData mdArray