/// <summary> /// Query records and run specified workflow for each record /// </summary> /// <param name="q"></param> /// <param name="workflowID"></param> /// <param name="batchSize"></param> /// <returns></returns> public CTCRunMultipleResponse BulkRunWorkflow(QueryExpression q, Guid workflowID, int batchSize = 100, CTCBulkTransactionMode transactionMode = CTCBulkTransactionMode.None) { CTCRunMultipleResponse finalResults = new CTCRunMultipleResponse(); finalResults.ResultItems = new List <CTCRunMultipleResponseItem>(); QueryToAction(q, (entityList) => { var requests = new List <OrganizationRequest>(); foreach (var entity in entityList.Entities) { requests.Add(new ExecuteWorkflowRequest() { WorkflowId = workflowID, EntityId = entity.Id }); } var results = RunMultipleRequests(requests, batchSize: batchSize, transactionMode: transactionMode); finalResults.ResultItems.AddRange(results.ResultItems); finalResults.StoppedEarly = results.StoppedEarly; }); return(finalResults); }
/// <summary> /// Query records and set state /// </summary> /// <param name="q"></param> /// <param name="state"></param> /// <param name="status"></param> /// <param name="batchSize"></param> /// <returns></returns> public CTCRunMultipleResponse BulkSetState(QueryExpression q, OptionSetValue state, OptionSetValue status, int batchSize = 100, CTCBulkTransactionMode transactionMode = CTCBulkTransactionMode.None) { CTCRunMultipleResponse finalResults = new CTCRunMultipleResponse(); finalResults.ResultItems = new List <CTCRunMultipleResponseItem>(); QueryToAction(q, (entityList) => { var requests = new List <OrganizationRequest>(); foreach (var entity in entityList.Entities) { requests.Add(new SetStateRequest() { EntityMoniker = entity.ToEntityReference(), State = state, Status = status }); } var results = RunMultipleRequests(requests, batchSize: batchSize, transactionMode: transactionMode); finalResults.ResultItems.AddRange(results.ResultItems); finalResults.StoppedEarly = results.StoppedEarly; }); return(finalResults); }
/// <summary> /// Query records, update with data provided in UpdateEntity /// </summary> /// <param name="q"></param> /// <param name="updateEntity"></param> /// <param name="batchSize"></param> /// <returns></returns> public CTCRunMultipleResponse BulkUpdate(QueryExpression q, Entity updateEntity, int batchSize = 500, CTCBulkTransactionMode transactionMode = CTCBulkTransactionMode.None) { CTCRunMultipleResponse finalResults = new CTCRunMultipleResponse(); finalResults.ResultItems = new List <CTCRunMultipleResponseItem>(); QueryToAction(q, (entityList) => { List <Entity> entitiesToUpdate = new List <Entity>(); foreach (var entity in entityList.Entities) { Entity updatedEntity = new Entity(entity.LogicalName); updatedEntity.Id = entity.Id; updatedEntity.Attributes.AddRange(updateEntity.Attributes); entitiesToUpdate.Add(updatedEntity); } var results = BulkUpdate(entitiesToUpdate, batchSize: batchSize, transactionMode: transactionMode); finalResults.ResultItems.AddRange(results.ResultItems); finalResults.StoppedEarly = results.StoppedEarly; }); return(finalResults); }
/// <summary> /// Bulk insert entities /// </summary> /// <param name="entityList"></param> /// <param name="batchSize"></param> /// <param name="transactionMode"></param> /// <returns></returns> public CTCRunMultipleResponse BulkInsert(List <Entity> entityList, int batchSize = 500, CTCBulkTransactionMode transactionMode = CTCBulkTransactionMode.None) { var requests = new List <OrganizationRequest>(); foreach (var entity in entityList) { requests.Add(new CreateRequest() { Target = entity }); } var results = RunMultipleRequests(requests, batchSize: batchSize, transactionMode: transactionMode); foreach (var item in results.ResultItems) { var createResp = item.Response as CreateResponse; if (createResp != null) { item.ItemID = createResp.id; } } return(results); }
private static void ExecuteExcessiveBatchSize(CTCBulkTransactionMode transactionMode = CTCBulkTransactionMode.None) { CrmConnection c = new CrmConnection("CRM"); OrganizationService service = new OrganizationService(c); CrmBulkServiceManager mgr = new CrmBulkServiceManager(service); List <OrganizationRequest> requests = new List <OrganizationRequest>(); for (int i = 0; i < 1100; i++) { WhoAmIRequest req = new WhoAmIRequest(); requests.Add(req); } var results = mgr.RunMultipleRequests(requests, batchSize: 1100, transactionMode: transactionMode); }
private static void ExecuteBulkInsertTest(CTCBulkTransactionMode transactionMode = CTCBulkTransactionMode.None) { CrmConnection c = new CrmConnection("CRM"); OrganizationService service = new OrganizationService(c); CrmBulkServiceManager mgr = new CrmBulkServiceManager(service); List <Entity> entityList = new List <Entity>(); for (int i = 0; i < 10; i++) { Entity entity = new Entity("account"); entity["name"] = "account " + DateTime.Now.ToString(); entityList.Add(entity); } var results = mgr.BulkInsert(entityList, transactionMode: transactionMode); }
public CTCRunMultipleResponse BulkDelete(List <EntityReference> entityrefList, int batchSize = 500, CTCBulkTransactionMode transactionMode = CTCBulkTransactionMode.None) { var requests = new List <OrganizationRequest>(); foreach (var entityRef in entityrefList) { requests.Add(new DeleteRequest() { Target = entityRef }); } var results = RunMultipleRequests(requests, batchSize: batchSize, transactionMode: transactionMode); return(results); }
/// <summary> /// Run a workflow for each entity in list /// </summary> /// <param name="entityList"></param> /// <param name="workflowID"></param> /// <param name="batchSize"></param> /// <param name="transactionMode"></param> /// <returns></returns> public CTCRunMultipleResponse BulkRunWorkflow(List <Entity> entityList, Guid workflowID, int batchSize = 100, CTCBulkTransactionMode transactionMode = CTCBulkTransactionMode.None) { var requests = new List <OrganizationRequest>(); foreach (var entity in entityList) { requests.Add(new ExecuteWorkflowRequest() { WorkflowId = workflowID, EntityId = entity.Id }); } var results = RunMultipleRequests(requests, batchSize: batchSize, transactionMode: transactionMode); return(results); }
/// <summary> /// Set state for the list of entity records provided /// </summary> /// <param name="entityList"></param> /// <param name="state"></param> /// <param name="status"></param> /// <param name="batchSize"></param> /// <returns></returns> public CTCRunMultipleResponse BulkSetState(List <Entity> entityList, OptionSetValue state, OptionSetValue status, int batchSize = 100, CTCBulkTransactionMode transactionMode = CTCBulkTransactionMode.None) { var requests = new List <OrganizationRequest>(); foreach (var entity in entityList) { requests.Add(new SetStateRequest() { EntityMoniker = entity.ToEntityReference(), State = state, Status = status }); } var results = RunMultipleRequests(requests, batchSize: batchSize, transactionMode: transactionMode); return(results); }
/// <summary> /// Worker method to run multiple requests used by all helper methods but can be used standalone to invoke any series of CRM Organization Requests /// </summary> /// <param name="requests"></param> /// <param name="batchSize"></param> /// <param name="returnResponses"></param> /// <param name="continueOnError"></param> /// <param name="retryCount"></param> /// <param name="retrySeconds"></param> /// <param name="transactionMode"></param> /// <returns></returns> public CTCRunMultipleResponse RunMultipleRequests(List <OrganizationRequest> requests, int batchSize = 100, bool returnResponses = true, bool continueOnError = true, int retryCount = 3, int retrySeconds = 10, CTCBulkTransactionMode transactionMode = CTCBulkTransactionMode.None) { CTCRunMultipleState state = new CTCRunMultipleState(); state.RequestIndex = 0; state.Results = new CTCRunMultipleResponse(); state.Results.ResultItems = new List <CTCRunMultipleResponseItem>(); state.RetryCount = retryCount; state.RetryDelaySeconds = retrySeconds; state.BatchSize = batchSize; state.ContinueOnError = continueOnError; state.ReturnResponses = true; state.TransactionMode = transactionMode; state.Requests = requests; return(RunMultipleRequestsInternal(state)); }
/// <summary> /// Bulk update the list of entities provided /// </summary> /// <param name="entityList"></param> /// <param name="batchSize"></param> /// <param name="useUpsert"></param> /// <param name="transactionMode"></param> /// <returns></returns> public CTCRunMultipleResponse BulkUpdate(List <Entity> entityList, int batchSize = 500, bool useUpsert = false, CTCBulkTransactionMode transactionMode = CTCBulkTransactionMode.None) { var requests = new List <OrganizationRequest>(); foreach (var entity in entityList) { if (useUpsert) { requests.Add(new UpsertRequest() { Target = entity }); } else { requests.Add(new UpdateRequest() { Target = entity }); } } var results = RunMultipleRequests(requests, batchSize: batchSize, transactionMode: transactionMode); foreach (var item in results.ResultItems) { if (item.Request is UpdateRequest) { var updateReq = item.Request as UpdateRequest; item.ItemID = updateReq.Target.Id; } else if (item.Request is UpsertRequest) { var upsertRequest = item.Request as UpsertRequest; var upsertResponse = item.Response as UpsertResponse; item.ItemID = upsertResponse.Target.Id; } } return(results); }