/// <summary>
 /// Adds a retrieve multiple request to the current OrganizationRequestCollection.
 /// </summary>
 /// <typeparam name="T"></typeparam>
 /// <param name="requests">The requests.</param>
 /// <param name="columnSet">The column set.</param>
 /// <param name="columnNameAndValuePairs">The column name and value pairs.</param>
 public static void AddRetrieveMultiple <T>(this OrganizationRequestCollection requests, ColumnSet columnSet,
                                            params object[] columnNameAndValuePairs) where T : Entity
 {
     requests.Add(new RetrieveMultipleRequest {
         Query = QueryExpressionFactory.Create <T>(columnSet, columnNameAndValuePairs),
     });
 }
Exemplo n.º 2
0
        /// <summary>
        /// 批量执行
        /// </summary>
        /// <param name="service"></param>
        /// <param name="ents"></param>
        public static void BatchExecute(this IOrganizationService service, OrganizationRequestCollection ents)
        {
            if (ents == null)
            {
                return;
            }
            List <dynamic> list = new List <dynamic>();

            try
            {
                foreach (var item in ents)
                {
                    if (item is CreateRequest)
                    {
                        CreateResponse resp = (CreateResponse)service.Execute((CreateRequest)item);
                        list.Add(new { id = resp.id, name = ((CreateRequest)item).Target.LogicalName });
                    }
                    else
                    {
                        service.Execute(item);
                    }
                }
            }
            catch (Exception ex)
            {
                //删除创建的记录
                foreach (var item in list)
                {
                    service.Delete(item.name, item.id);
                }

                throw new Exception(ex.Message);
            }
        }
Exemplo n.º 3
0
        public BulkResponse Write(IOrganizationService service, Dictionary <string, OrganizationRequest> requestsToBeProcessed)
        {
            BulkResponse bulkWriteResponse = new BulkResponse();

            bulkWriteResponse.Responses = new List <BulkResponseItem>();

            int batchNumber           = 0;
            int recordsToProcessCount = requestsToBeProcessed.Count;

            while (recordsToProcessCount > _batchSize || recordsToProcessCount > 0)
            {
                Dictionary <string, OrganizationRequest> currentBatchOfRequests = requestsToBeProcessed.Skip(batchNumber * _batchSize).Take(_batchSize).ToDictionary(x => x.Key, x => x.Value);

                OrganizationRequestCollection orgReqs = new OrganizationRequestCollection();
                orgReqs.AddRange(currentBatchOfRequests.Values.ToList());

                ExecuteMultipleResponse response = ExecuteMultiple(service, orgReqs);

                List <BulkResponseItem> bulkResponses = ReadExecuteMultipleResponse(response, currentBatchOfRequests);
                bulkWriteResponse.Responses.AddRange(bulkResponses);
                bulkWriteResponse.HasErrors = response.IsFaulted;


                recordsToProcessCount = recordsToProcessCount - currentBatchOfRequests.Count;
                batchNumber++;
            }



            return(bulkWriteResponse);
        }
Exemplo n.º 4
0
        protected override void ExecuteMultipleWithRetry(List <EntityWrapper> entities, Func <EntityWrapper, OrganizationRequest> orgRequest)
        {
            var requests = new OrganizationRequestCollection();

            requests.AddRange(entities.Select(wrapper => orgRequest(wrapper)).ToArray());

            int cnt = 0;

            List <ExecuteMultipleResponseItem> responseWithResults = new List <ExecuteMultipleResponseItem>();

            foreach (OrganizationRequest request in requests)
            {
                try
                {
                    OrganizationResponse response = new UpsertResponse()
                    {
                    };
                    responseWithResults.Add(new ExecuteMultipleResponseItem()
                    {
                        Response = response, RequestIndex = cnt
                    });
                }
                catch (FaultException <OrganizationServiceFault> ex)
                {
                    responseWithResults.Add(new ExecuteMultipleResponseItem()
                    {
                        Fault = ex.Detail, RequestIndex = cnt
                    });
                }

                cnt++;
            }

            PopulateExecutionResults(entities, responseWithResults);
        }
