Bewerk het onderwerp en voeg bijlagen toe in een mail, die verzonden wordt vanuit een document in het commercieel beheer.

0000002355     -      06-05-2025

Het doel van deze customizer is om het onderwerp te wijzigen en bijlagen toe te voegen in een email die verzonden wordt vanuit een document in het commercieel beheer. Het gebruikt het event BeforeSendMail van de BillingEngine. Dit event ontvangt BeforeSendMailEventArgs die volgende zaken kan behandelen:

  • string Subject : het onderwerp van de mail
  • string Name : naam van de ontvanger
  • string MailTo : emailadres van de ontvanger
  • string Content : de inhoud van het bericht (HTML-code indien de inhoud in HTML geformatteerd moet worden.)
  • List<string> Attachments : lijst van bestanden die aan de mail moeten hangen

Indien men het verzenden van de mail wil voorkomen, moet men de property Cancel op true plaatsen.

Dit event wordt opgeroepen wanneer de mail verzonden moet worden via Outlook of Mercator CRM.

De code voor deze customizer is als volgt:

Zoom
using System;
using System.Collections.Generic;
using System.Text;
using System.Data;
using System.Windows.Forms;
using MercatorApi;


namespace Billing
{
    public class Customizer : MercatorUi.ICustomizers.IBillingEngineCreated, MercatorUi.ICustomizers.IBillingEngineClosed
    {
        public void BillingEngineCreated(MercatorUi.Engine.Gescom.BillingEngine billingEngine)
        {
               billingEngine.BeforeSendMail += BillingEngine_BeforeSendMail;
        }

        public void BillingEngineClosed(MercatorUi.Engine.Gescom.BillingEngine billingEngine)
        {
               billingEngine.BeforeSendMail -= MercatorUiBillingEngine_BeforeSendMail;
        }

        void BillingEngine_BeforeSendMail(object sender, MercatorUi.Engine.Gescom.BillingEngine.BeforeSendMailEventArgs e)
        {
            e.Subject = "Nieuw onderwerp";
            e.Attachments.Add(@"C:\Test\test.html");
        } 
    }
}

 


Als men de SQL-bestanden van de gerelateerde documenten wil bijvoegen (bijvoorbeeld van de bestelling en/of levering voorafgaande aan een factuur), kan deze code worden gebruikt :

Zoom
using System;
using System.Collections.Generic;
using System.Text;
using System.Data;
using System.Windows.Forms;
using MercatorApi;
using MercatorExtensions;


namespace Billing
{
    public class Customizer : MercatorUi.ICustomizers.IBillingEngineCreated, MercatorUi.ICustomizers.IBillingEngineClosed
    {
        public void BillingEngineCreated(MercatorUi.Engine.Gescom.BillingEngine billingEngine)
        {
            billingEngine.BeforeSendMail += BillingEngine_BeforeSendMail;
        }

        public void BillingEngineClosed(MercatorUi.Engine.Gescom.BillingEngine billingEngine)
        {
            billingEngine.BeforeSendMail -= BillingEngine_BeforeSendMail;
        }

        void BillingEngine_BeforeSendMail(object sender, MercatorUi.Engine.Gescom.BillingEngine.BeforeSendMailEventArgs e)
        {
            MercatorUi.Engine.Gescom.BillingEngine billingEngine = (MercatorUi.Engine.Gescom.BillingEngine)sender;
            if (!string.IsNullOrEmpty(billingEngine.PiedsVRecord.PIECE_LIEE))
            {
                string reqSql = @"
                    select '<Files\'+rtrim(t.journal)+'\'+t.id+'\'+files.filename as filefullname
                        from pieds_v
                        cross apply dbo.DOC_LIES2(pieds_v.doc_lies) t
                        inner join FILES on files.filepath='<Files\'+t.journal+'\'+t.id+'\'
                        where (pieds_v.id=@id) and (pieds_v.journal=@journal) and (pieds_v.piece=@piece) and (files.filename is not null) ".UnIndent(5);
                List<string> l = Api.Zselect<string>(MercatorUi.Globals.RepData, reqSql, new MercatorSqlParam("@id", billingEngine.PiedsVRecord.ID, SqlDbType.Char), new MercatorSqlParam("@journal", billingEngine.PiedsVRecord.JOURNAL, SqlDbType.Char), new MercatorSqlParam("@piece", billingEngine.PiedsVRecord.PIECE));
                if (l != null)
                    e.Attachments.AddRange(l);
            }
        }
    }
}

