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

Registreer een handtekening in Mercator via MercatorPenguin en Ok!Sign

0000003143     -      16-05-2023

In Mercator is het mogelijk om op verschillende manieren een handgeschreven handtekening vast te leggen. Mercator kan ook worden aangesloten op de portaalsite Ok!Sign eSignature. De toepassing MercatorPenguin kan worden gebruikt om deze handtekening in te voeren.

Om deze functionaliteit te implementeren, moet u :

  • Mercator versie 10.10 of later,
  • een account hebben bij Ok!Sign,
  • Deze pagina bekijken,
  • kopieer de x-oksign-authorization waarde naar de optie "Uitrusting Kassa > Handtekening via Penguin & Ok!Sign: authorization" (id = PGSGN_OKID)
  • een mobiel apparaat (smartphone of tablet) dat verbonden is met het internet en waarop MercatorPenguin 2.10.18 of later draait,
  • in deze MercatorPenguin, meldingen activeren en aanvaarden; dit gebeurt in het informatiescherm dat toegankelijk is via de "i"-knop,
  • Let op de ID die verschijnt zodra meldingen zijn ingeschakeld.

In de opties "Uitrusting Kassa", moet de waarde van "Handtekening via MercatorPenguin : player id" (id = PGPAY_PLID) worden aangevuld met de identificatie die in MercatorPenguin in het informatiescherm is genoteerd. Deze identificatiecode kan gemakkelijk worden verkregen via deze query, waarbij xyz de eerste drie karakters zijn die uit MercatorPenguin worden gelezen :

 

select id from PENGUIN_PLAYERS where id like 'xyz%'

 

In het hier getoonde voorbeeld nemen wij aan dat de volgende kolommen zijn toegevoegd aan de PIEDS_V tabel.

alter table PIEDS_V add NOM char(30) not null default ''
alter table PIEDS_V add FONCTION char(20) not null default ''
alter table PIEDS_V add EMAIL char(40) not null default ''
alter table PIEDS_V add NUM_GSM char(20) not null default ''

 

Om deze velden weer te geven, raden wij aan het bestand Commande_oksign.mpge in het onderstaande zip-bestand te gebruiken om de bijbehorende tabbladinstellingen te laden.

De parameters die naar Ok!Sign worden gestuurd, worden altijd bepaald via een Billing customizer. Het moet de interface MercatorSignPad.ISignPadPenguin implementeren en dus een methode SignPadPenguinRet FormDescriptorForOkSign verschaffen.

Zoom
using System;
using System.Collections.Generic;
using System.Text;
using System.Windows.Forms;
using MercatorApi;
using MercatorExtensions;
using MercatorUi;
using System.Text.RegularExpressions;
using System.Linq;
using MercatorSignPad;

namespace Billing
{
    public class Customizer : MercatorSignPad.ISignPadPenguin
    {
        public SignPadPenguinRet FormDescriptorForOkSign(Form form)
        {
            MercatorUi.Forms.Billing.BillingForm billingForm = (MercatorUi.Forms.Billing.BillingForm)form;
            Dictionary<string, string> dicoNotEmpty = new Dictionary<string, string>
                {
                    { "NOM", _Divers.Iif_langue(Globals.Langue, "Name", "Naam", "Nom") },
                    { "EMAIL", _Divers.Iif_langue(Globals.Langue, "Email", "Email", "Email") },
                    { "FONCTION", _Divers.Iif_langue(Globals.Langue, "Function", "Functie", "Fonction") },
                    { "NUM_GSM", _Divers.Iif_langue(Globals.Langue, "Mobile", "GSM", "GSM") },
                };
            foreach (KeyValuePair<string, string> kvp in dicoNotEmpty)
            {
                if (string.IsNullOrWhiteSpace(billingForm.BillingEngine.PIEDS[kvp.Key].ToString()))
                {
                    return new SignPadPenguinRet
                    {
                        CancelMessage = string.Format(_Divers.Iif_langue(Globals.Langue,
                                            "The \"{0}\" field is mandatory!",
                                            "Het veld \"{0}\" is verplicht!",
                                            "Le champ \"{0}\" est obligatoire !"), kvp.Value)
                    };
                }
            }

            Regex regex = new Regex(@"^\+?[1-9]\d{1,14}$");
            if (!regex.IsMatch(billingForm.BillingEngine.PIEDS["NUM_GSM"].ToString()))
            {
                return new SignPadPenguinRet
                {
                    CancelMessage = _Divers.Iif_langue(Globals.Langue,
                        "The mobile phone number must start with + and contain only digits!",
                        "Het GSM nummer moet beginnen met + en mag alleen cijfers bevatten!",
                        "Le numéro de GSM doit commencer par + et ne contenir que des chiffres !")
                };
            }

            MercatorUi._BaseClasses.SqlFileView sqlFileView = billingForm.MovableControls.Values.OfType<MercatorUi._BaseClasses.SqlFileView>().FirstOrDefault(p => !p.ReadOnly);
            if (sqlFileView == null)
                return new SignPadPenguinRet { CancelMessage = "No SqlFileView!" };

            string signedPdfFileName = string.Format("{0}_{1}_signed.pdf", billingForm.BillingEngine.Journal, billingForm.BillingEngine.PiedsVRecord.DATE.ToShortDateString().Replace("/", "_"));

            MercatorSigning.OkSign.FormDescriptor.FormHelper formHelper1 = new MercatorSigning.OkSign.FormDescriptor.FormHelper
            {
                FieldMarker = "_Signature_",
                FieldWidth = 175,
                FieldHeight = 70,
                FieldSigningOptions = MercatorSigning.OkSign.FormDescriptor.FormHelper.SigningOptionsEnum.Tan | MercatorSigning.OkSign.FormDescriptor.FormHelper.SigningOptionsEnum.Pen,
                SignerInfoName = billingForm.BillingEngine.PiedsVRecord.NOM,
                SignerInfoMobile = billingForm.BillingEngine.PiedsVRecord.NUM_GSM,
                SignerInfoActingAs = billingForm.BillingEngine.PiedsVRecord.FONCTION,
                SignerInfoEmail = billingForm.BillingEngine.PiedsVRecord.EMAIL
            };
            MercatorSigning.OkSign.FormDescriptor formDescriptor = new MercatorSigning.OkSign.FormDescriptor
            {
                SendToMeEmail = "info@mercator.eu", // niet vereist als het te gebruiken e-mailadres dat van het OkSign-account is.
                Logo = "https://www.mercator.eu/assets/images/logo.png", // niet vereist als het te gebruiken logo het logo in het OkSign-account is
                FileName = signedPdfFileName // naam van het bestand dat zichtbaar is voor de ondertekenaar. Mag een vrije string bevatten die eindigt op .pdf
            };
            formDescriptor.FormHelpers.Add(formHelper1);

            return new SignPadPenguinRet
            {
                FormDescriptor = formDescriptor,
                SignedFileName = Api.AddBS(sqlFileView.BasePath) + signedPdfFileName
            };
        }
    }
}

 