Exemplo n.º 5
0
        public override void ProcessData()
        {
            var successfulRequests = 0;
            var optionSetData      = InputFile.Worksheets[ConfigurationFile.WorkSheets.OptionSets].Data;
            var entityData         = InputFile.Worksheets[ConfigurationFile.WorkSheets.Entities].Data;

            if (entityData.Count > 0 || optionSetData.Count > 0)
            {
                var entityRequests = new OrganizationRequestCollection();
                var entityMapper   = new CreateEntityRequestDataMapper(InputFile.Worksheets[ConfigurationFile.WorkSheets.Entities].Columns, OrgLcId);
                entityRequests.AddRange(MapDataToRequests(entityMapper, entityData));
                var optionSetMapper = new CreateOptionSetRequestDataMapper(InputFile.Worksheets[ConfigurationFile.WorkSheets.OptionSets].Columns, OrgLcId);
                entityRequests.AddRange(MapDataToRequests(optionSetMapper, optionSetData));
                successfulRequests = ExecuteRequests(entityRequests);
            }
            var attributeData  = InputFile.Worksheets[ConfigurationFile.WorkSheets.Attributes].Data;
            var oneToManyData  = InputFile.Worksheets[ConfigurationFile.WorkSheets.OneToManyRelationships].Data;
            var manyToManyData = InputFile.Worksheets[ConfigurationFile.WorkSheets.ManyToManyRelationships].Data;

            if (attributeData.Count > 0 || oneToManyData.Count > 0 || manyToManyData.Count > 0)
            {
                var otherRequests   = new OrganizationRequestCollection();
                var attributeMapper = new CreateAttributeRequestDataMapper(InputFile.Worksheets[ConfigurationFile.WorkSheets.Attributes].Columns, OrgLcId);
                otherRequests.AddRange(MapDataToRequests(attributeMapper, attributeData));
                var oneToManyMapper = new CreateOneToManyRequestDataMapper(InputFile.Worksheets[ConfigurationFile.WorkSheets.OneToManyRelationships].Columns, OrgLcId);
                otherRequests.AddRange(MapDataToRequests(oneToManyMapper, oneToManyData));
                var manyToManyMapper = new CreateManyToManyRequestDataMapper(InputFile.Worksheets[ConfigurationFile.WorkSheets.ManyToManyRelationships].Columns, OrgLcId);
                otherRequests.AddRange(MapDataToRequests(manyToManyMapper, manyToManyData));
                successfulRequests += ExecuteRequests(otherRequests);
            }
            if (successfulRequests > 0)
            {
                Service.Execute(new PublishAllXmlRequest());
            }
        }
        public override void ProcessData()
        {
            var successfulRequests = 0;

            var attributeData  = InputFile.Worksheets[ConfigurationFile.WorkSheets.Attributes].Data;
            var oneToManyData  = InputFile.Worksheets[ConfigurationFile.WorkSheets.OneToManyRelationships].Data;
            var manyToManyData = InputFile.Worksheets[ConfigurationFile.WorkSheets.ManyToManyRelationships].Data;

            if (attributeData.Count > 0 || oneToManyData.Count > 0 || manyToManyData.Count > 0)
            {
                var attributeRelationshipRequests = new OrganizationRequestCollection();
                attributeRelationshipRequests.AddRange(MapDataToRequests(MapAttributes, attributeData));
                attributeRelationshipRequests.AddRange(MapDataToRequests(MapOneToMany, oneToManyData));
                attributeRelationshipRequests.AddRange(MapDataToRequests(MapManyToMany, manyToManyData));
                successfulRequests = ExecuteRequests(attributeRelationshipRequests);
            }

            var optionSetData = InputFile.Worksheets[ConfigurationFile.WorkSheets.OptionSets].Data;
            var entityData    = InputFile.Worksheets[ConfigurationFile.WorkSheets.Entities].Data;

            if (entityData.Count > 0 || optionSetData.Count > 0)
            {
                var entitiesRequests = new OrganizationRequestCollection();
                entitiesRequests.AddRange(MapDataToRequests(MapEntities, entityData));
                entitiesRequests.AddRange(MapDataToRequests(MapOptionSets, optionSetData));
                successfulRequests = ExecuteRequests(entitiesRequests);
            }

            if (successfulRequests > 0)
            {
                Service.Execute(new PublishAllXmlRequest());
            }
        }
Exemplo n.º 7
0
        public static bool UpdateAndPublishSingle(CrmServiceClient client, List <Entity> webResources)
        {
            //CRM 2011 < UR12
            try
            {
                OrganizationRequestCollection requests = CreateUpdateRequests(webResources);

                foreach (OrganizationRequest request in requests)
                {
                    client.Execute(request);
                    OutputLogger.WriteToOutputWindow("Uploaded Web Resource", MessageType.Info);
                }

                string            publishXml     = CreatePublishXml(webResources);
                PublishXmlRequest publishRequest = CreatePublishRequest(publishXml);

                client.Execute(publishRequest);

                OutputLogger.WriteToOutputWindow("Published Web Resource(s)", MessageType.Info);

                return(true);
            }
            catch (FaultException <OrganizationServiceFault> crmEx)
            {
                OutputLogger.WriteToOutputWindow("Error Updating And Publishing Web Resource(s) To CRM: " +
                                                 crmEx.Message + Environment.NewLine + crmEx.StackTrace, MessageType.Error);
                return(false);
            }
            catch (Exception ex)
            {
                OutputLogger.WriteToOutputWindow("Error Updating And Publishing Web Resource(s) To CRM: " +
                                                 ex.Message + Environment.NewLine + ex.StackTrace, MessageType.Error);
                return(false);
            }
        }
 /// <summary>
 /// Adds a retrieve multiple request to the current OrganizationRequestCollection.
 /// </summary>
 /// <typeparam name="T"></typeparam>
 /// <param name="requests">The requests.</param>
 /// <param name="anonymousTypeInitializer">The anonymous type initializer.</param>
 /// <param name="columnNameAndValuePairs">The column name and value pairs.</param>
 public static void AddRetrieveMultiple <T>(this OrganizationRequestCollection requests, Expression <Func <T, object> > anonymousTypeInitializer,
                                            params object[] columnNameAndValuePairs) where T : Entity
 {
     requests.Add(new RetrieveMultipleRequest {
         Query = QueryExpressionFactory.Create(anonymousTypeInitializer, columnNameAndValuePairs),
     });
 }
