public override void OnUpsertEntityRecord(CrmCommandsQueue requests, Entity crmEntity, Entity stamdataEntity, Dictionary <string, object> diff)
        {
            var upsert = new Entity(crmEntity?.LogicalName ?? stamdataEntity.LogicalName, crmEntity?.Id ?? stamdataEntity.Id);

            foreach (var item in diff)
            {
                upsert[item.Key] = item.Value;
            }

            var isNew = crmEntity == null;

            if (isNew)
            {
                requests.AddUpdateStageStage(new CreateRequest {
                    Target = upsert
                });
                requests.AddDeleteStageStep(new PublishDuplicateRuleRequest {
                    DuplicateRuleId = upsert.Id
                });
            }
            else
            {
                requests.AddUpdateStageStage(new UpdateRequest {
                    Target = upsert
                });
            }
        }
 public override void OnDeleteEntityRecord(CrmCommandsQueue requests, Entity excessCrmRow)
 {
     requests.AddDeleteStageStep(new DeleteRequest
     {
         Target = excessCrmRow.ToEntityReference()
     });
 }
Example #3
0
        private static void Import(ImportOptions options)
        {
            var crmService            = new CrmService(options.CrmConnectionString);
            var fileService           = new FileService(options.Directory);
            var entityStrategyFactory = new EntityStrategyFactory(crmService);
            var importer = new EntityImporter(crmService, fileService, entityStrategyFactory);

            var commandsList = new List <CrmCommandsQueue>();

            foreach (var entityLogicalName in options.EntitiesList)
            {
                var commands = new CrmCommandsQueue(entityLogicalName);
                importer.Import(commands, entityLogicalName);

                if (!commands.IsEmpty)
                {
                    commandsList.Add(commands);
                }
            }

            using (new DisabledWorkflowsScope(crmService, commandsList.Select(x => x.EntityLogicalName)))
            {
                foreach (var commands in commandsList)
                {
                    commands.ExecuteUpdateSteps(crmService);
                }

                foreach (var commands in commandsList.AsEnumerable().Reverse())
                {
                    commands.ExecuteDeleteSteps(crmService);
                }
            }
        }
Example #4
0
        public virtual void OnDeleteEntityRecord(CrmCommandsQueue requests, Entity excessCrmRow)
        {
            // disable first
            requests.AddDeleteStageStep(new SetStateRequest
            {
                EntityMoniker = excessCrmRow.ToEntityReference(),
                State         = new OptionSetValue(1),
                Status        = new OptionSetValue(2)
            });

            requests.AddDeleteStageStep(new DeleteRequest
            {
                Target = excessCrmRow.ToEntityReference()
            });
        }
Example #5
0
        public virtual void OnUpsertEntityRecord(CrmCommandsQueue requests, Entity crmEntity, Entity stamdataEntity, Dictionary <string, object> diff)
        {
            var diffExceptStatus = diff.Where(x => x.Key != "statecode" && x.Key != "statuscode").ToArray();

            if (diffExceptStatus.Any())
            {
                var upsert = new Entity(crmEntity?.LogicalName ?? stamdataEntity.LogicalName, crmEntity?.Id ?? stamdataEntity.Id);
                foreach (var item in diffExceptStatus)
                {
                    upsert[item.Key] = item.Value;
                }

                var isNew = crmEntity == null;
                if (isNew)
                {
                    requests.AddUpdateStageStage(new CreateRequest {
                        Target = upsert
                    });
                }
                else
                {
                    requests.AddUpdateStageStage(new UpdateRequest {
                        Target = upsert
                    });
                }
            }

            if (diff.ContainsKey("statecode") || diff.ContainsKey("statuscode"))
            {
                requests.AddUpdateStageStage(new SetStateRequest
                {
                    EntityMoniker = new EntityReference(crmEntity?.LogicalName ?? stamdataEntity.LogicalName, crmEntity?.Id ?? stamdataEntity.Id),
                    State         = stamdataEntity["statecode"] as OptionSetValue,
                    Status        = stamdataEntity["statuscode"] as OptionSetValue
                });
            }
        }