Microsoft Dynamics NAV 2013 Suchen und Ersetzen

Microsoft Dynamics NAV 2013 Suchen und Ersetzen

  • Comments 4

In Microsoft Dynamics NAV 2009 und im Classic Client konnte man über “Suchen und Ersetzen” Datenänderungen durchführen ohne dafür einen Batch programmieren zu müssen. Im RTC wurde das Suchen durch Filtern ersetzt und das Ersetzen suchte man vergeblich. In Microsoft Dynamics NAV 2013 nun ist das Suchen zurückgekehrt:

image

Standard Page zum Suchen

 

Aber manchmal vermisst man doch das Ersetzen noch. Vielleicht haben Sie den Blog Post von Robert Miller schon gesehen. Er ist es auf jeden Fall Wert einen genaueren Blick hinein zuwerfen. Deswegen hier die eingedeutschte Version des Beitrags, ergänzt um eigene Anmerkungen. Viel Spaß beim Experimentieren.

Auch wenn Microsoft Dynamics NAV 2013 mit Rapid Start und den bekannten Möglichkeiten einen kleinen Report / Funktion zur Änderung von Stammdaten zu schreiben, schon ein ganzes Arsenal an Werkzeugen bietet, so ist es für den Endanwender doch oft einfacher mittels Suchen und Ersetzen einen Wert durch einen anderen zu ersetzen. Wie man mit einfachen Mitteln eine Page zum Ersetzen erstellen und mit unterschiedlichsten Daten benutzen kann zeigt die nachfolgende Beschreibung. So könnte das ganze Aussehen:

 

image

Ersetzen Page

 

Beschreibung

  • Feld: Mittels AssistEdit oder auch durch Eingeben des Feldnamens können Sie das Feld auswählen, welches Ersetzt werden soll
  • Suche nach: enthält den Wert der gesucht werden soll
  • Ersetzen durch: enthält den Wert, der mit dem gefundenen ersetzt werden soll

Options:

  • Entsprechung – Sie können wählen zwischen “Ganzes Feld” oder “Jeden Teil des Feldes”
  • Groß-/Kleinschreibung – Legt fest, ob Groß-/Kleinschreibung beachtet werden soll
  • Ganzes Feld ersetzen – Ersetzt das ganze Feld und nicht nur Teile, wenn markiert
  • Anzahl Sätze im Dataset – Zeigt an, wie viele Datensätze im aktuellen Filter enthalten sind. Nicht die Anzahl der Treffer.

 

Wie wird diese Page nun genutzt?

Sie können das angehängte .TXT Objekt importieren und kompilieren. Sie werden dann in der Lage sein, die Page von fast überall aus zu benutzen. Versuchen Sie dies zum Beispiel bei der Kunden List Page (Page 22):

1. Importieren und Kompilieren Sie “Replace NAV2013DE.txt”. (Neue Page 50050)

2. Öffnen Sie die Entwicklungsumgebung und dort die Page 22 per Design öffnen.

3. Fügen Sie eine globale Variable hinzu, die Sie auf die neue Page (50050) zeigen lassen

4. Erzeugen Sie eine neue Action

5. Im OnAction Trigger der neuen Action, kommt der folgende Code hinein…

6. Speichern und Kompilieren Sie und schon können Sie die Funktion nutzen

 

Wie funktioniert es nun?

  • “LoadDataSet” läd das gefilterte Dataset, somit ist Filtern vor dem Ersetzen möglich
  • Die SetValidations Funktion ist Optional, diese Funktion hat zwei Parameter. Der erste Bestimmt, ob der Modify Trigger benutzt wird und der zweite, ob OnValidate() aufgerufen wird.

Noch ein paar Hinweise / Ideen:

  • Wenn Sie Time oder DATETIME Ersetzen, denken Sie daran, dass zwar nur Stunden, Minuten und Sekunden angezeigt werden, aber eventuell Millisekunden gespeichert sind. Am besten wäre also, denn zu findenden Wert über die Zwischenablage in die Page zu kopieren.
  • Setzen Sie die Funktion dort ein, wo es sinnvoll ist und denken Sie daran, dass es eine mächtige Funktion ist. Es gibt kein “Undo”. Im Moment kommt nur eine “Fertigmeldung” nachdem das Ersetzen durchgeführt wurde. Eine Idee wäre, dort noch eine Abfrage hinzuzufügen. “Sind Sie wirklich sicher?” oder so etwas
  • Vielleicht ist es nicht gewünscht, dass alle Felder ersetzt werden können. Sie könnten über eine zusätzliche Einrichtungstabelle die Funktionen so erweitern, dass eingerichtet werden kann, welche Felder mit dieser Funktion bearbeitet werden dürfen

 