Exemplo n.º 9
0
        /// <summary>
        /// Execute Multiple and return fail count.
        /// </summary>
        /// <param name="requestCollection">Request Collection</param>
        /// <param name="service">Organization Service</param>
        /// <param name="continueOnError">Continue on Error</param>
        /// <returns>Failed Record Count</returns>
        private static int ProcessExecuteMultipleAndReturnFailCount(OrganizationRequestCollection requestCollection, IOrganizationService service, bool continueOnError)
        {
            if (service != null)
            {
                int failCount          = 0;
                var requestWithResults = new ExecuteMultipleRequest()
                {
                    Settings = new ExecuteMultipleSettings()
                    {
                        ContinueOnError = continueOnError,
                        ReturnResponses = true
                    },
                    Requests = new OrganizationRequestCollection()
                };

                requestWithResults.Requests.AddRange(requestCollection);
                ExecuteMultipleResponse responseWithResults =
                    (ExecuteMultipleResponse)service.Execute(requestWithResults);

                // Display the results returned in the responses.
                foreach (var responseItem in responseWithResults.Responses)
                {
                    // An error has occurred.
                    if (responseItem.Fault != null)
                    {
                        failCount++;
                    }
                }

                return(failCount);
            }

            return(-1);
        }
Exemplo n.º 10
0
        private OrganizationRequestCollection GetOrgRequestsForCreateOrUpdate(Dictionary <string, Entity> recordsToBeProcessed, Operation operation)
        {
            OrganizationRequestCollection orgReqs = new OrganizationRequestCollection();

            foreach (var recordKvp in recordsToBeProcessed)
            {
                // Guid requestId = Guid.NewGuid();
                if (operation == Operation.Create)
                {
                    CreateRequest createRequest = new CreateRequest {
                        Target = recordKvp.Value
                    };
                    orgReqs.Add(createRequest);
                }
                else if (operation == Operation.Update)
                {
                    UpdateRequest updateRequest = new UpdateRequest {
                        Target = recordKvp.Value
                    };
                    orgReqs.Add(updateRequest);
                }
            }

            return(orgReqs);
        }
Exemplo n.º 11
0
        private static void ExecuteMultipleRequests(TraceLogger logger, CrmServiceClient service,
                                                    OrganizationRequestCollection requests, int batchIndex)
        {
            var response = (ExecuteMultipleResponse)service.Execute(new ExecuteMultipleRequest
            {
                Requests = requests,
                Settings = new ExecuteMultipleSettings
                {
                    ContinueOnError = true,
                    ReturnResponses = false
                }
            });

            if (response.IsFaulted)
            {
                foreach (var item in response.Responses)
                {
                    var itemIndex = (batchIndex * QUEUEITEMBATCHSIZE) + item.RequestIndex;

                    var itemRequest = (AddToQueueRequest)requests[item.RequestIndex];

                    logger.Log(
                        $"Item {itemIndex} - There was an error queuing the item with the id:{itemRequest.Target} to queue:{itemRequest.DestinationQueueId}",
                        TraceEventType.Information);
                    logger.Log(item.Fault.Message);
                }
            }

            requests.Clear();
        }
        public static bool UpdateAndPublishSingle(CrmServiceClient client, List <Entity> webResources)
        {
            //CRM 2011 < UR12
            try
            {
                OrganizationRequestCollection requests = CreateUpdateRequests(webResources);

                foreach (OrganizationRequest request in requests)
                {
                    client.Execute(request);
                    OutputLogger.WriteToOutputWindow(Resource.Message_UploadedWebResource, MessageType.Info);
                }

                string            publishXml     = CreatePublishXml(webResources);
                PublishXmlRequest publishRequest = CreatePublishRequest(publishXml);

                client.Execute(publishRequest);

                OutputLogger.WriteToOutputWindow(Resource.Message_PublishedWebResources, MessageType.Info);

                return(true);
            }
            catch (Exception ex)
            {
                ExceptionHandler.LogException(Logger, Resource.ErrorMessage_ErrorUpdatingPublishingWebResources, ex);

                return(false);
            }
        }
Exemplo n.º 13
0
        public void Commit()
        {
            var requests = new OrganizationRequestCollection();
            var transactionRequest = new ExecuteTransactionRequest
            {
                Requests = new OrganizationRequestCollection()
            };

            Added.ForEach(requests.Add);
            Modified.ForEach(requests.Add);
            Deleted.ForEach(requests.Add);

            Added.Clear();
            Modified.Clear();
            Deleted.Clear();

            try
            {
                for (int i = 0; i < requests.Count; i++)
                {
                    if ((i + 1) % _batchSize != 0)
                    {
                        transactionRequest.Requests.Add(requests[i]);
                    }
                    else
                    {
                        transactionRequest.Requests.Add(requests[i]);
                        var response = _service.Execute(transactionRequest);

                        transactionRequest = new ExecuteTransactionRequest
                        {
                            Requests = new OrganizationRequestCollection()
                        };
                    }

                    if ((i == requests.Count - 1) && transactionRequest.Requests.Count > 0)
                    {
                        var response = _service.Execute(transactionRequest);
                    }
                }
            }
            catch (FaultException<OrganizationServiceFault> fault)
            {
                if (fault.Detail.ErrorDetails.Contains("MaxBatchSize"))
                {
                    int maxBatchSize = Convert.ToInt32(fault.Detail.ErrorDetails["MaxBatchSize"]);
                    if (maxBatchSize < transactionRequest.Requests.Count)
                    {
                        var errMsg =
                            string.Format(
                                "The input request collection contains {0} requests, which exceeds the maximum allowed {1}",
                                transactionRequest.Requests.Count, maxBatchSize);
                        throw new InvalidOperationException(errMsg, fault);
                    }
                }

                throw;
            }
        }
 public OrganizationResponseCollection ExecuteTransaction(OrganizationRequestCollection requests, bool?returnResponses)
 {
     return(Execute <ExecuteTransactionResponse>(
                new ExecuteTransactionRequest()
     {
         Requests = requests,
         ReturnResponses = returnResponses
     }).Responses);
 }
