Beispiel #1
0
        /// <summary>
        /// Creates the result for singe query response.
        /// </summary>
        /// <param name="json">
        /// The json.
        /// </param>
        /// <returns>
        /// The <see cref="UPCRMResult"/>.
        /// </returns>
        public virtual UPCRMResult CreateResultForSingeQueryResponse(Dictionary <string, object> json)
        {
            var serverResult = new UPCRMResult(this.ContainerMetaInfo, json);

            serverResult.Log();

            UPCRMDataStore.DefaultStore.VirtualInfoAreaCache.ApplyResult(serverResult);

            if (this.SkipLocalMerge || serverResult.RowCount == 0)
            {
                return(serverResult);
            }

            UPCRMResult localResult;

            if (this.LocalMergeResult != null)
            {
                localResult = this.LocalMergeResult;
            }
            else if (!string.IsNullOrEmpty(this.RecordIdentification))
            {
                localResult = this.ContainerMetaInfo.ReadRecord(this.RecordIdentification.RecordId());
            }
            else
            {
                localResult = this.ContainerMetaInfo.Find();
            }

            if (localResult == null || localResult.RowCount == 0)
            {
                return(serverResult);
            }

            var allLocalResultRows = new Dictionary <string, object>();

            for (var j = 0; j < localResult.RowCount; j++)
            {
                var localResultRow = localResult.ResultRowAtIndex(j);
                allLocalResultRows[localResultRow.RootRecordId] = localResultRow;
            }

            var mergedResult = new UPCRMMergedResult(this.ContainerMetaInfo);

            mergedResult.MergeServerResultWithLocalResults(serverResult, allLocalResultRows);
            return(mergedResult);
        }
Beispiel #2
0
        /// <summary>
        /// Creates the result for multiple queries response.
        /// </summary>
        /// <param name="json">
        /// The json.
        /// </param>
        /// <returns>
        /// The <see cref="List"/>.
        /// </returns>
        public virtual List <UPCRMResult> CreateResultForMultipleQueriesResponse(Dictionary <string, object> json)
        {
            var allLocalResultRows = new Dictionary <string, object>();

            foreach (var containerMetaInfo in this.ContainerMetaInfos)
            {
                var localResult = containerMetaInfo.Find();
                for (var j = 0; localResult != null && j < localResult.RowCount; j++)
                {
                    var localResultRow = localResult.ResultRowAtIndex(j);
                    allLocalResultRows[localResultRow.RootRecordId] = localResultRow;
                }
            }

            var results   = new List <UPCRMResult>(this.NumberOfQueries);
            var dataStore = UPCRMDataStore.DefaultStore;

            for (var i = 0; i < this.NumberOfQueries; i++)
            {
                var serverResultAsDictionary = json[$"Result{i}"];
                if (serverResultAsDictionary != null)
                {
                    var serverResult = new UPCRMResult(this.ContainerMetaInfos[i], serverResultAsDictionary);
                    dataStore.VirtualInfoAreaCache.ApplyResult(serverResult);
                    var mergedResult = new UPCRMMergedResult(this.ContainerMetaInfos[i]);
                    mergedResult.MergeServerResultWithLocalResults(serverResult, allLocalResultRows);
                    results.Add(mergedResult);
                }
                else
                {
                    results.Add(null);
                }
            }

            return(results);
        }