public override async Task <ActionResponse> ExecuteActionAsync(ActionRequest request)
        {
            string token     = request.DataStore.GetValue("MsCrmToken");
            string profileId = request.DataStore.GetValue("createdProfileId");

            RestClient rc = new RestClient(request.DataStore.GetValue("ConnectorUrl"), new AuthenticationHeaderValue("Bearer", token));

            try
            {
                string response = await rc.Get(MsCrmEndpoints.URL_PROFILES + "/" + profileId, "status=true");

                MsCrmProfile profile = JsonConvert.DeserializeObject <MsCrmProfile>(response);

                bool done = true;
                for (int i = 0; done && i < profile.Entities.Length; i++)
                {
                    done = done && profile.Entities[i].Status.InitialSyncState.EqualsIgnoreCase("done");
                }

                if (done)
                {
                    return(new ActionResponse(ActionStatus.Success, null));
                }
                else
                {
                    return(new ActionResponse(ActionStatus.BatchNoState, null));
                }
            }
            catch (Exception e)
            {
                return(new ActionResponse(ActionStatus.Failure, null, e, "MsCrm_ErrorCreateProfile"));
            }
        }
Пример #2
0
        public override async Task <ActionResponse> ExecuteActionAsync(ActionRequest request)
        {
            _token = request.DataStore.GetJson("MsCrmToken", "access_token");
            _orgId = request.DataStore.GetValue("OrganizationId");
            AuthenticationHeaderValue bearer = new AuthenticationHeaderValue("Bearer", _token);

            _rc = new RestClient(request.DataStore.GetValue("ConnectorUrl"), bearer);

            // string profileId = await GetProfileId(_orgId, request.DataStore.GetValue("ProfileName"));
            string profileId = request.DataStore.GetValue("ProfileId");

            try
            {
                string response = await _rc.Post(string.Format(MsCrmEndpoints.URL_PROFILES_ACTIVATE, profileId), string.Empty);

                MsCrmProfile validatedProfile = JsonConvert.DeserializeObject <MsCrmProfile>(response);

                var properties = new System.Collections.Generic.Dictionary <string, string> {
                    { "OrganizationId", validatedProfile.OrganizationId },
                    { "OrganizationUrl", validatedProfile.OrganizationUrl }
                };
                request.Logger.LogEvent("MSCRM-ProfileStarted", properties);

                return(new ActionResponse(ActionStatus.Success, JsonUtility.GetEmptyJObject()));
            }
            catch (Exception e)
            {
                return(new ActionResponse(ActionStatus.Failure, JsonUtility.GetEmptyJObject(), e, "MsCrm_ErrorCreateProfile"));
            }
        }
Пример #3
0
        public override async Task <ActionResponse> ExecuteActionAsync(ActionRequest request)
        {
            _token = request.DataStore.GetJson("MsCrmToken")["access_token"].ToString();;
            AuthenticationHeaderValue bearer = new AuthenticationHeaderValue("Bearer", _token);

            _rc = new RestClient(request.DataStore.GetValue("ConnectorUrl"), bearer);

            _orgUrl = request.DataStore.GetValue("OrganizationUrl");
            _orgId  = request.DataStore.GetValue("OrganizationId");
            string name = request.DataStore.GetValue("ProfileName") ?? "bpst-mscrm-profile";
            string kV   = request.DataStore.GetValue("KeyVault");

            string[] entities = request.DataStore.GetValue("Entities").Split(new[] { ',', ' ', '\t' }, StringSplitOptions.RemoveEmptyEntries);

            MsCrmProfile profile = new MsCrmProfile
            {
                Entities               = new MsCrmEntity[entities.Length],
                Name                   = name,
                OrganizationId         = _orgId,
                DestinationKeyVaultUri = kV,
                DestinationPrefix      = string.Empty,
                DestinationSchemaName  = "dbo"
            };

            for (int i = 0; i < profile.Entities.Length; i++)
            {
                MsCrmEntity e = new MsCrmEntity {
                    Type = entities[i]
                };
                profile.Entities[i] = e;
            }

            List <string> invalidEntities = await RetrieveInvalidEntities(entities);

            if (invalidEntities.Count > 0)
            {
                return(new ActionResponse(ActionStatus.Failure, JsonUtility.GetEmptyJObject(),
                                          new ArgumentException("The following entities are not provisioned for replication: " + string.Join(", ", invalidEntities)),
                                          "MsCrm_ErrorCreateProfile"));
            }

            try
            {
                string response = await _rc.Post(MsCrmEndpoints.URL_PROFILES, JsonConvert.SerializeObject(profile));

                MsCrmProfile createdProfile = JsonConvert.DeserializeObject <MsCrmProfile>(response);

                request.DataStore.AddToDataStore("ProfileName", createdProfile.Name, DataStoreType.Public);
                request.DataStore.AddToDataStore("ProfileId", createdProfile.Id, DataStoreType.Public);

                return(new ActionResponse(ActionStatus.Success, createdProfile.Id));
            }
            catch (Exception e)
            {
                return(new ActionResponse(ActionStatus.Failure, JsonUtility.GetEmptyJObject(), e, "MsCrm_ErrorCreateProfile"));
            }
        }
