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

Custom External Object

Hi, 

Is there a way to retrieve ParmanentVault into a custom Application used External Object connection ? 
Final need is to retrieve ColumnType from MFDataType from readed configuration i.e. 

public override List<ColumnDefinition> GetAvailableColumns()
        {
            // TODO: Return the column definitions that are supported for the current configuration.
            List<ColumnDefinition> colDefs = new List<ColumnDefinition>();
            foreach (ColumnMapping colMap in Config.ColumnMapping)
            {
                ColumnDefinition colDef = new ColumnDefinition()
                {
                    Ordinal = colMap.Ordinal,
                    Name = colMap.SourceColumnName,
                    Type = GetColumnTypeFromPropertyDefID(colMap.PropertyDef)
                };
                colDefs.Add(colDef);
            }
            return colDefs;
        }
        
        /// <summary>
        /// Get ColumnType from propertyDef ID
        /// </summary>
        /// <param name="propertyDefID">PropertyDef ID in vault</param>
        /// <returns>ColumnType</returns>
        public static ColumnType GetColumnTypeFromPropertyDefID(int propertyDefID)
        {
            PropertyDefAdmin propDefAdmin = PermanentVault.PropertyDefOperations.GetPropertyDefAdmin(propertyDefID);
            return TypeMappingByMFDataType[propDefAdmin.PropertyDef.DataType];
        }

        /// <summary>
        /// Map of M-Files types to ColumnType
        /// </summary>
        public static readonly Dictionary<MFDataType, ColumnType> TypeMappingByMFDataType = new Dictionary<MFDataType, ColumnType>()
        {
                { MFDataType.MFDatatypeMultiLineText, ColumnType.DBTYPE_WSTR },
                { MFDataType.MFDatatypeText, ColumnType.DBTYPE_WSTR },
                { MFDataType.MFDatatypeInteger, ColumnType.DBTYPE_I4 },
                { MFDataType.MFDatatypeInteger64, ColumnType.DBTYPE_I8 },
                { MFDataType.MFDatatypeBoolean, ColumnType.DBTYPE_BOOL },
                { MFDataType.MFDatatypeFloating, ColumnType.DBTYPE_DECIMAL },
                { MFDataType.MFDatatypeDate, ColumnType.DBTYPE_DBDATE } ,
                { MFDataType.MFDatatypeTime, ColumnType.DBTYPE_DBDATE },
                { MFDataType.MFDatatypeTimestamp, ColumnType.DBTYPE_DBDATE },
                { MFDataType.MFDatatypeLookup,  ColumnType.DBTYPE_I4 },
        };

Thanks 
regards

Fabien

Parents
  • Hi Fabien,

    Sorry that I missed this.

    I believe that you could pass the permanent vault reference into the data source connection.  In your DataSource class there is an OpenConnection method which instantiates the connection.  You could alter the connection so that you could pass in "this.VaultApplication.ApplicationContext.PermanentVault".

    Does that make sense?

    Regards,

    Craig.

Reply
  • Hi Fabien,

    Sorry that I missed this.

    I believe that you could pass the permanent vault reference into the data source connection.  In your DataSource class there is an OpenConnection method which instantiates the connection.  You could alter the connection so that you could pass in "this.VaultApplication.ApplicationContext.PermanentVault".

    Does that make sense?

    Regards,

    Craig.

Children