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

Met Mercator 10.4 kan u een handgeschreven handtekening als afbeelding opslaan.

0000002909     -      01-07-2019

Dit kan gedaan worden in alle schermen die kunnen uitgebreid worden met een PictureBox-object. Er zijn verschillende mogelijkheden voor de media die worden gebruikt om deze handtekening te "vangen".

  • Via MercatorPenguin
  • Via een aangepast programmering: zoals in dit voorbeeld dat gebruik maakt van een aanraakscherm. (SignPadTouchScreen)

Nadat een SignPad correct geactiveerd is, met behulp van een van de hierboven genoemde methoden, ontvangen alle PictureBoxes die gekoppeld zijn aan een varbinary(MAX) veld een handtekening. Om een handtekening aan te vragen gebruikt u het context menu van de afbeelding en kiest u voor "Van SignPad".

Dezelfde handtekening kan ook per code gevraagd worden door de methode SignPad uit de PictureBox te gebruiken.


Belangrijke opmerking over het respecteren van de privacy

Op vlak van GDPR, een handtekening is een gevoelig persoonlijk gegeven. Het gebruik en de duur van de bewaartijd moet strikt gelimiteerd zijn en in verhouding staan met het gewenste doel. Deze gevoelige gegevens moeten beschermd worden. Dit alles maakt deel uit van de interne procedures van het bedrijf. .

In de voorbeelden hieronder, stelt Mercator voor om de handtekening te beschermen met een datetimestamp. Het doel hiervan is het risico vermijden dat de handtekening hergebruikt kan worden in een andere context. De eindgebruiker zal het op prijs stellen als deze bescherming voldoende is.

Indien gewenst is het mogelijk om de handtekening te versleutelen alvorens u deze bewaart in de database. Hieronder is een voorbeeld voor de BillingEngine:

Zoom
using System;
using System.Collections.Generic;
using System.Linq;
using System.Windows.Forms;
using System.Data;
using System.Drawing;
using MercatorUi;
using MercatorApi;
using MercatorExtensions;
using System.ComponentModel;
using System.Data.SqlClient;
using System.Text;


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

            if (!((billingEngine.PIEDS["sign_img"] == DBNull.Value) || (((byte[])billingEngine.PIEDS["sign_img"]).Length == 0)))
            {
                try
                {
                    MercatorCryptorEngine.CryptorEngine.SecurityKey = getSecurityKey(billingEngine);
                    billingEngine.PIEDS["sign_img"] = MercatorCryptorEngine.CryptorEngine.Decrypt((byte[])billingEngine.PIEDS["sign_img"], false);
                    MercatorCryptorEngine.CryptorEngine.SecurityKey = null;
                }
                catch (Exception ex)
                {
                    billingEngine.PIEDS["sign_img"] = DBNull.Value;
                    MercatorUi.Dialogs.Stop("Dit document bevat een handtekening, maar deze kan niet gedecrypteerd worden. Ze zal dus verwijderd worden!\r\n\r\n" + ex.Message + (ex.InnerException != null ? "\r\n" + ex.InnerException.Message : ""));
                    return;
                }
            }

        }

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

        private string getSecurityKey(MercatorUi.Engine.Gescom.BillingEngine billingEngine) // de sleutel moet 24 karakters lang zijn
        {
            return "...";
        }

        void BillingEngine_BeforeSave(object sender, MercatorUi.Engine.Gescom.BillingEngine.BeforeSaveEventArgs e)
        {
            MercatorUi.Engine.Gescom.BillingEngine billingEngine = (MercatorUi.Engine.Gescom.BillingEngine)sender;

            if (!((billingEngine.PIEDS["sign_img"] == DBNull.Value) || (((byte[])billingEngine.PIEDS["sign_img"]).Length == 0)))
            {
                byte[] imagebytes = (byte[])billingEngine.PIEDS["sign_img"];
                string commandText = "update PIEDS_V set sign_img=@sign_img where (id=@id) and (journal=@journal) and (piece=@piece)";
                SqlCommand commandForFinalTransaction = new SqlCommand(commandText);
                MercatorCryptorEngine.CryptorEngine.SecurityKey = getSecurityKey(billingEngine);
                commandForFinalTransaction.Parameters.AddWithValue("@sign_img", MercatorCryptorEngine.CryptorEngine.Encrypt(imagebytes, false));
                MercatorCryptorEngine.CryptorEngine.SecurityKey = null;

                billingEngine.CommandForFinalTransaction = commandForFinalTransaction;
            }
        }

    }
}