Exemplo n.º 15
0
        public ExecuteTransactionResponse ExecuteTransactionRequests(OrganizationRequestCollection collectionRequests, bool returnResponses = true)
        {
            var request = new ExecuteTransactionRequest
            {
                Requests        = collectionRequests,
                ReturnResponses = returnResponses
            };

            return((ExecuteTransactionResponse)OrganizationService.Execute(request));
        }
Exemplo n.º 16
0
        public BulkResponse Read(IOrganizationService service, Dictionary <string, QueryExpression> queriesToBeProcessed)
        {
            OrganizationRequestCollection orgReqs  = GetOrgRequestsForRetrieveMultiple(queriesToBeProcessed);
            ExecuteMultipleResponse       response = ExecuteMultiple(service, orgReqs);


            BulkResponse bulkWriteResponse = ReadExecuteMultipleResponse(response, queriesToBeProcessed.Keys.ToList());

            return(bulkWriteResponse);
        }
Exemplo n.º 17
0
        private void ExecuteMultipleRequests(List <OrganizationRequest> requests)
        {
            WorkAsync(new WorkAsyncInfo
            {
                Message = "Creating entity records",
                Work    = (worker, args) =>
                {
                    var responses = new ExecuteMultipleResponseItemCollection();
                    var lists     = SplitList(requests);
                    var count     = 0;
                    foreach (var list in lists)
                    {
                        var collection = new OrganizationRequestCollection();
                        collection.AddRange(list);
                        var req = new ExecuteMultipleRequest
                        {
                            Requests = collection,
                            Settings = new ExecuteMultipleSettings {
                                ContinueOnError = true, ReturnResponses = false
                            }
                        };
                        count++;
                        var response = (ExecuteMultipleResponse)Service.Execute(req);
                        SendMessageToStatusBar?.Invoke(this, new StatusBarMessageEventArgs(count / requests.Count, $"{count}/{requests.Count} records created"));
                        responses.AddRange(response.Responses);
                    }

                    args.Result = responses;
                },
                PostWorkCallBack = (args) =>
                {
                    if (args.Error != null)
                    {
                        MessageBox.Show($"Something bad happened. Error message:\n{args.Error}", @"Error", MessageBoxButtons.OK, MessageBoxIcon.Error);
                        return;
                    }
                    var result = (ExecuteMultipleResponseItemCollection)args.Result;
                    if (result.Count == 0)
                    {
                        MessageBox.Show($"{requests.Count} records successfully created");
                    }
                    else
                    {
                        var createdCount = requests.Count - result.Count;
                        MessageBox.Show($"{createdCount}/{requests.Count} records created. See error log for details.");

                        foreach (var response in result)
                        {
                            LogError(response.Fault.Message);
                        }
                    }
                },
                IsCancelable = true,
            });
        }
        public void ExecuteMultiple()
        {
            testOrgService.ExecutionResponse = new ExecuteMultipleResponse();
            OrganizationRequestCollection orgRequests = new OrganizationRequestCollection();

            ExecuteMultipleResponse actual = null;

            FluentActions.Invoking(() => actual = testOrgService.ExecuteMultiple(orgRequests))
            .Should()
            .NotThrow();
        }
Exemplo n.º 19
0
        private static void DeployWebResource(DTE dte, CrmServiceClient crmServiceClient, string crmUrl, string fullFileName, string fileName, Guid webResourceId)
        {
            var requests = new OrganizationRequestCollection();

            var webResource = new Entity("webresource")
            {
                Id = webResourceId
            };

            webResource["content"] = Convert.ToBase64String(File.ReadAllBytes(fullFileName));
            var request = new UpdateRequest {
                Target = webResource
            };

            requests.Add(request);

            var publishXml = $"<importexportxml><webresources><webresource>{webResource.Id}</webresource></webresources></importexportxml>";
            var pubRequest = new PublishXmlRequest {
                ParameterXml = publishXml
            };

            requests.Add(pubRequest);

            var multipleRequest = new ExecuteMultipleRequest
            {
                Requests = requests,
                Settings = new ExecuteMultipleSettings
                {
                    ContinueOnError = false,
                    ReturnResponses = true
                }
            };

            UtilityPackage.SetDTEStatusBar(dte, $"[{crmUrl}] Updating & Publishing WebResource");
            var multipleResponse = (ExecuteMultipleResponse)crmServiceClient.Execute(multipleRequest);

            foreach (var response in multipleResponse.Responses)
            {
                if (response.Fault == null)
                {
                    continue;
                }
                UtilityPackage.SetDTEStatusBar(dte, $"[{crmUrl}] Deploy WebResource failed");
                return;
            }
            var webResourceName = string.Empty;
            var selected        = DevKitSetting.SelectedWebResources.Where(x => x.FullFileName == fullFileName).FirstOrDefault();

            if (selected != null)
            {
                webResourceName = selected.WebResourceName;
            }
            UtilityPackage.SetDTEStatusBar(dte, $"Deployed: [{fileName}] to [{webResourceName}]");
        }
