/// <summary> /// Inspect and display information about the created BulkDeleteOperation. /// </summary> /// <param name="createdBulkDeleteOperation"> /// the BulkDeleteOperation to inspect. /// </param> /// <param name="bulkOperationEnded"> /// the statecode that will tell us if the BulkDeleteOperation is ended. /// </param> /// <param name="bulkOperationSuccess"> /// the statuscode that will tell us if the BulkDeleteOperation was successful. /// </param> /// <param name="useRecurrence"> /// whether or not the BulkDeleteOperation is a recurring operation. /// </param> private void InspectBulkDeleteOperation( BulkDeleteOperation createdBulkDeleteOperation, BulkDeleteOperationState bulkOperationEnded, bulkdeleteoperation_statuscode bulkOperationSuccess, bool useRecurrence) { // Validate that the operation was completed. if (createdBulkDeleteOperation.StateCode != bulkOperationEnded) { // This will happen if it took longer than the polling time allowed // for this operation to complete. Console.WriteLine(" Completion of the Bulk Delete took longer\n" + " than the polling time allotted."); } else if (createdBulkDeleteOperation.StatusCode.Value != (int)bulkOperationSuccess) { Console.WriteLine(" The Bulk Delete operation failed."); } else if (!useRecurrence) { // Check for the number of successful deletes. var successfulDeletes = createdBulkDeleteOperation.SuccessCount ?? 0; Console.WriteLine(" {0} records were successfully deleted", successfulDeletes); // Check for any failures that may have occurred during the bulk // delete operation. if (createdBulkDeleteOperation.FailureCount > 0) { Console.WriteLine(" {0} records failed to be deleted:", createdBulkDeleteOperation.FailureCount); // Query for all the failures. var failureQuery = new QueryByAttribute(); failureQuery.ColumnSet = new ColumnSet(true); failureQuery.EntityName = BulkDeleteFailure.EntityLogicalName; failureQuery.Attributes.Add("bulkdeleteoperationid"); var bulkDeleteOperationId = createdBulkDeleteOperation.BulkDeleteOperationId ?? Guid.Empty; failureQuery.Values.Add(bulkDeleteOperationId); // Retrieve the bulkdeletefailure objects. EntityCollection entityCollection = _serviceProxy.RetrieveMultiple( failureQuery); // Examine each failure for information regarding the failure. foreach (BulkDeleteFailure failureOperation in entityCollection.Entities) { // Process failure information. Console.WriteLine(String.Format( " {0}, {1}", failureOperation.RegardingObjectId.Name, failureOperation.RegardingObjectId.Id)); } } } else { // NOTE: If recurrence is used, we cannot reliably retrieve data // about the records that were deleted, since a sub-BulkDeleteOperation // is created by Microsoft Dynamics CRM that does not have any fields tying it back to the // Asynchronous operation or the BulkDeleteOperation. This makes it // unreliable to know which subprocess to retrieve. Console.WriteLine(" The recurring Bulk Delete Operation was created successfully."); } }