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

Copy item from single-select to multi-select.

Former Member
Former Member
Hello, this is my first post, so thanks up front for whatever help anyone can give, and sorry for my lack of knowledge.

I am trying to copy the selection in a single-select property (iRollNumberProperty) to the selection in a multi-select property (iLandIDProperty) on the same object. The properties pull from two different Object Types which use identical queries to pull from the same external source (so, the unique IDs are the same in both Object Types).

I borrowed the AddUpdateProperty function from another topic, and used it without modification. The code is in the automatic value of an unrelated field.

I have used one specific case (129203000) to troubleshoot. The idea is to add the objectID "129203000" to the Land ID property to the object I was using as a test. When I trigger it, I get the error message that is attached. 344 is the ID of the Land ID object type, which is where the property value should be pulled from.

Hopefully my code will fill in the gaps where my explanation may be lacking. This is M-Files 2015.3.

Thanks.



Option Explicit

Dim iRollNumberProperty : iRollNumberProperty = 1432 '1432 is the Roll Number Property Definition
Dim iLandIDProperty : iLandIDProperty = 1747 '1747 is the LandID Property Definition
Dim objClientLookup: Set objClientLookup= PropertyValues.SearchForProperty(iLandIDProperty).TypedValue.GetValueAsLookup()

if IsNull(PropertyValues.SearchForPropertyEx(iLandIDProperty, true))=False then

    dim iRolls: iRolls = 129203000
    AddUpdateProperty iRolls, iLandIDProperty

end if


Function AddUpdateProperty(sValue, PROP_ID)

Dim oProperty : Set oProperty = CreateObject("MFilesAPI.PropertyValue")
oProperty.PropertyDef = PROP_ID
Dim iDataType : iDataType = Vault.PropertyDefOperations.GetPropertyDef(oProperty.PropertyDef).DataType
Dim iValue : iValue = CLng(sValue)
Dim oLookups : Set oLookups = PropertyValues.SearchForProperty(PROP_ID).TypedValue.GetValueAsLookups()
Dim oLookup : Set oLookup = CreateObject("MFilesAPI.Lookup")
Dim oCount

oCount = oLookups.Count
If oCount <> 0 then oCount = oCount + 1
oLookup.Item = iValue
oLookups.Add oCount, oLookup
PropertyValues.SearchForProperty(PROP_ID).TypedValue.SetValueToMultiSelectLookup oLookups
oProperty.TypedValue.SetValueToMultiSelectLookup oLookups
Vault.ObjectPropertyOperations.SetProperty ObjVer, oProperty
End Function
Parents
  • Former Member
    Former Member
    I have worked further on this, and perhaps my problem is not referring to the external ID for the object explicitly.

    I changed to the following:

    Option Explicit

    Dim iRollNumberProperty : iRollNumberProperty = 1432 '1432 is the Roll Number Property Definition
    Dim iRollNumbersProperty : iRollNumbersProperty = 1055 '1055 is the Roll Number(s) Property Definition
    Dim iLegalLandDescriptionProperty : iLegalLandDescriptionProperty = 1075 '1075 is the Legal Land Description Property Definition
    Dim iLegalLandDescriptionsProperty : iLegalLandDescriptionsProperty = 1041 '1075 is the Legal Land Description(s) Property Definition
    Dim iLandIDProperty : iLandIDProperty = 1747 '1747 is the LandID Property Definition
    Dim iRollInformationOBJID: iRollInformationOBJID = 106
    Dim iLandIDOBJID: iLandIDOBJID = 344
    Dim iVBScriptProperty: iVBScriptProperty = 1754

    Dim objClientLookup: Set objClientLookup= PropertyValues.SearchForProperty(iLandIDProperty).TypedValue.GetValueAsLookup()
    'Err.Raise MFScriptCancel, objClientLookup.DisplayValue & "-" & objClientLookup.DisplayID

    if IsNull (PropertyValues.SearchForPropertyEx(iLandIDProperty, true))=false then
    'if IsNull(PropertyValues.SearchForPropertyEx(iLandIDProperty, true)) then
    'Err.Raise MFScriptCancel, "got here"
    dim iRolls: iRolls = 129203000
    ' Output = "1"

    dim oValueListItem
    set oValueListItem = Vault.ValueListItemOperations.GetValueListItemByDisplayID(iLandIDOBJID , iRolls)
    'Err.Raise MFScriptCancel, oValueListItem.DisplayValue & "-" & oValueListItem.DisplayID
    Dim oPropValRelationship: Set oPropValRelationship = PropertyValues.SearchForProperty( iLandIDProperty )
    oPropValRelationship.Value.SetValue MFDatatypeMultiSelectLookup, oValueListItem.ID 'ID of the External object
    Vault.ObjectPropertyOperations.SetProperty ObjVer, oPropValRelationship


    ' AddUpdateProperty iRolls, iLandIDProperty

    end if


    Function AddUpdateProperty(sValue, PROP_ID)

    Dim oProperty : Set oProperty = CreateObject("MFilesAPI.PropertyValue")
    oProperty.PropertyDef = PROP_ID
    Dim iDataType : iDataType = Vault.PropertyDefOperations.GetPropertyDef(oProperty.PropertyDef).DataType
    Dim iValue : iValue = CLng(sValue)
    Dim oLookups : Set oLookups = PropertyValues.SearchForProperty(PROP_ID).TypedValue.GetValueAsLookups()
    Dim oLookup : Set oLookup = CreateObject("MFilesAPI.Lookup")
    Dim oCount

    oCount = oLookups.Count
    If oCount <> 0 then oCount = oCount + 1
    oLookup.Item = iValue
    oLookups.Add oCount, oLookup
    PropertyValues.SearchForProperty(PROP_ID).TypedValue.SetValueToMultiSelectLookup oLookups
    oProperty.TypedValue.SetValueToMultiSelectLookup oLookups
    Vault.ObjectPropertyOperations.SetProperty ObjVer, oProperty
    End Function


    I believe this might be working, but it seems to loop and then dies with the error message "maximum number of script executions exceeded" probably because I am doing this as an autocalculate on an unrelated property (called vbscript). Does this seem correct? So, basically, it runs initially because I add the "vbscript" property to the object (happens to be a multi-file document), and save the object. Then, unfortunately, it runs again because the object was modified by changing the value of the multi-select property, and runs again and again because of the same thing. I couldn't find anything that definitively tells me when the auto-calculate properties on an object cause an associated script to run.

    Right now, I am thinking I should run this in an event handler instead, but I only want it to run on the objects we add the "vbscript" property to. I'm not really sure what event handler would be appropriate if I go that way.

    Any input appreciated.
