IMailMergeDataSource

IMailMergeDataSource interface

Implémentez cette interface pour permettre le publipostage à partir d’une source de données personnalisée, telle qu’une liste d’objets. Les données maître-détail sont également prises en charge.

public interface IMailMergeDataSource

Propriétés

Nom La description
TableName { get; } Renvoie le nom de la source de données.

Méthodes

Nom La description
GetChildDataSource(string) Le moteur de publipostage Aspose.Words appelle cette méthode lorsqu’il rencontre le début d’une région de publipostage imbriquée.
GetValue(string, out object) Renvoie une valeur pour le nom de champ spécifié ou false si le champ n’est pas trouvé.
MoveNext() Passe à l’enregistrement suivant dans la source de données.

Remarques

Lorsqu’une source de données est créée, elle doit être initialisée pour pointer vers BOF (avant le premier enregistrement). Le moteur de publipostage Aspose.Words invoqueraMoveNext pour passer à l’enregistrement suivant et puis invoquerGetValue pour chaque champ de fusion qu’il rencontre dans le document ou la région de fusion et publipostage actuelle.

Exemples

Montre comment exécuter un publipostage avec une source de données sous la forme d’un objet personnalisé.

public void CustomDataSource()
{
    Document doc = new Document();
    DocumentBuilder builder = new DocumentBuilder(doc);
    builder.InsertField(" MERGEFIELD FullName ");
    builder.InsertParagraph();
    builder.InsertField(" MERGEFIELD Address ");

    List<Customer> customers = new List<Customer>();
    customers.Add(new Customer("Thomas Hardy", "120 Hanover Sq., London"));
    customers.Add(new Customer("Paolo Accorti", "Via Monte Bianco 34, Torino"));

    // Pour utiliser un objet personnalisé comme source de données, il doit implémenter l'interface IMailMergeDataSource. 
    CustomerMailMergeDataSource dataSource = new CustomerMailMergeDataSource(customers);

    doc.MailMerge.Execute(dataSource);

    doc.Save(ArtifactsDir + "MailMergeCustom.CustomDataSource.docx");
}

/// <summary>
/// Un exemple de classe "entité de données" dans votre application.
/// </summary>
public class Customer
{
    public Customer(string aFullName, string anAddress)
    {
        FullName = aFullName;
        Address = anAddress;
    }

    public string FullName { get; set; }
    public string Address { get; set; }
}

/// <summary>
/// Une source de données de publipostage personnalisée que vous implémentez pour autoriser Aspose.Words 
/// pour fusionner les données de vos objets Customer dans des documents Microsoft Word.
/// </summary>
public class CustomerMailMergeDataSource : IMailMergeDataSource
{
    public CustomerMailMergeDataSource(List<Customer> customers)
    {
        mCustomers = customers;

        // Lorsque nous initialisons la source de données, sa position doit être avant le premier enregistrement.
        mRecordIndex = -1;
    }

    /// <summary>
    /// Le nom de la source de données. Utilisé par Aspose.Words uniquement lors de l'exécution d'un publipostage avec des régions répétables.
    /// </summary>
    public string TableName
    {
        get { return "Customer"; }
    }

    /// <summary>
    /// Aspose.Words appelle cette méthode pour obtenir une valeur pour chaque champ de données.
    /// </summary>
    public bool GetValue(string fieldName, out object fieldValue)
    {
        switch (fieldName)
        {
            case "FullName":
                fieldValue = mCustomers[mRecordIndex].FullName;
                return true;
            case "Address":
                fieldValue = mCustomers[mRecordIndex].Address;
                return true;
            default:
                // Renvoie "false" au moteur de publipostage Aspose.Words pour signifier
                // que nous n'avons pas trouvé de champ portant ce nom.
                fieldValue = null;
                return false;
        }
    }

    /// <summary>
    /// Une implémentation standard pour passer à un enregistrement suivant dans une collection.
    /// </summary>
    public bool MoveNext()
    {
        if (!IsEof)
            mRecordIndex++;

        return !IsEof;
    }

    public IMailMergeDataSource GetChildDataSource(string tableName)
    {
        return null;
    }

    private bool IsEof
    {
        get { return (mRecordIndex >= mCustomers.Count); }
    }

    private readonly List<Customer> mCustomers;
    private int mRecordIndex;
}

Voir également