public void SyncDownContacts()
 {
     RegisterSoup();
     if (syncId == -1)
     {
         string soqlQuery =
             SOQLBuilder.GetInstanceWithFields(ContactObject.ContactFields)
             .From(Constants.Contact)
             .Limit(Limit)
             .Build();
         SyncOptions    options = SyncOptions.OptionsForSyncDown(SyncState.MergeModeOptions.LeaveIfChanged);
         SyncDownTarget target  = new SoqlSyncDownTarget(soqlQuery);
         try
         {
             SyncState sync = _syncManager.SyncDown(target, ContactSoup, HandleSyncUpdate);
             syncId = sync.Id;
         }
         catch (SmartStoreException)
         {
             // log here
         }
     }
     else
     {
         _syncManager.ReSync(syncId, HandleSyncUpdate);
     }
 }
コード例 #2
0
        private long TrySyncDown(SyncState.MergeModeOptions mergeMode)
        {
            // Ids clause
            String idsClause = "('" + String.Join("', '", _idToNames.Keys) + "')";

            // Create sync
            SyncDownTarget target =
                new SoqlSyncDownTarget("SELECT Id, Name, " + Constants.LastModifiedDate + " FROM Account WHERE Id IN " +
                                       idsClause);
            SyncOptions options = SyncOptions.OptionsForSyncDown(mergeMode);
            SyncState   sync    = SyncState.CreateSyncDown(_smartStore, target, AccountsSoup, options);
            long        syncId  = sync.Id;

            CheckStatus(sync, SyncState.SyncTypes.SyncDown, syncId, SyncState.SyncStatusTypes.New, 0, -1);
            // Run sync
            _syncCheck = 0;
            _syncManager.RunSync(sync, HandleSyncDownCheck);
            DateTime end = DateTime.Now.AddSeconds(60);

            while (_syncCheck < 3)
            {
                if (DateTime.Now > end)
                {
                    Assert.Fail("Sync timed out");
                }
            }
            return(syncId);
        }
コード例 #3
0
        internal async Task <User> GetCurrentUserFromSoql(SyncManager syncManager)
        {
            User   currentUser = new NullUser();
            JArray results;

            try
            {
                var target = new SoqlSyncDownTarget(SoqlQuery);
                if (target.hasTokenExpired())
                {
                    //logout
                    await ObjectSyncDispatcher.Instance.RefreshToken();

                    return(currentUser);
                }
                results = await target.StartFetch(syncManager, -1);
            }
            catch
            {
                UseAlternativeFields = true;
                var target = new SoqlSyncDownTarget(SoqlQuery);
                results = await target.StartFetch(syncManager, -1);
            }

            var curUser = results?.Select(x => CustomPrefixJsonConvert.DeserializeObject <User>(x.ToString())).SingleOrDefault();

            return(curUser ?? currentUser);
        }
コード例 #4
0
ファイル: SObject.cs プロジェクト: hunsakerjeff/mcdsa
        public virtual async Task <SyncState> SyncDownRecords(Action <string> callbackHandler, CancellationToken token = default(CancellationToken))
        {
            if (string.IsNullOrEmpty(SoqlQuery))
            {
                return(new SyncState {
                    Status = SyncState.SyncStatusTypes.Done
                });
            }

            CallBackHandler = callbackHandler;

            RegisterClearSoup();

            var options = SyncOptions.OptionsForSyncDown(SyncState.MergeModeOptions.Overwrite);
            var target  = new SoqlSyncDownTarget(SoqlQuery);

            if (target.Query == null) //there are no data to sync down, so we return success
            {
                return(new SyncState {
                    Status = SyncState.SyncStatusTypes.Done
                });
            }


            SyncState syncResult = new SyncState {
                Status = SyncState.SyncStatusTypes.Failed
            };

            try
            {
                var syncManager = SyncManager.GetInstance(AccountManager.GetAccount());
                syncResult = await syncManager.SyncDown(target, SoupName, HandleSyncUpdate, options, token);
            }
            catch (SmartStoreException sse)
            {
                CreateLogItem("SmartStoreException", sse);
            }
            catch (OperationCanceledException oce)
            {
                CreateLogItem("OperationCanceledException", oce);
                throw;
            }
            catch (ErrorResponseException errorRes)
            {
                CreateLogItem("ErrorResponseException", errorRes);
                throw;
            }
            catch (Exception e)
            {
                CreateLogItem("General exception", e);
            }

            return(syncResult);
        }
