private string PhysicalInfoArea(UPCRMResultRow row)
        {
            if (this.fiResultColumnIndex == -1)
            {
                this.fiResultColumnIndex = row.Result.MetaInfo.IndexOfResultInfoAreaIdLinkId("FI", 1);
            }

            if (this.kpResultColumnIndex == -1)
            {
                this.kpResultColumnIndex = row.Result.MetaInfo.IndexOfResultInfoAreaIdLinkId("KP", 1);
            }

            bool   kpRow            = false;
            string physicalInfoArea = null;

            if (this.kpResultColumnIndex != -1)
            {
                string recordIdentification = row.RecordIdentificationAtIndex(this.kpResultColumnIndex);
                if (recordIdentification?.Length > 3)
                {
                    kpRow            = true;
                    physicalInfoArea = row.PhysicalInfoAreaIdAtIndex(this.kpResultColumnIndex);
                }
            }

            if (!kpRow && this.fiResultColumnIndex != -1)
            {
                physicalInfoArea = row.PhysicalInfoAreaIdAtIndex(this.fiResultColumnIndex);
            }

            return(physicalInfoArea);
        }
        /// <summary>
        /// Creates the node from result row.
        /// </summary>
        /// <param name="row">The row.</param>
        /// <returns></returns>
        protected override UPMCoINode CreateNodeFromResultRow(UPCRMResultRow row)
        {
            if (this.fiResultColumnIndex == -1)
            {
                this.fiResultColumnIndex = row.Result.MetaInfo.IndexOfResultInfoAreaIdLinkId("FI", 1);
            }

            if (this.kpResultColumnIndex == -1)
            {
                this.kpResultColumnIndex = row.Result.MetaInfo.IndexOfResultInfoAreaIdLinkId("KP", 1);
            }

            bool   kpRow = false;
            string recordIdentification = null;
            string virtualInfoArea      = null;
            string physicalInfoArea     = null;

            if (this.kpResultColumnIndex != -1)
            {
                recordIdentification = row.RecordIdentificationAtIndex(this.kpResultColumnIndex);
                if (recordIdentification?.Length > 3)
                {
                    kpRow            = true;
                    virtualInfoArea  = row.VirtualInfoAreaIdAtIndex(this.kpResultColumnIndex);
                    physicalInfoArea = row.PhysicalInfoAreaIdAtIndex(this.kpResultColumnIndex);
                }
            }

            if (!kpRow && this.fiResultColumnIndex != -1)
            {
                recordIdentification = row.RecordIdentificationAtIndex(this.fiResultColumnIndex);
                virtualInfoArea      = row.VirtualInfoAreaIdAtIndex(this.fiResultColumnIndex);
                physicalInfoArea     = row.PhysicalInfoAreaIdAtIndex(this.fiResultColumnIndex);
            }

            if (recordIdentification?.Length > 3)
            {
                virtualInfoArea = virtualInfoArea == physicalInfoArea ? null : virtualInfoArea;
                return(CreateNodeFromResultRow(row, virtualInfoArea, recordIdentification, this.depth, false, this.expandChecker, physicalInfoArea, physicalInfoArea));
            }

            return(null);
        }