Exemplo n.º 1
0
        /// <summary>
        /// Caches for information area identifier.
        /// </summary>
        /// <param name="infoAreaId">
        /// The information area identifier.
        /// </param>
        /// <returns>
        /// The <see cref="UPVirtualInfoAreaCacheForInfoArea"/>.
        /// </returns>
        public UPVirtualInfoAreaCacheForInfoArea CacheForInfoAreaId(string infoAreaId)
        {
            var dataStore = UPCRMDataStore.DefaultStore;

            infoAreaId = dataStore.RootInfoAreaIdForInfoAreaId(infoAreaId);
            var tableInfo = dataStore.TableInfoForInfoArea(infoAreaId);

            if (!tableInfo.HasVirtualInfoAreas)
            {
                return(null);
            }

            var infoAreaCache = this.cacheForInfoArea.ValueOrDefault(infoAreaId);

            if (infoAreaCache != null)
            {
                return(infoAreaCache);
            }

            infoAreaCache = new UPVirtualInfoAreaCacheForInfoArea(infoAreaId);
            if (this.cacheForInfoArea != null)
            {
                this.cacheForInfoArea.SetObjectForKey(infoAreaCache, infoAreaId);
            }
            else
            {
                this.cacheForInfoArea = new Dictionary <string, UPVirtualInfoAreaCacheForInfoArea>
                {
                    { infoAreaId, infoAreaCache }
                };
            }

            return(infoAreaCache);
        }
Exemplo n.º 2
0
        /// <summary>
        /// Applies the result.
        /// </summary>
        /// <param name="result">
        /// The result.
        /// </param>
        public void ApplyResult(UPCRMResult result)
        {
            if (!result.IsServerResult)
            {
                return;
            }

            var resultRowCount = result.RowCount;

            if (resultRowCount == 0)
            {
                return;
            }

            var dataStore           = UPCRMDataStore.DefaultStore;
            var resultInfoAreaCount = result.MetaInfo.NumberOfResultInfoAreaMetaInfos();
            var mapping             = new int[resultInfoAreaCount];
            var cacheForInfoAreaMap = new UPVirtualInfoAreaCacheForInfoArea[resultInfoAreaCount];
            var count = 0;

            for (var i = 0; i < resultInfoAreaCount; i++)
            {
                var infoAreaMetaInfo = result.MetaInfo.ResultInfoAreaMetaInfoAtIndex(i);
                var tableInfo        = dataStore.TableInfoForInfoArea(infoAreaMetaInfo.InfoAreaId);
                if (tableInfo == null || !tableInfo.HasVirtualInfoAreas)
                {
                    continue;
                }

                mapping[count]             = i;
                cacheForInfoAreaMap[count] = this.CacheForInfoAreaId(tableInfo.InfoAreaId);
                ++count;
            }

            if (count == 0)
            {
                return;
            }

            for (var i = 0; i < resultRowCount; i++)
            {
                var row = result.ResultRowAtIndex(i) as UPCRMResultRow;
                if (row == null)
                {
                    continue;
                }

                for (var j = 0; j < count; j++)
                {
                    cacheForInfoAreaMap[j].AddRecordIdInfoAreaId(
                        row.RecordIdAtIndex(mapping[j]),
                        row.VirtualInfoAreaIdAtIndex(mapping[j]));
                }
            }
        }