Reply
  • Former Member
    Former Member
    I have worked further on this, and perhaps my problem is not referring to the external ID for the object explicitly.

    I changed to the following:

    Option Explicit

    Dim iRollNumberProperty : iRollNumberProperty = 1432 '1432 is the Roll Number Property Definition
    Dim iRollNumbersProperty : iRollNumbersProperty = 1055 '1055 is the Roll Number(s) Property Definition
    Dim iLegalLandDescriptionProperty : iLegalLandDescriptionProperty = 1075 '1075 is the Legal Land Description Property Definition
    Dim iLegalLandDescriptionsProperty : iLegalLandDescriptionsProperty = 1041 '1075 is the Legal Land Description(s) Property Definition
    Dim iLandIDProperty : iLandIDProperty = 1747 '1747 is the LandID Property Definition
    Dim iRollInformationOBJID: iRollInformationOBJID = 106
    Dim iLandIDOBJID: iLandIDOBJID = 344
    Dim iVBScriptProperty: iVBScriptProperty = 1754

    Dim objClientLookup: Set objClientLookup= PropertyValues.SearchForProperty(iLandIDProperty).TypedValue.GetValueAsLookup()
    'Err.Raise MFScriptCancel, objClientLookup.DisplayValue & "-" & objClientLookup.DisplayID

    if IsNull (PropertyValues.SearchForPropertyEx(iLandIDProperty, true))=false then
    'if IsNull(PropertyValues.SearchForPropertyEx(iLandIDProperty, true)) then
    'Err.Raise MFScriptCancel, "got here"
    dim iRolls: iRolls = 129203000
    ' Output = "1"

    dim oValueListItem
    set oValueListItem = Vault.ValueListItemOperations.GetValueListItemByDisplayID(iLandIDOBJID , iRolls)
    'Err.Raise MFScriptCancel, oValueListItem.DisplayValue & "-" & oValueListItem.DisplayID
    Dim oPropValRelationship: Set oPropValRelationship = PropertyValues.SearchForProperty( iLandIDProperty )
    oPropValRelationship.Value.SetValue MFDatatypeMultiSelectLookup, oValueListItem.ID 'ID of the External object
    Vault.ObjectPropertyOperations.SetProperty ObjVer, oPropValRelationship


    ' AddUpdateProperty iRolls, iLandIDProperty

    end if


    Function AddUpdateProperty(sValue, PROP_ID)

    Dim oProperty : Set oProperty = CreateObject("MFilesAPI.PropertyValue")
    oProperty.PropertyDef = PROP_ID
    Dim iDataType : iDataType = Vault.PropertyDefOperations.GetPropertyDef(oProperty.PropertyDef).DataType
    Dim iValue : iValue = CLng(sValue)
    Dim oLookups : Set oLookups = PropertyValues.SearchForProperty(PROP_ID).TypedValue.GetValueAsLookups()
    Dim oLookup : Set oLookup = CreateObject("MFilesAPI.Lookup")
    Dim oCount

    oCount = oLookups.Count
    If oCount <> 0 then oCount = oCount + 1
    oLookup.Item = iValue
    oLookups.Add oCount, oLookup
    PropertyValues.SearchForProperty(PROP_ID).TypedValue.SetValueToMultiSelectLookup oLookups
    oProperty.TypedValue.SetValueToMultiSelectLookup oLookups
    Vault.ObjectPropertyOperations.SetProperty ObjVer, oProperty
    End Function


    I believe this might be working, but it seems to loop and then dies with the error message "maximum number of script executions exceeded" probably because I am doing this as an autocalculate on an unrelated property (called vbscript). Does this seem correct? So, basically, it runs initially because I add the "vbscript" property to the object (happens to be a multi-file document), and save the object. Then, unfortunately, it runs again because the object was modified by changing the value of the multi-select property, and runs again and again because of the same thing. I couldn't find anything that definitively tells me when the auto-calculate properties on an object cause an associated script to run.

    Right now, I am thinking I should run this in an event handler instead, but I only want it to run on the objects we add the "vbscript" property to. I'm not really sure what event handler would be appropriate if I go that way.

    Any input appreciated.
Children
No Data