Verhindern, dass eine Position verändert wird

S.K.

Neues Mitglied
Teammitglied
Hallo zusammen,

in einem Projekt sind wir auf die Anforderung gestoßen, dass in bestimmten Belegen bestimmte Positionen nicht mehr verändert werden dürfen.
Sicherlich könnten wir jetzt im Beforesave hingehen und das Speichern canceln, aber das ist bei Belegen mit mehreren hundert Positionen nicht Nutzerfreundlich.

Es scheint keine DCM zu geben, wo wir uns im "BeforeUpdate" einer Position einklinken können, oder?
Als Makro an den einzelnen Feldern der Position ginge es vermutlich Clientseitig, aber dann müsste man ja an jedes Feld das Makro hängen und dran denken wenn neue Felder hinzu kommen etc...

Außerdem müsste die Änderung durch den User ja "zurückgerollt" werden, so eine Funktion habe ich auf Positionsebene auch nicht gefunden, sprich wir müssten die Position aus der Collection löschen und neu aus dem Beleg einfügen - was auch vielleicht wieder zu Problemen führen könnte...

An der Position gibt es EditStatus, das kann man aber scheinbar nicht setzen (oder ich habe noch nicht gefunden wie).
Noch eine Frage in diesem Rahmen: Woran erkenne ich im BeforeSave des Beleges, welche Positionen "dirty" sind, also geändert wurden?

Fällt euch spontan eine elegantere Lösung ein?
Bin für jeden Tipp dankbar ;-)
 
Zuletzt bearbeitet:
Hallo,

ist zwar schon etwas älter, ich fand das Thema aber interessant. Eine Möglichkeit die ich gefunden hätte, wäre die Eigenschaften der Position "ReadOnly" zu setzen. Ist aber auch aufwendig und krankt ebenfalls an dem Problem der neuen Felder. Andererseits ist es ja oft ausreichend, wenn man den Anschein erweckt, das man eine Position nicht bearbeiten kann. Kommt vermutlich auf den Fall an.

Beispiel anbei:

C#:
case DcmDefinitionManager.DcmListId.VKBelegProxyBelegPositionEnable:
if (context is not DcmContextBelegProxyBelegPositionEnable c1)
    break;

c1.ReadOnlyFieldList += ",Artikelnummer,Einzelpreis,Rabatt,Menge,Preiseinheit,Mengeneinheit,Bezeichnung1,Bezeichnung2,Langtext,Dimensionstext";

break;

Beste Grüße
Ingolf
 
Was funktionieren könnte ist, sich an das MDE VKBelegPositionen anzuhängen.
Dort dann beim Anzeigen ein Makro "FestlegenNurLesen" einfügen. Parameter 1 wäre ein *(dann nimmt er alle Felder) und im Parameter 2 dann deine Bedingung.
 
Zurück
Oben