Mercator 11.0 kan taken uitvoeren in consolemodus. Deze taken kunnen bijvoorbeeld worden geactiveerd door de Windows Taakplanner. Deze uitvoering van Mercator gebeurt zonder enige interface. Er is een loggingsysteem beschikbaar. De logs worden geplaatst in de submap LogFiles van Mercator. Deze map wordt automatisch aangemaakt.
Deze gebruiksmodus van Mercator vereist de installatie van een SSL-certificaat dat de wachtwoorden hieronder genoemd gaat versleutelen.
Om Mercator in consolemodus te starten, moet Mercator.exe een parameter/argument (altijd de eerste) doorgegeven worden die aangeeft waar een ini-bestand te vinden is met de parameters van de taak.
C:\Mercator\Mercator.exe C:\Mercator\MercatorTasks.ini
Een voorbeeld van een ini-bestand is beschikbaar in de onderstaande zip. Dit ini-bestand bevat de volgende parameters:
- IdDossier : leeg of het id van het dossier in een multi-dossier configuratie.
- UserLogin : de naam van een Mercator-gebruiker die zal worden gebruikt om Mercator te starten.
- Password : zijn wachtwoord. Dit zal automatisch worden versleuteld tijdens de eerste uitvoering van de taak.
- InitReporting : 1 als de rapportgenerator zal worden gebruikt in de taak (bijvoorbeeld voor het genereren van PDF-bestanden), anders 0.
- SendLog : verstuurt de logs per e-mail aan een of meerdere beheerders aan het einde van de taak
- 0 : nooit
- 1 : altijd
- 2 : alleen in geval van fouten
Deze uitvoeringsmodus van Mercator "verbruikt" een gebruikerslicentie gedurende de gehele duur van de taak. Als er geen licentie beschikbaar is, zal een foutmelding worden gegenereerd omdat Mercator dan niet kan starten.
Instellingen voor verzenden per e-mail
Als het verzenden van logs per e-mail wordt gebruikt, moeten de verbindingsparameters voor de mailserver worden ingevuld. Voor een klassieke mailserver:
- SmtpHost : naam van de mailserver.
- StmpPort : te gebruiken TCP-poort.
- SmtpSsl : 1 als SSL moet worden ingeschakeld, 0 anders.
- SmtpLogin : login voor geauthenticeerde verbinding, leeg anders.
- SmtpPassword : wachtwoord voor een geauthenticeerde verbinding. Dit wordt automatisch versleuteld tijdens de eerste uitvoering van de taak.
- SmtpSenderMail : e-mailadres van de afzender.
- SmtpSenderName : naam van de afzender.
Voor verzending via Office365 - Api Graph moeten de parameters ClientId, ClientSecret, Tenant en UserId worden geplaatst in de SQL-tabel free_table_secrets, zoals uitgelegd op deze pagina. Het ini-bestand moet als volgt worden ingevuld:
- SmtpOffice365Graph : 1
- SmtpSenderMail : e-mailadres van de afzender
- SmtpSenderName : naam van de afzender
Daarna, in beide gevallen :
- SmtpRecipients : e-mailadressen van de ontvangers, gescheiden door ;
- SmtpCc : e-mailadressen in CC gescheiden door ;
Het is mogelijk om het verzenden van e-mails te testen zonder uitvoering van de taak door testmail als tweede parameter/argument aan Mercator.exe door te geven.
C:\Mercator\Mercator.exe C:\Mercator\MercatorTasks.ini testmail
Taakinstellingen
Mercator in consolemodus kan een onbeperkt aantal taken uitvoeren. Elke taak moet overeenkomen met een openbare methode zonder parameters, geplaatst in de Main customizer. Elke methode naam moet in het ini-bestand worden vermeld, op een aparte regel
De nummering van de taken moet beginnen bij 1, oplopend en onafgebroken zijn.
Bijvoorbeeld, als het ini-bestand het volgende bevat
Task1 = MethodForMercatorTasks1
Task2 = MethodForMercatorTasks2
Dan ziet de Main customizer er als volgt uit:
namespace Main
{
public class Customizer
{
public void MethodForMercatorTasks1()
{
// taak 1
}
public void MethodForMercatorTasks2()
{
// taak 2
}
}
}
Net als bij een klassieke customizer is het mogelijk om een externe DLL te refereren om zijn functionaliteiten te gebruiken.
De C#-code van deze methoden kan MercatorUi.Globals.MercatorTasksToMain gebruiken om:
1. Een optie (bestaand of aangepast) in het ini-bestand te lezen
string myValue = MercatorUi.Globals.MercatorTasksToMain.IniFile.IniReadValue("MercatorTasks", "MyOption");
2. Naar het logboek te schrijven
MercatorUi.Globals.MercatorTasksToMain.Log("Schrijf naar het logboek!");
Belangrijke opmerking: als de logverzendmodus 2 is (alleen in geval van fouten), is het belangrijk om onderscheid te maken tussen foutlogs en gewone activiteitenlogs. Standaard wordt elke invoer in het log niet als een fout beschouwd. Om dit te veranderen, moet de methode Log de extra parameter isError: true krijgen.
3. Een e-mail te verzenden volgens de in het ini-bestand gedefinieerde parameters
IneoSmtp.Smtp mail = MercatorUi.Globals.MercatorTasksToMain.GetNewStmp();
mail.Subject = "Mijn onderwerp";
mail.Message = "Mijn bericht";
if (!mail.SendMail())
MercatorUi.Globals.MercatorTasksToMain.Log("Fout bij verzenden e-mail: " + mail.Error, isError: true);
else
MercatorUi.Globals.MercatorTasksToMain.Log("E-mail correct verzonden naar " + mail.Recipient);
4. Een bericht bovenaan het log plaatsen, dat in de e-mail zal worden opgenomen
MercatorUi.Globals.MercatorTasksToMain.CurrentLog.Insert(0, "Zie hieronder het log van de Mercator-taak die zojuist is uitgevoerd in consolemodus.\r\n\r\n");
5. Code uitvoeren wanneer alle taken zijn voltooid
MercatorUi.Globals.MercatorTasksToMain.AllTasksFinished += (s, e) =>
{
if (MercatorUi.Globals.MercatorTasksToMain.CurrentLogContainsErrors)
MercatorUi.Globals.MercatorTasksToMain.CurrentLog.Append("\r\n\r\nWAARSCHUWING: dit logboek bevat fouten!");
};
Belangrijke opmerkingen over plannen
Een taak die in de Windows Taakplanner is aangemaakt, moet worden uitgevoerd onder de referenties van een gebruiker die Mercator in "normale" modus (niet console) zonder fouten of beperkingen kan gebruiker.
Het SSL-certificaat moet in de certificatenopslag van deze gebruiker zijn geïnstalleerd.
Het is mogelijk om verschillende taken te maken met bijvoorbeeld verschillende ini-bestanden, of hetzelfde ini-bestand.
Als er meerdere taken zijn, is het belangrijk dat ze niet allemaal op hetzelfde moment beginnen.
Wanneer er meerdere acties moeten worden uitgevoerd, is het aan te raden om ze te groeperen in hetzelfde ini-bestand (Task1, Task2, ...) in plaats van afzonderlijke ini-bestanden te maken en deze taken opeenvolgend uit te voeren. De aanbevolen modus zorgt ervoor dat dezelfde instantie van Mercator wordt gebruikt voor deze verschillende taken.
Voorbeeld van een taak: centralisatie in boekhouding van de documenten van de dag
public void PostIntoAccounting()
{
MercatorUi.Forms.Accounting.AccountingProcedures.Procedures.PostIntoAccountingParams p = new MercatorUi.Forms.Accounting.AccountingProcedures.Procedures.PostIntoAccountingParams(
DateTime.Today, // date1
DateTime.Today, // date2
new string[3] { "VEN", "NCV", "FactF" }, // gecentraliseerde journalen
true, // postPayments
true, // performMatching
"001" // dossier indien meerdere
);
MercatorUi.Forms.Accounting.AccountingProcedures.Procedures.PostIntoAccounting(p, true);
if (!string.IsNullOrEmpty(p.LastError))
MercatorUi.Globals.MercatorTasksToMain.Log(p.LastError);
MercatorUi.Globals.MercatorTasksToMain.Log("VERKOPEN & AANKOPEN");
MercatorUi.Globals.MercatorTasksToMain.Log(p.ResultPostSalesPurchases);
if (p.LogErrorsPostSalesPurchases != null)
MercatorUi.Globals.MercatorTasksToMain.Log(p.LogErrorsPostSalesPurchases.ToString(), isError: true);
MercatorUi.Globals.MercatorTasksToMain.Log("PAIEMENTS");
MercatorUi.Globals.MercatorTasksToMain.Log(p.ResultPostPayments);
if (p.LogErrorsPostPayments != null)
MercatorUi.Globals.MercatorTasksToMain.Log(p.LogErrorsPostPayments.ToString(), isError: true);
MercatorUi.Globals.MercatorTasksToMain.Log("LETTRAGE");
MercatorUi.Globals.MercatorTasksToMain.Log(p.ResultMatching, isError: p.ResultMatching != Api.Iif_langue(Globals.Langue, 47));
}
In het ini-bestand:
Task1 = PostIntoAccounting
Voorbeeld van een taak: automatische facturering van de leveringen van de dag
public void DeliveriesInvoicing()
{
doDeliveriesInvoicing("1Bliv", "1Fact");
doDeliveriesInvoicing("2Bliv", "2Fact");
doDeliveriesInvoicing("3Bliv", "3Fact");
}
private void doDeliveriesInvoicing(string seqLivr, string seqFactu)
{
MercatorUi.Globals.MercatorTasksToMain.Log($"Facturering van {seqLivr} naar {seqFactu}");
DataSet dsSequenc = Api.Zselect(Globals.RepData, "select * from SEQUENC where journal = @seqLivr \r\n"
+ "select * from SEQUENC where journal = @seqFactu",
new MercatorSqlParam("@seqLivr", seqLivr, SqlDbType.Char),
new MercatorSqlParam("@seqFactu", seqFactu, SqlDbType.Char));
if (dsSequenc == null)
{
MercatorUi.Globals.MercatorTasksToMain.Log("Sequenc select : " + Api.LastError, isError: true);
return;
}
if (dsSequenc.Tables[0].Rows.Count == 0)
{
MercatorUi.Globals.MercatorTasksToMain.Log($"De sequentie {seqLivr} bestaat niet!", isError: true);
return;
}
if (dsSequenc.Tables[1].Rows.Count == 0)
{
MercatorUi.Globals.MercatorTasksToMain.Log($"De sequentie {seqFactu} bestaat niet!", isError: true);
return;
}
MercatorUi.Forms.Gescom.GescomDialogs.GescomAskDeliveriesInvoicing.GescomAskDeliveriesInvoicingRet askRet =
new MercatorUi.Forms.Gescom.GescomDialogs.GescomAskDeliveriesInvoicing.GescomAskDeliveriesInvoicingRet(
dsSequenc.Tables[0].Rows[0], // sequencOrig
dsSequenc.Tables[1].Rows[0], // sequencDest
($"(pieds_v.date = '{DateTime.Today.ToString("yyyyMMdd")}')"), // whereClause
false, // groupLines
false, // groupCustNoVat
false, // invoiceAccount
false, // withQZero
false, // dateAllLines
false, // noComment
-99999); // minimum
Api.LastError = "";
int generatedInvoicesCount = MercatorUi.Forms.Gescom.GescomProcedures.Procedures.DeliveriesInvoicing(MercatorUi.Engine.Gescom.Billing.TypeVAEnum.V, askRet, true);
if (string.IsNullOrEmpty(Api.LastError))
MercatorUi.Globals.MercatorTasksToMain.Log($"Document(en) {seqFactu} gegenereerd: {generatedInvoicesCount}.");
else
MercatorUi.Globals.MercatorTasksToMain.Log($"Document(en) {seqFactu} gegenereerd: {generatedInvoicesCount}.\r\n" + Api.LastError, isError: true);
}
In het ini-bestand:
Task1 = DeliveriesInvoicing
Voorbeeld van een taak: verzenden van een PDF-rapport per e-mail (Lijst van klanten voor de huidige maand)
public void SendPdfReport()
{
List<MercatorSqlParam> lp = new List<MercatorSqlParam>
{
new MercatorSqlParam("@DATE_1", new DateTime(DateTime.Today.Year, DateTime.Today.Month, 1)),
new MercatorSqlParam("@DATE_2", DateTime.Today)
};
MercatorUi.Reporting.OutputDescriptorExport outputDescriptorExport = new MercatorUi.Reporting.OutputDescriptorExport(MercatorUi.Reporting.ExportReportEnum.PDF, null, MercatorUi.Reporting.ExportOpenAfterEnum.No) { ExportToBytes = true };
Api.LastError = "";
MercatorUi.Reporting.ReportingStatic.RunReportFromDocum("H2ZP118RW1", new List<MercatorUi.Reporting.OutputDescriptor> { outputDescriptorExport }, lp);
if (outputDescriptorExport.FileContent == null)
{
MercatorUi.Globals.MercatorTasksToMain.Log("PDF genereren: " + (!string.IsNullOrEmpty(Api.LastError) ? Api.LastError : "onbekende fout"), isError: true);
}
else
{
IneoSmtp.Smtp mail = MercatorUi.Globals.MercatorTasksToMain.GetNewStmp();
mail.Subject = "Klantenlijst";
mail.Message = "Bijgevoegd is de klantenlijst.";
mail.BytesAttachments = new Dictionary<string, byte[]> { { "Klantenlijst.pdf", outputDescriptorExport.FileContent } };
if (!mail.SendMail())
MercatorUi.Globals.MercatorTasksToMain.Log("Fout bij verzenden e-mail: " + mail.Error, isError: true);
else
MercatorUi.Globals.MercatorTasksToMain.Log("E-mail correct verzonden naar " + mail.Recipient);
}
}
In het ini-bestand:
Task1 = SendPdfReport
Te laden :
0000003239.zip (0 Kb - 05-08-2024)