Felder anhängen

Hallo allerseits,
ich versuche ein Feld an das Multi-Data-Edit Element mdeVKBelegPositionen anzuhängen, später möchte ich den Meldebestand mit anzeigen wenn ich es erstmal schaffe überhaupt ein Feld hinzuzufügen. Ich habe eine Datenstruktur strTest angelegt mit einem Feld AAA die ich an Sage.Wawi angehängt habe. Dann habe ich ein neues Multi-Data-Edit Element mdeVKBelegPositionen (Datenstruktur strTest) angelegt auch an Sage.Wawi angehängt. Das Feld AAA wird mir aber nicht angezeigt. Woran liegt es?

Ich habe auch die mdeVKBelegPositionen kopiert und alle Felder entfernt dann eigenes hinzugefügt, geht auch nicht.
 
Zuletzt bearbeitet:
Auch wenn der Thread erledigt ist, doch der Hinweis, dass es auch bei MDEEs einfach ist.
Datenstruktur strVKBelegPosition in eigener Lösung anlegen und "Anhängen an..." = Sage.Wawi
Gewünschtes Feld in dieser Struktur anlegen
MDEE mdeVKBelegPositionen in eigener Lösung anlegen und "Anhängen an..." = Sage.Wawi
Vorlage Standard im MDEE anlegen und "Feld-Attribute anhängen?" aktivieren
Feld aus Struktur einfügen
Data-Edit-Element ediVKBelegerfassung in eigener Lösung anlegen und "Anhängen an..." = Sage.Wawi
Register "Positionen" anlegen und "Feld-Attribute anhängen?" aktivieren

Der nächste Schritt hängt davon ab, wo das Feld platziert werden soll.
Eigene Feldgruppe. Feldgruppe anlegen (eindeutigen Namen vergeben, also am besten mit Firmenkürzel), Feld hinzufügen
Standard Feldgruppe (z.B. "PositionSonstiges"): Feldgruppe "PositionSonstiges" anlegen und "Feld-Attribute anhängen?" aktivieren, Feld hinzufügen

(Voraussetzung Version 8.0.1)

Für den Transfer der Daten zwischen Client und Server müssen Sie die entsprechenden DCMs verwenden (was auch für den Belegkopf gilt)
 
So weit so gut, Feld wird angezeigt. Wie kann das Feld füllen? Ich versuche es mit eine von DataServiceBase abgeleitete Klasse Anhand Rezept14. Gibt es eine einfachere Möglichkeit?
Komme ich mit Hilfe von ParameterBag an das Feld?
 
Zuletzt bearbeitet:
Das Rezept 14 ist in diesem Fall (Anhängen an einem bestehenden DataService) das falsche Beispiel. In Ihrem Fall, sollten Sie sich das Rezept 20 anschauen. Hier wird der Transfer der Daten beschrieben. In Ihrem Fall müssen Sie allerdings die DCMs für die Position verwenden. Wann Sie das Feld füllen, hängt davon ab, wofür Sie es brauchen, bzw. welche Informationen/Daten Sie brauchen. Wenn es zusammen mit dem Einfügen einer Position setzen können, dann verwenden Sie die DCM, die nach dem Hinzufügen der neuen Position in die Positionscollection ausgeführt wird.

Die DCMs werden im Entwicklerhandbuch beschrieben.
 
Vielen Dank für die Antwort, die Frage war/ist wie ich an das Feld komme. Die Position wäre VKBelegPositionProxyAddArtikelposition. Rezept20 fügt ein neues Data-Edit Element, ich möchte aber das an das vorhandene Multi-Data-Edit Element "mdeVKBelegPositionen" ein Feld hinzufügen
 
