Exportieren von Abonnenten – ExportSubscribers

RequestParameter: SAPSubscriberExportRequest
ResponseParameter: SAPSubscriberExportResponse

Da SAP abstrakte Klassen und Vererbungen nicht unterstützt, wurde für den Einsatz von SAP die Schnittstelle SAPExportSubscribers implementiert.

Um Abonnenten via SAP aus mailworx zu exportieren wird die Methode SAPExportSubscribers verwendet. Der Request-Parameter beinhaltet Informationen darüber, welche Abonnenten exportiert werden sollen. Hier kann die Guid der Abonnentengruppe angegeben werden, welchem die Abonnenten, die exportiert werden sollen, entsprechen müssen. Diese Guid ist Nullable. Wird sie nicht angegeben, so werden alle Abonnenten exportiert.

Alternativ zur Angabe einer Abonnentengruppe können auch Conditions festgelegt werden. Diese setzen sich aus einem Abonnentenfeld, einem Vergleichsoperator und einem Vergleichswert zusammen. Für jedes dieser Eigenschaften gibt es 8 verschiedene Typen, einen für jedes Feld. Alle angegebenen Conditions werden mit ausschließlich mit „und“ verknüpft, dh es müssen alle Conditions zutreffen. Hinweis: Wird eine Abonnentengruppe angegeben, so werden sämtliche Conditions ignoriert.

Des Weiteren beinhaltet der Request-Parameter ein Array von Abonnentenfeldern, welche exportiert werden sollen, also welche Daten eines Abonnenten exportiert werden sollen.

Die Methode liefert einen Array von SAPSubscriber, welche entsprechende Metadaten (Mailformat, OptIn (TRUE=Angemeldet), Registrierungsdatum, den Status (aktiviert oder inaktiv), die Sprache des Abonnenten) enthalten und des Weiteren auch die Werte für die gewünschten Abonnentenfelder, aufgesplitet in ihren Typ.

Die in mailworx vorhandenen Abonnentenfelder können mit der Methode GetSubscriberFields ausgelesen werden.

Codebeispiel
MailworxWebServiceAgent agent = new MailworxWebServiceAgent();
		SAPSubscriberExportRequest request = new SAPSubscriberExportRequest();
		request.SecurityContext = GetSecurityContext();
		request.Language = "DE"; // This is the language of all the subscribers in this request.
		request.ProfileGuid = Guid.Empty; // Has to be set correct

		// Get all custom subscriber fields and all meta fields
		Field[] allFields = GetAllSubscriberFields(agent, FieldType.CustomInformation | FieldType.MetaInformation);

		// Because SAP doesn't support abstract classes, we have to split up the fields according to their type.
		List numberFields = new List();
		List textFields = new List();
		List selectionFields = new List();
		List dateTimeFields = new List();
		List booleanFields = new List();
		List guidFields = new List();
		List mdbFields = new List();
		List urlFields = new List();
		// Check every field for its type
		foreach (Field field in allFields) {
			if (field.GetType() == typeof(NumberField))
			numberFields.Add((NumberField)field);
			else if (field.GetType() == typeof(TextField))
			textFields.Add((TextField)field);
			else if (field.GetType() == typeof(SelectionField))
			selectionFields.Add((SelectionField)field);
			else if (field.GetType() == typeof(DateTimeField))
			dateTimeFields.Add((DateTimeField)field);
			else if (field.GetType() == typeof(BooleanField))
			booleanFields.Add((BooleanField)field);
			else if (field.GetType() == typeof(GuidField))
			guidFields.Add((GuidField)field);
			else if (field.GetType() == typeof(MdbField))
			mdbFields.Add((MdbField)field);
			else if (field.GetType() == typeof(UrlField))
			urlFields.Add((UrlField)field);
		}

		// Add the fields to the request
		request.NumberFields = numberFields.ToArray();
		request.TextFields = textFields.ToArray();
		request.SelectionFields = selectionFields.ToArray();
		request.DateTimeFields = dateTimeFields.ToArray();
		request.BooleanFields = booleanFields.ToArray();
		request.GuidFields = guidFields.ToArray();
		request.MdbFields = mdbFields.ToArray();
		request.UrlFields = urlFields.ToArray();

		// Export the subscribers -> This can take quite a long time!
		SAPSubscriberExportResponse response = agent.SAPExportSubscribers(request);

		foreach (SAPSubscriber s in response.Subscribers) {
			// meta information
			Console.WriteLine("Guid: " + s.Guid);
			Console.WriteLine("RegDate: " + s.RegistrationDate.GetValueOrDefault().ToShortDateString());
			Console.WriteLine("Mailformat: " + s.Mailformat.GetValueOrDefault());
			Console.WriteLine("OptIn: " + s.OptIn.GetValueOrDefault().ToString());
			Console.WriteLine("Status: " + s.Status.GetValueOrDefault());

			// Write the subscriber data (Firstname, Lastname, Salutation, E-Mail,…)
			// We have to go through all field types, e.g. TextFields, NumberFields
			if (s.TextFields != null) {
				for (int i = 0; i < s.TextFields.Length; i++) {
					Console.WriteLine(String.Format("{0}: <{1}>", s.TextFields[i].DisplayName, s.TextFields[i].UntypedValue));
				}
			}
			if (s.NumberFields != null) {
				for (int i = 0; i < s.NumberFields.Length; i++) {
					Console.WriteLine(String.Format("{0}: <{1}>", s.NumberFields[i].DisplayName, s.NumberFields[i].UntypedValue));
				}
			}
		}