Als men de  PDF duplicaten van de gerelateerde documenten wil bijvoegen (bijvoorbeeld van de bestelling en/of levering voorafgaande aan een factuur), kan deze code worden gebruikt:

Zoom
using System;
using System.Collections.Generic;
using System.Text;
using System.Data;
using System.Windows.Forms;
using MercatorApi;
using MercatorExtensions;

// <CompileWithRoslyn />

namespace Billing
{
    public class Customizer : MercatorUi.ICustomizers.IBillingEngineCreated, MercatorUi.ICustomizers.IBillingEngineClosed
    {
        public void BillingEngineCreated(MercatorUi.Engine.Gescom.BillingEngine billingEngine)
        {
            billingEngine.BeforeSendMail += BillingEngine_BeforeSendMail;
        }

        public void BillingEngineClosed(MercatorUi.Engine.Gescom.BillingEngine billingEngine)
        {
            billingEngine.BeforeSendMail -= BillingEngine_BeforeSendMail;
        }

        void BillingEngine_BeforeSendMail(object sender, MercatorUi.Engine.Gescom.BillingEngine.BeforeSendMailEventArgs e)
        {
            MercatorUi.Engine.Gescom.BillingEngine billingEngine = (MercatorUi.Engine.Gescom.BillingEngine)sender;
            if (!string.IsNullOrEmpty(billingEngine.PiedsVRecord.PIECE_LIEE))
            {
                string reqSql = @"
                    select t.type,t.id,t.journal,t.piece
                        from pieds_v
                        cross apply dbo.DOC_LIES2(pieds_v.doc_lies) t
                        where (pieds_v.id=@id) and (pieds_v.journal=@journal) and (pieds_v.piece=@piece
".UnIndent(5);
                List<(int type, string id, string journal, Int64 piece)> l = Api.Zselect< (int type, string id, string journal, Int64 piece)> (MercatorUi.Globals.RepData, reqSql, new MercatorSqlParam("@id", billingEngine.PiedsVRecord.ID, SqlDbType.Char), new MercatorSqlParam("@journal", billingEngine.PiedsVRecord.JOURNAL, SqlDbType.Char), new MercatorSqlParam("@piece", billingEngine.PiedsVRecord.PIECE));
                if (l != null)
                {
                    foreach ((Int16 type, string id, string journal, Int64 piece) tuple in l)
                    {
                        MercatorUi.Engine.Gescom.Tools.BillingDocDescriptor billingDocDescriptor = new MercatorUi.Engine.Gescom.Tools.BillingDocDescriptor(MercatorUi.Engine.Gescom.Billing.TypeVAEnum.V, tuple.type, tuple.id, tuple.journal, tuple.piece);
                        string lastPdfDuplicateFileName = billingDocDescriptor.LastPdfDuplicateFileName(out string error);
                        if (error != null)
                            MercatorUi.Dialogs.Stop(string.Format("Duplicata PDF {0} {1} : {2}", tuple.journal, tuple.piece, error));
                        else if (lastPdfDuplicateFileName != null)
                            e.Attachments.Add(lastPdfDuplicateFileName);
                    }
                }
            }
        }
    }
}


Functionele cookies: Cookies die nodig zijn voor het gebruik van de website en voorkeurscookies. Ze bevatten geen persoonsgegevens. (Meer informatie)

Analytische cookies: Verzamelen van statistieken met betrekking tot het gedrag van internetgebruikers. (Meer informatie)

Marketingcookies: Om bezoekers op verschillende websites te volgen voor advertentiedoeleinden. (Meer informatie)