Esempio n. 1
0
        private void ProcessFetchXml()
        {
            WorkAsync("Executing request...",
                      e =>
            {
                var request = new ExecuteFetchRequest {
                    FetchXml = e.Argument.ToString()
                };
                var response = (ExecuteFetchResponse)Service.Execute(request);

                e.Result = response.FetchXmlResult;
            },
                      e =>
            {
                if (e.Error == null)
                {
                    txtResponse.Text        = IndentXMLString(e.Result.ToString());
                    tabControl1.SelectedTab = tabPage2;
                }
                else
                {
                    MessageBox.Show(this, "An error occured: " + e.Error.Message, "Error", MessageBoxButtons.OK,
                                    MessageBoxIcon.Error);
                }
            },
                      txtRequest.Text);
        }
Esempio n. 2
0
        private void ProcessFetchXml()
        {
            WorkAsync(new WorkAsyncInfo
            {
                Message = "Executing request...",
                AsyncArgument = txtRequest.Text,
                Work = (bw, e) =>
                {
                    var request = new ExecuteFetchRequest { FetchXml = e.Argument.ToString() };
                    var response = (ExecuteFetchResponse)Service.Execute(request);

                    e.Result = response.FetchXmlResult;
                },
                PostWorkCallBack = e =>
                {
                    if (e.Error == null)
                    {
                        txtResponse.Text = IndentXMLString(e.Result.ToString());
                        tabControl1.SelectedTab = tabPage2;
                    }
                    else
                    {
                        MessageBox.Show(this, "An error occured: " + e.Error.Message, "Error", MessageBoxButtons.OK,
                                        MessageBoxIcon.Error);
                    }
                }
            });
        }
