U bevindt zich nu op een technische pagina over de software Mercator. Deze pagina bevat specifieke informatie die bestemd is voor professionals van de software Mercator. Wenst u naar algemenere informatie over Mercator door te gaan?


   Deze vraag niet meer stellen

MercatorPenguin 2.0: informatiebestanden, voorbeeld van een prospect met contactpersonen

0000002836     -      08-06-2018

Standaard kan MercatorPenguin alleen de hoofdtabel van een informatiebestand wijzigen. Het heeft niet de mogelijkheid om sub-tabellen te wijzigen (TARCLI, ARTFOU, TACTSIG,..). Het is wel eenvoudig om dit te omzeilen.

In het voorbeeld hieronder tonen we u hoe u drie contactpersonen kan koppelen aan een prospectfiche. Deze contacten worden goed opgeslagen in de identificatie van de contactpersoon, en gekoppeld aan de prospectfiche. 
Contactgegevens worden beperkt tot de naam en het emailadres.
Dit voorbeeld kan uitgebreid worden naar meerdere contacten en andere kolommen uit de TACT-tabel. 

De toegang tot het wijzigen van prospecten start vanuit een bundel die je hieronder kan terugvinden in het ZIP-bestand: Lijst met prospecten.pngb.

De toegang tot het wijzigen van prospecten start vanuit een bundel die je hieronder kan terugvinden in het ZIP-bestand: Lijst met prospecten.pngb
De scherminstellingen voor het wijzigen van prospecten wordt gedaan vanuit ‘Tools – Schermen Informatiebestanden – Penguin – Prospecten’. Je moet de inhoud van prospects.xaml plakken. Merk wel op dat deze instelling verwijst naar de velden t_nom1, t_email1, t_nom2, t_email2, t_nom3 en t_email3, die geen deel uitmaken van de XLEAD-tabel. Deze kolommen zijn inderdaad toegevoegd door de hieronder aangegeven SigXLead-customizer .

Deze customizer implementeert eerst de IStringUpdater-interface om de SQL-query te wijzigen die door Mercator wordt uitgevoerd om de gegevens te selecteren voor het formulier dat naar de mobiele toepassing verzonden wordt. Deze wijziging van SQL wordt 3 keer uitgevoerd:

  • Bij het lezen van de gegevens die beschikbaar moeten zijn voor MercatorPenguin op het moment van de back-up.
  • op het moment van bewaren,
    • Bij een bestaande prospect, om de gegevens uit te lezen
    • Bij een nieuwe prospect, om een lege DataRow te verkrijgen.

De parameter @idSig wordt altijd meegegeven aan de query, idSig bevat de waarde van het id van de prospect die gewijzigd wordt, idSig wordt leeggelaten bij het invoeren van een nieuwe prospect.

Deze customizer implementeert ook de interface ISqlCommandUpdaterWithContextInfo, om te reageren op de bewaarfunctie. 
Merk op dat het contextinformatieobject de volledige DataRow bevat die MercatorPenguinServer wilt bewaren in de tabel XLEAD. Het SQLCommand beschikt over alle SQL-parameters die overeenkomen met de volledige structuur van de XLEAD-tabel (@x_id, @x_nom, @x_cle1,…) en @isNew, type bit (boolean) geeft aan of we een nieuw formulier maken of niet.

De code binnen de methode SqlCommandUpdateWithContextInfo wordt gebruikt om de benodigde records toe te voegen aan de tabellen TACT en TACTSIG, die overeenkomen met de contactgegevens in de kolommen die niet voorkomen in de XLEAD-tabel.

Zoom
using System;
using System.Collections.Generic;
using System.Text;
using System.Data;
using System.Linq;
using MercatorApi;
using MercatorExtensions;
using MercatorUi;
using MercatorDatabase;

namespace SigXlead
{
    public class Customizer : MercatorUi.ICustomizers.IStringUpdater, MercatorUi.ICustomizers.ISqlCommandUpdaterWithContextInfo
    {

        public string StringUpdate(string s)
        {
            if (MercatorUi.Globals.IsMercatorPenguinServer)
            {
                s = @"declare @t_nom1 char(50),@t_nom2 char(50),@t_nom3 char(50)
                    declare @t_email1 char(50),@t_email2 char(50),@t_email3 char(50)
                    select top 1 @t_nom1=isnull(t_nom,''),@t_email1=isnull(t_email,'') from TACT inner join TACTSIG on (module='XLEAD') and (id_tact=t_id) where (id_sig=@idSig) order by t_nom
                    select @t_nom2=isnull(t_nom,''),@t_email2=isnull(t_email,'') from TACT inner join TACTSIG on (module='XLEAD') and (id_tact=t_id) where (id_sig=@idSig) order by t_nom OFFSET 1 ROWS FETCH NEXT 1 ROWS ONLY
                    select @t_nom3=isnull(t_nom,''),@t_email3=isnull(t_email,'') from TACT inner join TACTSIG on (module='XLEAD') and (id_tact=t_id) where (id_sig=@idSig) order by t_nom OFFSET 2 ROWS FETCH NEXT 1 ROWS ONLY
                    "
                   + s.Replace(" from ", ",@t_nom1 as t_nom1,@t_email1 as t_email1,@t_nom2 as t_nom2,@t_email2 as t_email2,@t_nom3 as t_nom3,@t_email3 as t_email3 from ");
            }
            return s;
        }

        public void SqlCommandUpdateWithContextInfo(System.Data.SqlClient.SqlCommand cmd, object contextInfo)
        {
            if (MercatorUi.Globals.IsMercatorPenguinServer)
            {
                DataRow drSig = (DataRow)contextInfo;
                cmd.CommandText += @"
                    if @isNew=0 delete TACT from TACTSIG where (module='XLEAD') and (id_tact=t_id) and (id_sig=@x_id)
                    if @t_nom1<>''
                    begin
                        declare @t_id1 char(10)
                        set @t_id1=right(newid(),10)
                        insert into TACT (t_id,t_nom,t_email,t_langue) values (@t_id1,@t_nom1,@t_email1,'F')
                        insert into TACTSIG (id_tactsig,module,id_tact,id_sig) values (right(newid(),10),'XLEAD',@t_id1,@x_id)
                    end
                    if @t_nom2<>''
                    begin
                        declare @t_id2 char(10)
                        set @t_id2=right(newid(),10)
                        insert into TACT (t_id,t_nom,t_email,t_langue) values (@t_id2,@t_nom2,@t_email2,'F')
                        insert into TACTSIG (id_tactsig,module,id_tact,id_sig) values (right(newid(),10),'XLEAD',@t_id2,@x_id)
                    end
                    if @t_nom3<>''
                    begin
                    declare @t_id3 char(10)
                        set @t_id3=right(newid(),10)
                        insert into TACT (t_id,t_nom,t_email,t_langue) values (@t_id3,@t_nom3,@t_email3,'F')
                        insert into TACTSIG (id_tactsig,module,id_tact,id_sig) values (right(newid(),10),'XLEAD',@t_id3,@x_id)
                    end";
            }
        }
    }
}

 

De schermen binnen MercatorPenguin zien er zo uit:

    



Te laden : 0000002836.zip (2 Kb - 24-05-2018)