none
foreach com List<> RRS feed

  • Pergunta

  • Olá pessoal. Tenho um caso chato aqui.
    Imaginem que em uma tabela para registrar os erros encontrados em um cadastro qualquer eu tenha os campos:

    ID   Nome   Endereco    Email DescErro   TipoErro

    Agora imaginem que eu queira enviar um email para o usuario com os erros encontrados, até ai seria muito simples, mas eu quero enviar apenas uma mensagem para o usuario com todos os erros de um determinado tipo, ou seja se houver um registro "Jorge" com 4 ocorrencias de um determinado tipo de erro, eu quero enviar as quatro ocorrencias em um mesmo email. ja tentei de várias maneiras, mas não consegui. se alguém puder me ajudar o meu ´código para esta rotina está assim:

    public void BuiderMail(EventHandler<FindEventArgs> handlerFind, EventHandler<ItemProcessadoEventArgs> handlerEmail)
            {
                int enviados = 0;
                int itensRestantes = 0;
                string strNomeFantasia = string.Empty;
                string strEmailAgrupar = string.Empty;
                string strTipoObservacao = string.Empty;
                string strObservacao = string.Empty;
                string body = string.Empty;
                List<ItemOfertaProblema> listObeservacao = new List<ItemOfertaProblema>();
                List<ItemOfertaProblema> listObsGroup    = new List<ItemOfertaProblema>();
     
                ItemOfertaProblema[] itensOfertaProblema = Find();
     
                ItemOfertaProblema[] itensOfertaProblemaGroup = Find();
     
                Imovelweb.FindEventArgs e = new Imovelweb.FindEventArgs(itensOfertaProblema.Length);
     
                itensRestantes = e.TotalItems;
     
                handlerFind(null, e);
     
                int count = 0;
                int inte = 0;
                
                foreach (ItemOfertaProblema item1 in itensOfertaProblema)
                {
                        strTipoObservacao = MakeMessageMail.GetBodyTipo(item1.Observacao, ref inte);
                       
                        count++;
                    bool adicionar = true;
     
                    foreach (ItemOfertaProblema item2 in itensOfertaProblemaGroup)
                    {
                        if (item1.Observacao == item2.Observacao)
                        {
                            adicionar = true;
                            break;
                        }
                    }
     
                    if (adicionar)
                    {
                        listObsGroup.Add(item1);
                    }
                }
      
                foreach (ItemOfertaProblema item in itensOfertaProblemaGroup)       
                {
                            strNomeFantasia = item.NomeFantasia;
                            strEmailAgrupar = item.Email;
     
                            listObsGroup.Add(item);       
     
     
                            body = MakeMessageMail.GetMakeMailHeader();
     
                            body += MakeMessageMail.GetMakeMailMiddle(item);
     
                            body += MakeMessageMail.GetMakeMailButton();
     
                            body = MakeMessageMail.MakeMailBody(strNomeFantasia, strTipoObservacao, body);
     
                            SendMail(ConfigStateOfertaProblema.SMTP, ConfigStateOfertaProblema.FromAddress, ConfigStateOfertaProblema.FromDisplayName, strEmailAgrupar, strNomeFantasia, body, ConfigStateOfertaProblema.Subject);
                 }
                        enviados++;
                        itensRestantes--;
     
                        handlerEmail(null, new Imovelweb.ItemProcessadoEventArgs(enviados, itensRestantes)); 
                }


    Alguém pode me audar? Desde já agradeço!!
     
    sábado, 14 de março de 2009 17:42

Respostas

  •  ola, bom o que você pode utilizar é a variavel text.StringBulder , aonde você acumula as menssagem por linhas e envia tudo junto em um só email.. segue um ex.

    Dim Sb As Text.StringBuilder = New Text.StringBuilder()

        For Each dr As Data.DataRow In Dt.Rows

        Sb.Append("OBS:")
        Sb.Append(dr(
    "Item").ToString())
        Sb.Append(
    " Nome :")
        Sb.Append(dr(
    "Nome").ToString())
        Sb.AppendLine() 'fechar linha

    Next

    ' enviar email com a variavel com as msn acumuladas ( sb.ToString )
    Email.EnviaMensagemEmail
    (vFrom, vEmailFinanceiro,
    "", "", vsubject, Sb.ToString, vSMTP)

    é isso ai

    inté;


    Rafael N. Miranda
    segunda-feira, 16 de março de 2009 17:09

Todas as Respostas

  •  ola, bom o que você pode utilizar é a variavel text.StringBulder , aonde você acumula as menssagem por linhas e envia tudo junto em um só email.. segue um ex.

    Dim Sb As Text.StringBuilder = New Text.StringBuilder()

        For Each dr As Data.DataRow In Dt.Rows

        Sb.Append("OBS:")
        Sb.Append(dr(
    "Item").ToString())
        Sb.Append(
    " Nome :")
        Sb.Append(dr(
    "Nome").ToString())
        Sb.AppendLine() 'fechar linha

    Next

    ' enviar email com a variavel com as msn acumuladas ( sb.ToString )
    Email.EnviaMensagemEmail
    (vFrom, vEmailFinanceiro,
    "", "", vsubject, Sb.ToString, vSMTP)

    é isso ai

    inté;


    Rafael N. Miranda
    segunda-feira, 16 de março de 2009 17:09
  • Vlw Rafael,

    Funcionou, só precisei converter o código pra c# e depois adequar ao meu projeto.

    Muito obrigado
    terça-feira, 17 de março de 2009 12:39