コード例 #5
0
ファイル: SObject.cs プロジェクト: hunsakerjeff/mcdsa
        public virtual async Task <SyncState> SyncDownRecordsToSoup(Action <string> callbackHandler, CancellationToken token = default(CancellationToken))
        {
            if (string.IsNullOrEmpty(SoqlQuery))
            {
                return(new SyncState {
                    Status = SyncState.SyncStatusTypes.Done
                });
            }

            CallBackHandler = callbackHandler;

            if (!string.IsNullOrWhiteSpace(TempSoupName) && !Store.HasSoup(TempSoupName))
            {
                RegisterClearSoupBySoupName(TempSoupName);
            }

            if (!Store.HasSoup(SoupName))
            {
                RegisterClearSoup();
            }

            var options = SyncOptions.OptionsForSyncDown(SyncState.MergeModeOptions.Overwrite);
            var target  = new SoqlSyncDownTarget(SoqlQuery);


            SyncState syncResult = new SyncState {
                Status = SyncState.SyncStatusTypes.Failed
            };

            try
            {
                var syncManager = SyncManager.GetInstance(AccountManager.GetAccount());
                if (!string.IsNullOrWhiteSpace(TempSoupName))
                {
                    syncResult = await syncManager.SyncDown(target, TempSoupName, HandleSyncUpdate, options, token);
                }
                else
                {
                    syncResult = await syncManager.SyncDown(target, SoupName, HandleSyncUpdate, options, token);
                }
            }
            catch (SmartStoreException sse)
            {
                CreateLogItem("SmartStoreException", sse);
            }
            catch (Exception e)
            {
                CreateLogItem("General exception", e);
            }

            return(syncResult);
        }
コード例 #6
0
        public Models.SyncState SyncDown(string target, string soupName, string callback,
                                         Models.SyncOptions options)
        {
            var            soqlsyncDownTarget = JObject.Parse(target);
            var            soqlsyncDown       = new SoqlSyncDownTarget(soqlsyncDownTarget);
            SyncDownTarget syncDown           = soqlsyncDown;
            var            action             = JsonConvert.DeserializeObject <Action <SyncState> >(callback);
            var            syncOptions        = JsonConvert.SerializeObject(options);
            var            state     = _syncManager.SyncDown(syncDown, soupName, action, SyncOptions.FromJson(JObject.Parse(syncOptions)));
            var            syncState = JsonConvert.SerializeObject(state);

            return(JsonConvert.DeserializeObject <Models.SyncState>(syncState));
        }
コード例 #7
0
        /// <summary>
        /// Get content documents from sfdc
        /// </summary>
        internal async Task <IList <Model.Models.ContentDocument> > GetFromSoql(SyncManager syncManager)
        {
            var results = new List <Model.Models.ContentDocument>();
            var target  = new SoqlSyncDownTarget(SoqlQuery);

            var page = await target.StartFetch(syncManager, -1);

            while (page != null && page.Count > 0)
            {
                results.AddRange(page.Select(x => x.ToObject <Model.Models.ContentDocument>()).ToList());
                page = await target.ContinueFetch(syncManager);
            }
            return(results);
        }
コード例 #8
0
ファイル: MobileAppConfig.cs プロジェクト: hunsakerjeff/mcdsa
        internal async Task <IList <Model.Models.MobileAppConfig> > GetFromSoql(SyncManager syncManager)
        {
            List <Model.Models.MobileAppConfig> results = new List <Model.Models.MobileAppConfig>();
            var target = new SoqlSyncDownTarget(SoqlQuery);

            // Sync to JSON
            var _results = await target.StartFetch(syncManager, -1);

            while (_results != null && _results.Count > 0)
            {
                results.AddRange(_results.Select(x => x.ToObject <Model.Models.MobileAppConfig>()).ToList());
                _results = await target.ContinueFetch(syncManager);
            }
            return(results);
        }
コード例 #9
0
        public void SyncDownNotes()
        {
            RegisterSoup();
            string soqlQuery =
                SOQLBuilder.GetInstanceWithFields(NoteObject.NoteFields)
                .From(NoteObject.NoteSObjectType)
                .Limit(Limit)
                .Build();
            SyncOptions    options = SyncOptions.OptionsForSyncDown(SyncState.MergeModeOptions.LeaveIfChanged);
            SyncDownTarget target  = new SoqlSyncDownTarget(soqlQuery);

            try
            {
                SyncState sync = _syncManager.SyncDown(target, NotesSoup, HandleSyncUpdate, options);
                syncId = sync.Id;
            }
            catch (SmartStoreException)
            {
                // log here
            }
        }