FrameworkTemplate/SolutionTemplate/Scripts/DeploymentFunctions.ps1
|
# # _DeploymentFunctions.ps1 # function Wait-BulkDeleteOperation ( [Microsoft.Xrm.Sdk.Query.QueryByAttribute] $bulkQuery, [Microsoft.Xrm.Sdk.EntityCollection] $entityCollection, [Int] $operationEndedStatus, [System.Object] $Conn ) { $createdBulkDeleteOperation = $null $ARBITRARY_MAX_POLLING_TIME = 180 $minutesTicker = $ARBITRARY_MAX_POLLING_TIME while ($minutesTicker -gt 0) { #Make sure the async operation was retrieved. if ($entityCollection.Entities.Count -gt 0) { #Grab the one bulk operation that has been created. $createdBulkDeleteOperation = $entityCollection.Entities[0] #Check the operation's state. #NOTE: If a recurrence for the BulkDeleteOperation was #specified, the state of the operation will be Suspended, #not Completed, since the operation will run again in the #future. if ($createdBulkDeleteOperation.Attributes["statecode"].Value -ne $operationEndedStatus) { #The operation has not yet completed. Wait a second for #the status to change. Start-Sleep -Seconds 30 $minutesTicker = $minutesTicker - .5 #Retrieve a fresh version of the bulk delete operation. $entityCollection = $Conn.RetrieveMultiple($bulkQuery) } else { #Stop polling as the operation's state is now complete. $minutesTicker = 0 Write-Host "The BulkDeleteOperation record has been retrieved." } } else { #Wait a second for async operation to activate. Start-Sleep -Seconds 1 $minutesTicker-- #Retrieve the entity again. $entityCollection = $Conn.RetrieveMultiple($bulkQuery); } } return $createdBulkDeleteOperation } |