These postings are provided "AS IS" with no warranties and confer no rights. You assume all risk for your use.

 

Mit freundlichen Grüßen und Viel Spaß damit

Andreas Günther

Microsoft Dynamics Germany

Attachment: Replace NAV2013_DE.txt
Leave a Comment
  • Please add 8 and 5 and type the answer here:
  • Post
  • Ist ja super.

    Ich bau das gerade für einen Kunden ein.

    Hat er gut gemacht der Miller.

    Besonders die ganze rec ref Geschichte. Habe ich immer noch vollständig durchdrungen.

    Zum Teil schon deutsch hinterlegt. In den Texten fehlt es aber noch.

    Was jedoch nicht funktioniert ist der Filter.

    Den braucht man beim Aufruf aus einem Buchblatt

    Hängt auch mit der Sprache zusammen.

    Filtertext ist deutsch Name Feld englisch

    //IF FilteredFldRef.NAME = Filters[ICount][1] THEN BEGIN

    IF FilteredFldRef.CAPTION = Filters[ICount][1] THEN BEGIN

    Gibt es eine neuere Version davon in ML. Der Blog ist ja schon etwas älter

  • Hallo Helge,

    wenn du folgendes änderst, dann funktionierst auch mit Captions.

    1. In page 6218 die Caption mit reinnehmen

    2. Im Code "SelectedField" in der Replace page im OnValidate()

    //Fields.SETRANGE(FieldName,SelectedField);

    Fields.SETRANGE("Field Caption",SelectedField);

    Ändern und im OnAssistEdit:

    //SelectedField := Fields.FieldName;

    SelectedField := Fields."Field Caption";

    Damit kann man dann die Felder auf der aktuellen Sprache auswählen oder eingeben. Der Rest funktioniert schon automatisch, weil er nur die Feldnummern speichert.

    Gruß

    Andreas

  • Hallo Andreas,

    vielen Dank für den Post. Ich kann jetzt zwar die Felder in der eingestellten Sprache auswählen (ein echter Komfortgewinn), allerdings klappt die Filterübergabe bei mir immer noch nicht. Im Buchblatt werden weiterhin alle Datensätze gezählt und geändert.

    In den Buchblättern gibt es ja zudem die Besonderheit, dass Buchblattvorlage und -name in anderen Filtergruppen gefiltert werden. Ich bin einfach hergegangen und habe diese vor dem Funktionsaufruf manuell in der aktuellen Filtergruppe gesetzt.

    Mache ich irgendwo einen Denkfehler?

    viele Grüße,

    Xerion

  • Hallo Kollegen,

    ich habe das gleiche Problem wie Helge. Die Felder auf deutsch auszuwählen ist ein großer Komfortgewinn, aber die Filter gehen trotzdem verloren. Das hat zwei Ursachen:

    1.) In Buchblättern werden Buchblattname und -vorlage in einer anderen Filtergroup gespeichert.

    2.) Er packt es nicht, die Filter auf die Captions anzuwenden.

    Ich mit zwei kleinen Änderungen können beide Effekte beseitigt werden:

    zu 1.) Filtergruppen

    Die saubere Lösung ist sicherlich einmal durch alle Filtergruppen durchzulaufen und die Filter dann in einer eigenen Fitergruppe zusammenzufassen. Quick und Dirty würde es auch reichen vor dem Funktionsaufruf die beiden  

    zu 2.) Filter auf Captions statt Feldname

    Die genannten Änderungen sind notwendig. Zusätzlich muss in der Funktion "ApplyFilters" das letzte Statement von Name auf Caption geändert werden:

    //IF FilteredFldRef.NAME = Filters[ICount][1] THEN BEGIN // * inactive

    IF FilteredFldRef.CAPTION = Filters[ICount][1] THEN BEGIN // *

    Bei mir geht's so :)

    Xerion

    PS: @Andreas kannst Du bitte den letzten Post und diesen Kommentar löschen - der bringt keinen zusätzlichen Erkenntnisgewinn; ich konnte ihn leider nicht editieren.

Page 1 of 1 (4 items)