Esempio n. 3
0
        public SdkMessages RetrieveSdkRequests(IOrganizationService service)
        {
            SdkMessages messages = new SdkMessages(null);

            foreach (string messageLogicalName in _messageFilter)
            {
                string fetchQuery = @"<fetch distinct='true' version='1.0'>
                                        <entity name='sdkmessage'>
                                            <attribute name='name'/>
                                            <attribute name='isprivate'/>
                                            <attribute name='sdkmessageid'/>
                                            <attribute name='customizationlevel'/>
                                            <filter>
                                                <condition alias='sdmessagefilter' attribute='name' operator='eq' value='" + messageLogicalName.ToLower() + @"'/>
                                            </filter>
                                            <link-entity name='sdkmessagepair' alias='sdkmessagepair' to='sdkmessageid' from='sdkmessageid' link-type='inner'>
                                                <filter>
                                                    <condition alias='sdkmessagepair' attribute='endpoint' operator='eq' value='2011/Organization.svc' />
                                                </filter>
                                                <attribute name='sdkmessagepairid'/>
                                                <attribute name='namespace'/>
                                                <link-entity name='sdkmessagerequest' alias='sdkmessagerequest' to='sdkmessagepairid' from='sdkmessagepairid' link-type='outer'>
                                                    <attribute name='sdkmessagerequestid'/>
                                                    <attribute name='name'/>
                                                    <link-entity name='sdkmessagerequestfield' alias='sdkmessagerequestfield' to='sdkmessagerequestid' from='sdkmessagerequestid' link-type='outer'>
                                                        <attribute name='name'/>
                                                        <attribute name='optional'/>
                                                        <attribute name='position'/>
                                                        <attribute name='publicname'/>
                                                        <attribute name='clrparser'/>
                                                        <order attribute='sdkmessagerequestfieldid' descending='false' />
                                                    </link-entity>
                                                    <link-entity name='sdkmessageresponse' alias='sdkmessageresponse' to='sdkmessagerequestid' from='sdkmessagerequestid' link-type='outer'>
                                                        <attribute name='sdkmessageresponseid'/>
                                                        <link-entity name='sdkmessageresponsefield' alias='sdkmessageresponsefield' to='sdkmessageresponseid' from='sdkmessageresponseid' link-type='outer'>
                                                            <attribute name='publicname'/>
                                                            <attribute name='value'/>
                                                            <attribute name='clrformatter'/>
                                                            <attribute name='name'/>
                                                            <attribute name='position' />
                                                        </link-entity>
                                                    </link-entity>
                                                </link-entity>
                                            </link-entity>
                                            <link-entity name='sdkmessagefilter' alias='sdmessagefilter' to='sdkmessageid' from='sdkmessageid' link-type='inner'>
                                                <filter>
                                                    <condition alias='sdmessagefilter' attribute='isvisible' operator='eq' value='1' />
                                               </filter>
                                                <attribute name='sdkmessagefilterid'/>
                                                <attribute name='primaryobjecttypecode'/>
                                                <attribute name='secondaryobjecttypecode'/>
                                            </link-entity>
                                            <order attribute='sdkmessageid' descending='false' />
                                        </entity>
                                    </fetch>";

                MessagePagingInfo pageInfo = null;
                int pageNumber             = 1;
                var request = new ExecuteFetchRequest();
                while ((pageInfo == null) || pageInfo.HasMoreRecords)
                {
                    string fetch = fetchQuery;
                    if (pageInfo != null)
                    {
                        fetch = this.SetPagingCookie(fetchQuery, pageInfo.PagingCookig, pageNumber);
                    }
                    request.FetchXml = fetch;
                    var response = (ExecuteFetchResponse)service.Execute(request);
                    pageInfo = SdkMessages.FromFetchResult(messages, (string)response.FetchXmlResult);
                    pageNumber++;
                }
            }
            return(messages);
        }
        public async override Task <ActionResponse> ExecuteActionAsync(ActionRequest request)
        {
            var dataMovement = request.DataStore.GetValue("DataMovement");

            if (dataMovement == "Scribe")
            {
                return(new ActionResponse(ActionStatus.Success));
            }

            string refreshToken    = request.DataStore.GetJson("MsCrmToken")["refresh_token"].ToString();
            string organizationUrl = request.DataStore.GetValue("OrganizationUrl");
            Dictionary <string, string> entities = JsonConvert.DeserializeObject <Dictionary <string, string> >(request.DataStore.GetValue("Entities"));

            var crmToken = CrmTokenUtility.RetrieveCrmOnlineToken(refreshToken, request.Info.WebsiteRootUrl, request.DataStore, organizationUrl);

            Dictionary <string, int> initialCounts = new Dictionary <string, int>();

            var proxy = new OrganizationWebProxyClient(new Uri($"{organizationUrl}XRMServices/2011/Organization.svc/web"), true)
            {
                HeaderToken = crmToken["access_token"].ToString()
            };

            string count = string.Empty;
            int    max   = 0;

            foreach (var entry in entities)
            {
                try
                {
                    var xml = $@"
                        <fetch distinct='false' mapping='logical' aggregate='true'> 
                            <entity name='{entry.Key}'> 
                                 <attribute name = '{entry.Value}' alias = '{entry.Key}_count' aggregate = 'count'/>
                            </entity> 
                        </fetch>";

                    var fetchRequest = new ExecuteFetchRequest()
                    {
                        FetchXml = xml
                    };

                    var result = (ExecuteFetchResponse)proxy.Execute(fetchRequest);

                    var xdoc = XDocument.Parse(result.FetchXmlResult);

                    count = xdoc.Descendants().First(e => e.Name == $"{entry.Key}_count").Value;
                }
                catch (Exception e)
                {
                    if (e.Message == $"The entity with a name = '{entry.Key}' was not found in the MetadataCache.")
                    {
                        return(new ActionResponse(ActionStatus.Failure, null, e, "NotPSAInstance"));
                    }

                    if (e.Message == "AggregateQueryRecordLimit exceeded. Cannot perform this operation.")
                    {
                        count = "-1";
                    }
                    else
                    {
                        throw;
                    }
                }

                if (Convert.ToInt32(count) > max)
                {
                    max = Convert.ToInt32(count);
                }

                initialCounts.Add(entry.Key.ToLowerInvariant(), Convert.ToInt32(count));
            }
            var missingCounts = new List <string>();

            foreach (var pair in initialCounts)
            {
                if (pair.Value == -1)
                {
                    missingCounts.Add(pair.Key);
                }
            }

            foreach (var entry in missingCounts)
            {
                initialCounts[entry] = max;
            }

            request.DataStore.AddToDataStore("InitialCounts", JsonUtility.GetJObjectFromObject(initialCounts));
            return(new ActionResponse(ActionStatus.Success));
        }
