public bool UploadItems(FolderIdType parentFolderId, IEnumerable <ItemInformation> items, bool alwaysCreateNew) { UploadItemsType itemsType = new UploadItemsType(); CreateActionType createActionType = alwaysCreateNew ? CreateActionType.CreateNew : CreateActionType.UpdateOrCreate; itemsType.Items = (from item in items select new UploadItemType { CreateAction = createActionType, ItemId = new ItemIdType { Id = item.Id }, Data = item.Data, ParentFolderId = parentFolderId }).ToArray <UploadItemType>(); int successCount = 0; this.CallEwsWithRetries((LID)0U, () => this.binding.UploadItems(itemsType), delegate(ResponseMessageType responseMessage, int messageIndex) { UploadItemsResponseMessageType uploadItemsResponseMessageType = responseMessage as UploadItemsResponseMessageType; if (uploadItemsResponseMessageType != null && uploadItemsResponseMessageType.ResponseClass == ResponseClassType.Success) { successCount++; if (this.IsTraceEnabled(TraceType.DebugTrace)) { this.Tracer.TraceDebug(0L, "Items uploaded successfully"); } } return(false); }, null); return(successCount == itemsType.Items.Length); }
private void btnOK_Click(object sender, EventArgs e) { bool bFail = false; if (_CreateActionType == CreateActionType.UpdateOrCreate || _CreateActionType == CreateActionType.Update) { if (txtFile.Text.Trim().Length == 0) { MessageBox.Show("ItemId is required for Update and UpdateOrCreate operations.", "EntryID required"); bFail = true; } } if (bFail == false) { if (System.IO.File.Exists(txtFile.Text.Trim()) == false) { MessageBox.Show("The file specified does not exist.", "File Not Found"); bFail = true; } } if (bFail == false) { this.ChoseOk = true; this.ChoseFileToUpload = txtFile.Text.Trim(); this.ChoseItemId = txtItemId.Text.Trim(); this.ChoseCreateActionType = _CreateActionType; this.Close(); } }
private void UpdateCreateActionRelated(CreateActionType oCreateActionType) { _CreateActionType = oCreateActionType; switch (oCreateActionType) { case CreateActionType.CreateNew: txtItemId.Enabled = false; break; case CreateActionType.Update: txtItemId.Enabled = true; break; case CreateActionType.UpdateOrCreate: txtItemId.Enabled = true; break; } }
/// <summary> /// Set the contents of a single item to upload into a mailbox. /// </summary> /// <param name="id">The identifier of the upload item.</param> /// <param name="changeKey">The ChangeKey of the upload item.</param> /// <param name="data">The data of the upload item.</param> /// <param name="parentFolderId">The target folder in which to place the upload item.</param> /// <param name="createAction">The action for uploading items into a mailbox.</param> /// <returns>The upload item.</returns> public static UploadItemType GenerateUploadItem( string id, string changeKey, byte[] data, string parentFolderId, CreateActionType createAction) { UploadItemType uploadItem = new UploadItemType(); uploadItem.ItemId = new ItemIdType(); uploadItem.ItemId.Id = id; uploadItem.ItemId.ChangeKey = changeKey; uploadItem.Data = data; uploadItem.ParentFolderId = new FolderIdType(); uploadItem.ParentFolderId.Id = parentFolderId; uploadItem.CreateAction = createAction; return(uploadItem); }
public static bool UploadItemPost(string ServerVersion, FolderId ParentFolderId, CreateActionType oCreateActionType, string sItemId, string sFile) { bool bSuccess = false; string sResponseText = string.Empty; System.Net.HttpWebRequest oHttpWebRequest = null; EwsProxyFactory.CreateHttpWebRequest(ref oHttpWebRequest); oHttpWebRequest.Headers.Add("client-request-id", Guid.NewGuid().ToString()); oHttpWebRequest.Headers.Add("return-client-request-id", "true"); string EwsRequest = string.Empty; if (oCreateActionType != CreateActionType.CreateNew) { EwsRequest = TemplateEwsRequests.UploadItems_Update; if (oCreateActionType == CreateActionType.Update) { EwsRequest = EwsRequest.Replace("##CreateAction##", "Update"); } else { EwsRequest = EwsRequest.Replace("##CreateAction##", "UpdateOrCreate"); } EwsRequest = EwsRequest.Replace("##ItemId##", sItemId); } else { EwsRequest = TemplateEwsRequests.UploadItems_CreateNew; EwsRequest = EwsRequest.Replace("##CreateAction##", "CreateNew"); } EwsRequest = EwsRequest.Replace("##RequestServerVersion##", ServerVersion); EwsRequest = EwsRequest.Replace("##ParentFolderId_Id##", ParentFolderId.UniqueId); string sBase64Data = string.Empty; sBase64Data = EWSEditor.Common.FileHelper.GetBinaryFileAsBase64(sFile); System.Diagnostics.Debug.WriteLine("sBase64: " + sBase64Data); // Convert byte array to base64 EwsRequest = EwsRequest.Replace("##Data##", sBase64Data); // Now inject the base64 body into the stream: try { byte[] bytes = Encoding.UTF8.GetBytes(EwsRequest); oHttpWebRequest.ContentLength = bytes.Length; using (Stream requestStream = oHttpWebRequest.GetRequestStream()) { requestStream.Write(bytes, 0, bytes.Length); requestStream.Flush(); requestStream.Close(); } // Get response HttpWebResponse oHttpWebResponse = (HttpWebResponse)oHttpWebRequest.GetResponse(); StreamReader oStreadReader = new StreamReader(oHttpWebResponse.GetResponseStream()); sResponseText = oStreadReader.ReadToEnd(); if (oHttpWebResponse.StatusCode == HttpStatusCode.OK) { bSuccess = true; } else { } } finally { } return(bSuccess); }
public static string UploadItemPost(string ServerVersion, FolderId ParentFolderId, CreateActionType oCreateActionType, string sItemId, string sFile) { try { string sResponseText = string.Empty; System.Net.HttpWebRequest oHttpWebRequest = null; EwsProxyFactory.CreateHttpWebRequest(ref oHttpWebRequest); string EwsRequest = string.Empty; if (oCreateActionType != CreateActionType.CreateNew) { EwsRequest = TemplateEwsRequests.UploadItems_Update; if (oCreateActionType == CreateActionType.Update) EwsRequest = EwsRequest.Replace("##CreateAction##", "Update"); else EwsRequest = EwsRequest.Replace("##CreateAction##", "UpdateOrCreate"); EwsRequest = EwsRequest.Replace("##ItemId##", sItemId); } else { EwsRequest = TemplateEwsRequests.UploadItems_CreateNew; EwsRequest = EwsRequest.Replace("##CreateAction##", "CreateNew"); } EwsRequest = EwsRequest.Replace("##RequestServerVersion##", ServerVersion); EwsRequest = EwsRequest.Replace("##ParentFolderId_Id##", ParentFolderId.UniqueId); string sBase64Data = string.Empty; sBase64Data = FileHelper.GetBinaryFileAsBase64(sFile); System.Diagnostics.Debug.WriteLine("sBase64: " + sBase64Data); // Convert byte array to base64 EwsRequest = EwsRequest.Replace("##Data##", sBase64Data); //ShowTextDocument oForm = new ShowTextDocument(); //oForm.txtEntry.WordWrap = false; //oForm.Text = "Info"; //oForm.txtEntry.Text = EwsRequest; //oForm.ShowDialog(); // Now inject the base64 body into the stream: byte[] bytes = Encoding.UTF8.GetBytes(EwsRequest); oHttpWebRequest.ContentLength = bytes.Length; using (Stream requestStream = oHttpWebRequest.GetRequestStream()) { requestStream.Write(bytes, 0, bytes.Length); requestStream.Flush(); requestStream.Close(); } // Get response HttpWebResponse oHttpWebResponse = (HttpWebResponse)oHttpWebRequest.GetResponse(); StreamReader oStreadReader = new StreamReader(oHttpWebResponse.GetResponseStream()); sResponseText = oStreadReader.ReadToEnd(); if (oHttpWebResponse.StatusCode == HttpStatusCode.OK) { string responseCode = GetFirstResponseCode(sResponseText); if (responseCode != "NoError") { string messageText = GetFirstMessageText(sResponseText); LogWriter.Instance.WriteLine("Import ftstream failed with error stream, the detail of response is:"); LogWriter.Instance.WriteLine(sResponseText); return messageText; } else { return string.Empty; } } else { LogWriter.Instance.WriteLine("Import ftstream failed with error response status code, the detail of response is:"); LogWriter.Instance.WriteLine(sResponseText); return oHttpWebResponse.StatusCode.ToString(); } } catch(Exception e){ LogWriter.Instance.WriteException(typeof(ExportUploadHelper), e); return e.Message; } }
/// <summary> /// Get the UploadItemsResponseMessageType response of UploadItems operation when this operation executes unsuccessfully. /// </summary> /// <param name="parentFolderId">Specifies the target folder in which to place the upload item.</param> /// <param name="createAction">Specifies the action for uploading items to the folder.</param> /// <returns>The array of UploadItemsResponseMessageType response.</returns> protected UploadItemsResponseMessageType[] UploadInvalidItems(Collection <string> parentFolderId, CreateActionType createAction) { #region Get the exported items and parent folder ID. // Get the exported items which is prepared for uploading. ExportItemsResponseMessageType[] exportedItem = this.ExportItems(false); #endregion #region Call UploadItems operation to upload the items that exported in last step to the server. // Initialize the upload items using the data of previous export items, and set that item CreateAction to a value of CreateActionType. UploadItemsType uploadInvalidItems = new UploadItemsType(); uploadInvalidItems.Items = new UploadItemType[4]; // The ID attribute of ItemId is empty. uploadInvalidItems.Items[0] = TestSuiteHelper.GenerateUploadItem( string.Empty, null, exportedItem[0].Data, parentFolderId[0], createAction); // The ID attribute of ItemId is valid and the ChangeKey is invalid. uploadInvalidItems.Items[1] = TestSuiteHelper.GenerateUploadItem( exportedItem[1].ItemId.Id, InvalidChangeKey, exportedItem[1].Data, parentFolderId[1], createAction); // The ID attribute of ItemId is invalid and the ChangeKey is null. uploadInvalidItems.Items[2] = TestSuiteHelper.GenerateUploadItem( InvalidItemId, null, exportedItem[2].Data, parentFolderId[2], createAction); // The ID attribute of ItemId is invalid and the ChangeKey is null. uploadInvalidItems.Items[3] = TestSuiteHelper.GenerateUploadItem( InvalidItemId, null, exportedItem[3].Data, parentFolderId[3], createAction); // Call UploadItems operation. UploadItemsResponseType uploadItemsResponse = this.BTRFAdapter.UploadItems(uploadInvalidItems); // Check whether the ExportItems operation is executed successfully. foreach (UploadItemsResponseMessageType responseMessage in uploadItemsResponse.ResponseMessages.Items) { Site.Assert.AreEqual <ResponseClassType>( ResponseClassType.Error, responseMessage.ResponseClass, string.Format( @"The UploadItems operation should be unsuccessful. Expected response code: {0}, actual response code: {1}", ResponseClassType.Error, responseMessage.ResponseClass)); } #endregion #region Verify the UploadItemsResponseType related requirements // Verify the UploadItemsResponseType related requirements. this.VerifyUploadItemsErrorResponse(uploadItemsResponse); #endregion #region Call GetResponseMessages to get the UploadItemsResponseMessageType items. // Get the UploadItemsResponseMessageType items. UploadItemsResponseMessageType[] uploadItemsResponseMessages = TestSuiteHelper.GetResponseMessages <UploadItemsResponseMessageType>(uploadItemsResponse); return(uploadItemsResponseMessages); #endregion }
/// <summary> /// Get the UploadItemsResponseMessageType response of UploadItems operation when this operation executes successfully. /// </summary> /// <param name="exportedItems">The items exported from server.</param> /// <param name="parentFolderId">Specifies the target folder in which to place the upload item.</param> /// <param name="createAction">Specifies the action for uploading items to the folder.</param> /// <param name="isAssociatedSpecified">A Boolean value specifies whether IsAssociated attribute is specified.</param> /// <param name="isAssociated">Specifies the value of the IsAssociated attribute.</param> /// <param name="configureSOAPHeader">A Boolean value specifies whether configuring the SOAP header before calling operations.</param> /// <returns>The array of UploadItemsResponseMessageType response.</returns> protected UploadItemsResponseMessageType[] UploadItems( ExportItemsResponseMessageType[] exportedItems, Collection <string> parentFolderId, CreateActionType createAction, bool isAssociatedSpecified, bool isAssociated, bool configureSOAPHeader) { #region Call UploadItems operation to upload the items that exported in last step to the server. // Initialize the upload items using the data of previous exported items, and set that item CreateAction to a value of CreateActionType. UploadItemsType uploadItems = new UploadItemsType(); uploadItems.Items = new UploadItemType[this.ItemCount]; for (int i = 0; i < uploadItems.Items.Length; i++) { uploadItems.Items[i] = TestSuiteHelper.GenerateUploadItem( exportedItems[i].ItemId.Id, exportedItems[i].ItemId.ChangeKey, exportedItems[i].Data, parentFolderId[i], createAction); uploadItems.Items[i].IsAssociatedSpecified = isAssociatedSpecified; if (uploadItems.Items[i].IsAssociatedSpecified) { uploadItems.Items[i].IsAssociated = isAssociated; } } // Call UploadItems operation. UploadItemsResponseType uploadItemsResponse = this.BTRFAdapter.UploadItems(uploadItems); // Check whether the operation is executed successfully. foreach (UploadItemsResponseMessageType uploadResponse in uploadItemsResponse.ResponseMessages.Items) { Site.Assert.AreEqual <ResponseClassType>( ResponseClassType.Success, uploadResponse.ResponseClass, string.Format( @"The UploadItems operation should be successful. Expected response code: {0}, actual response code: {1}", ResponseClassType.Error, uploadResponse.ResponseClass)); } // If the operation executes successfully, the items in UploadItems response should be equal to the value of ItemCount Site.Assert.AreEqual <int>( uploadItemsResponse.ResponseMessages.Items.Length, this.ItemCount, string.Format( "The uploadItems response should contain {0} items, actually, it contains {1}", this.ItemCount, uploadItemsResponse.ResponseMessages.Items.Length)); #endregion #region Verify the UploadItemsResponseType related requirements // Verify the UploadItemsResponseType related requirements. this.VerifyUploadItemsSuccessResponse(uploadItemsResponse); #endregion #region Call GetResponseMessages to get the UploadItemsResponseMessageType items. // Get the UploadItemsResponseMessageType items. UploadItemsResponseMessageType[] uploadItemsResponseMessages = TestSuiteHelper.GetResponseMessages <UploadItemsResponseMessageType>(uploadItemsResponse); return(uploadItemsResponseMessages); #endregion }
/// <summary> /// Get the UploadItemsResponseMessageType response of UploadItems operation when this operation executes unsuccessfully. /// </summary> /// <param name="parentFolderId">Specifies the target folder in which to place the upload item.</param> /// <param name="createAction">Specifies the action for uploading items to the folder.</param> /// <returns>The array of UploadItemsResponseMessageType response.</returns> protected UploadItemsResponseMessageType[] UploadInvalidItems(Collection<string> parentFolderId, CreateActionType createAction) { #region Get the exported items and parent folder ID. // Get the exported items which is prepared for uploading. ExportItemsResponseMessageType[] exportedItem = this.ExportItems(false); #endregion #region Call UploadItems operation to upload the items that exported in last step to the server. // Initialize the upload items using the data of previous export items, and set that item CreateAction to a value of CreateActionType. UploadItemsType uploadInvalidItems = new UploadItemsType(); uploadInvalidItems.Items = new UploadItemType[4]; // The ID attribute of ItemId is empty. uploadInvalidItems.Items[0] = TestSuiteHelper.GenerateUploadItem( string.Empty, null, exportedItem[0].Data, parentFolderId[0], createAction); // The ID attribute of ItemId is valid and the ChangeKey is invalid. uploadInvalidItems.Items[1] = TestSuiteHelper.GenerateUploadItem( exportedItem[1].ItemId.Id, InvalidChangeKey, exportedItem[1].Data, parentFolderId[1], createAction); // The ID attribute of ItemId is invalid and the ChangeKey is null. uploadInvalidItems.Items[2] = TestSuiteHelper.GenerateUploadItem( InvalidItemId, null, exportedItem[2].Data, parentFolderId[2], createAction); // The ID attribute of ItemId is invalid and the ChangeKey is null. uploadInvalidItems.Items[3] = TestSuiteHelper.GenerateUploadItem( InvalidItemId, null, exportedItem[3].Data, parentFolderId[3], createAction); // Call UploadItems operation. UploadItemsResponseType uploadItemsResponse = this.BTRFAdapter.UploadItems(uploadInvalidItems); // Check whether the ExportItems operation is executed successfully. foreach (UploadItemsResponseMessageType responseMessage in uploadItemsResponse.ResponseMessages.Items) { Site.Assert.AreEqual<ResponseClassType>( ResponseClassType.Error, responseMessage.ResponseClass, string.Format( @"The UploadItems operation should be unsuccessful. Expected response code: {0}, actual response code: {1}", ResponseClassType.Error, responseMessage.ResponseClass)); } #endregion #region Verify the UploadItemsResponseType related requirements // Verify the UploadItemsResponseType related requirements. this.VerifyUploadItemsErrorResponse(uploadItemsResponse); #endregion #region Call GetResponseMessages to get the UploadItemsResponseMessageType items. // Get the UploadItemsResponseMessageType items. UploadItemsResponseMessageType[] uploadItemsResponseMessages = TestSuiteHelper.GetResponseMessages<UploadItemsResponseMessageType>(uploadItemsResponse); return uploadItemsResponseMessages; #endregion }
/// <summary> /// Get the UploadItemsResponseMessageType response of UploadItems operation when this operation executes successfully. /// </summary> /// <param name="exportedItems">The items exported from server.</param> /// <param name="parentFolderId">Specifies the target folder in which to place the upload item.</param> /// <param name="createAction">Specifies the action for uploading items to the folder.</param> /// <param name="isAssociatedSpecified">A Boolean value specifies whether IsAssociated attribute is specified.</param> /// <param name="isAssociated">Specifies the value of the IsAssociated attribute.</param> /// <param name="configureSOAPHeader">A Boolean value specifies whether configuring the SOAP header before calling operations.</param> /// <returns>The array of UploadItemsResponseMessageType response.</returns> protected UploadItemsResponseMessageType[] UploadItems( ExportItemsResponseMessageType[] exportedItems, Collection<string> parentFolderId, CreateActionType createAction, bool isAssociatedSpecified, bool isAssociated, bool configureSOAPHeader) { #region Call UploadItems operation to upload the items that exported in last step to the server. // Initialize the upload items using the data of previous exported items, and set that item CreateAction to a value of CreateActionType. UploadItemsType uploadItems = new UploadItemsType(); uploadItems.Items = new UploadItemType[this.ItemCount]; for (int i = 0; i < uploadItems.Items.Length; i++) { uploadItems.Items[i] = TestSuiteHelper.GenerateUploadItem( exportedItems[i].ItemId.Id, exportedItems[i].ItemId.ChangeKey, exportedItems[i].Data, parentFolderId[i], createAction); uploadItems.Items[i].IsAssociatedSpecified = isAssociatedSpecified; if (uploadItems.Items[i].IsAssociatedSpecified) { uploadItems.Items[i].IsAssociated = isAssociated; } } // Call UploadItems operation. UploadItemsResponseType uploadItemsResponse = this.BTRFAdapter.UploadItems(uploadItems); // Check whether the operation is executed successfully. foreach (UploadItemsResponseMessageType uploadResponse in uploadItemsResponse.ResponseMessages.Items) { Site.Assert.AreEqual<ResponseClassType>( ResponseClassType.Success, uploadResponse.ResponseClass, string.Format( @"The UploadItems operation should be successful. Expected response code: {0}, actual response code: {1}", ResponseClassType.Error, uploadResponse.ResponseClass)); } // If the operation executes successfully, the items in UploadItems response should be equal to the value of ItemCount Site.Assert.AreEqual<int>( uploadItemsResponse.ResponseMessages.Items.Length, this.ItemCount, string.Format( "The uploadItems response should contain {0} items, actually, it contains {1}", this.ItemCount, uploadItemsResponse.ResponseMessages.Items.Length)); #endregion #region Verify the UploadItemsResponseType related requirements // Verify the UploadItemsResponseType related requirements. this.VerifyUploadItemsSuccessResponse(uploadItemsResponse); #endregion #region Call GetResponseMessages to get the UploadItemsResponseMessageType items. // Get the UploadItemsResponseMessageType items. UploadItemsResponseMessageType[] uploadItemsResponseMessages = TestSuiteHelper.GetResponseMessages<UploadItemsResponseMessageType>(uploadItemsResponse); return uploadItemsResponseMessages; #endregion }
public static string UploadItemPost(string ServerVersion, FolderId ParentFolderId, CreateActionType oCreateActionType, string sItemId, string sFile, EwsServiceArgument argument) { using (FileStream oFileStream = new FileStream(sFile, FileMode.Open, FileAccess.Read)) { return UploadItemPost(ServerVersion, ParentFolderId.UniqueId, oCreateActionType, sItemId, oFileStream, argument); } }
public static string UploadItemPost(string ServerVersion, FolderId ParentFolderId, CreateActionType oCreateActionType, string sItemId, byte[] data, EwsServiceArgument argument) { using (var memoryStream = new MemoryStream(data)) { return UploadItemPost(ServerVersion, ParentFolderId.UniqueId, oCreateActionType, sItemId, memoryStream, argument); } }