Berichtsparameter zur Laufzeit für den Druck/Export modifizieren/ändern

Gilt ab List & Label 19
Berichtsparameter sind ein sehr gutes Mittel, um die Daten vom Anwender interaktiv selbst vorfiltern zu lassen oder auch später in der Vorschau direkt ändern zu können. Um nun jedoch eine gewisse Vorauswahl der verfügbaren Berichtsparameter im eigenen Code treffen zu können, kann das sogenannte DOM (Document Object Model) von List & Label verwendet werden. Die DOM-API steht ab der Professional Edition zur Verfügung. Im Folgenden wird anhand einfacher Code-Beispiele gezeigt, wie hierzu vorgegangen werden kann.

DOM mit C++:
Nach dem Starten des Drucks/Export wird mit Hilfe von DOM das aktuell verwendete Projekt geladen und dort dann auf dessen Berichtsparameter zugegriffen.
...
::LlPrintWithBoxStart(m_hJob, LL_PROJECT_LIST, sFileName,
                      LL_PRINT_EXPORT,
                      LL_BOXTYPE_STDABORT, hWnd, _T("Printing...")
                      );

HLLDOMOBJ hProj = NULL;
::LlDomGetProject(m_hJob, &hProj);

HLLDOMOBJ hReportParameterList = NULL;	
::LlDomGetObject(hProj, _T("ReportParameters"), &hReportParameterList);

HLLDOMOBJ hReportParameter = NULL;
::LlDomGetSubobject(hReportParameterList, 0, &hReportParameter);
::LlDomSetProperty(hReportParameter, _T("CurrentContents"), _T("Inhalt"));
...


DOM mit C#:
Bei Verwendung der .NET Komponente können die Inhalte der Berichtsparameter über ein Event gesteuert werden, indem im Event auf das gerade zu druckende Projekt zugegriffen wird.

...
LL.ReportParametersCollected += OnReportParametersCollected;
LL.Export(new ExportConfiguration(LlExportTarget.Pdf, @"C:\temp\Report.pdf", "Test.lst"));
...
private void OnReportParametersCollected(object sender, ReportParametersCollectedEventArgs e)
{
    // Um einen einfachen Wert für einen Parameter zu setzen wird dies nicht benötigt,
    // bei Berichtsparametern mit einer fixen Menge an verfügbaren Optionen (eine Liste mit Checkboxen in der Vorschau)
    // können die möglichen Optionen aber ermittelt werden über die Event-Argumente:
    // e.ReportParameters[...].Choices
    // Bei Fehlern wird dieses Event erneut ausgelöst und die Fehlermeldung kann abgerufen werden über:
    // e.NeedDataErrorClient
    
    // Hier wird per DOM auf das gerade geladene Projekt zugegriffen
    using (var project = new ProjectList(sender as ListLabel))
    {
        project.GetFromParent();

        // Hier können die Berichtsparameter ermittelt werden
        foreach (ReportParameter param in project.ReportParameters)
        {
            // Und für einen bestimmten Parameter der Wert gesetzt werden
            if (param.Identifier == "@MeinReportParameter")
            {
                param.CurrentContents = "Inhalt";
            }
        }
    }
	
    // Mit "Continue" wird der Export fortgesetzt, mit "Abort" kann man ihn hier auch abbrechen 
    // falls z.B. nicht alle nötigen Werte zur Verfügung standen
    e.ReturnType = ReportParametersCollectedReturnType.Continue;
}
...
IDKBTD001337 KBTD001337