2016-09-28 11 views
0

私は電子メールを自動的に呼び出すシステムを持っています。 私がしたいのは、今日のシステムトラップが、私は の異なるテーブルを1つの電子メールで作成したいと思っています。別のテーブルを1つのメールに追加する

現在のところ、私のシステムは1日あたりの電子メールを呼び出すことができます。

これは私が達成したいものです。

「有効期限製品の一覧を火曜日の表は、」(同じ火曜日と木曜日に)

火曜日 - 「水曜日の有効期限製品のリスト」:

例今日は、システムがお送りします月曜日です

水曜日 - "木曜日の有効期限製品の一覧"

木曜日 - 「金曜日の有効期限製品の一覧」

、私はこのような3日間の有効期限製品のリストを電子メールで送信したい日が金曜日であれば:以下

の有効期限が切れる製品のリストがあります土曜日から月曜日。 (各日は1つのメールで異なる表があります)このように:

以下はtableの有効期限のリストです。

現在のところ、私のシステムは1日にメールを送信できます。私はどのように私は 金曜日の電子メールの爆発のための出力を達成するつもりかもしれないのか分からない。ここで

は、私がこれまで持っているものです:

私は2つの異なるサブクラスを作成しました。私の1つのサブクラスは、月曜日から木曜日の のメール設定で、もう1つは金曜日のメール設定で、3日ごとに異なるテーブルを構成しています。

Sub EmailMondayThursday 

Dim ds As New DataSet 
    Dim cmd As New SqlCommand 
    Dim dt As New DataTable 
    Dim adp As New SqlDataAdapter 
    Dim c As New SqlConnection("myconnectionhere") 
    Dim emaildate As String 
emaildate = DateTime.Today.AddDays(1).Date.ToString("D") 
    cmd.Connection = c 
    cmd.CommandText = "sp_progspot_monitor" 
    cmd.Parameters.AddWithValue("@prdname", "%") 
    cmd.Parameters.AddWithValue("@prdcde", "%") 
    cmd.Parameters.AddWithValue("@prdfrdate", Date.Today.AddDays(1)) 
    cmd.Parameters.AddWithValue("@prdtodate", Date.Today.AddDays(1)) 
    cmd.Parameters.AddWithValue("@cost", "%") 
    cmd.CommandType = CommandType.StoredProcedure 
    adp.SelectCommand = cmd 
    adp.Fill(ds) 

Dim dv As New DataView(ds.Tables(0)) 
    Dim dvfilter As DataTable = dv.ToTable(True, {"teledte"}) 
    Dim dt2 As New DataTable 
    For Each dtrow As DataRow In dvfilter.Rows 
     dv.RowFilter = "Total_Load < Potential_Load" 
     dt2 = dv.ToTable(False, {"Date", "Prouduct Name", "Product Code", "Total Sales"}) 
    Next 

Dim builder As New StringBuilder 
builder.Append("<!DOCTYPE html><html>") 
builder.Append("<head></head>") 
builder.Append("<table>") 
builder.Append("<tr>") 
builder.Append("<th>Date</th>") 
builder.Append("<th>Product Name</th>") 
    builder.Append("<th>Product Code</th>") 
    builder.Append("<th>Total Sales</th>") 
