[Gelöst] Doppellte E-Mailadressen nur einmal exporieren

12. Juli 2017 13:16

Hallo,
ich exportiere Mailadressen aus Tabelle Kontakt. Da habe ich "Doppellte" E-Mails.
wie exportiere ich im Dataport nur einen Datensatz mit dem Gleichen E-Mail Adresse? klar, kann ich im Excel die doppelte löschen, aber ich möchte es direkt aus dynamics.
Dynamics 2009 Classic-Client.
BSP.:
adresse1@gmx.de.de
adresse2@t-online.de
adresse2@t-online.de
adresse2@t-online.de
adresse3@web.de


Contact - OnBeforeExportRecord()

Contact.RESET;
Contact.SETFILTER(Contact."E-Mail",Contact."E-Mail");
IF Contact.FINDFIRST then
Export nur den ersten mit dem gleichen E-Mail ? :)


Danke für jede Hilfe.
Zuletzt geändert von wikas am 14. Juli 2017 09:54, insgesamt 1-mal geändert.

Re: Doppellte E-Mailadressen nur einmal exporieren Dataport

12. Juli 2017 14:11

Du legst einfach eine globale Variable für die Tabelle Contact an und stellst die Eigenschaft Temporary auf Yes.

Dann prüfst du, ob du diese E-Mail in deiner temporären Tabelle bereits findest. Falls ja überspringst du den Kontakt. Falls Nein, speicherst du den aktuellen Kontakt in deiner temporären Tabelle. Anstatt E-Mail benutzt du aber eher das Feld "Search E-Mail", weil dort Groß und Kleinschreibung egal ist.

Ansonsten sollte man darauf achten, ob das wirklich klappt, weil in jeder E-Mail ja ein "@" steht und das wird ja auch als Filterausdruck von NAV verstanden.

Code:
Contact - OnBeforeExportRecord()

TmpContact.RESET;
TmpContact.SETRANGE("Search E-Mail", "Search E-Mail";
IF NOT TmpContact.ISEMPTY THEN
  CurrDataport.SKIP;

TmpContact.INIT;
TmpContact := Contact;
TmpContact.INSERT;

Re: Doppellte E-Mailadressen nur einmal exporieren Dataport

12. Juli 2017 14:45

rwendler hat geschrieben:Du legst einfach eine globale Variable für die Tabelle Contact an und stellst die Eigenschaft Temporary auf Yes.



oder ganz ohne Zwischenpuffer -> also nicht auf temporary = yes und ohne insert in diesen Zwischenpuffer



Code:
TmpContact.RESET;
TmpContact.SETFILTER("No.",'<>%1',"No."); //sich selbst nicht suchen :)
TmpContact.SETRANGE("Search E-Mail", "Search E-Mail");
IF NOT TmpContact.ISEMPTY THEN
  CurrDataport.SKIP;


so ersparst du dir das Insert in die TmpContact

Re: Doppellte E-Mailadressen nur einmal exporieren Dataport

12. Juli 2017 14:59

Dankeschön für die Antworten.
Ich habe es noch andersgelöst, und zwar
Globale Variable (Text) EMails,
dann:
Dataport - OnInitDataport()
EMails:='';

und im Dataitem Contact :

Contact - OnBeforeExportRecord()

IF EMails =Contact."E-Mail" THEN
CurrDataport.SKIP;

UND:

Contact - OnAfterExportRecord()
EMails := Contact."E-Mail";

Danke

Re: Doppellte E-Mailadressen nur einmal exporieren Dataport

12. Juli 2017 16:08

sweikelt hat geschrieben:
rwendler hat geschrieben:Du legst einfach eine globale Variable für die Tabelle Contact an und stellst die Eigenschaft Temporary auf Yes.



oder ganz ohne Zwischenpuffer -> also nicht auf temporary = yes und ohne insert in diesen Zwischenpuffer



Code:
TmpContact.RESET;
TmpContact.SETFILTER("No.",'<>%1',"No."); //sich selbst nicht suchen :)
TmpContact.SETRANGE("Search E-Mail", "Search E-Mail");
IF NOT TmpContact.ISEMPTY THEN
  CurrDataport.SKIP;


so ersparst du dir das Insert in die TmpContact


Da hast du aber das Problem, dass du dann alle E-Mails nicht exportierst die doppelt oder mehrfach hinterlegt sind. Man will ja erreichen, dass Sie beim ersten Mal exportiert wird und beim zweiten Mal nicht. Deine Variante würde die mehrfach hinterlegten E-Mails nicht exportieren.

wikas hat geschrieben:Dankeschön für die Antworten.
Ich habe es noch andersgelöst, und zwar
Globale Variable (Text) EMails,
dann:
Dataport - OnInitDataport()
EMails:='';

und im Dataitem Contact :

Contact - OnBeforeExportRecord()

IF EMails =Contact."E-Mail" THEN
CurrDataport.SKIP;

UND:

Contact - OnAfterExportRecord()
EMails := Contact."E-Mail";

Danke


Das geht auch, aber nur solange du im DataItem auch nach E-Mail sortierst! Groß- und Kleinschreibung wird dann aber auch berücksichtigt. Da muss man aufpassen :)

Re: Doppellte E-Mailadressen nur einmal exporieren Dataport

12. Juli 2017 16:26

HAllo,
Danke für Deine Antwort.

Ja, ich sortiere die Dataport nach E-Mail ( Key erstellt).
Ja, stimmt auch, dass die klein- großsschreibung funktioniert nicht.- Da habe ich nicht gedacht.
Aber habe die Daten im Excel nach doppelte Datensätze gesucht und keinen gefunden.
Danke für Deine Bemerkung. Versuche mit Deine Lösung.

Re: Doppellte E-Mailadressen nur einmal exporieren Dataport

14. Juli 2017 09:34

Hallo,
Danke an alle, mit dem Feld Contact."Search E-Mail" hat es sehr gut geklappt. Habe alle benötigte Mailadressen bekommen.
Auch die, die falsch erstellt wurden ( mit Leerzeichen), die habe ich mit DELCHR gelöscht

OnBeforeExport
Contact."Search E-Mail" := DELCHR(Contact."Search E-Mail", '=',' ');

Jetzt sind nur einige (ca. 15) mit dem Zeilenumbruch und TAB geblieben.
Kann man auch bestimmt bei dem Export rauslöschen, aber ich gebe die Adressen an Sachbearbeiter und die sollen die im Dynamics korrigieren.
Oder kann man es einfacher direk im Dynamics automatisieren?

[Gelöst] Doppellte E-Mailadressen nur einmal exporieren Data

14. Juli 2017 09:51

Danke, ich werde es als gelöst markieren

Re: Doppellte E-Mailadressen nur einmal exporieren Dataport

17. Juli 2017 07:43

wikas hat geschrieben:Jetzt sind nur einige (ca. 15) mit dem Zeilenumbruch und TAB geblieben.
Kann man auch bestimmt bei dem Export rauslöschen, aber ich gebe die Adressen an Sachbearbeiter und die sollen die im Dynamics korrigieren.
Oder kann man es einfacher direk im Dynamics automatisieren?


Für 15 Stück lohnt eine Automatisierung nur, wenn dieser Vorgang auch zukünftig verwendet wird. Ansonsten würde ich die manuelle einpflegen (lassen).