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

Nieuwe access-types van Mercator 10.1

0000002734     -      22-09-2017

Mercator 10.1 bevat nieuwe access-types, deze zullen het aantal lijnen code in de customizers aanzienlijk verminderen. Via deze nieuwe accessors kan u met getypeerde klassen gaan werken die overeenkomen met de databasestructuur van Mercator, dit is een vervanging voor de verschillende DataTables en DataRows.

1. System.Data.DataRow -> MercatorDatabase.Record

Zoom
// voor
billingEngine.PIEDS["VCS"] = "+++604/3557/70761+++";
double d = Convert.ToDouble(billingEngine.PIEDS["TOT_TTC_DV"]);
// na
billingEngine.PiedsVRecord.VCS = "+++604/3557/70761+++";
double d = billingEngine.PiedsVRecord.TOT_TTC_DV;

Dit zorgt voor een snellere ingave:

  • Intellisense kan direct de kolomnamen voorstellen. Dus moeten we de namen en types van de kolommen niet meer weten.
  • De cast of conversies zullen niet meer gebruikt moeten worden.
  • We besparen dus veel [""].

De nieuwe records zijn beschikbaar op volgende locaties:

  • MercatorUi.Globals.CurrentUserRecord: huidige gebruiker
  • SigForm :
    • AnaRecord: record van de analytische rekeningen indien het huidige informatiebestand het informatiebestand analytische rekeningen is.
    • CliRecord: record van de klant indien het huidige informatiebestand het informatiebestand klant is.
    • DestRecord: record van het 4e informatiebestand indien het huidige informatiebestand het 4e informatiebestand is.
    • FouRecord: record van de leverancier indien het huidige informatiebestand het informatiebestand Leverancier is.
    • GenRecord: record van de algemene rekeningen indien het huidige informatiebestand het informatiebestand algemene rekeningen is. 
    • ImmRecord:  record van de Vaste Activa indien het huidige informatiebestand het informatiebestand Vaste Activa is. 
    • ProjRecord:  record van het project indien het huidige informatiebestand het informatiebestand projecten is. 
    • StockRecord:  record van het artikel indien het huidige informatiebestand het informatiebestand artikelen is.  
    • TactRecord:  record van de klant indien het huidige informatiebestand het informatiebestand algemene rekeningen is. 
    • XleadRecord: record van de Prospect indien het huidige informatiebestand het informatiebestand Prospecten is.
    • YprestRecord:  
  • BillingEngine :
    • PiedsVRecord: record van de hoofding, indien het document een verkoop is.
    • CliRecord: record van de klant, indien het een verkoop is.
    • CliLivRecord: record van de leverklant, indien het een verkoop is
    • PiedsARecord: record van de hoofding, indien het document een aankoop is
    • FouRecord: record van de leverancier, indien het een aankoop is.
    • SequencRecord: record van de sequentie van het huidige document
  • BookingEngine:
    • PiedsCRecord: record van de hoofding
    • CliRecord: record van de klant
    • FouRecord: record van de leverancier
    • SequencRecord: record van de huidige booking-sequentie
  • TransferEngine:
    • PiedsDRecord: record van de hoofding
    • SequencRecord: record van de huidige transfer-sequentie
  • InventoryEngine:
    • PiedsDRecord: record van de hoofding
    • SequencRecord: record van de huidige inventaris-sequentie
  • ActionEngine:
    • ActionsRecord: entry uit de tabel ACTIONS voor de huidige actie
    • ActtemplRecord: entry van het model van de huidige actie
    • AnaRecord: record van de analytische rekening indien de actie gekoppeld is aan het informatiebestand analytische rekeningen
    • CliRecord: record van de klant indien de actie gekoppeld is aan het informatiebestand klanten.
    • DestRecord: record van het 4e informatiebestand, indien de actie gekoppeld is aan het 4e informatiebestand.
    • FouRecord: record van de leverancier indien de actie gekoppeld is aan het informatiebestand leverancier.
    • GenRecord: record van de algemene rekeningen, indien de actie gekoppeld is aan het informatiebestand algemene rekeningen.
    • ImmRecord: record van de vaste activa, indien de actie gekoppeld is aan het informatiebestand vaste activa.
    • ProjRecord: record van het project, indien de actie gekoppeld is aan het informatiebestand Projecten.
    • StockRecord:record van het artikel indien de actie gekoppeld is aan het informatiebestand Artikelen.
    • TactRecord: record van de contacten indien de actie gekoppeld is aan het informatiebestand Contacten.
    • XleadRecord: record van de prospect indien de actie gekoppeld is aan het informatiebestand Prospect.
    • YprestRecord: record van de dienstverlener, indien de actie gekoppeld is aan het informatiebestand Dienstverleners.
  • In het merendeel van de EventArgs komen de eigenschappen overeen met records uit de hoofding of lijnen.

Gebruik van de klassen in andere situaties

Indien men wenst om een getypeerde klasse te gebruiken om toegang te verkrijgen tot de inhoud van een DataRow, moet u dit zelf doorgeven door deze DataRow in te voeren, hierin zitten alle velden die vervolgens gebruikt kunnen worden.

Zoom
DataSet ds = Api.Zselect(MercatorUi.Globals.RepData, "select top 1 * from CLI order by c_id");
if ((ds != null) && (ds.Tables[0].Rows.Count >= 1))
{
    Api.TrimEndDataTable(ds.Tables[0]);
    MercatorDatabase.CLI cli = new MercatorDatabase.CLI(ds.Tables[0].Rows[0]);
    string nom = cli.C_NOM;
    ...
}

 

