Пример #1
0
        public async Task <SynchroResponse> SendRevitElementToCloud(string modelid, SynchroBody body)
        {
            var synchroRepository = new SynchronizationRepository();
            var response          = await synchroRepository.CreateSynchronization(modelid, body);

            return(response);
        }
        public async Task <SynchronizationResult> UploadOperations(IList <ApplicationSchemaDefinition> applications, CancellationToken cancellationToken = default(CancellationToken))
        {
            var successes = 0;
            var errors    = 0;

            //TODO: batch data and submit only once.
            var synchronizationRepository = new SynchronizationRepository();
            var dataRepository            = new DataRepository();

            // What's in our outbox?
            var operationsToSync = await synchronizationRepository.LoadPendingDataOperationsAsync(cancellationToken);

            foreach (var operation in operationsToSync)
            {
                var application = applications.First(m => m.Name == operation.Application);
                var upload      = new UploadDataOperation(dataRepository, synchronizationRepository);

                // Post the operation data.
                var success = await upload.ExecuteAsync(application, operation, cancellationToken);

                if (success)
                {
                    // Great, one less to go.
                    await synchronizationRepository.MarkDataOperationAsSynchronizedAsync(operation, cancellationToken);

                    successes++;
                }
                else
                {
                    errors++;
                }
            }

            return(new SynchronizationResult(successes, errors));
        }
Пример #3
0
        public void Sync_Test()
        {
            using (var context = new AcManContext(OptionsRandom)) { //MsSql2016Options
                var userId                     = TestDemoData.CreateTestData(context);
                var bpm                        = DemoTS_ODBase;     //MsSqlMKODBase
                var userRepository             = new UserRepository(context);
                var activityRepository         = new ActivityRepository(context);
                var synchronizationRepository  = new SynchronizationRepository(context);
                var bpmOdataConverter          = new BpmOdataConverter();
                var activityBpmOdataRepository = new ActivityBpmOdataRepository(bpm, bpmOdataConverter);

                var bpmonlineSyncStrategy = new BpmonlineSyncStrategy(
                    userRepository,
                    activityRepository,
                    synchronizationRepository,
                    activityBpmOdataRepository
                    );
                var startCount     = activityRepository.GetAll().Count;
                var remoteActivity = new Activity {
                    UserId  = userId,
                    Caption = "[Acman] Test remote activity " + AcmanHelper.GetCurrentDateTime().ToString()
                };
                remoteActivity.EndSystemRecordId = activityBpmOdataRepository.Add(remoteActivity);
                bpmonlineSyncStrategy.Sync();
                var endCount = activityRepository.GetAll().Count;
                Assert.IsTrue(endCount > startCount);
                activityBpmOdataRepository.Remove(remoteActivity);
            }
        }
Пример #4
0
        public async Task <SynchronizationResult> UploadData(IList <ApplicationSchemaDefinition> applications, CancellationToken cancellationToken = default(CancellationToken))
        {
            var successes = 0;
            var errors    = 0;

            //TODO: batch data and submit only once.
            var repository = new SynchronizationRepository();

            // What's in our outbox?
            var dataToSync = await repository.LoadPendingCompositeDataMapsAsync(cancellationToken);

            foreach (var composite in dataToSync)
            {
                // Are we allowed to perform CRUD
                // synchronization for this buddy?
                if (MustSkipCrudSynchronization(composite))
                {
                    continue;
                }

                var application = applications.First(a => a.ApplicationName == composite.Application);
                var id          = composite.Id(application);
                var upload      = new UploadDataMap();

                // Before dispatching the data, we need
                // to gather all components (children)
                // that belong to the composition root.
                var components = (await repository
                                  .LoadPendingComponentDataMapsAsync(composite, cancellationToken))
                                 .ToLookup(k => applications.First(a => a.ApplicationName == k.Application));

                var data = new UploadDataMap.CompositeData(application, composite, components);

                // Lets push the data to the
                // upstream server, shall we?
                var result = await upload.ExecuteAsync(data, id, cancellationToken);

                if (result.IsSuccess)
                {
                    // And mark our local copy as
                    // successfully synchronized.
                    await repository.MarkCompositeDataMapAsSynchronizedAsync(composite, cancellationToken);

                    successes++;
                }
                else
                {
                    // Oops... Something fishy happened.
                    // Let's register that.
                    await repository.MarkCompositeDataMapAsBouncingAsync(composite, result.ErrorMessage, cancellationToken);

                    errors++;
                }
            }

            return(new SynchronizationResult(successes, errors));
        }
Пример #5
0
        public UploadDataOperation(DataRepository dataRepository, SynchronizationRepository synchronizationRepository)
        {
            if (dataRepository == null)
            {
                throw new ArgumentNullException("dataRepository");
            }
            if (synchronizationRepository == null)
            {
                throw new ArgumentNullException("synchronizationRepository");
            }

            _dataRepository            = dataRepository;
            _synchronizationRepository = synchronizationRepository;
        }
Пример #6
0
 public BpmonlineSyncStrategy(
     UserRepository userRepository,
     ActivityRepository activityRepository,
     SynchronizationRepository synchronizationRepository,
     ActivityBpmOdataRepository activityBpmOdataRepository)
 {
     _userRepository     = userRepository;
     _activityRepository = activityRepository;
     _activityRepository.IsIntegration = true;
     _synchronizationRepository        = synchronizationRepository;
     _activityBpmOdataRepository       = activityBpmOdataRepository;
     _bpmonlineEndSystemId             = AcmanConstants.EndSystem.BpmonlineWorkTsi;
     _startDate = _synchronizationRepository.GetLastSyncDate();
     _endDate   = AcmanHelper.GetCurrentDateTime();
     _info      = string.Empty;
 }
Пример #7
0
 public Task Success(SynchronizationRepository repository)
 {
     return(CompletedTask.Instance);
 }
Пример #8
0
 public async Task Success(SynchronizationRepository repository)
 {
     await repository
     .MarkCompositeDataMapAsSynchronizedAsync(_followUp);
 }