public IList <ItemInformation> ExportItems(IEnumerable <string> itemIds) { ExportItemsType itemsType = new ExportItemsType(); itemsType.ItemIds = (from id in itemIds select new ItemIdType { Id = id }).ToArray <ItemIdType>(); List <ItemInformation> items = new List <ItemInformation>(); this.CallEwsWithRetries((LID)0U, () => this.binding.ExportItems(itemsType), delegate(ResponseMessageType responseMessage, int messageIndex) { ExportItemsResponseMessageType exportItemsResponseMessageType = responseMessage as ExportItemsResponseMessageType; if (exportItemsResponseMessageType != null && exportItemsResponseMessageType.ResponseClass == ResponseClassType.Success && exportItemsResponseMessageType.Data != null) { items.Add(new ItemInformation { Id = exportItemsResponseMessageType.ItemId.Id, Data = exportItemsResponseMessageType.Data, Error = null }); if (this.IsTraceEnabled(TraceType.DebugTrace)) { this.Tracer.TraceDebug(0L, "Items exported successfully"); } } return(false); }, null); return(items); }
/// <summary> /// Exports items from a specified folder. /// </summary> /// <param name="exportItemsRequest">Specify the request for ExportItems operation.</param> /// <returns>The response to this operation request.</returns> public ExportItemsResponseType ExportItems(ExportItemsType exportItemsRequest) { if (exportItemsRequest == null) { throw new ArgumentException("The exportItems should not be null."); } // Send the request and get the response. ExportItemsResponseType response = this.exchangeServiceBinding.ExportItems(exportItemsRequest); this.VerifyTransportType(); this.VerifySoapVersion(); this.VerifyExportItemsResponseType(response, this.exchangeServiceBinding.IsSchemaValidated); return(response); }
public void MSOXWSBTRF_S01_TC04_ExportItems_Fail() { #region Get the exported items. // In the initialize step, multiple items in the specified parent folder have been created. // If that step executes successfully, the count of CreatedItemId list should be equal to the count of OriginalFolderId list. Site.Assert.AreEqual <int>( this.CreatedItemId.Count, this.OriginalFolderId.Count, string.Format( "The exportedItemIds array should contain {0} item ids, actually, it contains {1}.", this.OriginalFolderId.Count, this.CreatedItemId.Count)); #endregion #region Call ExportItems operation to export the items from the server. // Initialize three ExportItemsType instances. ExportItemsType exportItems = new ExportItemsType(); // Initialize ItemIdType instances with three different situations: // 1.The ID attribute of ItemId is empty; // 2.The ID attribute of ItemId is valid and the ChangeKey is invalid; // 3.The ID attribute of ItemId is invalid and the ChangeKey is null. exportItems.ItemIds = new ItemIdType[3] { new ItemIdType { Id = string.Empty, ChangeKey = null }, new ItemIdType { Id = this.CreatedItemId[1].Id, ChangeKey = InvalidChangeKey }, new ItemIdType { Id = InvalidItemId, ChangeKey = null } }; // Call ExportItems operation. ExportItemsResponseType exportItemsResponse = this.BTRFAdapter.ExportItems(exportItems); // Check whether the ExportItems operation is executed successfully. foreach (ExportItemsResponseMessageType responseMessage in exportItemsResponse.ResponseMessages.Items) { Site.Assert.AreEqual <ResponseClassType>( ResponseClassType.Error, responseMessage.ResponseClass, string.Format( @"The ExportItems operation should be unsuccessful. Expected response code: {0}, actual response code: {1}", ResponseClassType.Error, responseMessage.ResponseClass)); } #endregion #region Verify ExportItems fail related requirements. this.VerifyExportItemsErrorResponse(exportItemsResponse); #endregion }
public void MSOXWSBTRF_S01_TC01_ExportAndUploadItems_CreateNew_Success() { #region Prerequisites. // In the initialize step, multiple items in the specified parent folder have been created. // If that step executes successfully, the count of CreatedItemId list should be equal to the count of OriginalFolderId list. Site.Assert.AreEqual <int>( this.CreatedItemId.Count, this.OriginalFolderId.Count, string.Format( "The exportedItemIds array should contain {0} item ids, actually, it contains {1}", this.OriginalFolderId.Count, this.CreatedItemId.Count)); #endregion #region Call ExportItems operation to export the items from the server. // Initialize three ExportItemsType instances. ExportItemsType exportItems = new ExportItemsType(); // Initialize four ItemIdType instances with three different situations to cover the case: // 1. The ChangeKey is not present; // 2. If the ChangeKey attribute of the ItemIdType complex type is present, its value MUST be either valid or NULL. exportItems.ItemIds = new ItemIdType[4] { new ItemIdType { // The ChangeKey is not present. Id = this.CreatedItemId[0].Id, }, new ItemIdType { // The ChangeKey is null. Id = this.CreatedItemId[1].Id, ChangeKey = null }, new ItemIdType { // The ChangeKey is valid. Id = this.CreatedItemId[2].Id, ChangeKey = this.CreatedItemId[2].ChangeKey }, new ItemIdType { // The ChangeKey is not present. Id = this.CreatedItemId[3].Id, } }; // Call ExportItems operation. ExportItemsResponseType exportItemsResponse = this.BTRFAdapter.ExportItems(exportItems); Site.Assert.IsNotNull(exportItemsResponse, "The ExportItems response should not be null."); // Check whether the ExportItems operation is executed successfully. foreach (ExportItemsResponseMessageType responseMessage in exportItemsResponse.ResponseMessages.Items) { Site.Assert.AreEqual <ResponseClassType>( ResponseClassType.Success, responseMessage.ResponseClass, string.Format( @"The ExportItems operation should be successful. Expected response code: {0}, actual response code: {1}", ResponseClassType.Success, responseMessage.ResponseClass)); } // If the operation executes successfully, the count of items in ExportItems response should be equal to the items in ExportItems request. Site.Assert.AreEqual <int>( exportItemsResponse.ResponseMessages.Items.Length, exportItems.ItemIds.Length, string.Format( "The exportItems response should contain {0} items, actually, it contains {1}", exportItems.ItemIds.Length, exportItemsResponse.ResponseMessages.Items.Length)); // Verify ManagementRole part of ExportItems operation this.VerifyManagementRolePart(); #endregion #region Verify the ExportItems response related requirements // Verify the ExportItemsResponseType related requirements. this.VerifyExportItemsSuccessResponse(exportItemsResponse); // If the id in ExportItems request is same with the id in ExportItems response, then MS-OXWSBTRF_R169 and MS-OXWSBTRF_R182 can be captured. bool isSameItemId = false; for (int i = 0; i < exportItemsResponse.ResponseMessages.Items.Length; i++) { Site.Log.Add( LogEntryKind.Debug, "The exported item's id: '{0}' should be same with the created item's id: {1}.", (exportItemsResponse.ResponseMessages.Items[i] as ExportItemsResponseMessageType).ItemId.Id, this.CreatedItemId[i].Id); if ((exportItemsResponse.ResponseMessages.Items[i] as ExportItemsResponseMessageType).ItemId.Id == this.CreatedItemId[i].Id) { isSameItemId = true; } else { isSameItemId = false; break; } } // Add the debug information. Site.Log.Add(LogEntryKind.Debug, "Verify MS-OXWSBTRF_R169."); // Verify requirement MS-OXWSBTRF_R169 Site.CaptureRequirementIfIsTrue( isSameItemId, 169, @"[In m:ExportItemsResponseMessageType Complex Type][ItemId] specifies the item identifier of a single exported item."); // Add the debug information. Site.Log.Add(LogEntryKind.Debug, "Verify MS-OXWSBTRF_R182."); // Verify requirement MS-OXWSBTRF_R182 Site.CaptureRequirementIfIsTrue( isSameItemId, 182, @"[In t:NonEmptyArrayOfItemIdsType Complex Type][ItemId] specifies the item identifier of an item to export from a mailbox."); #endregion #region Call UploadItems operation and set the CreateAction element to CreateNew to upload the items that exported in last step. ExportItemsResponseMessageType[] exportItemsResponseMessages = TestSuiteHelper.GetResponseMessages <ExportItemsResponseMessageType>(exportItemsResponse); // Initialize the upload items using the data of previous export items and set the item CreateAction to CreateNew. UploadItemsResponseMessageType[] uploadItemsResponse = this.UploadItems(exportItemsResponseMessages, this.OriginalFolderId, CreateActionType.CreateNew, true, true, false); #endregion #region Verify the UploadItems response related requirements when the CreateAction is CreateNew. // If the UploadItems response item's ID is not the same as the previous exported item's ID, then MS-OXWSBTRF_R228 can be captured. bool isNotSameItemId = false; for (int i = 0; i < uploadItemsResponse.Length; i++) { // Log the expected and actual value Site.Log.Add( LogEntryKind.Debug, "The uploaded item's id: '{0}' should not be same with the exported item's id when the CreateAction is set to CreateNew: {1}.", uploadItemsResponse[i].ItemId.Id, exportItemsResponseMessages[i].ItemId.Id); if (exportItemsResponseMessages[i].ItemId.Id != uploadItemsResponse[i].ItemId.Id) { isNotSameItemId = true; } else { isNotSameItemId = false; break; } } // Add the debug information. Site.Log.Add(LogEntryKind.Debug, "Verify MS-OXWSBTRF_R228."); // Verify Requirement: MS-OXWSBTRF_R228. Site.CaptureRequirementIfIsTrue( isNotSameItemId, 228, @"[In CreateActionType Simple Type][CreateNew] The <ItemId> element that is returned in the UploadItemsResponseMessageType complex type, as specified in section 3.1.4.2.3.2, MUST contain the new item identifier."); // Call getItem to get the items that was uploaded ItemIdType[] itemIds = new ItemIdType[uploadItemsResponse.Length]; for (int i = 0; i < uploadItemsResponse.Length; i++) { itemIds[i] = uploadItemsResponse[i].ItemId; } ItemType[] getItems = this.GetItems(itemIds); // Verify the array of items uploaded to a mailbox this.VerifyItemsUploadedToMailbox(getItems); // If the verification of the items uploaded to mailbox is successful, then this requirement can be captured. // Add the debug information Site.Log.Add(LogEntryKind.Debug, "Verify MS-OXWSBTRF_R226"); // Verify requirement MS-OXWSBTRF_R226 Site.CaptureRequirement( 226, @"[In CreateActionType Simple Type]The Value of CreateNew specifies that a new copy of the original item is uploaded to the mailbox."); // If the value of IsAssociated attribute in getItem response is same with the value in uploadItems request, // then requirement MS-OXWSBTRF_R222 can be captured. bool isSameIsAssociated = false; for (int i = 0; i < getItems.Length; i++) { // Log the expected and actual value Site.Log.Add( LogEntryKind.Debug, "The value of IsAssociated attribute: {0} in getItem response should be: true", getItems[i].IsAssociated); if (true == getItems[i].IsAssociated) { isSameIsAssociated = true; } else { isSameIsAssociated = false; break; } } // Add the debug information Site.Log.Add(LogEntryKind.Debug, "Verify MS-OXWSBTRF_R222"); // Verify requirement MS-OXWSBTRF_R222 Site.CaptureRequirementIfIsTrue( isSameIsAssociated, 222, @"[In m:UploadItemType Complex Type]If it [IsAssociated] is present, it indicates that the item is a folder associated item."); #endregion }
private void MigrateItens(ref DataGridViewRow row, ExchangeServiceBinding srcService, ExchangeServiceBinding tgtService, DistinguishedFolderIdNameType folder, string srcUserMail, string tgtUserMail) { ResponseMessageType[] itemsResponse = this.GetFolderItems(srcService, folder); ExportItemsType exExportItems = new ExportItemsType(); foreach (ResponseMessageType responseMessage in itemsResponse) { FindItemResponseMessageType firmt = responseMessage as FindItemResponseMessageType; FindItemParentType fipt = firmt.RootFolder; object obj = fipt.Item; int count = 0; // FindItem contains an array of items. if (obj is ArrayOfRealItemsType) { ArrayOfRealItemsType items = (obj as ArrayOfRealItemsType); exExportItems.ItemIds = new ItemIdType[(items.Items.Count() + 1)]; foreach (ItemType it in items.Items) { exExportItems.ItemIds[count] = new ItemIdType(); exExportItems.ItemIds[count].Id = it.ItemId.Id; count++; } } } ExportItemsResponseType exResponse = srcService.ExportItems(exExportItems); ResponseMessageType[] rmResponses = exResponse.ResponseMessages.Items; UploadItemsType upUploadItems = new UploadItemsType(); upUploadItems.Items = new UploadItemType[(rmResponses.Length + 1)]; Int32 icItemCount = 0; foreach (ResponseMessageType rmReponse in rmResponses) { if (rmReponse.ResponseClass == ResponseClassType.Success) { ExportItemsResponseMessageType exExportedItem = (ExportItemsResponseMessageType)rmReponse; Byte[] messageBytes = exExportedItem.Data; UploadItemType upUploadItem = new UploadItemType(); upUploadItem.CreateAction = CreateActionType.UpdateOrCreate; upUploadItem.Data = messageBytes; upUploadItem.IsAssociatedSpecified = true; upUploadItem.IsAssociated = false; upUploadItems.Items[icItemCount] = upUploadItem; FolderIdManager folderIdMgr = new FolderIdManager(); FolderIdType folderId = new FolderIdType(); folderId.Id = folderIdMgr.GetFolderId(tgtUserMail, Microsoft.Exchange.WebServices.Data.WellKnownFolderName.Contacts, Microsoft.Exchange.WebServices.Data.ExchangeVersion.Exchange2010_SP2); upUploadItem.ParentFolderId = folderId; icItemCount += 1; } } //Erro de Internal Server Error nessa etapa UploadItemsResponseType upLoadResponse = tgtService.UploadItems(upUploadItems); Int32 Success = 0; Int32 Failure = 0; foreach (ResponseMessageType upResponse in upLoadResponse.ResponseMessages.Items) { if (upResponse.ResponseClass == ResponseClassType.Success) { Success++; } if (upResponse.ResponseClass == ResponseClassType.Error) { Failure++; } } string resTask = string.Format("Items Copied Sucessfull : {0} - Failure: {1}", Success, Failure); Tools.SetRowValue(ref row, EColumns.results, resTask); //iv.Offset += fiItems.Items.Count; }
/// <summary> /// Get the ExportItemsResponseMessageType response of ExportItems operation. /// </summary> /// <param name="configureSOAPHeader">A Boolean value specifies whether configuring the SOAP header before calling operations.</param> /// <returns>The array of ExportItemsResponseMessageType response.</returns> protected ExportItemsResponseMessageType[] ExportItems(bool configureSOAPHeader) { #region Prerequisite. // In the initialize step, three items in the specified sub folder have been created. // If that step executes successfully, the length of CreatedItemId list should be equal to the length of OriginalFolderId list. Site.Assert.AreEqual <int>( this.CreatedItemId.Count, this.OriginalFolderId.Count, string.Format( "The exportedItemIds array should contain {0} item ids, actually, it contains {1}", this.OriginalFolderId.Count, this.CreatedItemId.Count)); #endregion #region Call ExportItems operation to export the items from the server. // Initialize the export items' instances. ExportItemsType exportItems = new ExportItemsType(); // Initialize three ItemIdType instances. exportItems.ItemIds = new ItemIdType[this.ItemCount]; for (int i = 0; i < exportItems.ItemIds.Length; i++) { exportItems.ItemIds[i] = new ItemIdType(); exportItems.ItemIds[i].Id = this.CreatedItemId[i].Id; } // Initialize a ExportItemsResponseType instance. ExportItemsResponseType exportItemsResponse = this.BTRFAdapter.ExportItems(exportItems); // Check whether the operation is executed successfully. foreach (ExportItemsResponseMessageType exportResponse in exportItemsResponse.ResponseMessages.Items) { Site.Assert.AreEqual <ResponseClassType>( ResponseClassType.Success, exportResponse.ResponseClass, string.Format( "Export items should be successful! Expected response code: {0}, actual response code: {1}", ResponseCodeType.NoError, exportResponse.ResponseCode)); } // If the operation executes successfully, the items in exportItems response should be equal to the value of ItemCount Site.Assert.AreEqual <int>( exportItemsResponse.ResponseMessages.Items.Length, this.ItemCount, string.Format( "The exportItems response should contain {0} items, actually, it contains {1}", this.ItemCount, exportItemsResponse.ResponseMessages.Items.Length)); #endregion #region Verify the ExportItems response related requirements. // Verify the ExportItemsResponseType related requirements. this.VerifyExportItemsSuccessResponse(exportItemsResponse); #endregion #region Get the ExportItemsResponseMessageType items. ExportItemsResponseMessageType[] exportItemsResponseMessages = TestSuiteHelper.GetResponseMessages <ExportItemsResponseMessageType>(exportItemsResponse); return(exportItemsResponseMessages); #endregion }
// Token: 0x06000580 RID: 1408 RVA: 0x0002A6E0 File Offset: 0x000288E0 public List <ElcEwsItem> ExportItems(IList <ElcEwsItem> items) { ExportItemsType exportItemsType = new ExportItemsType(); exportItemsType.ItemIds = (from elcEwsItem in items select new ItemIdType { Id = elcEwsItem.Id }).ToArray <ItemIdType>(); List <ElcEwsItem> exportedItems = new List <ElcEwsItem>(exportItemsType.ItemIds.Length); int startIndex = 0; this.CallService(() => this.ServiceBinding.ExportItems(exportItemsType), delegate(ResponseMessageType responseMessage, int messageIndex) { ExportItemsResponseMessageType exportItemsResponseMessageType = (ExportItemsResponseMessageType)responseMessage; ElcEwsItem elcEwsItem = items[startIndex + messageIndex]; if (exportItemsResponseMessageType.ResponseClass == ResponseClassType.Error) { ElcEwsClient.Tracer.TraceError <ResponseCodeType>(0L, "ElcEwsClient.ExportItems: ExportItems with error response message. ResponseCode : {0}", exportItemsResponseMessageType.ResponseCode); if (exportItemsResponseMessageType.ResponseCode == ResponseCodeType.ErrorItemNotFound) { exportedItems.Add(new ElcEwsItem { Id = elcEwsItem.Id, Data = null, Error = new ElcEwsException(ElcEwsErrorType.NotFound), StorageItemData = elcEwsItem.StorageItemData }); } else { exportedItems.Add(new ElcEwsItem { Id = elcEwsItem.Id, Data = null, Error = new ElcEwsException(ElcEwsErrorType.FailedToExportItem, exportItemsResponseMessageType.ResponseCode.ToString()), StorageItemData = elcEwsItem.StorageItemData }); } } else if (exportItemsResponseMessageType.ResponseClass == ResponseClassType.Warning) { ElcEwsClient.Tracer.TraceWarning <ResponseCodeType, string>(0L, "ElcEwsClient.ExportItems: Message response warning. ResponseCode:{0}; MessageText:'{1}'", exportItemsResponseMessageType.ResponseCode, exportItemsResponseMessageType.MessageText); if (exportItemsResponseMessageType.ResponseCode == ResponseCodeType.ErrorBatchProcessingStopped) { ElcEwsClient.Tracer.TraceWarning <int, int>(0L, "ElcEwsClient.ExportItems: Hitting ErrorBatchProcessingStopped, startIndex:{0}; messageIndex={1}", startIndex, messageIndex); if (messageIndex == 0) { throw new RetryException(new ElcEwsException(ElcEwsErrorType.FailedToExportItem, "Internal Error: Hitting ErrorBatchProcessingStopped as the first response."), false); } startIndex += messageIndex; exportItemsType.ItemIds = exportItemsType.ItemIds.Skip(messageIndex).ToArray <ItemIdType>(); throw new RetryException(new ElcEwsException(ElcEwsErrorType.FailedToExportItem, "Hitting ErrorBatchProcessingStopped"), true); } else { exportedItems.Add(new ElcEwsItem { Id = elcEwsItem.Id, Data = null, Error = new ElcEwsException(ElcEwsErrorType.FailedToExportItem, exportItemsResponseMessageType.ResponseCode.ToString()), StorageItemData = elcEwsItem.StorageItemData }); } } else { exportedItems.Add(new ElcEwsItem { Id = elcEwsItem.Id, Data = exportItemsResponseMessageType.Data, Error = null, StorageItemData = elcEwsItem.StorageItemData }); } return(true); }, (Exception exception) => ElcEwsClient.WrapElcEwsException(ElcEwsErrorType.FailedToExportItem, exception)); return(exportedItems); }