public UpdaterServiceResponse <bool> CreateWebresource(ConnectionDetail connectionDetail, WebResource webResource, string solution) { var response = new UpdaterServiceResponse <bool>(); try { Console.WriteLine("Requesting WR create"); var client = connectionDetail.GetCrmServiceClient(true); var webResourceEntity = new Entity("webresource"); webResourceEntity["name"] = webResource.Name; webResourceEntity["displayname"] = webResource.DisplayName; webResourceEntity["description"] = webResource.Description; webResourceEntity["content"] = webResource.Content; webResourceEntity["webresourcetype"] = new OptionSetValue(webResource.Type); CreateRequest createRequest = new CreateRequest { Target = webResourceEntity }; createRequest.Parameters.Add("SolutionUniqueName", solution); client.Execute(createRequest); response.IsSuccessful = true; return(response); } catch (Exception ex) { Console.WriteLine(ex); response.Error = ex.ToString(); response.IsSuccessful = false; return(response); } }
/// <summary> /// Initialize the CrmService /// </summary> private void InitializeOrganizationService() { lock (this) { m_organizationService = ConnectionDetail.GetCrmServiceClient().OrganizationServiceProxy; } }
public UpdaterServiceResponse <bool> IsWebResourceExists(ConnectionDetail connectionDetail, string webResourceName) { var response = new UpdaterServiceResponse <bool>(); try { Console.WriteLine("Requesting Is WebResource Exists"); var client = connectionDetail.GetCrmServiceClient(true); QueryExpression query = new QueryExpression { EntityName = "webresource", ColumnSet = new ColumnSet(new string[] { "name" }), Criteria = new FilterExpression() }; query.Criteria.AddCondition("name", ConditionOperator.Equal, webResourceName); //query.Criteria.AddCondition("solutionid", ConditionOperator.Equal, _connectionDetail.SolutionId); var isWebResourceExistsResponse = client.RetrieveMultiple(query); var entity = isWebResourceExistsResponse.Entities.FirstOrDefault(); response.Payload = entity == null ? false : true; response.IsSuccessful = true; return(response); } catch (Exception ex) { Console.WriteLine(ex); response.Error = ex.ToString(); response.IsSuccessful = false; return(response); } }
public UpdaterServiceResponse <bool> UploadWebresource(ConnectionDetail connectionDetail, WebResource webResource) { var response = new UpdaterServiceResponse <bool>(); try { Console.WriteLine("Requesting WR update"); var client = connectionDetail.GetCrmServiceClient(true); var update = new Entity("webresource", webResource.Id.Value) { Attributes = { { "content", webResource.Content } } }; client.Update(update); response.IsSuccessful = true; return(response); } catch (Exception ex) { Console.WriteLine(ex); response.Error = ex.ToString(); response.IsSuccessful = false; return(response); } }
private void tsbSwitchOrgs_Click(object sender, EventArgs e) { if (AdditionalConnectionDetails.Count > 1) { MessageBox.Show(this, @"Switch can only be performed when no more than one target organization is defined", @"Warning", MessageBoxButtons.OK, MessageBoxIcon.Warning); return; } var tempDetail = sourceDetail; sourceDetail = AdditionalConnectionDetails.FirstOrDefault(); ConnectionDetail = AdditionalConnectionDetails.FirstOrDefault(); AdditionalConnectionDetails.Clear(); if (tempDetail != null) { AdditionalConnectionDetails.Add(tempDetail); } mForm.SwitchSourceAndTarget(tempDetail, sourceDetail); if (sourceDetail != null) { sourceService = sourceDetail.GetCrmServiceClient(); base.UpdateConnection(sourceService, sourceDetail, "", null); RetrieveSolutions(); } }
public UpdaterServiceResponse <ConnectionResult> ValidateConnection(ConnectionDetail connectionDetail) { Console.WriteLine("Connection validation requested"); var response = new UpdaterServiceResponse <ConnectionResult>(); try { var client = connectionDetail.GetCrmServiceClient(true); var webApplicationUrl = client.ConnectedOrgPublishedEndpoints[EndpointType.WebApplication]; var webAppURi = new Uri(webApplicationUrl); response.IsSuccessful = true; response.Payload = new ConnectionResult() { IsReady = client.IsReady, LastCrmError = client.LastCrmError, Organization = client.ConnectedOrgUniqueName, OrganizationFriendlyName = client.ConnectedOrgFriendlyName, OrganizationVersion = client.ConnectedOrgVersion.ToString(), OrganizationDataServiceUrl = client.ConnectedOrgPublishedEndpoints[EndpointType.OrganizationDataService], OrganizationServiceUrl = client.ConnectedOrgPublishedEndpoints[EndpointType.OrganizationService], WebApplicationUrl = webApplicationUrl, TenantId = client.TenantId, EnvironmentId = client.EnvironmentId, ServerName = webAppURi.Host, ServerPort = webAppURi.Port, UserName = connectionDetail.UserName?.Length > 0 ? connectionDetail.UserName : client.OAuthUserId?.Length > 0 ? client.OAuthUserId : connectionDetail.AzureAdAppId != Guid.Empty ? connectionDetail.AzureAdAppId.ToString("B") : null }; return(response); } catch (Exception ex) { Console.WriteLine(ex); response.Payload = new ConnectionResult() { IsReady = false, LastCrmError = ex.Message }; response.IsSuccessful = false; response.Error = ex.ToString(); return(response); } }
public UpdaterServiceResponse <IEnumerable <WebResource> > RetrieveWebResources(ConnectionDetail connectionDetail, List <string> webResourceNames) { var response = new UpdaterServiceResponse <IEnumerable <WebResource> >(); try { Console.WriteLine("Requesting WR retrieve"); var client = connectionDetail.GetCrmServiceClient(true); var query = new QueryExpression("webresource") { ColumnSet = new ColumnSet("name", "content"), LinkEntities = { new LinkEntity("webresource", "solutioncomponent", "webresourceid", "objectid", JoinOperator.Inner) { LinkCriteria = { Conditions = { new ConditionExpression("solutionid", ConditionOperator.Equal, connectionDetail.SelectedSolution.SolutionId) } } } } }; if (webResourceNames != null && webResourceNames.Count > 0) { query.Criteria = new FilterExpression(LogicalOperator.Or); query.Criteria.Conditions.AddRange(webResourceNames.Select(x => new ConditionExpression("name", ConditionOperator.Equal, x))); } var retrieveWebresourcesResponse = client.RetrieveMultiple(query); var webResources = retrieveWebresourcesResponse.Entities.ToList(); response.Payload = webResources.Select(x => new WebResource() { Id = x.Id, Name = x.GetAttributeValue <string>("name"), Content = x.GetAttributeValue <string>("content") }); response.IsSuccessful = true; return(response); } catch (Exception ex) { Console.WriteLine(ex); response.Error = ex.ToString(); response.IsSuccessful = false; return(response); } }
private CrmServiceClient GetCrmServiceClient(ConnectionType connectionType, bool forceNew = false) { switch (connectionType) { case ConnectionType.Source: return(_sourceConnection.GetCrmServiceClient(forceNew)); case ConnectionType.Target: return(_targetConnection.GetCrmServiceClient(forceNew)); default: throw new Exception("Something went wrong"); } }
public UpdaterServiceResponse <SolutionDetail> RetrieveSolution(ConnectionDetail connectionDetail, Guid solutionId) { var response = new UpdaterServiceResponse <SolutionDetail>(); try { Console.WriteLine("Requesting Solution retrieve"); var client = connectionDetail.GetCrmServiceClient(true); QueryExpression query = new QueryExpression { EntityName = "solution", ColumnSet = new ColumnSet(new string[] { "friendlyname", "uniquename", "publisherid" }), Criteria = new FilterExpression() }; query.Criteria.AddCondition("isvisible", ConditionOperator.Equal, true); query.Criteria.AddCondition("solutionid", ConditionOperator.Equal, solutionId); query.LinkEntities.Add(new LinkEntity("solution", "publisher", "publisherid", "publisherid", JoinOperator.Inner)); query.LinkEntities[0].Columns.AddColumns("customizationprefix"); query.LinkEntities[0].EntityAlias = "publisher"; var retrieveSolutionResponse = client.RetrieveMultiple(query); var entity = retrieveSolutionResponse.Entities.FirstOrDefault(); if (entity == null) { return(null); } var solution = new SolutionDetail() { SolutionId = entity.Id, PublisherPrefix = entity.GetAttributeValue <AliasedValue>("publisher.customizationprefix") == null ? null : entity.GetAttributeValue <AliasedValue>("publisher.customizationprefix").Value.ToString() }; response.Payload = solution; response.IsSuccessful = true; return(response); } catch (Exception ex) { Console.WriteLine(ex); response.Error = ex.ToString(); response.IsSuccessful = false; return(response); } }
private IOrganizationService GetNewServiceClient(ConnectionDetail con) { var svc = con.ServiceClient; if (svc.ActiveAuthenticationType == Microsoft.Xrm.Tooling.Connector.AuthenticationType.OAuth) { return(svc.Clone()); } try { return(con.GetCrmServiceClient(true)); } catch { return(svc); } }
public UpdaterServiceResponse <List <SolutionDetail> > GetSolutionsList(ConnectionDetail connectionDetail) { Console.WriteLine("Solution list requested"); var response = new UpdaterServiceResponse <List <SolutionDetail> >(); try { var client = connectionDetail.GetCrmServiceClient(true); QueryExpression query = new QueryExpression { EntityName = "solution", ColumnSet = new ColumnSet(new string[] { "friendlyname", "uniquename", "publisherid" }), Criteria = new FilterExpression() }; query.Criteria.AddCondition("isvisible", ConditionOperator.Equal, true); query.AddOrder("friendlyname", OrderType.Ascending); query.LinkEntities.Add(new LinkEntity("solution", "publisher", "publisherid", "publisherid", JoinOperator.Inner)); query.LinkEntities[0].Columns.AddColumns("customizationprefix"); query.LinkEntities[0].EntityAlias = "publisher"; var solutionEntities = client.RetrieveMultiple(query).Entities; var solutions = solutionEntities.Select(x => new SolutionDetail() { UniqueName = x.GetAttributeValue <string>("uniquename"), FriendlyName = x.GetAttributeValue <string>("friendlyname"), PublisherPrefix = x.GetAttributeValue <Microsoft.Xrm.Sdk.AliasedValue>("publisher.customizationprefix") == null ? null : x.GetAttributeValue <Microsoft.Xrm.Sdk.AliasedValue>("publisher.customizationprefix").Value.ToString(), SolutionId = x.Id }).ToList(); response.Payload = solutions; response.IsSuccessful = true; return(response); } catch (Exception ex) { Console.WriteLine(ex); response.IsSuccessful = false; response.Error = ex.ToString(); return(response); } }
public UpdaterServiceResponse <bool> PublishWebResources(ConnectionDetail connectionDetail, IEnumerable <Guid> webResourcesIds) { var response = new UpdaterServiceResponse <bool>(); try { Console.WriteLine("Requesting WR publish"); var client = connectionDetail.GetCrmServiceClient(true); var orgContext = new OrganizationServiceContext(client); if (webResourcesIds == null || !webResourcesIds.Any()) { throw new ArgumentNullException("webresourcesId"); } var request = new OrganizationRequest { RequestName = "PublishXml" }; request.Parameters = new ParameterCollection(); request.Parameters.Add(new KeyValuePair <string, object>("ParameterXml", string.Format("<importexportxml><webresources>{0}</webresources></importexportxml>", string.Join("", webResourcesIds.Select(a => string.Format("<webresource>{0}</webresource>", a))) ))); orgContext.Execute(request); response.IsSuccessful = true; return(response); } catch (Exception ex) { Console.WriteLine(ex); response.Error = ex.ToString(); response.IsSuccessful = false; return(response); } }
public void GetRoleDetail(List <Privilege> privList, User user, Guid recordId, EntityInfo entity) { ///Check Team access /// if (user.Teams == null) { user.Teams = GetTeams(user.Id); } foreach (var team in user.Teams) { var csc = connectionDetail.GetCrmServiceClient(); Dictionary <string, List <string> > ODataHeaders = new Dictionary <string, List <string> >() { { "Accept", new List <string>() { "application/json" } }, { "OData-MaxVersion", new List <string>() { "4.0" } }, { "OData-Version", new List <string>() { "4.0" } } }; if (csc.IsReady) { string queryString = $@"teams({team.Id})/Microsoft.Dynamics.CRM.RetrievePrincipalAccessInfo(ObjectId={recordId},EntityName='{entity.LogicalName}')"; HttpResponseMessage respMsg = csc.ExecuteCrmWebRequest(HttpMethod.Get, queryString, string.Empty, ODataHeaders, "application/json"); if (respMsg.IsSuccessStatusCode) { PopulateRights(respMsg.Content.ReadAsStringAsync().Result, privList, team.Name, AccessCheck.Team); } } } /// Check role Access string privName = string.Join("", privList.Where(prv => prv.HasAccess).Select(prv => "<value>" + prv.PrivilegeType + entity.LogicalName + "</value>")); var fetchXml = $@"<fetch> <entity name='privilege' > <attribute name='accessright' /> <attribute name='name' /> <filter> <condition attribute='name' operator='in' >{privName} </condition> </filter> <link-entity name='roleprivileges' from='privilegeid' to='privilegeid' > <attribute name='privilegedepthmask' alias='depth' /> <link-entity name='role' from='parentrootroleid' to='roleid' > <attribute name='name' alias='roleName'/> <attribute name='businessunitid' /> <link-entity name='systemuserroles' from='roleid' to='roleid' > <filter> <condition attribute='systemuserid' operator='eq' value='{user.Id}' /> </filter> </link-entity> </link-entity> </link-entity> </entity> </fetch>"; Guid ownerId = service.Retrieve(entity.LogicalName, recordId, new ColumnSet("ownerid")).GetAttributeValue <EntityReference>("ownerid").Id; var request = new FetchExpression(fetchXml); var response = service.RetrieveMultiple(request); foreach (var priv in response.Entities) { privName = priv.GetAttributeValue <string>("name"); Privilege privilege = privList.FirstOrDefault(prv => (prv.PrivilegeType + entity.LogicalName).ToLower() == privName.ToLower()); if (privilege == null) { continue; } int depth = (int)priv.GetAttributeValue <AliasedValue>("depth").Value; if (depth == 1 && ownerId != user.Id) { } else { privilege.Permissions.Add(new Permission { PermissionType = PermissionType.UserRole, Name = priv.GetAttributeValue <AliasedValue>("roleName").Value.ToString() }); } // if (priv.GetAttributeValue<int>("privilegedepthmask") == 1) privilege.Permissions } // throw new NotImplementedException(); }
private bool Connect() { try { if (connection != null && connection.IsReady) { return(true); } ConnectionManager.Instance.LoadConnectionsList(); ConnectionDetail connectionDetail1 = ConnectionManager.Instance.ConnectionsList.Connections.Where(conn => conn.ConnectionId.HasValue && conn.ConnectionId.Value == this.solution.ConnectionId).FirstOrDefault <ConnectionDetail>(); if (connectionDetail1 != null) { connection = connectionDetail1.GetCrmServiceClient(); if (!connection.IsReady) { throw new Exception(connection.LastCrmError); } } else { var wrapper = new WindowWrapper(Process.GetCurrentProcess().MainWindowHandle); var selector = new ConnectionSelector(false, true) { StartPosition = System.Windows.Forms.FormStartPosition.CenterParent, }; selector.ShowDialog(System.Windows.Forms.Control.FromHandle(wrapper.Handle) as System.Windows.Forms.Form); ConnectionDetail connectionDetail = selector.SelectedConnections.FirstOrDefault(); if (connectionDetail != null) { connection = connectionDetail.GetCrmServiceClient(); if (!connection.IsReady) { throw new Exception(this.connection.LastCrmError); } solution.ConnectionId = connectionDetail.ConnectionId.Value; Log.Information("Saving Connection Info"); solution.Save(); } else { Log.Error("Failed to connect to CRM - Aborting Operations. Update connections with arg '-conn'"); connection = null; return(false); } } } catch { Log.Error("Failed to connect to CRM - aborting operations. Update connections with arg '-conn'"); connection = null; return(false); } return(true); }
private void ExecuteWebApiRequest() { if (!AuthTypeCheck()) { return; } WorkAsync(new WorkAsyncInfo { Message = "Executing WebAPI Request...", Work = (worker, args) => { try { var csc = ConnectionDetail.GetCrmServiceClient(); switch (cmbMethod.SelectedItem.ToString()) { case "GET": if (txtRequestUri.Text.StartsWith("<fetch")) { if (MessageBox.Show("Direct <fetchXml/> Execution is not supported yet. To see how to Execute <fetchXml/> using WebAPI, Please follow the link.", "Visit", MessageBoxButtons.OKCancel, MessageBoxIcon.Asterisk) == DialogResult.Yes) { System.Diagnostics.Process.Start("https://www.ashishvishwakarma.com/Execute-fetchXml-WebAPI-Dynamics-365-Using-JavaScript-Example/"); } //var result = Service.RetrieveMultiple(new FetchExpression(txtRequestUri.Text)); //dgvResponseTable.DataSource = result?.Entities; args.Result = new CustomResponse(); } else { args.Result = RequestHelper(csc, HttpMethod.Get, txtRequestUri.Text); } break; case "POST": args.Result = RequestHelper(csc, HttpMethod.Post, txtRequestUri.Text, txtRequestBody.Text); break; case "PATCH": args.Result = RequestHelper(csc, new HttpMethod("PATCH"), txtRequestUri.Text, txtRequestBody.Text); break; case "DELETE": args.Result = RequestHelper(csc, HttpMethod.Delete, txtRequestUri.Text); break; case "PUT": args.Result = RequestHelper(csc, HttpMethod.Put, txtRequestUri.Text, txtRequestBody.Text); break; default: MessageBox.Show("Request is not proper!"); break; } } catch (Exception ex) { MessageBox.Show(ex.Message + " | " + ex?.InnerException?.Message); } }, PostWorkCallBack = (args) => { if (args.Error != null) { MessageBox.Show(args.Error.ToString(), "Error", MessageBoxButtons.OK, MessageBoxIcon.Error); } var cr = args.Result as CustomResponse; var result = cr.Response; if (result != null) { txtRequestUri.Text = result.RequestMessage.RequestUri.ToString(); //Set response body tab as active tabReqestResponse.SelectedIndex = 1; tabResponseChild.SelectedIndex = 0; if (!string.IsNullOrEmpty(cr.ResponseBody)) { txtResponseBody.Text = cr.ResponseBody.StartsWith("{") ? JValue.Parse(cr.ResponseBody).ToString(Newtonsoft.Json.Formatting.Indented) : cr.ResponseBody.StartsWith("<") ? cr.ResponseBody : cr.ResponseBody; } btnSend.BackColor = result.IsSuccessStatusCode ? Color.Green : Color.Red; var resultBool = result.IsSuccessStatusCode ? "✔️ Success!" : "❌ Failed!"; lblMain.ForeColor = result.IsSuccessStatusCode ? Color.Green : Color.Red; lblMain.Text = $"\n{resultBool}\n🌐 {(int)result.StatusCode} {result.StatusCode}\n📚 {cr.Size / 1024} KB\n⌛ {cr.TimeSpent} ms"; if (cr.ResponseBody.StartsWith("{")) { var j = JsonConvert.DeserializeObject <GetMultpleResponse>(cr.ResponseBody); if (!(j.value is null)) { lblMain.Text += $"\n\n🎬 {j.value.Count()} Records!"; dgvResponseTable.DataSource = ToDataTable(j.value); tabResponseChild.SelectedIndex = 1; } } dgvResponseHeaders.DataSource = cr.Headers; dgvResponseHeaders.Columns[0].AutoSizeMode = DataGridViewAutoSizeColumnMode.AllCells; dgvResponseHeaders.Columns[1].AutoSizeMode = DataGridViewAutoSizeColumnMode.Fill; dgvResponseHeaders.Columns[0].SortMode = DataGridViewColumnSortMode.Automatic; dgvResponseHeaders.Columns[1].SortMode = DataGridViewColumnSortMode.Automatic; } } });
public ConnectionModel(ConnectionDetail detail, bool isDefault, IOrganizationService crm) { this.Detail = detail; this.IsDefault = isDefault; this.Crm = crm ?? detail.GetCrmServiceClient(); }
public static CrmServiceClient GetServiceClient(this ConnectionDetail connectionDetail) { return(connectionDetail.GetCrmServiceClient()); }