Exemplo n.º 20
0
        static void Main()
        {
            var connectionString = "AuthType=Office365;[email protected]; Password=;Url=https://.crm6.dynamics.com";

            var crmSvc = new CrmServiceClient(connectionString);

            var settings = new ImportSettings();



            using (var serviceProxy = crmSvc.OrganizationServiceProxy)
            {
                //Create request collection
                var request = new OrganizationRequestCollection()
                {
                    new CreateRequest
                    {
                        Target = new Entity("account")
                        {
                            ["name"] = "Packt Account"
                        }
                    },
                    new CreateRequest
                    {
                        Target = new Entity("contact")
                        {
                            ["firstname"] = "Packt",
                            ["lastname"]  = "Contact"
                        }
                    }
                };

                //Create Transaction and pass previously created request collection
                var requestToCreateRecords = new ExecuteMultipleRequest()
                {
                    // Create an empty organization request collection.
                    Requests = request,
                    Settings = new ExecuteMultipleSettings()
                    {
                        ContinueOnError = false,
                        ReturnResponses = true
                    }
                };

                //Execute requests within the transaction
                var responseForCreateRecords = (ExecuteMultipleResponse)serviceProxy.Execute(requestToCreateRecords);

                // Display the results of each response.
                foreach (var responseItem in responseForCreateRecords.Responses)
                {
                    Console.WriteLine("Created record with GUID {0}", responseItem.Response.Results["id"].ToString());
                }
            }
        }
        private static OrganizationRequestCollection ToOrganizationRequestCollection(IEnumerable <OrganizationRequest> requests)
        {
            var collection = new OrganizationRequestCollection();

            foreach (var request in requests)
            {
                collection.Add(request);
            }

            return(collection);
        }
Exemplo n.º 22
0
        public ExecuteMultipleResponse ExecuteMultipleRequests(OrganizationRequestCollection collectionRequests, bool continueOnError = true, bool returnResponses = true)
        {
            var request = new ExecuteMultipleRequest();

            request.Requests = collectionRequests;
            request.Settings = new ExecuteMultipleSettings
            {
                ContinueOnError = continueOnError,
                ReturnResponses = returnResponses
            };
            return((ExecuteMultipleResponse)OrganizationService.Execute(request));
        }
Exemplo n.º 23
0
        public BulkResponse Write(IOrganizationService service, Dictionary <string, Entity> recordsToBeProcessed, Operation operation)
        {
            OrganizationRequestCollection orgReqs = GetOrgRequestsForCreateOrUpdate(recordsToBeProcessed, operation);

            ExecuteMultipleResponse response = ExecuteMultiple(service, orgReqs);



            BulkResponse bulkWriteResponse = ReadExecuteMultipleResponse(response, recordsToBeProcessed.Keys.ToList());

            return(bulkWriteResponse);
        }
        /// <summary>
        /// Converts a collection of type <see cref="OrganizationRequest"/> to a single <see cref="ExecuteMultipleRequest"/> instance
        /// </summary>
        /// <typeparam name="T">The typeof<see cref="OrganizationRequest"/></typeparam>
        /// <param name="requests">The collection of requests representing the batch</param>
        /// <param name="batchSettings">The desired settings</param>
        /// <returns>A single <see cref="ExecuteMultipleRequest"/> instance</returns>
        public static ExecuteMultipleRequest AsBatch <T>(this IEnumerable <T> requests, ExecuteMultipleSettings batchSettings)
            where T : OrganizationRequest
        {
            var batch = new OrganizationRequestCollection();

            batch.AddRange(requests);

            return(new ExecuteMultipleRequest()
            {
                Requests = batch,
                Settings = batchSettings
            });
        }
Exemplo n.º 25
0
        public ExecuteMultipleResponse ExecuteMultiple(OrganizationRequestCollection requests, bool ContinueOnError, bool ReturnResponses)
        {
            ExecuteMultipleRequest requestWithResults = new ExecuteMultipleRequest()
            {
                Settings = new ExecuteMultipleSettings()
                {
                    ContinueOnError = ContinueOnError,
                    ReturnResponses = ReturnResponses
                },
                Requests = requests
            };

            return((ExecuteMultipleResponse)ServiceProxy.Execute(requestWithResults));
        }
Exemplo n.º 26
0
        private OrganizationRequestCollection GetOrgRequestsForRetrieveMultiple(Dictionary <string, QueryExpression> queriesToBeProcessed)
        {
            OrganizationRequestCollection orgReqs = new OrganizationRequestCollection();

            foreach (var queryRecord in queriesToBeProcessed)
            {
                RetrieveMultipleRequest retrieveMultipleRequest = new RetrieveMultipleRequest {
                    Query = queryRecord.Value
                };
                orgReqs.Add(retrieveMultipleRequest);
            }

            return(orgReqs);
        }
        private static OrganizationRequestCollection CreateUpdateRequests(List <Entity> webResources)
        {
            OrganizationRequestCollection requests = new OrganizationRequestCollection();

            foreach (Entity webResource in webResources)
            {
                UpdateRequest request = new UpdateRequest {
                    Target = webResource
                };
                requests.Add(request);
            }

            return(requests);
        }