2. System.Data.DataTable -> MercatorDatabase.RecordsCollection

Zoom
// voor
double d1 = 0;
foreach (DataRow dr in billingEngine.LIGNES.Select("sel=1"))
    d1 += Convert.ToDouble(dr["q"]);
// na
double d1 = billingEngine.LignesVRecords.Where(l => l.SEL).Sum(l => l.Q);

Alle voordelen uit punt 1 zijn ook hier beschikbaar, aangezien de code een verzameling is van getypeerde elementen zoals hierboven beschreven.
Daarnaast implementeren alle klassen die afgeleid zijn van MercatorDatabase.RecordsCollection de interface  IEnumerable<T>. Dit maakt het gebruik van 
Linq direct mogelijk.

Nieuwe RecordsCollections zijn beschikbaar op deze locaties:

  • BillingEngine: 
    • LignesVRecords: lijnen van het lopende document
    • LignesV2Records : lijnen van het vorige document(en)
  • BookingEngine: 
    • LignesCRecords: lijnen uit de boekhouding voor de huidige boeking
    • LignesCanaRecords: de lijnen uit de analytische boekhouding voor de huidige boeking.
  • TransferEngine: 
    • LignesDRecords: lijnen uit de Transfert tussen depots van het huidige document.
    • LignesD2Records: lijnen uit de Transfert tussen depots van het voorgaande document.
  • InventoryEngine: 
    • LignesDRecords: lijnen uit de huidige inventaris
    • LignesD2Records: lijnen uit de voorgaande inventaris

 

3. System.ComponentModel.BindingList<DataRow> -> MercatorDatabase.RecordsCollection2

Als voortzetting van punt 2 kunnen de eigenschappen van de originele hoofding met voordeel gebruikt worden via de nieuwe accessors van het type MercatorDatabase.RecordsCollection2.

Dit betreft:

  • BillingEngine: 
    • PiedsV2Records: de hoofding van eerdere documenten als het een verkoop betreft
    • PiedsA2Records: de hoofding van eerdere documenten als het een aankoop betreft 
  • TransferEngine: 
    • PiedsD2Records: de hoofding van eerdere transfers tussen Depots
  • InventoryEngine: 
    • PiedsD2Records: de hoofding van eerdere inventarissen

Rekening houden met de personnalisatie van de Mercator-database

Elke Mercator, of bijna, beschikt over een standaard database waarvan de structuur hetzelfde is. Alhoewel dit afhankelijk is van de opties van Mercator, optionele velden of gepersonaliseerde velden,...
Als gevolg daarvan is het nodig om de klassen in de MercatorDatabase namespace aan te passen, zodat deze klassen de werkelijke structuur van de database weerspiegelen.

Dit kan gedaan worden via de Geavanceerde tools van Mercator: SQL database / Update schema.

Het is dus noodzakelijk om dit uit te voeren bij elke wijziging van de gegevensdatabank van Mercator. 
Tenminste als u een accessor wilt gebruiken die verwijst naar kolom die nieuw toegevoegd is.
Bijzondere aandacht wordt besteed aan de veranderingen van het kolomtype en hun eventuele verwijdering, die ook de uitvoering van dit menu vereist.

Deze functionaliteit zal een MercatorDatabase.dll assembly genereren, die bewaard wordt in de SQL-bestanden/Assemblies. De versie wordt automatisch verhoogt bij elke compilatie. Het bewaren in de SQL-bestanden zorgt ervoor dat deze automatisch gedistribueerd worden. Deze zal automatisch geïnstalleerd worden bij het opstarten van Mercator.

De source-code van deze assembly is zichtbaar in de code-editor van Mercator in het tabblad C#. Hier kies je voor "Uit database openen" -> "Database". Het bestand is niet wijzigbaar en kan niet op deze locatie gecompileerd worden.

Belangrijke opmerking met betrekking tot multi-dossiers van Mercator: De .NET-technologie laat niet toe om een assembly uit het AppDomain te ontladen. Wanneer een gebruiker van map verandert, blijft deze wel binnen hetzelfde AppDomain. Daarom is het niet mogelijk om klassen te hebben die verschillen in inhoud, maar wel dezelfde naam hebben binnen de MercatorDatabase namespace.
Daarom moet men een van volgende oplossingen toepassen indien multi-dossier gebruikt zal worden:

  • De structuur van de verschillende databases harmoniseren zodat elk dossier dezelfde velden bevat.
  • een MercatorDatabase.dll genereren op de meest complete database.
  • de oude notatie gebruiken, dit in zijn geheel of gedeeltelijk.

Het is essentieel om op te merken dat de tools die hier gepresenteerd worden de programmering rond Mercator comfortabeler en sneller maken. In geen geval ben je verplicht om dit te gebruiken. Alle eerdere notaties zullen beschikbaar blijven zonder wijzigingen. Je bent dus niet verplicht om bestaande customizers te gebruiken.

Indien dit type notatie gebruikt wordt buiten Mercator (vooral in Visual Studio), is het noodzakelijk om een reference toe te voegen naar MercatorDatabase.dll. Houdt er rekening mee dat deze DLL verschillend is in elk dossier.

 

Voeg een referentie toe naar MercatorDatabase.dll in uw Visual Studio project!