13. Dezember 2018 10:06
13. Dezember 2018 10:21
wobei im "OnValidate"-Trigger weiterer Code aufgerufen wird
13. Dezember 2018 10:51
Natalie hat geschrieben:wobei im "OnValidate"-Trigger weiterer Code aufgerufen wird
Ist es der OnValidate-Trigger der Form oder der Tabelle, der die Codeunit aufruft?
Versuch mal folgendes:
- Den Code von Form nach Tabelle verschieben (falls möglich)
- Vor Aufruf der Codeunit ein Rec.MODIFY absetzen.
13. Dezember 2018 11:24
mideg hat geschrieben:Der Ablauf ist wie folgt:
- Das Feld F in der Form A mit Sourcetable X wird vom User verändert.
- OnValidate der Form A
- Funktion der Form A
- Funktion in Codeunit B
- OnValidate eines Felds G aus Tabelle Y
- Funktion in Tabelle Y
- Beim Aufruf eines MODIFY(TRUE) von Tabelle Z wird der oben genannte Fehler geworfen.
13. Dezember 2018 11:28
13. Dezember 2018 11:30
Meine Kontonummer ist …. (kleiner Scherz)mideg hat geschrieben:Das Forum hier könnte echt Eintritt nehmen.
13. Dezember 2018 12:54
13. Dezember 2018 12:58
13. Dezember 2018 15:52
Natalie hat geschrieben:Dann Trick 17: Erstelle einen ProcessingOnly-Report, der die Codeunit-B-Funktion aufruft. Ruf in Form A diesen Report statt der Codeunit-Funktion auf.
ChangeItemSub(TempItemSub.FIELDNO(Warnhinweis));
CurrForm.SAVERECORD;
MODIFY;
CUFunctions.ChangeItemSub(TempItemSub,"No.",p_FieldNo);
MultiEditItemSub(p_FieldNo);
ChangeItemSub(VAR p_TempItemSub : TEMPORARY Record "ERVIN Item Sub";p_ItemNo : Code[20];p_FieldNo : Integer)
SELECTLATESTVERSION;
[..]
IF NOT l_ItemSub.GET(p_ItemNo) THEN BEGIN // Das ist im Prinzip derselbe Link, mit dem in der Form oben TempItemSub zu Item in Bezug steht, d.h. hier wird Tabelle 20273 nochmal als "normaler" Record geladen.
l_ItemSub.INIT;
l_ItemSub."Item No." := p_ItemNo;
l_ItemSub.INSERT(TRUE);
l_Item.GET(p_ItemNo); // Hier wird Item nochmal geladen.
[..]
END;
l_xRecItemSub := l_ItemSub; // Und noch eine ItemSub
l_xRecRef.GETTABLE(l_xRecItemSub); // Und eine Referenz auf die ItemSub
IF p_FieldNo <> 0 THEN BEGIN // p_FieldNo ist ja die Feldnummer, die oben übergeben worden ist, sollte also ungleich 0 sein
l_TempRecRef.GETTABLE(p_TempItemSub); // lokale, temporäre RecRef
l_TempFieldRef := l_TempRecRef.FIELD(p_FieldNo); // lokale, temporäre FieldRef
l_ValiRecRef.GETTABLE(l_ItemSub); // lokale, nicht-temporäre RecRef
l_ValiFieldRef := l_ValiRecRef.FIELD(p_FieldNo); // lokale, nicht-temporäre FieldRef
l_ValiFieldRef.VALIDATE(l_TempFieldRef.VALUE); // <-- Hier wird der Fehler geworfen (***)
l_ValiRecRef.SETTABLE(l_ItemSub); // Ich verstehe ehrlich gesagt nicht, warum hier überhaupt mit Recrefs gearbeitet wird. Hier wird l_ItemSub ja quasi wieder beschrieben. Der Typ von l_ItemSub steht aber doch die ganze Zeit fest?!?
END ELSE
l_ItemSub.TRANSFERFIELDS(p_TempItemSub,FALSE);
[..]
l_ItemSub.MODIFY(TRUE);
[..]
Group Text 1 - OnValidate()
UpdateFkt(FIELDNO("Group Text 1"));
Warnhinweis - OnValidate()
QSCheck(FIELDCAPTION(Warnhinweis));
UpdateFkt(FIELDNO(Warnhinweis));
UpdateFkt(p_FieldNo : Integer)
OtherItem.RESET;
OtherItem.SETRANGE("No.","Item No.");
FieldChanged := FALSE;
txtWarnhinweis := '';
CE_Zeichen := FALSE;
IF OtherItem.FINDLAST THEN BEGIN
CASE p_FieldNo OF
15: // Feldnummer des Felds Warnhinweis
BEGIN
CASE Warnhinweis OF
Warnhinweis::ohne : txtWarnhinweis := 'ohne';
Warnhinweis::"<3 Jahre" : txtWarnhinweis := '< 3 Jahre';
Warnhinweis::"<3 Jahre + Batterie" : txtWarnhinweis := '< 3 Jahre + Batterie';
Warnhinweis::Batterie : txtWarnhinweis := 'Batterie';
END;
IF OtherItem."Warning Text" <> txtWarnhinweis THEN
BEGIN
OtherItem."Warning Text" := txtWarnhinweis;
FieldChanged := TRUE;
END;
END;
[..]
26: // Feldnummer des Felds "Gruppierungsebene 1"
IF OtherItem."Group Text 1" <> "Group Text 1" THEN
BEGIN
OtherItem."Group Text 1" := "Group Text 1";
FieldChanged := TRUE;
END;
[..]
END;
IF FieldChanged THEN
BEGIN
OtherItem."Modified from" := USERID;
OtherItem."Modified on" := TODAY;
OtherItem."Item No." := ShowItemNo;
OtherItem.MODIFY(TRUE); // Hier wird der Fehler geworfen - aber nur bei Änderungen am Feld "Warnhinweis", nicht am Feld "Gruppierungsebene 1", obwohl der vorherige Codeverlauf in allen für mich relevant erscheinenden Fragen identisch ist.
END;
END;
fiddi hat geschrieben:ich hatte dieses Problem in 2009 auch schon mal. Es war aber - glaube ich - in einem späteren technischen Build gelöst.
13. Dezember 2018 16:03
13. Dezember 2018 17:20
14. Dezember 2018 10:47
14. Dezember 2018 16:48