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);
            }
        }
示例#2
0
 /// <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);
            }
        }
示例#5
0
        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);
            }
        }
示例#8
0
        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);
            }
        }
示例#10
0
        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);
            }
        }
示例#13
0
        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);
        }
示例#15
0
        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;
                    }
                }
            });
示例#16
0
 public ConnectionModel(ConnectionDetail detail, bool isDefault, IOrganizationService crm)
 {
     this.Detail    = detail;
     this.IsDefault = isDefault;
     this.Crm       = crm ?? detail.GetCrmServiceClient();
 }
示例#17
0
 public static CrmServiceClient GetServiceClient(this ConnectionDetail connectionDetail)
 {
     return(connectionDetail.GetCrmServiceClient());
 }