builder.Append("<tr>") 
builder.Append("</table>") 
builder.Append("</html>") 
For Each row As DataRow In dt2.Rows 
     builder.Append("<tr>") 
     Dim i As Integer 
     i = 1 
     For Each col As DataColumn In dt2.Columns 
      builder.Append("<td class=""" & i & """>" & row(col).ToString + " " & "</td>") 
      i = i + 1 
     Next 
     builder.Append("</tr>") 
     builder.AppendLine() 
    Next 
builder.Append("</tbody>") 
    builder.Append("</table>") 
setemail("[email protected]", "pass", builder.ToString) 

End Subの

そして、ここでは、システムがその日知っているとき、それは条件付きで送信されますようにFridayEmail

Dim ds As New DataSet 
     Dim cmd As New SqlCommand 
     Dim dt As New DataTable 
     Dim adp As New SqlDataAdapter 
     Dim c As New SqlConnection("myconnectionhere") 
     Dim emaildtefrm As String 
    dim emaildteto as String 
    emaildtefrm = DateTime.Today.AddDays(1).Date.ToString("D") 
    emaildteto = DateTime.Today.AddDays(3).Date.ToString("D")   
    cmd.Connection = c 
     cmd.CommandText = "sp_progspot_monitor" 
     cmd.Parameters.AddWithValue("@prdname", "%") 
     cmd.Parameters.AddWithValue("@prdcde", "%") 
     cmd.Parameters.AddWithValue("@prdfrdate", Date.Today.AddDays(1)) 
     cmd.Parameters.AddWithValue("@prdtodate", Date.Today.AddDays(3)) 
     cmd.Parameters.AddWithValue("@cost", "%") 
     cmd.CommandType = CommandType.StoredProcedure 
     adp.SelectCommand = cmd 
     adp.Fill(ds) 

    Dim dv As New DataView(ds.Tables(0)) 
     Dim dvfilter As DataTable = dv.ToTable(True, {"teledte"}) 
     Dim dt2 As New DataTable 
     For Each dtrow As DataRow In dvfilter.Rows 
      dv.RowFilter = "Total_Load < Potential_Load" 
      dt2 = dv.ToTable(False, {"Date", "Prouduct Name", "Product Code", "Total Sales"}) 
     Next 

    Dim builder As New StringBuilder 
    builder.Append("<!DOCTYPE html><html>") 
    builder.Append("<head></head>") 
    builder.Append("<body>") 
    builder.Append("<p> Below is the list of expiry product from " & emaildtefrm & "to" & emaildteto & "</p>") 
    builder.Append("<table>") 
    builder.Append("<tr>") 
    builder.Append("<th>Date</th>") 
    builder.Append("<th>Product Name</th>") 
     builder.Append("<th>Product Code</th>") 
     builder.Append("<th>Total Sales</th>") 
    builder.Append("<tr>") 
    builder.Append("</table>") 
    builder.Append("</html>") 
    For Each row As DataRow In dt2.Rows 
      builder.Append("<tr>") 
      Dim i As Integer 
      i = 1 
      For Each col As DataColumn In dt2.Columns 
       builder.Append("<td class=""" & i & """>" & row(col).ToString + " " & "</td>") 
       i = i + 1 
      Next 
      builder.Append("</tr>") 
      builder.AppendLine() 
     Next 
    builder.Append("</tbody>") 
     builder.Append("</table>") 
    setemail("[email protected]", "pass", builder.ToString) 

このコードのための私のサブクラスは、今日一日をトラップするためですその条件に基づいた電子メール。

プロテクトサブImageButton1_Click(送信者としてオブジェクト、eはSystem.Web.UI.ImageClickEventArgs)ImageButton1を処理します。

Dim daytoday As String = DateTime.Today.DayOfWeek 

    If daytoday.ToString = "1" or Then 
     EmailMondayThursday() 
    ElseIf daytoday.ToString = "4" Then 
     MsgBox("Thursday") 

    ElseIf daytoday .ToString = "5" Then 
    ProgSpotEmailFriday() 
    End If 

End Sub 

出力は次のようであるサブクラスFridayEmailに問題がクリック: enter image description here

何私が達成したいことは金曜日のためのあなたの出力を単一のに含まれている enter image description here

答えて

0

の下のようなものがありますデータテーブルを作成し、それを反復処理すると、単一のテーブルとして扱うことになります。 3つのテーブルを1日に1つずつ持つか、それを単一のデータテーブルとして持つ必要がありますが、グループを3つのグループにするためにデータをグループ化してから、データテーブルの行を反復処理し、 HTMLの場合、このコードを別のループ内でループ処理し、ループ内でHTMLテーブルを作成するので、コードはこのようになります。VB <私はpsudoコードとして追加しました

データテーブル= dv.ToTableように、新しいデータビュー(ds.Tables(0)) 薄暗いdvfilter(真、{ "teledte"})dvfilter.Rows DVでのDataRow、各dtrowについて新しいデータテーブルとして 薄暗いDT2として

薄暗いのDV .RowFilter = "Total_Load < Potential_Load" DT2 = dv.ToTable(偽、{ "日付"、 "Prouduct名前"、 "商品コード"、 "総売上"}) 次

Dim builder As New StringBuilder 
builder.Append("<!DOCTYPE html><html>") 
builder.Append("<head></head>") 
builder.Append("<body>") 
builder.Append("<p> Below is the list of expiry product from " & emaildtefrm & "to" & emaildteto & "</p>") 

For Each from emaildtefrm to emaildteto 

builder.Append("<table>") 
builder.Append("<tr>") 
builder.Append("<th>Date</th>") 
builder.Append("<th>Product Name</th>") 
    builder.Append("<th>Product Code</th>") 
    builder.Append("<th>Total Sales</th>") 
builder.Append("<tr>") 
builder.Append("</table>") 
builder.Append("</html>") 
dim dayProducts as DataTable = dt2.Select(get only products for this day) 
For Each row As DataRow In dayProducts .Rows 
     builder.Append("<tr>") 
     Dim i As Integer 
     i = 1 
     For Each col As DataColumn In dt2.Columns 
      builder.Append("<td class=""" & i & """>" & row(col).ToString + " " & "</td>") 
      i = i + 1 
     Next 
     builder.Append("</tr>") 
     builder.AppendLine() 
     Next 
     builder.Append("</tbody>") 
     builder.Append("</table>") 
Next 
builder.Append("</body>") 


setemail("[email protected]", "pass", builder.ToString) 
+0

申し訳ありませんが、あなたの答えは、エラーに満ちています。また、私はそれを取得しません。ごめんなさい。それでもあなたが与えた論理を試してみます。ありがとうございました。 –

+0

はい、それは私がVBを知らない理由ですが、アイデアは1つではなく3つのテーブルを描くことです。製品のデータテーブルを取得した後、3つのテーブルに分割して1つのHTMLテーブルを構築しますそれぞれを1つずつ追加して最終的なメール本文に追加してください。 –

+0

これは私の質問を投稿する前にやろうとしていることです。私はそのような出力を達成する方法をまだ混乱させています。私は本当にどこから始めるべきか分からない:( –

関連する問題