Esempio n. 5
0
        protected List <Entity> RetrieveAnnotationEntity(CodeActivityContext context, ColumnSet noteColumns, int maxRecords = 1)
        {
            double                      miunutesOld     = 0;
            List <Entity>               returnValue     = new List <Entity>();
            IWorkflowContext            workflowContext = context.GetExtension <IWorkflowContext>();
            IOrganizationServiceFactory serviceFactory  = context.GetExtension <IOrganizationServiceFactory>();
            IOrganizationService        service         = serviceFactory.CreateOrganizationService(workflowContext.InitiatingUserId);

            int?objectTypeCode = this.RetrieveEntityObjectTypeCode(workflowContext, service);

            if (objectTypeCode == null)
            {
                throw new ArgumentException($"Objecttypecode not found in metadata for entity {workflowContext.PrimaryEntityName}");
            }

            ExecuteFetchResponse fetchResponse = null;
            ExecuteFetchRequest  request       = new ExecuteFetchRequest();

            try
            {
                if (String.IsNullOrWhiteSpace(this.FileName.Get(context)))
                {
                    request.FetchXml =
                        $@"<fetch version=""1.0"" output-format=""xml-platform"" mapping=""logical"" distinct=""false"" page=""1"" count=""{maxRecords}"">
                              <entity name=""annotation"">
                                <attribute name=""annotationid"" />
                                <attribute name=""createdon"" />
                                <filter type=""and"">
                                  <condition attribute=""isdocument"" operator=""eq"" value=""1"" />
                                  <condition attribute=""objectid"" operator=""eq"" value=""{workflowContext.PrimaryEntityId}"" />
                                  <condition attribute=""objecttypecode"" operator=""eq"" value=""{objectTypeCode.Value}"" />
                                </filter>
                                <order attribute=""createdon"" descending=""true"" />
                              </entity>
                            </fetch>";
                }
                else
                {
                    request.FetchXml =
                        $@"<fetch version=""1.0"" output-format=""xml-platform"" mapping=""logical"" distinct=""false"" page=""1"" count=""{maxRecords}"">
                              <entity name=""annotation"">
                                <attribute name=""annotationid"" />
                                <attribute name=""createdon"" />
                                <filter type=""and"">
                                  <condition attribute=""filename"" operator=""like"" value=""%{this.FileName.Get(context)}%"" />
                                  <condition attribute=""isdocument"" operator=""eq"" value=""1"" />
                                  <condition attribute=""objectid"" operator=""eq"" value=""{workflowContext.PrimaryEntityId}"" />
                                  <condition attribute=""objecttypecode"" operator=""eq"" value=""{objectTypeCode.Value}"" />
                                </filter>
                                <order attribute=""createdon"" descending=""true"" />
                              </entity>
                            </fetch>";
                }

                fetchResponse = service.Execute(request) as ExecuteFetchResponse;

                XmlDocument queryResults = new XmlDocument();
                queryResults.LoadXml(fetchResponse.FetchXmlResult);
                int days    = 0;
                int minutes = 0;
                for (int i = 0; i < queryResults["resultset"].ChildNodes.Count; i++)
                {
                    if (queryResults["resultset"].ChildNodes[i]["createdon"] != null && !String.IsNullOrWhiteSpace(queryResults["resultset"].ChildNodes[i]["createdon"].InnerText))
                    {
                        DateTime createdon = DateTime.Parse(queryResults["resultset"].ChildNodes[i]["createdon"].InnerText);
                        if (createdon.Kind == DateTimeKind.Local)
                        {
                            createdon = createdon.ToUniversalTime();
                        }
                        TimeSpan difference = DateTime.Now.ToUniversalTime() - createdon;
                        miunutesOld = difference.TotalMinutes;
                        switch (this.TimeSpanOption.Get(context).Value)
                        {
                        case 222540000:
                            minutes = this.TimeSpanValue.Get(context);
                            break;

                        case 222540001:
                            minutes = this.TimeSpanValue.Get(context) * 60;
                            break;

                        case 222540002:
                            days = this.TimeSpanValue.Get(context);
                            break;

                        case 222540003:
                            days = this.TimeSpanValue.Get(context) * 7;
                            break;

                        case 222540004:
                            days = this.TimeSpanValue.Get(context) * 365;
                            break;
                        }
                        TimeSpan allowedDifference = new TimeSpan(days, 0, minutes, 0);
                        if (difference <= allowedDifference)
                        {
                            returnValue.Add(service.Retrieve("annotation", Guid.Parse(queryResults["resultset"].ChildNodes[i]["annotationid"].InnerText), noteColumns));
                        }
                    }

                    if (returnValue.Count >= maxRecords)
                    {
                        break;
                    }
                }
            }
            catch (System.ServiceModel.FaultException <Microsoft.Xrm.Sdk.OrganizationServiceFault> ex)
            {
                throw new ArgumentException("There was an error executing the FetchXML. Message: " + ex.Message);
            }
            catch (Exception ex)
            {
                throw ex;
            }

            return(returnValue);
        }