Exemplo n.º 28
0
        public static void executeMultipleWithRequests(OrganizationRequestCollection requests, string logFileName, IOrganizationService service)
        {
            ExecuteMultipleRequest multipleRequest = new ExecuteMultipleRequest()
            {
                Settings = new ExecuteMultipleSettings()
                {
                    ContinueOnError = true,
                    ReturnResponses = true
                },
                Requests = new OrganizationRequestCollection()
            };

            multipleRequest.Requests = requests;

            //This is how to get responses
            ExecuteMultipleResponse executeResponse = (ExecuteMultipleResponse)service.Execute(multipleRequest);

            if (executeResponse.Results != null)
            {
                //Loop through responses
                foreach (ExecuteMultipleResponseItem responseItem in executeResponse.Responses)
                {
                    if (responseItem.Response != null)
                    {
                        //Awesome, command completed as expected
                        //success++;
                    }
                    else if (responseItem.Fault != null)
                    {
                        OrganizationRequest req = multipleRequest.Requests[responseItem.RequestIndex];
                        if (req.Parameters.Contains("Target"))
                        {
                            Entity entity = (Entity)req.Parameters["Target"];

                            GeneralHelper.WriteToText(entity.Id + ";" + req.RequestName + "-" + responseItem.Fault.Message, @"C:\sahibinden\migration_" + logFileName + "_" + DateTime.Now.ToShortDateString() + ".txt");
                        }
                        else
                        {
                            GeneralHelper.WriteToText(((AssociateEntitiesRequest)req).Moniker1.Id + ";" + req.RequestName + "-" + responseItem.Fault.Message, @"C:\sahibinden\migration_" + logFileName + "_" + DateTime.Now.ToShortDateString() + ".txt");
                        }
                        //Uh oh, error
                        //error++;
                    }
                    else
                    {
                        //Error reporting error;
                    }
                }
            }
        }
 private void LogResponses(ExecuteMultipleResponseItemCollection responses, OrganizationRequestCollection requests)
 {
     foreach (var response in responses)
     {
         if (response.Fault == null)
         {
             logger.LogInformation(requests[response.RequestIndex].FormatSuccessMessage());
         }
         else
         {
             logger.LogError(FormatFaultException(requests[response.RequestIndex], response.Fault));
         }
     }
 }
        /// <summary>
        /// Data is assumed to be there, so use TryDelete
        /// </summary>
        /// <param name="service"></param>
        protected virtual void CleanupDataPostInitialization(IOrganizationService service)
        {
            var totalWatch = new Stopwatch();

            totalWatch.Start();

            var requests = new OrganizationRequestCollection();

            foreach (var id in EntityIds.Where(e => e.Key != "businessunit").SelectMany(entityType => entityType.Value))
            {
                requests.Add(new DeleteRequest {
                    Target = Entities[id]
                });
            }

            if (requests.Any())
            {
                var response = (ExecuteMultipleResponse)service.Execute(
                    new ExecuteMultipleRequest()
                {
                    Settings = new ExecuteMultipleSettings()
                    {
                        ContinueOnError = true,
                        ReturnResponses = false
                    },
                    Requests = requests,
                });

                ThrowExceptionForFaults(response, requests);

                totalWatch.Stop();
                Debug.WriteLine("Total Time to delete {0} entities of types {1} (ms): {2}",
                                requests.Count,
                                String.Join(", ", requests.Select(s => ((DeleteRequest)s).Target.LogicalName).Distinct()),
                                totalWatch.ElapsedMilliseconds);
            }

            List <Guid> businessIds;

            if (!EntityIds.TryGetValue("businessunit", out businessIds))
            {
                return;
            }

            foreach (var id in businessIds)
            {
                service.DeleteBusinessUnit(id);
            }
        }
