Standaard kan MercatorPenguin, wat de informatiebestanden betreft, enkel het record van de basistabel van het informatiebestand wijzigen. Het heeft niet de mogelijkheid om in te grijpen op de sub-tabellen (TARCLI, ARTFOU, TACTSIG, ...) Het is echter eenvoudig om deze beperking te omzeilen. In het volgende voorbeeld tonen we hoe drie contacten gekoppeld kunnen worden aan een prospectfiche. Deze contacten worden opgeslagen in het informatiebestand van de contacten en gekoppeld aan de prospectfiche. De contactgegevens zijn beperkt tot de naam en het e-mailadres. Het principe kan echter uitgebreid worden naar meer contacten en andere kolommen van de tabel TACT.
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.
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.IMercatorSqlCommandUpdaterWithContextInfo
{
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 MercatorSqlCommandUpdateWithContextInfo(MercatorSqlCommand 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 (4 Kb - 17-02-2020)