Пример #4
0
        public override async Task <ActionResponse> ExecuteActionAsync(ActionRequest request)
        {
            string token     = request.DataStore.GetJson("MsCrmToken")["access_token"].ToString();
            string profileId = request.DataStore.GetValue("ProfileId");

            RestClient rc = new RestClient(request.DataStore.GetValue("ConnectorUrl"), new AuthenticationHeaderValue("Bearer", token));

            try
            {
                string response = await rc.Get(MsCrmEndpoints.URL_PROFILES + "/" + profileId, "status=true");

                MsCrmProfile profile = JsonConvert.DeserializeObject <MsCrmProfile>(response);

                bool done = true;
                for (int i = 0; done && i < profile.Entities.Length; i++)
                {
                    done = done && (profile.Entities[i].Status.InitialSyncState.EqualsIgnoreCase("Completed") || profile.Entities[i].Status.InitialSyncState.EqualsIgnoreCase("CompletedWithFailures"));
                }

                // REMOVE once dynamics crm team fixes InitialSyncState bug
                int countDone       = 0;
                int countEntities   = profile.Entities.Length;
                int countNotStarted = 0;
                for (int i = 0; i < countEntities; i++)
                {
                    if (profile.Entities[i].Status.InitialSyncState.EqualsIgnoreCase("Completed") || profile.Entities[i].Status.InitialSyncState.EqualsIgnoreCase("CompletedWithFailures"))
                    {
                        countDone++;
                    }
                    if (profile.Entities[i].Status.InitialSyncState.EqualsIgnoreCase("NotStarted"))
                    {
                        countNotStarted++;
                    }
                }
                bool tempDone = (countDone + countNotStarted == countEntities) && // every entity is either done or not started
                                (countDone > countEntities * 3 / 5);              // about 60% or more of the entities are done
                // END REMOVE

                if (done || tempDone) // if (done)
                {
                    return(new ActionResponse(ActionStatus.Success, JsonUtility.GetEmptyJObject()));
                }
                else
                {
                    return(new ActionResponse(ActionStatus.BatchNoState, JsonUtility.GetEmptyJObject()));
                }
            }
            catch (Exception e)
            {
                return(new ActionResponse(ActionStatus.Failure, JsonUtility.GetEmptyJObject(), e, "MsCrm_ErrorCreateProfile"));
            }
        }
        public override async Task <ActionResponse> ExecuteActionAsync(ActionRequest request)
        {
            _token = request.DataStore.GetJson("MsCrmToken", "access_token");;
            AuthenticationHeaderValue bearer = new AuthenticationHeaderValue("Bearer", _token);

            _rc = new RestClient(request.DataStore.GetValue("ConnectorUrl"), bearer);

            _orgUrl = request.DataStore.GetValue("OrganizationUrl");
            _orgId  = request.DataStore.GetValue("OrganizationId");
            string name = request.DataStore.GetValue("ProfileName") ?? Constants.CrmProfileName;
            string kV   = request.DataStore.GetValue("KeyVault");
            Dictionary <string, string> entities_dict = JsonConvert.DeserializeObject <Dictionary <string, string> >(request.DataStore.GetValue("Entities"));

            List <string> entities = new List <string>();

            foreach (var e in entities_dict)
            {
                entities.Add(e.Key);
            }

            var additionalObjects = request.DataStore.GetValue("AdditionalObjects");

            if (!string.IsNullOrEmpty(additionalObjects))
            {
                string[] add = additionalObjects.SplitByCommaSpaceTabReturnArray();
                entities.AddRange(add);
            }

            MsCrmProfile profile = new MsCrmProfile
            {
                Entities               = new MsCrmEntity[entities.ToArray().Length],
                Name                   = name,
                OrganizationId         = _orgId,
                DestinationKeyVaultUri = kV,
                DestinationPrefix      = string.Empty,
                DestinationSchemaName  = "dbo"
            };

            for (int i = 0; i < profile.Entities.Length; i++)
            {
                MsCrmEntity e = new MsCrmEntity {
                    Type = entities[i]
                };
                profile.Entities[i] = e;
            }

            List <string> invalidEntities = await RetrieveInvalidEntities(entities.ToArray());

            if (invalidEntities.Count > 0)
            {
                return(new ActionResponse(ActionStatus.Failure, JsonUtility.GetEmptyJObject(),
                                          new ArgumentException("The following entities are not provisioned for replication: " + string.Join(", ", invalidEntities)),
                                          "MsCrm_ErrorCreateProfile"));
            }

            try
            {
                string response = await _rc.Post(MsCrmEndpoints.URL_PROFILES, JsonConvert.SerializeObject(profile));

                MsCrmProfile createdProfile = JsonConvert.DeserializeObject <MsCrmProfile>(response);

                request.DataStore.AddToDataStore("ProfileName", createdProfile.Name, DataStoreType.Public);
                request.DataStore.AddToDataStore("ProfileId", createdProfile.Id, DataStoreType.Public);

                //Log exporter creation
                request.Logger.LogResource(request.DataStore, createdProfile.Name,
                                           DeployedResourceType.CRMExporter, CreatedBy.BPST, DateTime.UtcNow.ToString("o"), createdProfile.Id);

                return(new ActionResponse(ActionStatus.Success, createdProfile.Id));
            }
            catch (Exception e)
            {
                return(new ActionResponse(ActionStatus.Failure, JsonUtility.GetEmptyJObject(), e, "MsCrm_ErrorCreateProfile"));
            }
        }
        public override async Task <ActionResponse> ExecuteActionAsync(ActionRequest request)
        {
            _token = request.DataStore.GetJson("MsCrmToken", "access_token");
            AuthenticationHeaderValue bearer = new AuthenticationHeaderValue("Bearer", _token);

            _rc = new RestClient(request.DataStore.GetValue("ConnectorUrl"), bearer);

            _orgUrl = request.DataStore.GetValue("OrganizationUrl");
            _orgId  = request.DataStore.GetValue("OrganizationId");
            string name = request.DataStore.GetValue("ProfileName") ?? Constants.CrmProfileName;
            string kV   = request.DataStore.GetValue("KeyVault");
            //string[] entities = request.DataStore.GetValue("Entities").Split(new[] {',', ' ', '\t'}, StringSplitOptions.RemoveEmptyEntries);
            Dictionary <string, string> entitiesDict = JsonConvert.DeserializeObject <Dictionary <string, string> >(request.DataStore.GetValue("Entities"));

            string[] entities = new string[entitiesDict.Count];
            int      iCount   = 0;

            foreach (var entity in entitiesDict)
            {
                entities[iCount++] = entity.Key;
            }


            MsCrmProfile profile = new MsCrmProfile
            {
                Entities               = new MsCrmEntity[entities.ToArray().Length],
                Name                   = name,
                OrganizationId         = _orgId,
                DestinationKeyVaultUri = kV,
                DestinationPrefix      = string.Empty,
                DestinationSchemaName  = "dbo"
            };

            for (int i = 0; i < profile.Entities.Length; i++)
            {
                MsCrmEntity e = new MsCrmEntity {
                    Type = entities[i]
                };
                profile.Entities[i] = e;
            }


            List <string> invalidEntities = await RetrieveInvalidEntities(entities);

            if (invalidEntities.Count > 0)
            {
                return(new ActionResponse(ActionStatus.Failure, null,
                                          new ArgumentException("The following entities are not provisioned for replication: " + string.Join(", ", invalidEntities)),
                                          "MsCrm_ErrorCreateProfile"));
            }

            try
            {
                await _rc.Post(MsCrmEndpoints.URL_PROFILES_VALIDATE, JsonConvert.SerializeObject(profile));

                return(new ActionResponse(ActionStatus.Success));
            }
            catch (Exception e)
            {
                return(new ActionResponse(ActionStatus.Failure, JsonUtility.GetEmptyJObject(), e, "MsCrm_ErrorCreateProfile"));
            }
        }