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