Makro DatensatzLaden mit Stammdialog mit Geschäftsobjekt

Jan Lehmann

Mitglied
Hallo,

ich habe im AppDesigner ein Edit-Data-Element als Stammdatendialog mit Geschäftsobjekt erstellt.
Der Datenservice für die Datenstruktur funktioniert.
Ein Navigationselement ist hinterlegt und was ich in der Liste Auswähle wird richtig geladen.
Jetzt möchte ich per Kontext auf einen bestimmten Eintrag springen und habe dafür ein Kontexteintrag mit Makro Starten hinterlegt.
Dort wollte ich die Funktion DatensatzLaden verwenden.
Egal welchen Wert ich im Parameter1(Schlüssel) übergebe (Strings mit Anführungszeichen) bekomme ich eine Fehlermeldung.
Im Tracelog:

Code:
Sagede.Shared.RealTimeData.Common.MacroInterpreter.MacroException: Fehler beim Ausführen des Makros 'Function: Load' in Zeile 2, Makrobefehl 'DatensatzLaden | "B00000770" |  | '. ---> System.Collections.Generic.KeyNotFoundException: Der angegebene Schlüssel war nicht im Wörterbuch angegeben.
   bei System.Collections.Generic.Dictionary`2.get_Item(TKey key)
   bei Sagede.Shared.RealTimeData.Common.MacroInterpreter.MacroInterpreter.LoadDataRecord(DataContainerSet`1 parameters)
   bei Sagede.Shared.RealTimeData.Common.MacroInterpreter.MacroInterpreter.Run(Macro macro, Int32 lineNumber, Boolean& cancel)
   bei Sagede.Shared.RealTimeData.Common.MacroInterpreter.MacroHandler.ExecuteMacros(ApplicationContext context, Macros macros, MacroCallback callback, String macroTitle, Boolean isRunningOnServer, Boolean isRecordInsert, Boolean& cancel)
   --- Ende der internen Ausnahmestapelüberwachung ---
   bei Sagede.Shared.RealTimeData.Common.MacroInterpreter.MacroHandler.ExecuteMacros(ApplicationContext context, Macros macros, MacroCallback callback, String macroTitle, Boolean isRunningOnServer, Boolean isRecordInsert, Boolean& cancel)
   bei Sagede.Shared.ControlCenter.Controller.PartControls.PartViewModelBase.ExecuteMacro(Macros macros, String title, Boolean isInsert, Boolean& cancel)
  => ShowException in DataEditPartViewModel.vb(line 3141)

Der Schlüssel ist vorhanden, per Navigationsliste wird der Datensatz richtig geladen.
Hat jemand eine Idee dazu?
 
Sie können in den Parameterfeldern nur lokale Variable übergeben. Also den oder die Schlüssel vorher in eine oder mehrere lokale Variable (Syntax [_ihrname]) an das Makro übergeben.
 
Danke für den Hinweis. Es steht sogar beschrieben in der Makrofunktion;).
Ich habe die Nummer durch das festlegen einer Lokalen Variable ersetzt.
Ich bekomme leider die gleiche Meldung, nur der Name der Lokalen Variable drin steht.
Code:
Sagede.Shared.RealTimeData.Common.MacroInterpreter.MacroException: Fehler beim Ausführen des Makros 'Function: Load' in Zeile 2, Makrobefehl 'DatensatzLaden | [_Objektnummer] |  | '. ---> System.Collections.Generic.KeyNotFoundException: Der angegebene Schlüssel war nicht im Wörterbuch angegeben.
   bei System.Collections.Generic.Dictionary`2.get_Item(TKey key)
   bei Sagede.Shared.RealTimeData.Common.MacroInterpreter.MacroInterpreter.LoadDataRecord(DataContainerSet`1 parameters)
   bei Sagede.Shared.RealTimeData.Common.MacroInterpreter.MacroInterpreter.Run(Macro macro, Int32 lineNumber, Boolean& cancel)
   bei Sagede.Shared.RealTimeData.Common.MacroInterpreter.MacroHandler.ExecuteMacros(ApplicationContext context, Macros macros, MacroCallback callback, String macroTitle, Boolean isRunningOnServer, Boolean isRecordInsert, Boolean& cancel)
   --- Ende der internen Ausnahmestapelüberwachung ---
   bei Sagede.Shared.RealTimeData.Common.MacroInterpreter.MacroHandler.ExecuteMacros(ApplicationContext context, Macros macros, MacroCallback callback, String macroTitle, Boolean isRunningOnServer, Boolean isRecordInsert, Boolean& cancel)
   bei Sagede.Shared.ControlCenter.Controller.PartControls.PartViewModelBase.ExecuteMacro(Macros macros, String title, Boolean isInsert, Boolean& cancel)
  => ShowException in DataEditPartViewModel.vb(line 3141)
 
Hallo, ich habe es jetzt rausgefunden:cool:.
Ich musste für den 2 und 3 parameter auch eine Variable übergeben:eek:.
Jetzt wird der Datensatz geladen.
 
Ich habe es mit den neuen Druckprozessen ausprobiert (auch noch einmal bevor Sie Ihre Lösung gepostet hatten). Dort haben wir ein Stammdatenformular mit Geschäftsprozess und einem Key. Ich brauchte im aktuellen Hotfixstand auch nur einen Parameter angeben. Anhand des Smilies lässt sich vermuten, dass Sie die Parameter angeben mussten, obwohl Sie nur einen Key haben. Aber wie gesagt, im aktuellen Hotfixstand sollte es eigentlich reichen, die Keys zu übergeben, die tatsächlich definiert sind.
 
OK. Können Sie mir sagen an welcher Stelle ich für die Datenstruktur die Schlüssel einstelle. Wird das im AppDesigner gemacht oder im Service für die Datenstruktur? Im letzteren habe ich nur einen Schlüssel drin gelassen.
 
Ausgangspunkt sind die Schlüsselfelder der Datenquelle des Navigationselementes. Im Data-Edit tragen Sie die Primary-Key-Felder (Nummer des Schlüsselfeldes der Datenquelle) in die Eigenschaften "Primärschlüssel 1-3 für Datensatz" ein. In der Klasse, die von DataServiceBase ableitet, tragen Sie die Feldnamen der Keyfelder der Struktur ein. Das müssten Sie aber eigentlich schon alles richtig gemacht haben, da ansonsten das Data-Edit gar nicht angezeigt wird.
 
Zurück
Oben