Zuletzt bearbeitet:
Beispiel: Ihr Feldname ist BPMeldebestand (BP steht für ein Kürzel des Business Partners, da Feldnamen immer eindeutig sein sollten)
Dem Client teilen Sie diese Feld durch den "Anhängen an..." - Mechanismus mit. Die Serverseite kennt diese Feld nicht, steht also im Belegobjekt nicht zur Verfügung. Daher sorgen Sie, wie im Rezept 20 beschrieben (nur jetzt für die Position), dafür, dass aus dem DataContainer das Feld gelesen wird und in der Property DCMProperties des Positionsobjektes geschrieben wird (position.DCMProperties.DecimalValues("BPMeldebestand")). Dieser Eintrag bleibt während eines Serviceaufrufs erhalten. Sie ermitteln also in der von Ihnen genannten DCM den Wert und schreiben ihn in diese Property. Vor der Übergabe an den Client lesen Sie diesen Wert aus und erweitern den DataContainer der Position um das Feld "BPMeldebestand" (DataConatiner.Fill("BPMeldebestand", <wert aus DCMProperties der Position>).

Der Ablauf ist also wie folgt:
Lesen des Feldwertes aus dem DataContainer und in DCMProperties übertragen
Ermitteln des Wertes und schrieben in DCMProperties
Ergänzen des DataContainer um das Feld mit Schrieben des Wertes aus DCMProperties
 
Zuletzt bearbeitet:
und genau da hänge ich ... Habe ich es richtig verstanden dass ich VKBelegPositionProxyBelegPositionToContainerPosition und VKBelegPositionProxyContainerPositionToBelegPosition dafür brauche? VKBelegPositionProxyAddArtikelposition reicht nicht?
 
Zuletzt bearbeitet:
Beide Fragen sind mit ja zu beantworten. Der Hintergrund ist, dass auf Serverseite aus dem Belegobjekt eine neue Instanz des DataContainer erzeugt wird. Es wird also nie das gleiche Objekt zwischen Client und Server transportiert. Und daher muss man sich auf Serverseite "merken" was vom Client kam und wieder in die neue Instanz übertragen. Zum Merken und Übertragen verwendet man den Parameterbag des Positionsobjektes.

Eine einfachere Möglichkeit ist das Verwenden von benutzerdefinierten Feldern. Wenn man seine Erweiterungen darüber abbilden kann (also eine flache Struktur von Feldern), dann braucht man sich nicht um den DataContainer kümmern, da das Belegobjekt die benutzerdefinierten Felder kennt.
 
Guten morgen und erstmals vielen Dank für die Infos, genau die habe ich gesucht. Eine Frage hätte ich noch. Ich habe folgendes probiert und es funktioniert soweit wie erwartet.

private void vkBelegPositionProxyContainerPositionToBelegPosition(IDcmContext context)
{
//Vom Client zum Server ist der Wert unwichtig, hier wird dem Server nur das Feld bekannt gemacht
((DcmContextBelegPositionProxyContainerPositionToBelegPosition)context).Position.DCMProperties.DecimalValues["MyMeldebestand"] = 111m;
}

private void vkbelegPositionProxyBelegPositionToContainerPosition(IDcmContext context)
{
decimal _meldebestand = 24m;
var belegContext = (DcmContextBelegPositionProxyBelegPositionToContainerPosition)context;
string artikelnummer = ConversionHelper.ToString(belegContext.DataContainerPosition["Artikelnummer"]);
//_value = GetValueAnhandArtikelnummer(artikelnummer);
belegContext.DataContainerPosition.Fill("MyMeldebestand", _meldebestand);
}
Mich interessiert in erste Linie der Client, der Meldebestand soll nicht gespeichert werden, es soll nur eine Berechnung durchgeführt und eine Meldung ausgegeben werden. Wenn ich so aber im AppDesigner Bei Menge nach Aktualisierung den MyMeldebestand per Meldungsfeld anzeige lasse ist er 0 (zero). Ich bin davon ausgegangen dass das Feld MyMeldebestand dem Position DataContainer hinzugefügt wird und da dieser DataContainer eine uuid hat brauche ich keine eigene Klasse. Liege ich falsch, ich meine brauche ich doch eine eigene Klasse mit eine Property MyMeldebestand und eine uuid und wenn ja eine eigene uuid oder die vom Position?

Oder muss/soll ich eine Kopie des erweiterten BelegPosition ine eine eigene Klasse halten?
 
Zuletzt bearbeitet:
Sie brauchen sonst nichts weiter. Das Feld gehört zur Position. Allerding sollte man nicht wirklich Geschäftslogik in den "ContainerToObjekt"-DCMs implementieren. aber wie gesagt, so wie Sie es codiert haben, sollte es funktionieren. also bleibt nur noch die Meldung. Ich gehe davon aus, dass Sie das Original-Feld "Menge" in Ihrer Lösung angehängt haben und dort die Makros für die Meldung hinterlegt haben.
Wie sehen denn Ihre Makros im Ereignis "Nach Aktualisieren" aus?
 
Die Geschäftslogik an der Stelle ist nur zum debuggen da wird natürlich an die richtige Position verschoben und Ja ich habe das Original-Feld Menge angehängt. Das Makro gibt nur ein Meldungsfeld mit einem Platzhalter und als Parameter [HSMMeldebestand]
 
Noch eine Anmerkung, sobald sich die Menge ändert verschwindet der Wert vom Meldebestand.
Dies passiert manchmal auch bei dem Original-Feld ME auch ohne eigene Lösung.
 
Wenn der hier gepostet Code aktuell ist, dann haben Sie natürlich zwei unterschiedliche Feldnamen. Einmal "MyMeldebestand" und einmal "HSMMeldebestand". Das Feld "HSMMeldebestand" wird nicht vom Server zum Client geschickt.
 
Was das Feld ME angeht, wie gesagt auch im Original ohne eigene Lösung.
Schritt 1 Artikel eingeben.
Schritt 2 Menge anklicken. Wert verschwindet und wird nur bei neue Eingabe angezeigt. Schritt1.jpg Schritt2.jpg
 
Zuletzt bearbeitet:
Zum Fehler ME: kann ich nicht nachvollziehen, ich arbeitet allerdings auf einen Stand, der noch nicht oder gerade eben bereitgestellt wurde. Warten Sie also bitte auf das nächste LiveUpdate.
Zur Meldung: das dort 0 angezeigt wird ist klar, da ja auch im Feld Meldebestand nichts eingetragen ist. Es ist also die Frage, wodurch die 24.00 nach Änderung der Menge verschwinden. Ich bin so wie von Ihnen beschrieben vorgegangen und bei mir funktioniert es einwandfrei. Vermutlich ist es der gleiche Fehler, wie mit der ME.
Wie gesagt, bei mir ist alles in Ordnung und funktioniert. Eventuell warten Sie besser auf das nächste LiveUpdate und schauen dann noch einmal.
 
Zurück
Oben