/// <summary> /// Get feedback information /// </summary> /// <param name="customerName">customer Name</param> /// <param name="startTime">StartTime</param> /// <param name="endTime">End time</param> /// <param name="searchConditions">searchConditions</param> /// <returns>all of the information, including sent, bounced, /// clicked and opened</returns> private XDocument queryFeedbackInfo(String customerName, DateTime startTime, DateTime endTime, Hashtable searchConditions) { //String BouncedFormat = "email"; "name"; "Email address of bounced message"; "Bounce date"; "Bounce code"; "Bounce decription"; "Hard bounce"; "Job ID"; //String OpenedFormat = "email"; "name"; "Rendered"; "Opened"; "IP address"; "Browser"; "OS"; "Job ID"; //String ClickedFormat = "email"; "name"; "clicked"; "linkid"; "IP address"; "browser"; "Job ID" if (logger.IsDebugEnabled) { logger.Debug("queryFeedbackInfo:customerName=" + customerName + ",startTime=" + startTime.ToLongTimeString() + ",endTime=" + endTime.ToLongTimeString()); } String result; XDocument doc = new XDocument(new XDeclaration("1.0", "UTF-8", "yes")); try { Action.ContactDatabaseAction contactDatabaseAction = new ContactDatabaseAction(client, userName, password, oWebProxy); String contactDatabaseId = contactDatabaseAction.getDatabaseIdByName(customerName); ContactDatabaseFieldAction contactDatabaseFieldAction = new ContactDatabaseFieldAction(client, userName, password, oWebProxy); Hashtable ht = contactDatabaseFieldAction.getContactDatabaseFields(contactDatabaseId); //String toEmailFieldId = contactDatabaseFieldAction.getDatabaseEmailId(contactDatabaseId); cn.tripolis.dialogue.export.ContactExportRequest request = new cn.tripolis.dialogue.export.ContactExportRequest { contactDatabaseId = contactDatabaseId, timeRange = new cn.tripolis.dialogue.export.TimeRange { startTime = startTime, endTime = endTime } }; var xroot = new XElement("FeedbackReport"); logger.Debug("******exportSent*****"); request.returnContactFields = new cn.tripolis.dialogue.export.ReturnContactFields { contactDatabaseFieldIds = new String[ht.Keys.Count] }; int index = 0; foreach (String value in ht.Values) { request.returnContactFields.contactDatabaseFieldIds.SetValue(value, index++); } RawDataResponse response = exportService.exportSent(request); result = System.Text.Encoding.UTF8.GetString(response.data); XElement element = Util.convertCsvToXmlElement(result.Replace("\"", ""), new[] { ";" }, "exportSent", searchConditions); xroot.Add(element); request.returnContactFields.contactDatabaseFieldIds = null; request.returnContactFields = new cn.tripolis.dialogue.export.ReturnContactFields { returnAllContactFields = true, returnAllContactFieldsSpecified = true }; logger.Debug("******exportBounced*****"); response = exportService.exportBounced(request); result = System.Text.Encoding.UTF8.GetString(response.data); element = Util.convertCsvToXmlElement(result.Replace("\"", ""), new[] { ";" }, "exportBounced", searchConditions); xroot.Add(element); logger.Debug("******exportOpened*****"); response = exportService.exportOpened(request); result = System.Text.Encoding.UTF8.GetString(response.data); element = Util.convertCsvToXmlElement(result.Replace("\"", ""), new[] { ";" }, "exportOpened", searchConditions); xroot.Add(element); logger.Debug("******exportClicked*****"); response = exportService.exportClicked(request); result = System.Text.Encoding.UTF8.GetString(response.data); element = Util.convertCsvToXmlElement(result.Replace("\"", ""), new[] { ";" }, "exportClicked", searchConditions); xroot.Add(element); doc.Add(xroot); result = doc.ToString(); } catch (System.Web.Services.Protocols.SoapException ex) { result = ex.Detail.InnerXml; throw new Exception(result); } catch (Exception ex) { result = ex.Message; throw new Exception(result); } if (logger.IsDebugEnabled) { logger.Debug(result); } return doc; }
/// <summary> /// Get feedback information /// </summary> /// <param name="contactDatabaseId">contactDatabase Id</param> /// <param name="startTime">StartTime</param> /// <param name="endTime">End time</param> /// <param name="searchConditions">searchConditions</param> /// <returns>all of the information, including sent, bounced, /// clicked and opened</returns> private XDocument queryFeedbackInfo(String contactDatabaseId, DateTime startTime, DateTime endTime, Hashtable searchConditions) { //String BouncedFormat = "email"; "name"; "Email address of bounced message"; "Bounce date"; "Bounce code"; "Bounce decription"; "Hard bounce"; "Job ID"; //String OpenedFormat = "email"; "name"; "Rendered"; "Opened"; "IP address"; "Browser"; "OS"; "Job ID"; //String ClickedFormat = "email"; "name"; "clicked"; "linkid"; "IP address"; "browser"; "Job ID" if (logger.IsDebugEnabled) { logger.Debug("queryFeedbackInfo:contactDatabaseId=" + contactDatabaseId + ",startTime=" + startTime.ToLongTimeString() + ",endTime=" + endTime.ToLongTimeString()); } String result; TripolisDialogueAdapter.DAO.FeedbackBO feedbackBO = null; FeedbackDao feedbackDao = new FeedbackDao(); XDocument doc = new XDocument(new XDeclaration("1.0", "UTF-8", "yes")); try { //Action.ContactDatabaseAction contactDatabaseAction = new ContactDatabaseAction(client, userName, password); // String contactDatabaseId = contactDatabaseAction.getDatabaseIdByName(customerName); ContactDatabaseFieldAction contactDatabaseFieldAction = new ContactDatabaseFieldAction(client, userName, password, oWebProxy); Hashtable ht = contactDatabaseFieldAction.getContactDatabaseFields(contactDatabaseId); //String toEmailFieldId = contactDatabaseFieldAction.getDatabaseEmailId(contactDatabaseId); cn.tripolis.dialogue.export.ContactExportRequest request = new cn.tripolis.dialogue.export.ContactExportRequest { contactDatabaseId = contactDatabaseId, timeRange = new cn.tripolis.dialogue.export.TimeRange { startTime = startTime, endTime = endTime } }; var xroot = new XElement("FeedbackReport"); logger.Debug("******exportSent*****"); request.returnContactFields = new cn.tripolis.dialogue.export.ReturnContactFields { contactDatabaseFieldIds = new String[ht.Keys.Count] }; int index = 0; foreach (String value in ht.Values) { request.returnContactFields.contactDatabaseFieldIds.SetValue(value, index++); } RawDataResponse response = exportService.exportSent(request); result = System.Text.Encoding.UTF8.GetString(response.data); XElement element = Util.convertCsvToXmlElement(result.Replace("\"", ""), new[] { ";" }, "exportSent", searchConditions); xroot.Add(element); System.Data.DataSet ds = Util.CXmlToDataSet(element.ToString().ToLower()); if (ds != null && ds.Tables.Count > 0) { foreach (System.Data.DataRow row in ds.Tables[0].Rows) { //[jobId],[email],[opentime],[ipAddress],[browse],[os],[rendered] feedbackBO = new DAO.FeedbackBO(); feedbackBO.jobId = row["jobid"].ToString(); feedbackBO.email = row["email"].ToString(); //feedbackBO.opentime = row["opentime"]; //feedbackBO.ipAddress = row["ipAddress"]; //feedbackBO.browse = row["browse"]; //feedbackBO.os = row["os"]; //feedbackBO.rendered = row["rendered"]; //feedbackDao.Feedback_GetInfo(); feedbackDao.Feedback_updateInfoForSent(feedbackBO); } } request.returnContactFields.contactDatabaseFieldIds = null; request.returnContactFields = new cn.tripolis.dialogue.export.ReturnContactFields { returnAllContactFields = true, returnAllContactFieldsSpecified = true }; logger.Debug("******exportBounced*****"); response = exportService.exportBounced(request); result = System.Text.Encoding.UTF8.GetString(response.data); element = Util.convertCsvToXmlElement(result.Replace("\"", ""), new[] { ";" }, "exportBounced", searchConditions); xroot.Add(element); ds = Util.CXmlToDataSet(element.ToString().ToLower()); if (ds != null && ds.Tables.Count > 0) { foreach (System.Data.DataRow row in ds.Tables[0].Rows) { // [jobId],[email],[bouncedate],[bouncecode],[bounceDecription],[hardbounce] feedbackBO = new DAO.FeedbackBO(); feedbackBO.jobId = row["jobid"].ToString(); feedbackBO.email = row["email"].ToString(); feedbackBO.bouncedate = row["bouncedate"].ToString(); feedbackBO.bouncecode = row["bouncecode"].ToString(); feedbackBO.bounceDecription = row["bouncedescription"].ToString(); feedbackBO.hardbounce = row["hardbounce"].ToString(); feedbackDao.Feedback_updateInfoForBounced(feedbackBO); } } logger.Debug("******exportOpened*****"); response = exportService.exportOpened(request); result = System.Text.Encoding.UTF8.GetString(response.data); element = Util.convertCsvToXmlElement(result.Replace("\"", ""), new[] { ";" }, "exportOpened", searchConditions); xroot.Add(element); ds = Util.CXmlToDataSet(element.ToString().ToLower()); if (ds != null && ds.Tables.Count > 0) { foreach (System.Data.DataRow row in ds.Tables[0].Rows) { //[jobId],[email],[opentime],[ipAddress],[browse],[os],[rendered] feedbackBO = new DAO.FeedbackBO(); feedbackBO.jobId = row["jobid"].ToString(); feedbackBO.email = row["email"].ToString(); feedbackBO.opentime = row["opened"].ToString(); feedbackBO.ipAddress = row["ipAddress"].ToString(); feedbackBO.browse = row["browser"].ToString(); feedbackBO.os = row["os"].ToString(); feedbackBO.rendered = row["rendered"].ToString(); feedbackDao.Feedback_updateInfoForOpened(feedbackBO); } } logger.Debug("******exportClicked*****"); response = exportService.exportClicked(request); result = System.Text.Encoding.UTF8.GetString(response.data); element = Util.convertCsvToXmlElement(result.Replace("\"", ""), new[] { ";" }, "exportClicked", searchConditions); xroot.Add(element); ds = Util.CXmlToDataSet(element.ToString().ToLower()); if (ds != null && ds.Tables.Count > 0) { foreach (System.Data.DataRow row in ds.Tables[0].Rows) { //[jobId],[email],[linkid],[ipAddress],[browse],[clicked] feedbackBO = new DAO.FeedbackBO(); feedbackBO.jobId = row["jobid"].ToString(); feedbackBO.email = row["email"].ToString(); feedbackBO.linkid = row["linkid"].ToString(); feedbackBO.ipAddress = row["ipAddress"].ToString(); feedbackBO.browse = row["browser"].ToString(); feedbackBO.clicked = row["clicked"].ToString(); feedbackDao.Feedback_updateInfoForClicked(feedbackBO); } } doc.Add(xroot); result = doc.ToString(); } catch (System.Web.Services.Protocols.SoapException ex) { result = ex.Detail.InnerXml; throw new Exception(result); } catch (Exception ex) { result = ex.Message; throw new Exception(result); } if (logger.IsDebugEnabled) { logger.Debug(result); } return doc; }