Suchen & ersetzen

15. September 2016 12:40

Hallo,

da das gute alte "Suchen & Ersetzen" nicht mehr existiert, habe ich mich nach einer Lösung umgesehen.
Fündig wurde ich auch hier: https://blogs.msdn.microsoft.com/nav/20 ... -nav-2013/

Ich hänge mal die eigens abgeänderte Version an. Diese enthält ein paar Features und Fixes. So z.B.

-eine Autovervollständigung für die Feldeingabe,
-die Möglichkeit Alles zu ersetzen (also unabhängig von Suche nach ...),
-Auf Wunsch Commit nach jeder Änderung,
-Nur Selektierte Datensätze abarbeiten (Siehe Dokutrigger 1 und 2b),
-Anzeige der Gesamtrecords + Warnung wenn alle Datensätze der Tabelle im Filter sind.
-24.11.2016: Es lässt sich eine Tabelle auswählen, wenn die Page ohne gesetzten RecRef gestartet wird.




Es gibt ein paar Einschränkungen:
So kann es vorkommen, dass ein Feld nicht zum Suchen & Ersetzen verwendet werden kann wenn dieses selbst für die Filterung der Datensätze genutzt wurde. (Muss nicht). Außerdem sollte man bedenken, dass durch die Verwendung von Record Referenzen der Modify Trigger der Tabelle keine Änderung zwischen Rec und xRec erkennt!

Ich empfehle auch die Informationen aus dem oben angegebenen Link zu lesen.
Die Ehre gebührt Robert Miller NAV für die Initialversion der Page und OttoChr für die ersten Korrekturen (Siehe Kommentarbereich unter dem Artikel aus dem Link).

Ich stelle meine angepasste Version hier lediglich zur Verfügung und übernehme keine Haftung für fehlerhafte Änderungen an Records oder andere Schäden.


Microsoft.Dynamics.Nav.Client_2016-11-24_08-42-08.png



Änderungen
Code:
160916 RZ001 : Fix für DECIMAL (Siehe Forenkommentar #2,#4)
190916 RZ002 : Vereinfachung für RZ001
221116 RZ003 : + Möglichkeit Tabelle auszuwählen, wenn Page ohne RecRef gestartet wird
231116 RZ004 : Fix Filter für Dezimalzahlen + SetReplaceWholeField() u. UnsetMatchCase von Code[10] auf Code[20]
Du hast keine ausreichende Berechtigung, um die Dateianhänge dieses Beitrags anzusehen.
Zuletzt geändert von Raik Zobel am 24. November 2016 09:50, insgesamt 4-mal geändert.

Re: Suchen & ersetzen

15. September 2016 13:25

Hallo,

vielen Dank für dieses nette Tool.

Mir scheinen allerdings noch ein paar kleine Fehler drin zu sein. :wink:
Code:
IF UPPERCASE(FORMAT(FldRef.TYPE)) = 'DECIMAL' THEN BEGIN
  DecimalPlaces := STRLEN(FindWhat) - STRPOS(FindWhat,'.');
  MatchText := FORMAT(FldRef.VALUE,0,'<Precision,2:' + FORMAT(DecimalPlaces) + '><Standard Format,0>');
END ELSE
  MatchText := FORMAT(FldRef.VALUE);


1. Der Dezimalpunkt ist in Deutschland ein ',' (2. Zeile des Codes).
2. DecimalPlaces sollte die Anzahl der Nachkommastellen enthalten, nicht die Länge der Zahl, wenn kein Dezimalpunkt eingegeben wurde (2. Zeile des Codes)
3. Wenn in FindWhat ein Decimal mit 0-1 Dezimalstellen eingegeben wurde, wird der Matchstring immer mit 2 Nachkommastellen sein.
4. Wenn FindWhat "1,25" enthält, und das zu prüfende Feld "1,245" wird auch das als gleiches Feld erkannt, da der Matchstring auf 2 Nachkommastellen gerundet würde. :shock:

Mir scheint, da sind noch ein paar Dinge übersehen worden :-(

Gruß Fiddi

Re: Suchen & ersetzen

15. September 2016 16:54

Ok,

das schau ich mir mal noch genauer an. Hatte bisher nur die Fehler die mir aufgefallen sind behoben. Zum Beispiel beim FilterString wurde auch nach dem "," gesucht um die Anzahl der Filter zu finden. Geht aber nicht, wenn der FilterString eine Dezimalzahl enthält.

Re: Suchen & ersetzen

16. September 2016 15:59

Ich gehe einen anderen Weg.

Nicht der Feldwert (MatchText) wird geändert, sondern der Suchtext (FindString) wird angepasst.
Zuletzt geändert von Raik Zobel am 19. September 2016 09:24, insgesamt 2-mal geändert.

Re: Suchen & ersetzen

16. September 2016 17:01

Hallo,

ganz ehrlich: Ich würde bei einem Dezimal auch einen Dezimal vergleichen.
Außerdem macht das ganze Geraffel ob das ganze Feld ersetzt/geprüft werden soll, oder nur ein Teil des Feldes bei allen nicht Text/Code-Feldern eh keinen Sinn.

Gruß Fiddi

Re: Suchen & ersetzen

19. September 2016 10:02

fiddi hat geschrieben:Hallo,

ganz ehrlich: Ich würde bei einem Dezimal auch einen Dezimal vergleichen.
Außerdem macht das ganze Geraffel ob das ganze Feld ersetzt/geprüft werden soll, oder nur ein Teil des Feldes bei allen nicht Text/Code-Feldern eh keinen Sinn.

Gruß Fiddi



Nun ja,

ich habe den Dezimalvergleich nochmal verkürzt. Es geht auch ohne die ganzen Umwandlungen.

Was die Teilfeldersetzung anbelangt, kann ich nicht sagen ob das Sinn macht oder nicht - Ich benötige es nicht, es war schon im Code enthalten und vielleicht macht es ja durchaus für jemand anderen Sinn. Mir ist die Erweiterung wichtig, dass man auch ohne "Suche nach" alles Ersetzen kann. Mach z.B. Sinn wenn man alle Debitoren aus einem bestimmten PLZ Bereich einen neuen Verkäufercode zuweisen möchte, unabhängig davon was das Feld vorher für einen Wert hatte. Mir hat die Page in diesem Fall schon sehr oft geholfen.

Grüße

Re: Suchen & ersetzen

24. November 2016 09:52

Update 24.11.2016: Es lässt sich eine Tabelle auswählen, wenn die Page ohne gesetzten RecRef gestartet wird. Außerdem ist ein weiterer Fehler behoben, welcher bei der Filterung auf Dezimalzahlen enstanden ist.