In deze code zien we dat een gegevensvalidatie wordt uitgevoerd en dat, indien nodig, een string wordt geplaatst in CancelMessage. Dit bericht wordt aan de gebruiker getoond en het ondertekeningsproces wordt geannuleerd.

De eigenschap SignedFileName moet het volledige pad bevatten naar het ondertekende bestand dat aan het eind van het proces wordt gedownload. Dit pad kan een fysiek of met SqlFileView compatibel pad zijn. In dit voorbeeld gebruiken we altijd een opslag van het ondertekende bestand in de SQL-bestanden van het document. Daarom is het verplicht een SqlFileView te plaatsen via de scherminstelling.

De FieldMarker is _Signature_. Het is dus noodzakelijk dat deze tekenreeks aanwezig is in het bij de sequentie behorende afdruksjabloon, op de plaats waar we het handtekeningkader willen laten verschijnen. (Zie voorbeeld van repx in de zip hieronder)

 

Gebruik

Wanneer een handtekening wordt aangevraagd, toont Mercator dit scherm dat u toelaat de verschillende statussen van de aanvraag te volgen:

De chronologie van de ondertekeningsvolgorde is als volgt:

       

  • Mercator stuurt een melding naar het mobiele apparaat waarvan de player-id overeenkomt met de waarde die is opgegeven in de optie "Handtekening via MercatorPenguin: player-id".
  • De gebruiker moet deze melding openen op de mobiele telefoon. Dit zal, indien nodig, MercatorPenguin openen.
  • MercatorPenguin toont dan een webpagina van het portaal Ok!Sign. (De inhoud van deze pagina staat niet onder controle van Mercator en kan niet worden gewijzigd)
  • Mercator luistert naar de reacties van het Ok!Sign portaal.
  • Zodra de ondertekening is voltooid, downloadt Mercator het ondertekende document en plaatst het op de locatie die wordt bepaald door SignedFileName .

 

 Commande_oksign1                Commande_oksign2   


De communicatie tussen Mercator en MercatorPenguin is gebaseerd op een notificatie. In principe wordt deze notificatie onmiddellijk verzonden en kan de ondertekening dus onmiddellijk plaatsvinden. Afhankelijk van de gebruikte infrastructuur of de beschikbare gegevenshoeveelheid kan deze vertraging langer duren. Dit kan deze functionaliteit onbruikbaar maken. Daarom moeten tests worden uitgevoerd van het verzenden en ontvangen van meldingen in de omgeving waarin deze functionaliteit zal worden gebruikt.

Herinnering : Meldingen worden nooit ontvangen als de toepassing nooit is opgestart of als deze gedwongen werd af te sluiten. -> MercatorPenguin minstens één keer starten.

Deze pagina geeft enkele oplossingen over hoe vertragingen in notificaties kunnen worden beperkt.

 

Trefwoorden : OkSign

Te laden : 0000003143.zip (31 Kb - 20-03-2023)