Exemplo n.º 31
0
        private void PerformUpdates(IOrganizationService service, OrganizationRequestCollection requests)
        {
            if (SupportsExecuteMultipleRequest)
            {
                var response = (ExecuteMultipleResponse)service.Execute(
                    new ExecuteMultipleRequest
                {
                    Settings = new ExecuteMultipleSettings
                    {
                        ContinueOnError = false,
                        ReturnResponses = false
                    },
                    Requests = requests
                });

                if (response.IsFaulted)
                {
                    var fault = response.Responses.First().Fault;
                    while (fault.InnerFault != null)
                    {
                        fault = fault.InnerFault;
                    }

                    var errorDetails = string.Empty;
                    if (fault.ErrorDetails.ContainsKey("CallStack"))
                    {
                        errorDetails = Environment.NewLine + fault.ErrorDetails["CallStack"];
                    }

                    errorDetails += string.Format("{0}{0}TRACE TEXT:{0}{1}", Environment.NewLine, fault.TraceText);

                    throw new Exception(fault.Message + errorDetails);
                }
            }
            else
            {
                foreach (var request in requests)
                {
                    service.Update(((UpdateRequest)request).Target);
                }
            }
        }
        private void UpdateWebResources(List<WebResourceItem> items)
        {
            //TODO: Handle CRM 2011 w/o execute multiple
            ExecuteMultipleRequest emRequest = new ExecuteMultipleRequest
            {
                Requests = new OrganizationRequestCollection(),
                Settings = new ExecuteMultipleSettings
                {
                    ContinueOnError = false,
                    ReturnResponses = true
                }
            };

            OrganizationRequestCollection requests = new OrganizationRequestCollection();

            string projectName = ((ComboBoxItem)Projects.SelectedItem).Content.ToString();
            Project project = GetProjectByName(projectName);
            if (project == null)
                return;

            string publishXml = "<importexportxml><webresources>";
            foreach (var webResourceItem in items)
            {
                Entity webResource = new Entity("webresource") { Id = webResourceItem.WebResourceId };

                string filePath = Path.GetDirectoryName(project.FullName) + webResourceItem.BoundFile.Replace("/", "\\");
                if (!File.Exists(filePath)) continue;

                string content = File.ReadAllText(filePath);
                webResource["content"] = EncodeString(content);

                UpdateRequest request = new UpdateRequest { Target = webResource };
                requests.Add(request);

                publishXml += "<webresource>{" + webResource.Id + "}</webresource>";
            }
            publishXml += "</webresources></importexportxml>";

            PublishXmlRequest pubRequest = new PublishXmlRequest { ParameterXml = publishXml };
            requests.Add(pubRequest);
            emRequest.Requests = requests;

            string connString = ((CrmConn)Connections.SelectedItem).ConnectionString;
            CrmConnection connection = CrmConnection.Parse(connString);
            using (OrganizationService orgService = new OrganizationService(connection))
            {
                DisplayStatusMessage("Updating & publishing web resources");
                ExecuteMultipleResponse emResponse = (ExecuteMultipleResponse)orgService.Execute(emRequest);

                foreach (var responseItem in emResponse.Responses)
                {
                    if (responseItem.Fault == null) continue;

                    //Some error - do something
                    //TODO: handle error
                    DisplayStatusMessage(String.Empty);
                    return;
                }

                MessageBox.Show("Published");//change to status message that goes away itself
                DisplayStatusMessage(String.Empty);
            }
        }
        private void UpdateAndPublishMultiple(CrmConnection connection, ProjectItem projectItem, Guid webResourceId)
        {
            try
            {
                ExecuteMultipleRequest emRequest = new ExecuteMultipleRequest
                {
                    Requests = new OrganizationRequestCollection(),
                    Settings = new ExecuteMultipleSettings
                    {
                        ContinueOnError = false,
                        ReturnResponses = true
                    }
                };

                OrganizationRequestCollection requests = new OrganizationRequestCollection();

                string publishXml = "<importexportxml><webresources>";
                Entity webResource = new Entity("webresource") { Id = webResourceId };

                string extension = Path.GetExtension(projectItem.FileNames[1]);
                string content = extension != null && (extension.ToUpper() != ".TS")
                    ? File.ReadAllText(projectItem.FileNames[1])
                    : File.ReadAllText(Path.ChangeExtension(projectItem.FileNames[1], ".js"));
                webResource["content"] = EncodeString(content);

                UpdateRequest request = new UpdateRequest { Target = webResource };
                requests.Add(request);

                publishXml += "<webresource>{" + webResource.Id + "}</webresource>";
                publishXml += "</webresources></importexportxml>";

                PublishXmlRequest pubRequest = new PublishXmlRequest { ParameterXml = publishXml };
                requests.Add(pubRequest);
                emRequest.Requests = requests;

                using (OrganizationService orgService = new OrganizationService(connection))
                {
                    _dte.StatusBar.Text = "Updating & publishing web resource...";
                    _dte.StatusBar.Animate(true, vsStatusAnimation.vsStatusAnimationDeploy);

                    ExecuteMultipleResponse emResponse = (ExecuteMultipleResponse)orgService.Execute(emRequest);

                    bool wasError = false;
                    foreach (var responseItem in emResponse.Responses)
                    {
                        if (responseItem.Fault == null) continue;

                        _logger.WriteToOutputWindow(
                            "Error Updating And Publishing Web Resources To CRM: " + responseItem.Fault.Message + Environment.NewLine + responseItem.Fault.TraceText,
                            Logger.MessageType.Error);
                        wasError = true;
                    }

                    if (wasError)
                        MessageBox.Show("Error Updating And Publishing Web Resources To CRM. See the Output Window for additional details.");
                    else
                        _logger.WriteToOutputWindow("Updated And Published Web Resource", Logger.MessageType.Info);
                }
            }
            catch (FaultException<OrganizationServiceFault> crmEx)
            {
                _logger.WriteToOutputWindow("Error Updating And Publishing Web Resource To CRM: " + crmEx.Message + Environment.NewLine + crmEx.StackTrace, Logger.MessageType.Error);
            }
            catch (Exception ex)
            {
                _logger.WriteToOutputWindow("Error Updating And Publishing Web Resource To CRM: " + ex.Message + Environment.NewLine + ex.StackTrace, Logger.MessageType.Error);
            }

            _dte.StatusBar.Clear();
            _dte.StatusBar.Animate(false, vsStatusAnimation.vsStatusAnimationDeploy);
        }
        private void ThrowExceptionForFaults(ExecuteMultipleResponse response, OrganizationRequestCollection requests)
        {
            if (!response.IsFaulted) { return; }

            var exceptions = new List<Exception>();
            foreach (var fault in response.Responses.Select(r => new { r.Fault, r.RequestIndex }))
            {
                var localFault = fault.Fault;
                var target = ((DeleteRequest)requests[fault.RequestIndex]).Target;
                if (localFault.ErrorCode == CrmErrorCodes.EntityToDeleteDoesNotExist)
                {
                    Debug.WriteLine("Attempted to Delete Entity that doesn't exist {0} ({1}) - {2}", target.LogicalName, target.Id, localFault.Message);
                    continue;
                }

                while (localFault.InnerFault != null)
                {
                    localFault = localFault.InnerFault;
                }

                var errorDetails = String.Empty;
                if (localFault.ErrorDetails.ContainsKey("CallStack"))
                {
                    errorDetails = Environment.NewLine + localFault.ErrorDetails["CallStack"];
                }
                exceptions.Add(new Exception(localFault.Message + errorDetails));

                Debug.WriteLine("Error Deleting {0} ({1}) - {2}{3}", target.LogicalName, target.Id, localFault.Message, errorDetails);
            }

            if (exceptions.Any())
            {
                throw new AggregateException("One or more faults occured", exceptions);
            }
        }
        /// <summary>
        /// Data is assumed to be there, so use TryDelete
        /// </summary>
        /// <param name="service"></param>
        protected virtual void CleanupDataPostInitialization(IOrganizationService service)
        {
            var totalWatch = new Stopwatch();
            totalWatch.Start();

            var requests = new OrganizationRequestCollection();

            foreach (var id in EntityIds.Where(e => e.Key != "businessunit").SelectMany(entityType => entityType.Value))
            {
                requests.Add(new DeleteRequest { Target = Entities[id] });
            }

            if (requests.Any())
            {
                var response = (ExecuteMultipleResponse)service.Execute(
                    new ExecuteMultipleRequest()
                    {
                        Settings = new ExecuteMultipleSettings()
                        {
                            ContinueOnError = true,
                            ReturnResponses = false
                        },
                        Requests = requests,
                    });

                ThrowExceptionForFaults(response, requests);

                totalWatch.Stop();
                Debug.WriteLine("Total Time to delete {0} entities of types {1} (ms): {2}",
                    requests.Count,
                    String.Join(", ", requests.Select(s => ((DeleteRequest)s).Target.LogicalName).Distinct()),
                    totalWatch.ElapsedMilliseconds);
            }

            List<Guid> businessIds;
            if (!EntityIds.TryGetValue("businessunit", out businessIds))
            {
                return;
            }

            foreach (var id in businessIds)
            {
                service.DeleteBusinessUnit(id);
            }
        }
