Topic: Problem after upgrade to 0.30

Hi upgraded to 0.3 quite easily using the instructions.

Every now and then when i click on a asset model i get the following error:

Fatal error: Call to a member function GetColumn() on a non-object in C:\xampp\htdocs\includes\data_classes\CustomFieldSelection.class.php on line 515

After looking at this file here is the contents of the file.

_______________________

<?php
/*
* Copyright (c)  2009, Tracmor, LLC
*
* This file is part of Tracmor. 
*
* Tracmor is free software; you can redistribute it and/or modify
* it under the terms of the GNU General Public License as published by
* the Free Software Foundation; either version 2 of the License, or
* (at your option) any later version.
*   
* Tracmor is distributed in the hope that it will be useful,
* but WITHOUT ANY WARRANTY; without even the implied warranty of
* MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the
* GNU General Public License for more details.
*
* You should have received a copy of the GNU General Public License
* along with Tracmor; if not, write to the Free Software
* Foundation, Inc., 51 Franklin St, Fifth Floor, Boston, MA  02110-1301  USA
*/
?>

<?php
    //require(__DATAGEN_CLASSES__ . '/CustomFieldSelectionGen.class.php');

    /**
     * The CustomFieldSelection class defined here contains any
     * customized code for the CustomFieldSelection class in the
     * Object Relational Model.  It represents the "custom_field_selection" table
     * in the database, and extends from the code generated abstract CustomFieldSelectionGen
     * class, which contains all the basic CRUD-type functionality as well as
     * basic methods to handle relationships and index-based loading.
     *
     * @package My Application
     * @subpackage DataObjects
     *
     */
    class CustomFieldSelection extends QBaseClass {
       
        // Cannot use $CustomAssetFieldValue here because it would override the variable QCodo creates
        // with the expanded load.       
        public $newCustomFieldValue;
       
        /**
         * Default "to string" handler
         * Allows pages to _p()/echo()/print() this object, and to define the default
         * way this object would be outputted.
         *
         * Can also be called directly via $objCustomFieldSelection->__toString().
         *
         * @return string a nicely formatted string representation of this object
         */
        public function __toString() {
            return sprintf('CustomFieldSelection Object %s',  $this->intCustomFieldSelectionId);
        }
       
        /* BEGIN: CODE GENERATED METHODS
         * These methods were originally in CustomFieldSelectionGen.class.php, but were moved here in October 2009 when the CustomFieldSelection table was removed from the data model
       
        ///////////////////////////////
        // QCODO QUERY-RELATED METHODS
        ///////////////////////////////

        /**
         * Static method to retrieve the Database object that owns this class.
         * @return QDatabaseBase reference to the Database object that can query this class
         */
        public static function GetDatabase() {
            return QApplication::$Database[1];
        }

        ////////////////////
        // PUBLIC OVERRIDERS
        ////////////////////

                /**
         * Override method to perform a property "Get"
         * This will get the value of $strName
         *
         * @param string $strName Name of the property to get
         * @return mixed
         */
        public function __get($strName) {
            switch ($strName) {
                ///////////////////
                // Member Variables
                ///////////////////
                case 'CustomFieldSelectionId':
                    /**
                     * Gets the value for intCustomFieldSelectionId (Read-Only PK)
                     * @return integer
                     */
                    return $this->intCustomFieldSelectionId;

                case 'CustomFieldValueId':
                    /**
                     * Gets the value for intCustomFieldValueId (Not Null)
                     * @return integer
                     */
                    return $this->intCustomFieldValueId;

                case 'EntityQtypeId':
                    /**
                     * Gets the value for intEntityQtypeId (Not Null)
                     * @return integer
                     */
                    return $this->intEntityQtypeId;

                case 'EntityId':
                    /**
                     * Gets the value for intEntityId (Not Null)
                     * @return integer
                     */
                    return $this->intEntityId;


                ///////////////////
                // Member Objects
                ///////////////////
                case 'CustomFieldValue':
                    /**
                     * Gets the value for the CustomFieldValue object referenced by intCustomFieldValueId (Not Null)
                     * @return CustomFieldValue
                     */
                    try {
                        if ((!$this->objCustomFieldValue) && (!is_null($this->intCustomFieldValueId)))
                            $this->objCustomFieldValue = CustomFieldValue::Load($this->intCustomFieldValueId);
                        return $this->objCustomFieldValue;
                    } catch (QCallerException $objExc) {
                        $objExc->IncrementOffset();
                        throw $objExc;
                    }


                ////////////////////////////
                // Virtual Object References (Many to Many and Reverse References)
                // (If restored via a "Many-to" expansion)
                ////////////////////////////

                default:
                    try {
                        return parent::__get($strName);
                    } catch (QCallerException $objExc) {
                        $objExc->IncrementOffset();
                        throw $objExc;
                    }
            }
        }

                /**
         * Override method to perform a property "Set"
         * This will set the property $strName to be $mixValue
         *
         * @param string $strName Name of the property to set
         * @param string $mixValue New value of the property
         * @return mixed
         */
        public function __set($strName, $mixValue) {
            switch ($strName) {
                ///////////////////
                // Member Variables
                ///////////////////
                case 'CustomFieldSelectionId':
                    /**
                     * Sets the value for intCustomFieldId (Not Null)
                     * @param integer $mixValue
                     * @return integer
                     */
                    try {
                        return ($this->intCustomFieldSelectionId = QType::Cast($mixValue, QType::Integer));
                    } catch (QCallerException $objExc) {
                        $objExc->IncrementOffset();
                        throw $objExc;
                    }
                case 'CustomFieldValueId':
                    /**
                     * Sets the value for intCustomFieldValueId (Not Null)
                     * @param integer $mixValue
                     * @return integer
                     */
                    try {
                        $this->objCustomFieldValue = null;
                        return ($this->intCustomFieldValueId = QType::Cast($mixValue, QType::Integer));
                    } catch (QCallerException $objExc) {
                        $objExc->IncrementOffset();
                        throw $objExc;
                    }

                case 'EntityQtypeId':
                    /**
                     * Sets the value for intEntityQtypeId (Not Null)
                     * @param integer $mixValue
                     * @return integer
                     */
                    try {
                        return ($this->intEntityQtypeId = QType::Cast($mixValue, QType::Integer));
                    } catch (QCallerException $objExc) {
                        $objExc->IncrementOffset();
                        throw $objExc;
                    }

                case 'EntityId':
                    /**
                     * Sets the value for intEntityId (Not Null)
                     * @param integer $mixValue
                     * @return integer
                     */
                    try {
                        return ($this->intEntityId = QType::Cast($mixValue, QType::Integer));
                    } catch (QCallerException $objExc) {
                        $objExc->IncrementOffset();
                        throw $objExc;
                    }


                ///////////////////
                // Member Objects
                ///////////////////
                case 'CustomFieldValue':
                    /**
                     * Sets the value for the CustomFieldValue object referenced by intCustomFieldValueId (Not Null)
                     * @param CustomFieldValue $mixValue
                     * @return CustomFieldValue
                     */
                    if (is_null($mixValue)) {
                        $this->intCustomFieldValueId = null;
                        $this->objCustomFieldValue = null;
                        return null;
                    } else {
                        // Make sure $mixValue actually is a CustomFieldValue object
                        try {
                            $mixValue = QType::Cast($mixValue, 'CustomFieldValue');
                        } catch (QInvalidCastException $objExc) {
                            $objExc->IncrementOffset();
                            throw $objExc;
                        }

                        // Make sure $mixValue is a SAVED CustomFieldValue object
                        if (is_null($mixValue->CustomFieldValueId))
                            throw new QCallerException('Unable to set an unsaved CustomFieldValue for this CustomFieldSelection');

                        // Update Local Member Variables
                        $this->objCustomFieldValue = $mixValue;
                        $this->intCustomFieldValueId = $mixValue->CustomFieldValueId;

                        // Return $mixValue
                        return $mixValue;
                    }
                    break;

                default:
                    try {
                        return parent::__set($strName, $mixValue);
                    } catch (QCallerException $objExc) {
                        $objExc->IncrementOffset();
                        throw $objExc;
                    }
            }
        }

        /**
         * Lookup a VirtualAttribute value (if applicable).  Returns NULL if none found.
         * @param string $strName
         * @return string
         */
        public function GetVirtualAttribute($strName) {
            if (array_key_exists($strName, $this->__strVirtualAttributeArray))
                return $this->__strVirtualAttributeArray[$strName];
            return null;
        }

        ///////////////////////////////////////////////////////////////////////
        // PROTECTED MEMBER VARIABLES and TEXT FIELD MAXLENGTHS (if applicable)
        ///////////////////////////////////////////////////////////////////////
       
        /**
         * Protected member variable that maps to the database PK Identity column custom_field_selection.custom_field_selection_id
         * @var integer intCustomFieldSelectionId
         */
        protected $intCustomFieldSelectionId;
        const CustomFieldSelectionIdDefault = null;


        /**
         * Protected member variable that maps to the database column custom_field_selection.custom_field_value_id
         * @var integer intCustomFieldValueId
         */
        protected $intCustomFieldValueId;
        const CustomFieldValueIdDefault = null;


        /**
         * Protected member variable that maps to the database column custom_field_selection.entity_qtype_id
         * @var integer intEntityQtypeId
         */
        protected $intEntityQtypeId;
        const EntityQtypeIdDefault = null;


        /**
         * Protected member variable that maps to the database column custom_field_selection.entity_id
         * @var integer intEntityId
         */
        protected $intEntityId;
        const EntityIdDefault = null;


        /**
         * Protected array of virtual attributes for this object (e.g. extra/other calculated and/or non-object bound
         * columns from the run-time database query result for this object).  Used by InstantiateDbRow and
         * GetVirtualAttribute.
         * @var string[] $__strVirtualAttributeArray
         */
        protected $__strVirtualAttributeArray = array();

        /**
         * Protected internal member variable that specifies whether or not this object is Restored from the database.
         * Used by Save() to determine if Save() should perform a db UPDATE or INSERT.
         * @var bool __blnRestored;
         */
        protected $__blnRestored;



        ///////////////////////////////
        // PROTECTED MEMBER OBJECTS
        ///////////////////////////////

        /**
         * Protected member variable that contains the object pointed by the reference
         * in the database column custom_field_selection.custom_field_value_id.
         *
         * NOTE: Always use the CustomFieldValue property getter to correctly retrieve this CustomFieldValue object.
         * (Because this class implements late binding, this variable reference MAY be null.)
         * @var CustomFieldValue objCustomFieldValue
         */
        protected $objCustomFieldValue;






        ////////////////////////////////////////////////////////
        // METHODS for MANUAL QUERY SUPPORT (aka Beta 2 Queries)
        ////////////////////////////////////////////////////////

        /**
         * Internally called method to assist with SQL Query options/preferences for single row loaders.
         * Any Load (single row) method can use this method to get the Database object.
         * @param string $objDatabase reference to the Database object to be queried
         */
        protected static function QueryHelper(&$objDatabase) {
            // Get the Database
            $objDatabase = QApplication::$Database[1];
        }

        ////////////////////////////////////////
        // COLUMN CONSTANTS for OBJECT EXPANSION
        ////////////////////////////////////////
        const ExpandCustomFieldValue = 'custom_field_value_id';




        ////////////////////////////////////////
        // METHODS for WEB SERVICES
        ////////////////////////////////////////

        public static function GetSoapComplexTypeXml() {
            $strToReturn = '<complexType name="CustomFieldSelection"><sequence>';
            $strToReturn .= '<element name="CustomFieldSelectionId" type="xsd:int"/>';
            $strToReturn .= '<element name="CustomFieldValue" type="xsd1:CustomFieldValue"/>';
            $strToReturn .= '<element name="EntityQtypeId" type="xsd:int"/>';
            $strToReturn .= '<element name="EntityId" type="xsd:int"/>';
            $strToReturn .= '<element name="__blnRestored" type="xsd:boolean"/>';
            $strToReturn .= '</sequence></complexType>';
            return $strToReturn;
        }

        public static function AlterSoapComplexTypeArray(&$strComplexTypeArray) {
            if (!array_key_exists('CustomFieldSelection', $strComplexTypeArray)) {
                $strComplexTypeArray['CustomFieldSelection'] = CustomFieldSelection::GetSoapComplexTypeXml();
                CustomFieldValue::AlterSoapComplexTypeArray($strComplexTypeArray);
            }
        }

        public static function GetArrayFromSoapArray($objSoapArray) {
            $objArrayToReturn = array();

            foreach ($objSoapArray as $objSoapObject)
                array_push($objArrayToReturn, CustomFieldSelection::GetObjectFromSoapObject($objSoapObject));

            return $objArrayToReturn;
        }

        public static function GetObjectFromSoapObject($objSoapObject) {
            $objToReturn = new CustomFieldSelection();
            if (property_exists($objSoapObject, 'CustomFieldSelectionId'))
                $objToReturn->intCustomFieldSelectionId = $objSoapObject->CustomFieldSelectionId;
            if ((property_exists($objSoapObject, 'CustomFieldValue')) &&
                ($objSoapObject->CustomFieldValue))
                $objToReturn->CustomFieldValue = CustomFieldValue::GetObjectFromSoapObject($objSoapObject->CustomFieldValue);
            if (property_exists($objSoapObject, 'EntityQtypeId'))
                $objToReturn->intEntityQtypeId = $objSoapObject->EntityQtypeId;
            if (property_exists($objSoapObject, 'EntityId'))
                $objToReturn->intEntityId = $objSoapObject->EntityId;
            if (property_exists($objSoapObject, '__blnRestored'))
                $objToReturn->__blnRestored = $objSoapObject->__blnRestored;
            return $objToReturn;
        }

        public static function GetSoapArrayFromArray($objArray) {
            if (!$objArray)
                return null;

            $objArrayToReturn = array();

            foreach ($objArray as $objObject)
                array_push($objArrayToReturn, CustomFieldSelection::GetSoapObjectFromObject($objObject, true));

            return unserialize(serialize($objArrayToReturn));
        }

        public static function GetSoapObjectFromObject($objObject, $blnBindRelatedObjects) {
            if ($objObject->objCustomFieldValue)
                $objObject->objCustomFieldValue = CustomFieldValue::GetSoapObjectFromObject($objObject->objCustomFieldValue, false);
            else if (!$blnBindRelatedObjects)
                $objObject->intCustomFieldValueId = null;
            return $objObject;
        }

    /////////////////////////////////////
    // ADDITIONAL CLASSES for QCODO QUERY
    /////////////////////////////////////

       
       
        /* END: Generated Code */   

        /**
         * This loads an expanded array of CustomFieldSelections and their associated values
         * The values for each selection can be accessed by looping through: $CustomFieldSelections[$i]->CustomFieldValue->ShortDescription
         *
         * @param integer $intAssetId
         * @param integer $intCustomAssetFieldId
         * @param string $strOrderBy
         * @param string $strLimit
         * @param ExpansionMap Object $objExpansionMap
         * @return CustomAssetFieldSelection
         */
        public static function LoadExpandedArray($intEntityId, $intEntityQtypeId, $intCustomFieldId, $strOrderBy = null, $strLimit = null, $objExpansionMap = null) {
           
            switch ($intEntityQtypeId) {
                case 1:
                    $strPrimaryKey = 'asset_id';
                    $strId = 'asset`.`asset_id';
                    $strHelperTable = '`asset_custom_field_helper`';
                    break;
                case 2:
                    $strPrimaryKey = 'inventory_model_id';
                    $strId = 'inventory_model`.`inventory_model_id';
                    $strHelperTable = '`inventory_model_custom_field_helper`';
                    break;
                case 4:
                    $strPrimaryKey = 'asset_model_id';
                    $strId = 'asset_model`.`asset_model_id';
                    $strHelperTable = '`asset_model_custom_field_helper`';
                    break;
                case 5:
                    $strPrimaryKey = 'manufacturer_id';
                    $strId = 'manufacturer`.`manufacturer_id';
                    $strHelperTable = '`manufacturer_custom_field_helper`';
                    break;
                case 6:
                    $strPrimaryKey = 'category_id';
                    $strId = 'category`.`category_id';
                    $strHelperTable = '`category_custom_field_helper`';
                    break;
                case 7:
                    $strPrimaryKey = 'company_id';
                    $strId = 'company`.`company_id';
                    $strHelperTable = '`company_custom_field_helper`';
                    break;
                case 8:
                    $strPrimaryKey = 'contact_id';
                    $strId = 'contact`.`contact_id';
                    $strHelperTable = '`contact_custom_field_helper`';
                    break;
                case 9:
                    $strPrimaryKey = 'address_id';
                    $strId = 'address`.`address_id';
                    $strHelperTable = '`address_custom_field_helper`';
                    break;
                case 10:
                    $strPrimaryKey = 'shipment_id';
                    $strId = 'shipment`.`shipment_id';
                    $strHelperTable = '`shipment_custom_field_helper`';
                    break;
                case 11:
                    $strPrimaryKey = 'receipt_id';
                    $strId = 'receipt`.`receipt_id';
                    $strHelperTable = '`receipt_custom_field_helper`';
                    break;
            }
           
            $objDatabase = CustomField::GetDatabase();
           
            $strQuery = sprintf("SELECT * FROM %s WHERE %s = %s", $strHelperTable, $strPrimaryKey, $intEntityId);
            $objDbResult = $objDatabase->Query($strQuery);
           
            $objToReturn = array();
            $objDbRow = $objDbResult->GetNextRow();
           
            $strShortDescription = $objDbRow->GetColumn('cfv_' . $intCustomFieldId, 'String');
           
            $objCustomFieldSelection = new CustomFieldSelection();
            $objCustomFieldSelection->intEntityQtypeId = $intEntityQtypeId;
            $objCustomFieldSelection->intEntityId = $intEntityId;
            $objCustomFieldSelection->CustomFieldSelectionId = 0;
           
            $objCustomField = CustomField::Load($intCustomFieldId);
            // If it is a select custom field
            if ($objCustomField->CustomFieldQtypeId == 2 && !empty($strShortDescription)) {
                $objCustomFieldValue = CustomFieldValue::LoadByCustomFieldShortDescription($intCustomFieldId, $strShortDescription);
                $objCustomFieldSelection->CustomFieldValueId = $objCustomFieldValue->CustomFieldValueId;
            }
            else {
                $objCustomFieldSelection->CustomFieldValueId = 0;
                $objCustomFieldValue = new CustomFieldValue();
                $objCustomFieldValue->CustomFieldValueId = 0;
                $objCustomFieldValue->CustomFieldId = $intCustomFieldId;
                //$objCustomFieldValue->ShortDescription = $objDbRow->GetColumn('cfv_' . $intCustomFieldId, 'String');
                $objCustomFieldValue->ShortDescription = $strShortDescription;
            }
            $objCustomFieldSelection->CustomFieldValue = $objCustomFieldValue;
            $objToReturn = $objCustomFieldSelection;
           
            return $objToReturn;
           
/*            // Expand to include Values
            $objExpansionMap[CustomFieldSelection::ExpandCustomFieldValue] = true;
           
            // Call to ArrayQueryHelper to Get Database Object and Get SQL Clauses
            CustomFieldSelection::ArrayQueryHelper($strOrderBy, $strLimit, $strLimitPrefix, $strLimitSuffix, $strExpandSelect, $strExpandFrom, $objExpansionMap, $objDatabase);
           
            // Properly Escape All Input Parameters using Database->SqlVariable()
            $intEntityId = $objDatabase->SqlVariable($intEntityId);
            $intEntityQtypeId = $objDatabase->SqlVariable($intEntityQtypeId);
            $intCustomFieldId = $objDatabase->SqlVariable($intCustomFieldId);
           
            $strQuery = sprintf('
                SELECT
                    %s
                    `custom_field_selection`.*
                    %s
                FROM
                    `custom_field_selection`
                    %s
                WHERE
                    `custom_field_selection` . `entity_id` = %s AND
                    `custom_field_selection` . `entity_qtype_id` = %s AND
                    `custom_field_selection__custom_field_value_id` . `custom_field_id` = %s
                %s
                %s', $strLimitPrefix, $strExpandSelect, $strExpandFrom,
                $intEntityId, $intEntityQtypeId, $intCustomFieldId,
                $strOrderBy, $strLimitSuffix);

            // Perform the Query and Instantiate the Result
            $objDbResult = $objDatabase->Query($strQuery);
            return CustomFieldSelection::InstantiateDbRow($objDbResult->GetNextRow());*/

        }
       
        // This inserts/updates the data into helper tables
        public function Save($blnForceInsert = false, $blnForceUpdate = false) {
          //parent::Save($blnForceInsert, $blnForceUpdate);
          
          $objCustomFieldValue = $this->CustomFieldValue;
          if (!$objCustomFieldValue) {
              $objCustomFieldValue = $this->newCustomFieldValue;
          }
          
          if ($intCustomFieldId = $objCustomFieldValue->CustomFieldId) {
              // If helper table exists
                if ($strHelperTableArray = CustomFieldValue::GetHelperTableByEntityQtypeId($this->EntityQtypeId)) {
                  $strHelperTable = $strHelperTableArray[0];
              $strTableName = $strHelperTableArray[1];
                  
              $objDatabase = CustomField::GetDatabase();
              $strShortDescription = $objDatabase->SqlVariable($objCustomFieldValue->ShortDescription);
              $intEntityId = $objDatabase->SqlVariable($this->EntityId);
                  $strQuery = sprintf("UPDATE %s SET `cfv_%s`=%s where `%s_id`=%s;", $strHelperTable, $intCustomFieldId, $strShortDescription, $strTableName, $intEntityId);
                $objDatabase->NonQuery($strQuery);
                }
            }
        }
       
        // This also deletes the data from helper tables
        public function Delete() {
            $objCustomFieldValue = CustomFieldValue::Load($this->CustomFieldValueId);
            //parent::Delete();
            $objDatabase = CustomFieldSelection::GetDatabase();
            // If the helper table exists
            if ($objCustomFieldValue && $strHelperTableArray = CustomFieldValue::GetHelperTableByEntityQtypeId($this->EntityQtypeId)) {
              $strHelperTable = $strHelperTableArray[0];
            $strTableName = $strHelperTableArray[1];
                 
              $strQuery = sprintf("UPDATE %s SET `cfv_%s`='' WHERE `%s_id`='%s';", $strHelperTable, $objCustomFieldValue->CustomFieldId, $strTableName, $this->EntityId);
        $objDatabase->NonQuery($strQuery);
            }
        }
    }
?>

___________________________

Any Ideas?