Italian [B4A] Aggiungere BCC ad una mail da CLV

Aldo's

Active Member
Licensed User
Buongiorno a tutti.
Io ho una clv che contiene 2 oggetti: una checkbox (chbCogNome) e una label (lblMail).
Il mio obiettivo è mandare una mail a tutti i contatti selezionati tramite checkbox.
Il codice che ho scritto è il seguente:
B4X:
Private Sub bttInvia_Click
    Dim email As Email
    email.To.Add("[email protected]")
    For i = 0 To clvMail.Size-1
        For Each checkbox In clvMail.GetPanel(i).GetAllViewsRecursive
            If chbCogNome.Checked Then
                email.BCC.Add(lblMail.Text)
            End If
        Next
    Next
    email.Subject = txtOggetto.Text
    email.Body = txtCorpo.text
    Dim In As Intent = email.GetIntent
    In.Flags=1
    StartActivity(In)
End Sub
Ovviamente (altrimenti non avrei aperto il post) non funziona, nel senso che apre regolarmente il programma di posta ma non inserisce nessun nominativo pur selezionando alcuni checkbox.
Dove sbaglio?
Grazie
 

LucaMs

Expert
Licensed User
Longtime User
B4X:
        For Each checkbox In clvMail.GetPanel(i).GetAllViewsRecursive
            If chbCogNome.Checked Then
                email.BCC.Add(lblMail.Text)
            End If
        Next

A parte il fatto che potresti mettere un log dopo l'If (o un breackpoint su "email.BCC.Add..."), per verificare che l'indirizzo venga aggiunto, devi prendere la lblMail associata alla checkbox.
 

Aldo's

Active Member
Licensed User
A parte il fatto che potresti mettere un log dopo l'If, per verificare che l'indirizzo venga aggiunto, devi prendere la lblMail associata alla checkbox.
Ho messo un log, ma il risultato è nullo, cioè non inserisce nessun indirizzo mail.
 

LucaMs

Expert
Licensed User
Longtime User
Un metodo generale migliore, per gestire dati inseriti nelle xCLV, secondo me, è di creare dei custom type che rappresentino i dati di ogni item della xCLV ed usarli per associare una variabile di quel tipo all'item, ovvero il value dell'item.

Esempio. Mettiamo che ogni item contenga nome, cognome ed età di una persona. Anziché effettuare un ciclo sulla xCLV e prelevare i valori dalle view, prelevare il solo value dell'item, che sarà un:
Type tPersona(Nome As String, Cognome As String, Eta As Int)

Insomma, lavorare più sui dati che sull'interfaccia grafica.
 

Aldo's

Active Member
Licensed User
Insomma, lavorare più sui dati che sull'interfaccia grafica.
Si, ma è dall'interfaccia grafica che devo verificare se il checkbox è true o false.
Il problema penso sia in questa operazione.
 

LucaMs

Expert
Licensed User
Longtime User
Ho messo un log, ma il risultato è nullo, cioè non inserisce nessun indirizzo mail.
Già, svegliandomi un po' :) e rileggendo...

For Each checkbox In clvMail.GetPanel(i).GetAllViewsRecursive
manca il tipo (ed è pure strano che non venga segnalato).

B4X:
For Each obj As Object In clvMail.GetPanel(i).GetAllViewsRecursive
    If obj Is CheckBox Then
 

LucaMs

Expert
Licensed User
Longtime User
Già, svegliandomi un po' :) e rileggendo...


manca il tipo (ed è pure strano che non venga segnalato).

B4X:
For Each obj As Object In clvMail.GetPanel(i).GetAllViewsRecursive
    If obj Is CheckBox Then
Nota che quanto sopra sia necessario ma non sufficiente, perché poi devi prendere la relativa lblMail!
Quindi dovresti prima prelevare il panel dell'item (io prenderei invece il Value).
 

Aldo's

Active Member
Licensed User
Ma non si può creare un for...ne next per tutti i panel del clv e dire se il checkbox è true aggiungi a bcc la label?
 

LucaMs

Expert
Licensed User
Longtime User
B4X:
Private Sub bttInvia_Click
    Dim email As Email
    email.To.Add("[email protected]")
    For i = 0 To clvMail.Size - 1
        Dim pnl As Panel = clvMail.GetPanel(i)
        If pnl.GetView(0).As(CheckBox).Checked Then
            email.BCC.Add(pnl.GetView(1).As(Label).Text)
        End If
    Next
    email.Subject = txtOggetto.Text
    email.Body = txtCorpo.text
    Dim In As Intent = email.GetIntent
    In.Flags=1
    StartActivity(In)
End Sub

Ammesso che la Checkbox abbia indice 0 (nell'item) e la Label indice 1.
 

Aldo's

Active Member
Licensed User
B4X:
Private Sub bttInvia_Click
    Dim email As Email
    email.To.Add("[email protected]")
    For i = 0 To clvMail.Size - 1
        Dim pnl As Panel = clvMail.GetPanel(i)
        If pnl.GetView(0).As(CheckBox).Checked Then
            email.BCC.Add(pnl.GetView(1).As(Label).Text)
        End If
    Next
    email.Subject = txtOggetto.Text
    email.Body = txtCorpo.text
    Dim In As Intent = email.GetIntent
    In.Flags=1
    StartActivity(In)
End Sub

Ammesso che la Checkbox abbia indice 0 (nell'item) e la Label indice 1.
Si checkbox 0 e label 1.
Più tardi provo e ti dico.
Grazie
 

Aldo's

Active Member
Licensed User
B4X:
Private Sub bttInvia_Click
    Dim email As Email
    email.To.Add("[email protected]")
    For i = 0 To clvMail.Size - 1
        Dim pnl As Panel = clvMail.GetPanel(i)
        If pnl.GetView(0).As(CheckBox).Checked Then
            email.BCC.Add(pnl.GetView(1).As(Label).Text)
        End If
    Next
    email.Subject = txtOggetto.Text
    email.Body = txtCorpo.text
    Dim In As Intent = email.GetIntent
    In.Flags=1
    StartActivity(In)
End Sub

Ammesso che la Checkbox abbia indice 0 (nell'item) e la Label indice 1.
Funziona tutto per bene.
Grazie
 
Top