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")); } }
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")); } }
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")); } }
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")); } }