Listenausdruck mit DefineFields / DefineVariables funktioniert nach Migration von LL10 auf LL28 nicht mehr

Hallo,

ich habe bisher in eine Liste mit Variablen ausgedruckt mit LL10. Die Variablenwerte wurden per DefineVariables übergeben:

  private void llReport_DefineVariables(object sender, DefineElementsEventArgs e)
        {
            //MessageBox.Show("Define Variables");
            ListLabel LL = (ListLabel)sender;

            // CMY Patches
            LL.Variables.Add("MaxDeCMY", lblG7CMY.Text, LlFieldType.Text);
            LL.Variables.Add("TolMaxDeCMY", lblG7CMYTol.Text, LlFieldType.Text);
            LL.Variables.Add("InTolMaxDeCMY", lblG7CMY.BackColor == Color.Green);
            ...

Beim Laden der .lst Datei im Designer (LL10) kommt für jede Variable folgende Fehlermeldung:

Syntaxfehler ‘[VariblenName]’ kann nicht interpretiert werden.

Trotzdem hat die Datenübergabe funktioniert und der Ausdruck auch.

Nun bekomme ich in LL28 beim Ausdrucken (mit der gleichen .lst Datei) die Fehlermeldung:

combit.Reporting.LL_Expression_Exception: ‘Einer der verwendeten Ausdrücke hat einen Fehler. Beim Designstart werden die Fehler interaktiv angezeigt. In anderen Fällen benutzen Sie den Debug-Modus zur Bestimmung des Fehlers.’

Wenn ich alle Variablen im Designer entferne, funktioniert es wieder.

Wie kann ich das Problem lösen?

Wenn aus einer Log-Datei keine eindeutige Ursache hervorgeht, dann würde ich mir das Verhalten gerne mit einer kleinen Beispielanwendung im Rahmen eines Support-Cases anschauen :slight_smile:

Hi Alexander,
für mich sieht das so aus als ob du eine DataSource übergibst, dann dürfte der da im Event glaub gar nicht rein laufen, versuch doch mal einfach die Variablen vor dem Design und Print Aufruf anzumelden, das sollte helfen eventuell.
LG und viel Erfolg

Hi Erdal,

ich übergebe keine DataSource, sondern nur die Variablenwerte. Das hat in LL10 alles gut funktioniert. Es sieht halt so aus als ob die (von mir ignorierten) nicht erkannten Variablen im Designer jetzt in LL28 dazu führen, das der Ausdruck die genannte Exception liefert.
Die Frage ist, was muss ich im Designer tun, damit dieser die Variablen interpretieren kann.

Das ist die Ausgabe in DebWin

Ok, könntest du mal deinen Druck bzw. Designer Aufruf posten, verwendest du LL.Design / LL.Print(), oder DefineLayout bzw. PrintWithBoxStart etc.
Print und Design z.B sind für das DataBinding (also mit DataSource) bestimmt, ich würde sowieso Empfehlen, da ja DefineVariables “obsolete” ist auf das DataBinding umzusteigen!

Ansonsten kannst auch mal einfach eine leere Liste als LL.DataSource übergeben und die Variablen wie oben geschrieben vor dem Print bzw. Design Aufruf anzumelden.

LG

Das geschieht hier:

 public void PrintReport()
        {
            LLPrintCounter = 0;
            ListLabel llReport = new ListLabel();
            llReport.DataSource = null;

            try
            {
                m_printReport.PrinterSettings.DefaultPageSettings.Landscape = false;
                m_printReport.PrinterSettings.PrinterName = MainPrinterSettings.GetCurrentPrinter().PrinterName;

               
                if (m_printReport.PrinterSettings.IsValid)
                {
                    string startFolder = Environment.GetFolderPath(Environment.SpecialFolder.MyDocuments);
                    startFolder = Path.Combine(startFolder, "TECHKON GmbH");
                    if (!Directory.Exists(startFolder))
                    {
                        Directory.CreateDirectory(startFolder);
                    }
                    startFolder = Path.Combine(startFolder, "TECHKON SpectroConnect");
                    if (!Directory.Exists(startFolder))
                    {
                        Directory.CreateDirectory(startFolder);
                    }

                    llReport.Core.LlSetPrinterDefaultsDir(startFolder);
                    llReport.Core.LlPreviewSetTempPath(startFolder);

                    llReport.DefineFields += new DefineFieldsHandler(llReport_DefineFields);
                    llReport.DefineVariables += new DefineVariablesHandler(llReport_DefineVariables);
                    llReport.LicensingInfo = "...";

                    string reportPath = Application.StartupPath + @"\MediaWedge\g7report.lsp";

                    llReport.Core.LlSetPrinterInPrinterFile(LlProject.List, reportPath, LlPrinterIndex.AllPages, m_printReport.PrinterSettings.PrinterName);
                    llReport.Debug = LlDebug.Enabled;

                    try
                    {

                        llReport.Print(LlProject.List, getReportFileName(), false, LlPrintMode.Normal, LlBoxType.EmptyWait, "", false, "");
                    }
                    catch (Exception ex)
                    {
                        Console.WriteLine(llReport.Core.LlExprError());
                        llReport.Core.LlPrintEnd();
                    }
                }
            }
            catch
            {
            }
        }

llReport_DefineFields und llReport_DefineVariables wird vor dem Print() Aufruf durchlaufen.

llReport.DataSource = null hat nichts geändert.

Hi, nicht null, sondern eine leere Liste, damit der auch wirklich in den Datengebunden Modus geht.
Also sowas wie → LLDataSource = List liste = new List(){“2”};
Die Print() Methode ist für den datengebundenen Modus bestimmt, d.H. ohne eine Datenquelle kann alles mögliche passieren.

Vielleicht macht es hierbei doch Sinn in Richtung Support-Case abzubiegen :slight_smile:

PS: Wenn schon in Version 10 (weggeklickte) Fehlermeldungen auftraten scheint das Problem schon länger zu bestehen. Vermutlich passt die Projektdatei nicht zu den Daten oder umgekehrt. Das lässt sich hier im Forum aber nicht sinnvoll klären, da brauchen wir mehr Informationen und wenigstens eine vollständige Log-Datei und/oder eine Beispielanwendung.

Ich konnte das Problem jetzt lösen.

Wenn man den Designer “offline” aufruft, werden für alle Variablen in der .lst-Datei der Fehler “…kann nicht interpretiert werden” angezeigt.

Durch den Aufruf von ll.Design() aus meiner Anwendung heraus vor dem Drucken konnte ich die .lst-Datei mit den vorher übergebenen Variablen anzeigen lassen. Dann kann man anhand der Fehlermeldungen im Designer feststellen, was nicht stimmt. In meinem Fall wurden 2 Variablen nicht übergeben.