public bool Process(string _listId) { bool flag = false; try { //caId = _caId; //ownerId = _ownerId; //start = _start; //end = _end; listId = _listId; startDate = DateTime.Now; Console.WriteLine("EM Process Uygulaması Başladı..." + startDate.ToString()); logMe.Log("EMTempProcess - Process", "EM Process Başladı:" + startDate.ToString(), TEMPEventLog.EventType.Info); if (IsListDynamic(listId)) { ColumnSet cols = new ColumnSet(new string[] { "query" }); Entity list = orgService.Retrieve("list", new Guid(_listId), cols); string dynamicQuery = list.Attributes["query"].ToString(); var countQuery = dynamicQuery; Console.SetCursorPosition(0, 1); Console.WriteLine("Fetch XML alındı. Zaman:" + (DateTime.Now - startDate).ToString()); logMe.Log("EMTempProcess - Process", "Fetch XML Alındı:" + (DateTime.Now - startDate).ToString(), TEMPEventLog.EventType.Info); var memberCountResult = FetchAll(countQuery); } else { InsertStaticListToTempTable(); } if (conn.State != ConnectionState.Open) { conn.Open(); } //string sqlClearTemp = @"exec NEFCUSTOM_MSCRM..sp_ClearTempEMailTable '{0}'"; //Console.WriteLine("Hata durumları güncelleniyor..."); //sda.ExecuteNonQuery(string.Format(sqlClearTemp, caId.ToString())); Console.WriteLine("Hata durumları güncellendi... "); Console.WriteLine("İşlem Tamamlandı.Zaman:" + (DateTime.Now - startDate).ToString()); logMe.Log("EMTempProcess - Process", "İşlem Tamamlandı :" + (DateTime.Now - startDate).ToString(), TEMPEventLog.EventType.Info); flag = true; if (conn.State != ConnectionState.Closed) { conn.Close(); } } catch (Exception) { throw; } return(flag); }
public string BuildXml(DataRow drActivity) { string file = string.Empty; try { StringBuilder campaignXml = new StringBuilder(); campaignXml.AppendLine("<euro.message>"); // if something goes wrong with data upload and campaign creation, this email address will be notified. campaignXml.Append("<NOTIFICATION_EMAIL>").Append("*****@*****.**").AppendLine("</NOTIFICATION_EMAIL>"); campaignXml.AppendLine("<CAMPAIGN type=\"EMAIL\">"); campaignXml.Append("<CAMP_ID>").Append(drActivity["CAID"].ToString().ToUpper().Replace("-", "")).AppendLine("</CAMP_ID>"); campaignXml.Append("<DELIVERY_DATE>").Append(Convert.ToDateTime(drActivity["CAS"]).ToString("yyyy-MM-dd HH:mm:ss")).Append("</DELIVERY_DATE>"); campaignXml.Append("<DEMOGRAFIC_INFO>").Append("</DEMOGRAFIC_INFO>"); campaignXml.Append("<EXPIRE_DATE>").Append("</EXPIRE_DATE>"); campaignXml.Append("<REPORT_ADMINS>").Append("</REPORT_ADMINS>"); campaignXml.AppendLine("<PDF_REPORT enabled=\"false\">"); campaignXml.AppendLine("<FIRST_REPORT enabled=\"false\">"); campaignXml.AppendLine("<EMAILS/>"); campaignXml.AppendLine("<DAY_AFTER/>"); campaignXml.AppendLine("<LANG_ID/>"); campaignXml.AppendLine("</FIRST_REPORT>"); campaignXml.AppendLine("<SECOND_REPORT enabled=\"false\">"); campaignXml.AppendLine("<EMAILS/>"); campaignXml.AppendLine("<DAY_AFTER/>"); campaignXml.AppendLine("<LANG_ID/>"); campaignXml.AppendLine("</SECOND_REPORT>"); campaignXml.AppendLine("</PDF_REPORT>"); campaignXml.AppendLine("</CAMPAIGN>"); campaignXml.AppendLine("</euro.message>"); // Build file from DataTable string workingDirectory = ConfigurationManager.AppSettings["Working.Directory"].ToString() + "\\"; Directory.CreateDirectory(workingDirectory); file = workingDirectory + DateTime.Now.ToString("yyyy-MM-dd hh-mm-ss") + ".xml"; StreamWriter xmlFileSW = new StreamWriter(file, false, System.Text.Encoding.GetEncoding(fileEncoding)); xmlFileSW.AutoFlush = true; xmlFileSW.Write(campaignXml.ToString()); xmlFileSW.Close(); xmlFileSW = null; return(file); } catch (Exception ex) { logMe.Log("SendMailIntegration - Execute", ex, TEMPEventLog.EventType.Exception, "new_campaignactivity", drActivity["CAID"].ToString()); } return(file); }
public void Execute() { string campaignXmlFile = string.Empty; string smsList = string.Empty; string dataFile = string.Empty; string zipFileName = string.Empty; Guid listId = Guid.Empty; Console.WriteLine("SMS gönderim uygulaması çalıştı."); try { logMe.Log("SendSmsIntegration - Execute", "Mail gönderim uygulaması başladı.", TEMPEventLog.EventType.Info); #region | Get Campaign Activity | //Euromessage' a gönderilmeyi bekleyen Kampanya Aktiviteleri çekiliyor. string queryCActivity = @" SELECT CA.ActivityId CAID, DATEADD(HOUR,DATEDIFF(HOUR,GETUTCDATE(),GETDATE()),CA.scheduledstart) CAS, DATEADD(HOUR,DATEDIFF(HOUR,GETUTCDATE(),GETDATE()),CA.scheduledend) CAE, CA.[Subject] CS, CA.new_smstext MSG FROM CampaignActivity CA (NOLOCK) WHERE CA.StatusCode = 100000000 AND CA.StateCode=0 AND CA.ChannelTypeCode=3" ; sda.openConnection(Globals.ConnectionString); DataTable dtCActivity = sda.getDataTable(queryCActivity); sda.closeConnection(); Console.WriteLine("Euromessage' a iletilmeyi bekleyen kampanya aktiviteleri alındı."); logMe.Log("SendSmsIntegration - Execute", "Euromessage' a iletilmeyi bekleyen kampanya aktiviteleri alındı. Adet: " + dtCActivity.Rows.Count, TEMPEventLog.EventType.Info); #endregion | Get Campaign Activity | SmsFunctions sFunc = new SmsFunctions(); foreach (DataRow dr in dtCActivity.Rows) { Console.WriteLine("Kampanya aktivitesi işlemleri başladı."); DateTime startDate = (DateTime)dr["CAS"]; //if ((DateTime.Now.Hour == startDate.Hour && DateTime.Now.Minute >= startDate.Minute) || (DateTime.Now.Hour > startDate.Hour)) //{ Guid campaignActivityID = new Guid(dr["CAID"].ToString()); //Kampanya aktivitesine ait listeler çekilir. DataTable marketingLists = GetMarketingList(sda, campaignActivityID); //Eğer kampanya aktivitesi altında pazarlama listesi yoksa herhangi bir işlem yapılmaz. if (marketingLists != null && marketingLists.Rows.Count > 0) { campaignXmlFile = sFunc.BuildXml(dr); if (!string.IsNullOrEmpty(campaignXmlFile)) { foreach (DataRow drList in marketingLists.Rows) { listId = new Guid(drList["ListId"].ToString()); if (listId != Guid.Empty) { //Pazarlama listesine eklenen müsteriler çekilir. DataTable customerList = sFunc.GetCustomerList(sda, campaignActivityID, listId); if (customerList != null && customerList.Rows.Count > 0) { smsList += sFunc.BuildSmsList(customerList); } } } if (!string.IsNullOrEmpty(smsList)) { dataFile = sFunc.BuildDataFile(smsList); if (!string.IsNullOrEmpty(dataFile)) { zipFileName = sFunc.WriteZip(dataFile, campaignXmlFile); sFunc.UploadViaSftp(zipFileName, sftpUrl, sftpUsername, sftpPassword); //Kampanya aktivitesi 100000004->EuroMsg Gönderim Yapıldı olarak UPDATE Ediliyor. SetStateRequest stateRequest = new SetStateRequest() { EntityMoniker = new EntityReference("campaignactivity", campaignActivityID), State = new OptionSetValue(1), Status = new OptionSetValue(100000001) }; SetStateResponse stateResponse = (SetStateResponse)orgService.Execute(stateRequest); Console.WriteLine("Kampanya aktivitesi Euromsg'a başarıyla gönderildi. Aktivite Id : " + campaignActivityID.ToString()); } else { Console.WriteLine("Marketing list için .txt oluşturulamadı."); logMe.Log("SendSmsIntegration - Execute", "Marketing list için .txt oluşturulamadı.", TEMPEventLog.EventType.Info, "new_campaignactivity", dr["CAID"].ToString()); } } } else { Console.WriteLine("Kampanya aktivitesi için XML oluşturulamadı."); logMe.Log("SendSmsIntegration - Execute", "Kampanya aktivitesi için XML oluşturulamadı.", TEMPEventLog.EventType.Info, "new_campaignactivity", dr["CAID"].ToString()); } } else { Console.WriteLine("Kampanya aktivitesine ait pazarlama listesi bulunmamaktadır."); logMe.Log("SendSmsIntegration - Execute", "Kampanya aktivitesine ait pazarlama listesi bulunmamaktadır.", TEMPEventLog.EventType.Info, "new_campaignactivity", dr["CAID"].ToString()); } //} //else //{ // Console.WriteLine("Başlangıç saati gelmediğinden dolayı kampanya aktivitesi Euromsg'a gönderilmedi."); // logMe.Log("SendSmsIntegration - Execute", "Başlangıç saati gelmediğinden dolayı kampanya aktivitesi Euromsg'a gönderilmedi. Kampanya Aktivitesi ID: " + dr["CAID"].ToString(), TEMPEventLog.EventType.Info); //} Console.WriteLine("Kampanya aktivitesi işlemleri bitti."); } Console.WriteLine("Gönderilmeyi bekleyen kampanya aktivitelerinin alınma işlemi sona erdi."); logMe.Log("SendSmsIntegration - Execute", "Gönderilmeyi bekleyen kampanya aktivitelerinin alınma işlemi sona erdi.", TEMPEventLog.EventType.Info); } catch (Exception ex) { Console.WriteLine("İşlemler sırasında bir hata ile karşılaşıldı."); logMe.Log("SendSmsIntegration - Execute", ex, TEMPEventLog.EventType.Exception); } }
public void Execute() { try { logMe.Log("UpdateCampaignActivity - Execute", "UpdateCampaignActivity Uygulaması Başladı.Tarih : " + DateTime.Now.ToString(), TEMPEventLog.EventType.Info); #region | Get Campaign Activity | #region | Query | string queryCA = @"SELECT E.ActivityId CAID, ( SELECT COUNT(0) FROM NEFCUSTOM_MSCRM..EuroMessageMailErrorTable WHERE Error = 1 AND ActivityId = e.ActivityId )FailureCount, ( SELECT COUNT(0) FROM NEFCUSTOM_MSCRM..EuroMessageMailTempTable WHERE Error = 0 AND ActivityId = e.ActivityId AND StatusCode!=5 )EmailCount, ( SELECT COUNT(0) FROM NEFCUSTOM_MSCRM..EuroMessageMailTempTable WHERE Error = 0 AND StatusCode = 100000003 AND ActivityId = e.ActivityId )NoSendEmailCount, ( SELECT COUNT(0) FROM NEFCUSTOM_MSCRM..EuroMessageMailTempTable WHERE ActivityId = e.ActivityId AND Error = 0 AND ( StatusCode = 100000001 OR StatusCode = 1 ) )ResponseWaitingCount FROM NEFCUSTOM_MSCRM..EuroMessageMailTempTable E (NOLOCK), CampaignActivity Ca (NOLOCK) WHERE ca.ActivityId = E.ActivityId --and -- GETDATE() > Ca.new_euromessagereportlimit GROUP BY E.ActivityId"; #endregion | Query | sda.openConnection(Globals.ConnectionString); DataTable dtCA = sda.getDataTable(queryCA); sda.closeConnection(); EmailFunctions eFunc = new EmailFunctions(); foreach (DataRow dr in dtCA.Rows) { if ((int)dr["ResponseWaitingcount"] == 0) { try { Guid campaignActivityId = (Guid)dr["CAID"]; UpdateCampaignActivityStatus(campaignActivityId); } catch (Exception ex) { logMe.Log("UpdateCampaignActivity - Execute", ex, TEMPEventLog.EventType.Exception); } } } #endregion logMe.Log("UpdateCampaignActivity - Execute", "UpdateCampaignActivity Uygulaması Bitti.Tarih : " + DateTime.Now.ToString(), TEMPEventLog.EventType.Info); } catch (Exception ex) { logMe.Log("UpdateCampaignActivity - Execute", ex, TEMPEventLog.EventType.Exception); } }
public void ExecuteResponse() { List <string> filesOnFtp = new List <string>(); FileStream fs; StreamReader sr; FtpWebRequest req; FtpWebResponse res; #region | Result Processing | #region | Get Files on FTP | try { logMe.Log("GetSmsResponse - ExecuteResponse", "GetSmsResponse Uygulaması Başladı.Tarih : " + DateTime.Now.ToString(), TEMPEventLog.EventType.Info); req = FtpWebRequest.Create(ftpAdres) as FtpWebRequest; req.Credentials = new NetworkCredential(ftpUser, ftpPassword); req.Method = WebRequestMethods.Ftp.ListDirectoryDetails; req.UsePassive = true; req.UseBinary = true; req.KeepAlive = false; res = req.GetResponse() as FtpWebResponse; sr = new StreamReader(res.GetResponseStream()); while (sr.BaseStream.CanRead) { System.Console.WriteLine("Okuma işlemi başladı"); string fileName = sr.ReadLine(); if (fileName != null) { int index = fileName.IndexOf("PM"); fileName = fileName.Substring(index + 2); string[] strArray = fileName.Split(' '); string filesOr = strArray[strArray.Length - 1]; if (Path.GetExtension(filesOr).Equals(".zip")) { filesOnFtp.Add(filesOr); } } } } catch (Exception ex) { Console.WriteLine(ex.ToString()); logMe.Log("GetSmsResponse - Execute", "Exception.Message : FTP üzerindeki dosyalara ulaşılamadı.\n\n" + "Exception.DetailedMessage : " + ex.Message, TEMPEventLog.EventType.Exception); } #endregion #region | Delete Files on FTP Older Than 1 Week | foreach (string fileName in filesOnFtp) { try { req = FtpWebRequest.Create(ftpAdres + "/" + fileName) as FtpWebRequest; req.Credentials = new NetworkCredential(ftpUser, ftpPassword); req.Method = WebRequestMethods.Ftp.GetDateTimestamp; req.Proxy = new WebProxy(); res = req.GetResponse() as FtpWebResponse; if (res.LastModified < DateTime.Now.AddDays(-7)) { req = FtpWebRequest.Create(ftpAdres + "/" + fileName) as FtpWebRequest; req.Credentials = new NetworkCredential(ftpUser, ftpPassword); req.Method = WebRequestMethods.Ftp.DeleteFile; req.Proxy = new WebProxy(); res = req.GetResponse() as FtpWebResponse; } } catch (Exception ex) { logMe.Log("GetSmsResponse - Execute", "Exception.Message : FTP üzerinden dosya silme işlemi yapılamadı.\n\n" + "Exception.DetailedMessage : " + ex.Message, TEMPEventLog.EventType.Exception); } } #endregion | Delete Files on FTP Older Than 1 Week | #region | Get Required Files To Local And Send Results To CRM | //Daha önceden yapılan son periyot süresine dahil olan bütün istekler veritabanından çekilir. DataTable requestCampaignFromTempTable = GetRequestedCampaignActivityFromTempTable(orgService); for (int i = 0; i < requestCampaignFromTempTable.Rows.Count; i++) { string item = requestCampaignFromTempTable.Rows[i]["ConversationID"].ToString(); Guid campaignActivityID = new Guid(requestCampaignFromTempTable.Rows[i]["CampaignActivityID"].ToString()); try { #region | Get Files From Nef Ftp | string completePath = zipPath + "\\data.csv.tmp"; if (System.IO.File.Exists(completePath)) { System.IO.File.Delete(completePath); } FtpWebRequest request = (FtpWebRequest)WebRequest.Create(ftpAdres + "/" + item + ".zip"); request.Method = WebRequestMethods.Ftp.DownloadFile; request.Credentials = new NetworkCredential(ftpUser, ftpPassword); FtpWebResponse response = (FtpWebResponse)request.GetResponse(); Stream responseStream = response.GetResponseStream(); FileStream file = File.Create(zipPath + "\\" + item + ".zip"); byte[] buffer = new byte[32 * 1024]; int read; while ((read = responseStream.Read(buffer, 0, buffer.Length)) > 0) { file.Write(buffer, 0, read); } file.Close(); responseStream.Close(); response.Close(); #endregion | Get Files From Nef Ftp | #region | Delete Received File From TempTable | // (18.03.2014) Artık mail sonuçları sürekli kontrol edileceği için bu tablodaki datalar silinmeyecek. Okunurken de periyot süresi içerisinde bulunan datalar okunacak. //string deleteQuery = "DELETE NEFCUSTOM_MSCRM..crmTempMailResponseTable WHERE ConversationID=@ConversationID"; //SqlDataAccess sdaDelete = new SqlDataAccess(); //sda.openConnection(crmService.SQLConnection); //SqlParameter[] parametersInsert = { // new SqlParameter("@ConversationID", item) //}; //sda.ExecuteNonQuery(deleteQuery, parametersInsert); #endregion | Delete Received File From TempTable | #region | Extract Zip File | ZipFile zipFile = ZipFile.Read(zipPath + "\\" + item + ".zip"); zipFile.Password = "******"; zipFile.ExtractAll(zipPath, ExtractExistingFileAction.OverwriteSilently); fs = new FileStream(zipPath + "\\data.csv", FileMode.Open); sr = new StreamReader(fs); bool isHeader = true; while (!sr.EndOfStream) { string[] values = sr.ReadLine().Split(';'); if (!isHeader) { string gsm = values[0].Replace(".", ""); string status = values[2]; string lastChange = values[3]; string deliveryDesc = values[4]; CreateSmsRecord(campaignActivityID, gsm, status, sda, orgService); } else { isHeader = false; } } sr.Close(); fs.Close(); //res.Close(); //res2.Close(); #endregion | Extract Zip File | } catch (Exception ex) { Console.WriteLine(ex.ToString()); logMe.Log("GetSmsResponse - Execute", "Exception.Message : Dosya bulunamadı, Zip dosya açılamadı veya sonuç CRM'e işlenemedi. \n\n" + "Exception.DetailedMessage : " + ex.Message, TEMPEventLog.EventType.Exception, "CampaignActivity", item); continue; } finally { string completePath = zipPath + "\\data.csv.tmp"; if (System.IO.File.Exists(completePath)) { System.IO.File.Delete(completePath); } } } #endregion #endregion logMe.Log("GetSmsResponse - ExecuteResponse", "GetSmsResponse Uygulaması Bitti.Tarih : " + DateTime.Now.ToString(), TEMPEventLog.EventType.Info); }
public void Execute() { DateTime startDate; DateTime endDate; Guid campaignActivityId; Guid ownerId; Guid marketingListId; EMTempProcess emt; try { Console.WriteLine("Mail gönderim uygulaması çalıştı."); logMe.Log("CreateMail - Execute", "Mail oluşturma uygulaması başladı.", TEMPEventLog.EventType.Info); #region Periyodik gönderimler dağıtıldı durumuna çekilir. EmailFunctions eFunc = new EmailFunctions(); //eFunc.TestCampaignActivity(); //eFunc.SetCampaignActivityDistributed(); #endregion // #region | Get Campaign Activity | // // StatusCode değeri 'Dağıtıldı' ve Kanal Tipi 'Email' olan kampanya aktiviteleri alınıyor. // string queryCActivity = @" // SELECT // CA.ActivityId CAID, // DATEADD(HOUR,DATEDIFF(HOUR,GETUTCDATE(),GETDATE()),CA.scheduledend) CASEND, // DATEADD(HOUR,DATEDIFF(HOUR,GETUTCDATE(),GETDATE()),CA.scheduledstart) CAS, // CA.[Subject] CS, // CA.CreatedBy 'owner' // FROM // CampaignActivity CA (NOLOCK) // WHERE // CA.StatusCode = 6 // AND // CA.ChannelTypeCode = 7"; // DataTable dtCActivity = sda.GetDataTable(queryCActivity); // Console.WriteLine("Gönderilmeyi bekleyen kampanya aktiviteleri alındı."); // logMe.Log("CreateMail - Execute", "Gönderilmeyi bekleyen kampanya aktiviteleri alındı. Adet: " + dtCActivity.Rows.Count, TEMPEventLog.EventType.Info); // #endregion | Get Campaign Activity | Console.WriteLine("Email oluşturma işlemleri başladı."); try { //startDate = (DateTime)dr["CAS"]; //endDate = (DateTime)dr["CASEND"]; //campaignActivityId = (Guid)dr["CAID"]; //ownerId = (Guid)dr["owner"]; #region | Process Marketing Lists | //Kampanya aktivitesine ait listeler çekilir. DataTable dtMarketingLists = GetMarketingList(); if (dtMarketingLists != null && dtMarketingLists.Rows.Count > 0) { foreach (DataRow drList in dtMarketingLists.Rows) { marketingListId = new Guid(drList["ListId"].ToString()); try { emt = new EMTempProcess(); bool result = emt.Process(marketingListId.ToString()); // Result true dönerse kampanya aktivitesinin durumu değiştirilir. //if (result) //{ //SetStateRequest stateRequest = new SetStateRequest() //{ // EntityMoniker = new EntityReference("campaignactivity", campaignActivityId), // State = new OptionSetValue(0), // Status = new OptionSetValue(100000003) //}; //SetStateResponse stateResponse = (SetStateResponse)orgService.Execute(stateRequest); //} } catch (Exception ex) { logMe.Log("CreateMail", ex, TEMPEventLog.EventType.Exception, "List", marketingListId.ToString()); continue; } } } #endregion | Process Marketing Lists | } catch (Exception) { throw; } } catch (Exception) { throw; } }
public ProcessResult AddToSendLists(Guid campaignActivityId, string AuthenticationServiceKey, string listName, IOrganizationService service) { try { bool sonuc = false; #region | Query Contact | string queryList = @"SELECT C.FirstName [FirstName], C.LastName [LastName], C.mobilephone [MobilePhone], C.emailaddress1 [EmailAddress], C.ContactId [ContactId] FROM Contact C WITH(NOLOCK) WHERE C.StateCode = 0 AND C.birthdate IS NOT NULL AND LEFT((RIGHT(CONVERT(VARCHAR(10), dbo.fn_UTCToTzSpecificLocalTime(C.birthdate,-120,-60,0,3,5,3,0,0,0,1,0,0,1,5,4,0,0,0,0), 103), 10)), 5) = LEFT((RIGHT(CONVERT(VARCHAR(10), GETDATE(), 103), 10)), 5) AND C.donotphone = 0 AND C.mobilephone IS NOT NULL AND C.new_invalidmobilephone = 0 AND C.emailaddress1 IS NOT NULL" ; sda.openConnection(Globals.ConnectionString); DataTable dt = sda.getDataTable(queryList, new SqlParameter("@campaignActivityId", campaignActivityId)); sda.closeConnection(); #endregion | Query Contact | List <sendlist.live.EmKeyValue[]> demographicDatas = new List <sendlist.live.EmKeyValue[]>(); List <SmsDetail> smsDetails = new List <SmsDetail>(); logMe.Log("SmsFunctions - AddToSendLists", "Listedeki kişi sayısı: " + dt.Rows.Count.ToString() + ", Aktivite ID : " + campaignActivityId, TEMPEventLog.EventType.Info); int counter = 0; foreach (DataRow dr in dt.Rows) { Console.WriteLine("Sayaç:" + counter.ToString()); string firstName = dr["FirstName"] != DBNull.Value ? dr["FirstName"].ToString() : ""; string lastName = dr["LastName"] != DBNull.Value ? dr["LastName"].ToString() : ""; string phoneNumber = dr["MobilePhone"] != DBNull.Value ? dr["MobilePhone"].ToString() : ""; string customerId = dr["ContactId"] != DBNull.Value ? dr["ContactId"].ToString() : ""; string customermailaddress = dr["EmailAddress"] != DBNull.Value ? dr["EmailAddress"].ToString() : ""; //Eğer Contact üzerindeki tüm EPosta alanları boş ise.. if (phoneNumber == "-1") { continue; } sendlist.live.EmKeyValue[] demographicData = { new sendlist.live.EmKeyValue() { Key = "EMAIL", Value = customermailaddress }, new sendlist.live.EmKeyValue() { Key = "Adınız", Value = firstName }, new sendlist.live.EmKeyValue() { Key = "Soyadınız", Value = lastName }, new sendlist.live.EmKeyValue() { Key = "Cep_Telefonunuz", Value = phoneNumber }, new sendlist.live.EmKeyValue() { Key = "CustomerId", Value = customerId } }; demographicDatas.Add(demographicData); counter++; } int packetCount = 0; Console.WriteLine("Kişi Sayısı:" + demographicDatas.Count + " bir tuşa basınız"); if (demographicDatas.Count > 0) { packetCount = demographicDatas.Count / 2000; } Console.WriteLine("Paket Sayısı:" + packetCount.ToString() + " Devam etmek için tuşa basınız"); List <BulkDetailedResult> resultList = new List <BulkDetailedResult>(); for (int i = 0; i <= packetCount; i++) { Console.WriteLine("Paket Sayısı:" + demographicDatas.Skip(2000 * i).Take(2000).ToArray().Length.ToString()); BulkDetailedResult[] results; SendList sendListService = new SendList(); sendListService.Timeout = 10000000; Console.WriteLine("Toplu gönderim yapılacak.Bir tuşa basınız."); EmSendListResult result = sendListService.AddBulk(AuthenticationServiceKey, "CRM", listName, "EMAIL", demographicDatas.Skip(2000 * i).Take(2000).ToArray(), true, out results); if (result.Code == "00") { resultList.AddRange(results); Console.WriteLine(i.ToString() + ". Paket Gönderildi.Bir Tuşa Basınız."); } else { Console.WriteLine("Hata:" + result.DetailedMessage); } } if (resultList.Count > 0) { sonuc = true; Console.WriteLine("Kampanya Gönderildi. Adet:" + resultList.Count.ToString()); } else { return(new ProcessResult(false, "Hata", "Liste EuroMsg tarafına iletilemedi.")); } if (sonuc == true) { return(new ProcessResult(true, "", "00")); } else { return(new ProcessResult(false, "", "99")); } } catch (Exception ex) { return(new ProcessResult(false, "", ex.StackTrace)); } }
public void Execute() { try { logMe.Log("GetFilteredMembers - Execute", "GetFilteredMembers Uygulaması Başladı.Tarih : " + DateTime.Now.ToString(), TEMPEventLog.EventType.Info); Console.WriteLine("Üye filtreleme işlemleri başladı."); string authentication = eFunc.AuthenticationEM(); //Daha önce yapılan istekler veritabanından alınır. DataTable requested = GetRequestedMembersFromTempTable(); int requestCount = 0; if (requested != null) { requestCount = requested.Rows.Count; } else { requestCount = 0; } logMe.Log("GetFilteredMembers - Execute", "Daha önce yapılan istekler veritabanından alındı. Adet : " + requestCount + ". Tarih : " + DateTime.Now.ToString(), TEMPEventLog.EventType.Info); if (requested != null && requested.Rows.Count > 0) { //Her bir istek için veritabanına kayıt edilen ID ile FTP'den dosya alınır. foreach (DataRow dr in requested.Rows) { try { string conversationID = dr["ConversationID"].ToString(); int type = Convert.ToInt32(dr["Type"]); //Type = 1 ise; üyelikten ayrılmak isteyen kişilerin izinleri değiştirilir. //Type = 2 ise; mail adresi sistemden kaldırılır. logMe.Log("GetFilteredMembers - Execute", "GetMember methodu çağırılıyor. Tarih : " + DateTime.Now.ToString(), TEMPEventLog.EventType.Info); GetMember(authentication, conversationID, type); //İşlem yapılan istek bilgisi veritabanından silinir. logMe.Log("GetFilteredMembers - Execute", "DeleteFromTempTable methodu çağırılıyor. Tarih : " + DateTime.Now.ToString(), TEMPEventLog.EventType.Info); DeleteFromTempTable(conversationID); } catch (Exception ex) { logMe.Log("GetFilteredMembers - Execute", ex, TEMPEventLog.EventType.Exception); continue; } } } else { //Üyelikten kendi isteği ile ayrılmış kişileri getirir. string passiveConversationID = PassiveMembers(authentication, "X", "Y"); InsertTempTable(passiveConversationID, 1); //Geçersiz mail adreslerini getirir. string wrongMailConversationID = PassiveMembers(authentication, "A", "N"); InsertTempTable(wrongMailConversationID, 2); } Console.WriteLine("Üye filtreleme işlemleri bitti."); eFunc.LogoutEM(authentication); logMe.Log("GetFilteredMembers - Execute", "GetFilteredMembers Uygulaması Bitti.Tarih : " + DateTime.Now.ToString(), TEMPEventLog.EventType.Info); } catch (Exception ex) { logMe.Log("GetFilteredMembers - Execute", "Execute işleminde hata alındı. Hata mesajı = " + ex.Message, TEMPEventLog.EventType.Exception); } }
public void Execute() { List <string> filesOnFtp = new List <string>(); FileStream fs; StreamReader sr; FtpWebRequest req; FtpWebResponse res; #region | Result Processing | #region | Get Files on FTP | try { logMe.Log("GetEmailResponse - Execute", "GetEmailResponse Uygulaması Başladı.Tarih : " + DateTime.Now.ToString(), TEMPEventLog.EventType.Info); req = FtpWebRequest.Create(ftpAdres) as FtpWebRequest; req.Credentials = new NetworkCredential(ftpUser, ftpPassword); req.Method = WebRequestMethods.Ftp.ListDirectoryDetails; req.UsePassive = true; req.UseBinary = true; req.KeepAlive = false; res = req.GetResponse() as FtpWebResponse; sr = new StreamReader(res.GetResponseStream()); while (sr.BaseStream.CanRead) { System.Console.WriteLine("Okuma işlemi başladı"); string fileName = sr.ReadLine(); if (fileName != null) { int index = fileName.IndexOf("PM"); fileName = fileName.Substring(index + 2); string[] strArray = fileName.Split(' '); filesOnFtp.Add(strArray[strArray.Length - 1]); } } } catch (Exception ex) { Console.WriteLine(ex.ToString()); logMe.Log("GetEmailResponse - Execute", "Exception.Message : FTP üzerindeki dosyalara ulaşılamadı.\n\n" + "Exception.DetailedMessage : " + ex.Message, TEMPEventLog.EventType.Exception); } #endregion #region | Delete Files on FTP Older Than 1 Week | foreach (string fileName in filesOnFtp) { try { req = FtpWebRequest.Create(ftpAdres + "/" + fileName) as FtpWebRequest; req.Credentials = new NetworkCredential(ftpUser, ftpPassword); req.Method = WebRequestMethods.Ftp.GetDateTimestamp; req.Proxy = new WebProxy(); res = req.GetResponse() as FtpWebResponse; if (res.LastModified < DateTime.Now.AddDays(-7)) { req = FtpWebRequest.Create(ftpAdres + "/" + fileName) as FtpWebRequest; req.Credentials = new NetworkCredential(ftpUser, ftpPassword); req.Method = WebRequestMethods.Ftp.DeleteFile; req.Proxy = new WebProxy(); res = req.GetResponse() as FtpWebResponse; } } catch (Exception ex) { logMe.Log("GetEmailResponse - Execute", "Exception.Message : FTP üzerinden dosya silme işlemi yapılamadı.\n\n" + "Exception.DetailedMessage : " + ex.Message, TEMPEventLog.EventType.Exception); } } #endregion | Delete Files on FTP Older Than 1 Week | #region | Get Required Files To Local And Send Results To CRM | //Daha önceden yapılan son periyot süresine dahil olan bütün istekler veritabanından çekilir. DataTable requestCampaignFromTempTable = GetRequestedCampaignActivityFromTempTable(orgService); for (int i = 0; i < requestCampaignFromTempTable.Rows.Count; i++) { string item = requestCampaignFromTempTable.Rows[i]["ConversationID"].ToString(); Guid campaignActivityID = new Guid(requestCampaignFromTempTable.Rows[i]["CampaignActivityID"].ToString()); try { #region | Get Files From Nef Ftp | string completePath = zipPath + "\\data.csv.tmp"; if (System.IO.File.Exists(completePath)) { System.IO.File.Delete(completePath); } FtpWebRequest request = (FtpWebRequest)WebRequest.Create(ftpAdres + "/" + item + ".zip"); request.Method = WebRequestMethods.Ftp.DownloadFile; request.Credentials = new NetworkCredential(ftpUser, ftpPassword); FtpWebResponse response = (FtpWebResponse)request.GetResponse(); Stream responseStream = response.GetResponseStream(); FileStream file = File.Create(zipPath + "\\" + item + ".zip"); byte[] buffer = new byte[32 * 1024]; int read; while ((read = responseStream.Read(buffer, 0, buffer.Length)) > 0) { file.Write(buffer, 0, read); } file.Close(); responseStream.Close(); response.Close(); #endregion | Get Files From Nef Ftp | #region | Extract Zip File | ZipFile zipFile = ZipFile.Read(zipPath + "\\" + item + ".zip"); zipFile.Password = "******"; zipFile.ExtractAll(zipPath, ExtractExistingFileAction.OverwriteSilently); fs = new FileStream(zipPath + "\\data.csv", FileMode.Open); sr = new StreamReader(fs); bool isHeader = true; while (!sr.EndOfStream) { string[] values = sr.ReadLine().Split(';'); if (!isHeader) { string email = values[0]; string status = values[1]; string lastChangeTime = values[2]; string isMarkedSpam = values[3]; string isClicked = values[4]; CreateEmailRecord(campaignActivityID, email, status, sda, orgService); } else { isHeader = false; } } sr.Close(); fs.Close(); #endregion | Extract Zip File | } catch (Exception ex) { Console.WriteLine(ex.ToString()); logMe.Log("GetEmailResponse Execute", "Exception.Message : Dosya bulunamadı, Zip dosya açılamadı veya sonuç CRM'e işlenemedi. \n\n" + "Exception.DetailedMessage : " + ex.Message, TEMPEventLog.EventType.Exception, "CampaignActvity", item); continue; } finally { string completePath = zipPath + "\\data.csv.tmp"; if (System.IO.File.Exists(completePath)) { System.IO.File.Delete(completePath); } } } #endregion #endregion #region | Result Requesting | Login(); DataTable campaignActivities = GetCampaignIdsToBeRequested(sda); if (campaignActivities != null && campaignActivities.Rows.Count > 0) { foreach (DataRow dr in campaignActivities.Rows) { string campaignActivityID = dr["CAID"].ToString(); CreateRequest(campaignActivityID, orgService); } } Logout(); #endregion logMe.Log("GetEmailResponse - Execute", "GetEmailResponse Uygulaması Bitti.Tarih : " + DateTime.Now.ToString(), TEMPEventLog.EventType.Info); }
public void Execute() { string campaignXmlFile = string.Empty; string smsList = string.Empty; string dataFile = string.Empty; string zipFileName = string.Empty; Guid listId = Guid.Empty; Console.WriteLine("SMS gönderim uygulaması çalıştı."); try { logMe.Log("SendSmsIntegration - Execute", "Mail gönderim uygulaması başladı.", TEMPEventLog.EventType.Info); SmsFunctions sFunc = new SmsFunctions(); Console.WriteLine("Kampanya aktivitesi işlemleri başladı."); //if ((DateTime.Now.Hour == startDate.Hour && DateTime.Now.Minute >= startDate.Minute) || (DateTime.Now.Hour > startDate.Hour)) //{ //Kampanya aktivitesine ait listeler çekilir. DataTable marketingLists = GetMarketingList(sda); //Eğer kampanya aktivitesi altında pazarlama listesi yoksa herhangi bir işlem yapılmaz. if (marketingLists != null && marketingLists.Rows.Count > 0) { foreach (DataRow drList in marketingLists.Rows) { listId = new Guid(drList["ListId"].ToString()); if (listId != Guid.Empty) { //Pazarlama listesine eklenen müsteriler çekilir. DataTable customerList = sFunc.GetCustomerList(sda, listId); Console.WriteLine("Data Alındı"); if (customerList != null && customerList.Rows.Count > 0) { smsList += sFunc.BuildSmsList(customerList); } Console.WriteLine("Sms Listsi oluşturuldu."); if (!string.IsNullOrEmpty(smsList)) { dataFile = sFunc.BuildDataFile(smsList, drList["ListName"].ToString()); smsList = string.Empty; Console.WriteLine(customerList.Rows.Count); if (!string.IsNullOrEmpty(dataFile)) { zipFileName = sFunc.WriteZip(dataFile, drList["ListName"].ToString()); sFunc.UploadViaSftp(zipFileName, sftpUrl, sftpUsername, sftpPassword); UpdateMarkengListStatus(listId); } else { Console.WriteLine("Marketing list için .txt oluşturulamadı."); logMe.Log("SendSmsIntegration - Execute", "Marketing list için .txt oluşturulamadı.", TEMPEventLog.EventType.Info, "List", listId.ToString()); } } } } } else { Console.WriteLine("Kampanya aktivitesine ait pazarlama listesi bulunmamaktadır."); logMe.Log("SendSmsIntegration - Execute", "Kampanya aktivitesine ait pazarlama listesi bulunmamaktadır.", TEMPEventLog.EventType.Info, "new_campaignactivity", listId.ToString()); } //} //else //{ // Console.WriteLine("Başlangıç saati gelmediğinden dolayı kampanya aktivitesi Euromsg'a gönderilmedi."); // logMe.Log("SendSmsIntegration - Execute", "Başlangıç saati gelmediğinden dolayı kampanya aktivitesi Euromsg'a gönderilmedi. Kampanya Aktivitesi ID: " + dr["CAID"].ToString(), TEMPEventLog.EventType.Info); //} Console.WriteLine("Kampanya aktivitesi işlemleri bitti."); Console.WriteLine("Gönderilmeyi bekleyen kampanya aktivitelerinin alınma işlemi sona erdi."); logMe.Log("SendSmsIntegration - Execute", "Gönderilmeyi bekleyen kampanya aktivitelerinin alınma işlemi sona erdi.", TEMPEventLog.EventType.Info); } catch (Exception ex) { Console.WriteLine("İşlemler sırasında bir hata ile karşılaşıldı."); logMe.Log("SendSmsIntegration - Execute", ex, TEMPEventLog.EventType.Exception); } }
internal void Execute() { DateTime startDate; DateTime endDate; Guid campaignActivityId; Guid ownerId; Guid marketingListId; EMTempProcess emt; try { Console.WriteLine("Sms gönderim uygulaması çalıştı."); logMe.Log("CreateSms - Execute", "Sms oluşturma uygulaması başladı.", TEMPEventLog.EventType.Info); #region Periyodik gönderimler dağıtıldı durumuna çekilir. SmsFunctions sFunc = new SmsFunctions(); sFunc.TestCampaignActivity(); // sFunc.SetCampaignActivityDistributed(); #endregion #region | Get Campaign Activity | // StatusCode değeri 'Dağıtıldı' ve Kanal Tipi 'SMS' olan kampanya aktiviteleri alınıyor. string queryCActivity = @" SELECT CA.ActivityId CAID, DATEADD(HOUR,DATEDIFF(HOUR,GETUTCDATE(),GETDATE()),CA.scheduledend) CASEND, DATEADD(HOUR,DATEDIFF(HOUR,GETUTCDATE(),GETDATE()),CA.scheduledstart) CAS, CA.[Subject] CS, CA.CreatedBy 'owner' FROM CampaignActivity CA (NOLOCK) WHERE CA.StatusCode = 6 AND CA.ChannelTypeCode = 3" ; sda.openConnection(Globals.ConnectionString); DataTable dtCActivity = sda.getDataTable(queryCActivity); sda.closeConnection(); Console.WriteLine("Gönderilmeyi bekleyen kampanya aktiviteleri alındı."); logMe.Log("CreateSms - Execute", "Gönderilmeyi bekleyen kampanya aktiviteleri alındı. Adet: " + dtCActivity.Rows.Count, TEMPEventLog.EventType.Info); #endregion | Get Campaign Activity | foreach (DataRow dr in dtCActivity.Rows) { Console.WriteLine("SMS oluşturma işlemleri başladı."); try { startDate = (DateTime)dr["CAS"]; endDate = (DateTime)dr["CASEND"]; campaignActivityId = (Guid)dr["CAID"]; ownerId = (Guid)dr["owner"]; #region | Process Marketing Lists | //Kampanya aktivitesine ait listeler çekilir. DataTable dtMarketingLists = GetMarketingList(campaignActivityId); if (dtMarketingLists != null && dtMarketingLists.Rows.Count > 0) { foreach (DataRow drList in dtMarketingLists.Rows) { try { marketingListId = new Guid(drList["ListId"].ToString()); emt = new EMTempProcess(); bool result = emt.Process(campaignActivityId.ToString(), marketingListId.ToString(), ownerId.ToString(), startDate, endDate); // Result true dönerse kampanya aktivitesinin durumu değiştirilir. if (result) { SetStateRequest stateRequest = new SetStateRequest() { EntityMoniker = new EntityReference("campaignactivity", campaignActivityId), State = new OptionSetValue(0), Status = new OptionSetValue(100000000) }; SetStateResponse stateResponse = (SetStateResponse)orgService.Execute(stateRequest); } } catch (Exception ex) { logMe.Log("CreateSMS", ex, TEMPEventLog.EventType.Exception, "CampaignActivity", campaignActivityId.ToString()); continue; } } } #endregion | Process Marketing Lists | } catch (Exception) { throw; } } } catch (Exception) { throw; } }
internal void Execute() { DateTime startDate; DateTime endDate; Guid campaignActivityId; Guid ownerId; Guid marketingListId; EMTempProcess emt; try { Console.WriteLine("Sms gönderim uygulaması çalıştı."); logMe.Log("CreateSms - Execute", "Sms oluşturma uygulaması başladı.", TEMPEventLog.EventType.Info); Console.WriteLine("SMS oluşturma işlemleri başladı."); try { #region | Process Marketing Lists | //Kampanya aktivitesine ait listeler çekilir. DataTable dtMarketingLists = GetMarketingList(); if (dtMarketingLists != null && dtMarketingLists.Rows.Count > 0) { foreach (DataRow drList in dtMarketingLists.Rows) { try { marketingListId = new Guid(drList["ListId"].ToString()); emt = new EMTempProcess(); bool result = emt.Process(marketingListId.ToString()); //// Result true dönerse kampanya aktivitesinin durumu değiştirilir. //if (result) //{ // SetStateRequest stateRequest = new SetStateRequest() // { // EntityMoniker = new EntityReference("campaignactivity", campaignActivityId), // State = new OptionSetValue(0), // Status = new OptionSetValue(100000003) // }; // SetStateResponse stateResponse = (SetStateResponse)orgService.Execute(stateRequest); //} } catch (Exception ex) { logMe.Log("CreateSMS", ex, TEMPEventLog.EventType.Exception, ":List", drList["ListId"].ToString()); continue; } } } #endregion | Process Marketing Lists | } catch (Exception) { throw; } } catch (Exception) { throw; } }