Exemplo n.º 36
0
        private void PerformUpdates(IOrganizationService service, OrganizationRequestCollection requests)
        {
            if (SupportsExecuteMultipleRequest)
            {
                var response = (ExecuteMultipleResponse)service.Execute(
                    new ExecuteMultipleRequest
                    {
                        Settings = new ExecuteMultipleSettings
                        {
                            ContinueOnError = false,
                            ReturnResponses = false
                        },
                        Requests = requests
                    });

                if (response.IsFaulted)
                {
                    var fault = response.Responses.First().Fault;
                    while (fault.InnerFault != null)
                    {
                        fault = fault.InnerFault;
                    }

                    var errorDetails = string.Empty;
                    if (fault.ErrorDetails.ContainsKey("CallStack"))
                    {
                        errorDetails = Environment.NewLine + fault.ErrorDetails["CallStack"];
                    }

                    errorDetails += string.Format("{0}{0}TRACE TEXT:{0}{1}", Environment.NewLine, fault.TraceText);

                    throw new Exception(fault.Message + errorDetails);
                }
            }
            else
            {
                foreach (var request in requests)
                {
                    service.Save(((UpdateRequest)request).Target);
                }
            }
        }
Exemplo n.º 37
0
        private void CopyData(IOrganizationService service, AttributeMetadata from, AttributeMetadata to, Action actions)
        {
            if (!MigrateData) { return; }

            var total = GetRecordCount(service, from);
            var count = 0;

            Trace("Copying data from {0} to {1}", from.LogicalName, to.LogicalName);
            var requests = new OrganizationRequestCollection();
            // Grab from and to, and only update if not equal.  This is to speed things up if it has failed part way through
            foreach (var entity in service.GetAllEntities<Entity>(new QueryExpression(from.EntityLogicalName) { ColumnSet = new ColumnSet(from.LogicalName, to.LogicalName) }))
            {
                if (count++ % 100 == 0 || count == total)
                {
                    if (requests.Any())
                    {
                        PerformUpdates(service, requests);
                    }

                    Trace("Copying {0} / {1}", count, total);
                    requests.Clear();
                }

                var value = entity.GetAttributeValue<Object>(from.LogicalName);
                if (actions.HasFlag(Action.ChangeType) && from.GetType() != to.GetType())
                {
                    value = CopyValue(from, to, value);
                }
                var toValue = entity.GetAttributeValue<Object>(to.LogicalName);
                
                if (value != null)
                {
                    if (value.Equals(toValue)) continue;

                    entity.Attributes[to.LogicalName] = value;
                    requests.Add(new UpdateRequest { Target = entity });
                }
                else if (toValue != null)
                {
                    entity.Attributes[to.LogicalName] = null;
                    requests.Add(new UpdateRequest { Target = entity });
                }
            }

            if (requests.Any())
            {
                PerformUpdates(service, requests);
            }

            Trace("Data Migration Complete", count, total);
        }