/// <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); }
/// <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])); } } }