This discussion has been locked.
You can no longer post new replies to this discussion. If you have a question you can start a new discussion

Updating related property with vbscript

Hi everybody,

We have products with quantities and a mouvment related to a product. We are trying with VBScript to update the product quantity when the mouvment is created.

We are new in VBScript in M-Files so be indulgent.

We wrote this which leads to an error (ObjVer non managed ; yellow line). Maybe we get some real understanding points so thanks in advance for all your help.

Option Explicit


Dim ID_Objet : ID_Objet = GetPropertyID("PD_PROD") 'récupère le numéro de propriété de l'objet

'on récupère l'objet liéPoint down
Dim valeurObjet
Set valeurObjet = PropertyValues.SearchForProperty(ID_Objet).TypedValue.GetValueAsLookup

'on récupère la version qui corrspondPoint down
Dim Objetlier : Set Objetlier = GetOvapsByLookup(valeurObjet)
Dim VERObjerlier : Set VERObjerlier = Objetlier.ObjVer 'récupère l'ObjVer de l'objet lié

Dim ProprietesObjetlier : Set ProprietesObjetlier = Objetlier.Properties 'récupère l'ensemble des propriétés de l'objet lié


Dim ID_METADONNEEObjetlier : ID_METADONNEEObjetlier = GetPropertyID("PD.Quantite") 'récupère l'ID de la métadonnée dans l'objet lié

'récupère la valeur de la métadonnée de l'objet liéePoint down
DIm val_METADONNEEObjetlier : val_METADONNEEObjetlier = ProprietesObjetlier.SearchForProperty(ID_METADONNEEObjetlier).TypedValue.DisplayValue
val_METADONNEEObjetlier = val_METADONNEEObjetlier + 1 'ajoute + 1

Vault.ObjectPropertyOperations.SetProperty VERObjerlier.ObjVer, val_METADONNEEObjetlier 'met à jour l'objet lié avec la nouvelle valeur

Function GetPropertyID(alias)
Dim iID
iID = vault.PropertyDefOperations.GetPropertyDefIDByAlias(alias)
If iID=-1 then
Err.raise MFScriptCancel, "La propriété/métadonnée n'a pas été trouvée (alias :" & alias
End If
GetPropertyID=iID
End Function

Function GetOvapsByLookup( lookup )
Dim oObjID : Set oObjID = CreateObject( "MFilesAPI.ObjID" )
Call oObjID.SetIDs( lookup.ObjectType, lookup.Item )
Dim oObjVer : Set oObjVer = Vault.ObjectOperations.GetLatestObjVer( oObjID,False)
Set GetOvapsByLookup = Vault.ObjectOperations.GetObjectVersionAndProperties(oObjVer)
End Function

Parents
  • If I understand correctly I think you are trying to update another object not the current one being updated. If so, I believe you have to check out the object first then update it , and then check it back in .

    Also I believe the highlighted line is actually incorrect syntax, It looks like you are passing the value you want instead of a PropertyValue object. try the following:

    'récupère la valeur de la métadonnée de l'objet liée
    
    'get the property value
    Dim Property_METADONNEEObjetlier : Property_METADONNEEObjetlier = ProprietesObjetlier.SearchForProperty(ID_METADONNEEObjetlier)
    
    'get the new value
    DIm val_METADONNEEObjetlier : val_METADONNEEObjetlier = Property_METADONNEEObjetlier.TypedValue.DisplayValue
    val_METADONNEEObjetlier = val_METADONNEEObjetlier + 1 'ajoute + 1
    
    'set the new value on the property Value NOTE MAKE SURE U PUT THE CORRECT MFDATATYPE
    Property_METADONNEEObjetlier.Value.SetValue MFDatatypeInteger, val_METADONNEEObjetlier
    
    ''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''
    'if the above line to set the value does not work you can try creating a new property value object
    'Dim oPropertyValue : Set oPropertyValue = CreateObject("MFilesAPI.PropertyValue")
    'oPropertyValue.PropertyDef = ID_METADONNEEObjetlier
    'oPropertyValue.Value.SetValue MFDatatypeInteger, val_METADONNEEObjetlier
    ''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''
    
    'Checkout the object you want to update
    Dim checkedOutObjectVersion : Set checkedOutObjectVersion = vault.ObjectOperations.CheckOut(VERObjerlier.ObjVer.objID)
    
    'update properties of checked out object
    Vault.ObjectPropertyOperations.SetProperty checkedOutObjectVersion.ObjVer, Property_METADONNEEObjetlier 'met à jour l'objet lié avec la nouvelle valeur
    
    'check in the checked out object
    vault.ObjectOperations.CheckIn checkedOutObjectVersion.ObjVer

    I can't read French and this is untested code so I am sorry if there are any typos, but this should at least get you a good step in the correct direction. Slight smile

  • Hi Many thanks for your helpThumbsup. I will try this and keep you informed.

Reply Children
No Data