UUX | Self Service Portal Empfänger

Antworten
jkaiser
Beiträge: 4
Registriert: 26. Sep 2019, 18:03
Kontaktdaten:

UUX | Self Service Portal Empfänger

Beitrag von jkaiser » 11. Sep 2020, 13:09

Hallo zusammen,

gerade Frage ich mich, ob es eine Möglichkeit gibt, die auswählbaren Empfänger im Self-Service-Portal zu filtern, so wie es ja auch bei anderen Objektwählern, über den Filterausdruck, der Fall ist...
Use case wäre z.B., dass ein angemeldeter Benutzer nur Empfänger auswählen kann, bei denen dieser als Vorgesetzter eingetragen ist und natürlich für sich selbst.

Danke & Viele Grüße,
Jonas Kaiser

cboss
Beiträge: 87
Registriert: 23. Dez 2011, 14:23
Kontaktdaten:

Re: UUX | Self Service Portal Empfänger

Beitrag von cboss » 22. Sep 2020, 09:23

Hallo,

im Standard geht das leider nicht, da es sich beim Empfänger-Feld um ein CustomControl (mx-shopping-context) handelt, welches kein Parameter für einen Filter annimmt. Es kann lediglich der Status in den Einstellungen gefiltert werden:

Bild

Die einzige Alternative wäre aktuell ein eigenes Control zu implementieren, welches die Filterung ermöglicht.
Dateianhänge
SCSettings.png
(51.6 KiB) 52-mal heruntergeladen
neo42 GmbH
Ihr Partner für Unified Endpoint Management, IT Service Management, Software Asset Management und Enterprise Mobility Management
http://www.neo42.de

Steinbit
Beiträge: 77
Registriert: 30. Nov 2017, 16:32
Kontaktdaten:

Re: UUX | Self Service Portal Empfänger

Beitrag von Steinbit » 25. Sep 2020, 12:27

Über Umwege ist auch diese Anforderung umsetzbar. Ich habe es in unserem Testsystem implementiert und getestet.

Zunächst erstellt man einen neuen Object-Picker über dem Dialog mit dem statischen Ziel SPSUserClassBase. Für den Filter (String) und die Value (Guid) legt man jeweils neue Context-Properties an. Diese verknüpft man mit den entsprechenden Feldern im Object-Picker.

Nun kommt die Magie:

Value > Advanced Properties:

Related DataModel: userId > DataQuery.userId (Watchable: true)

Expression:

Code: Alles auswählen

if (userId.$hasChanges && $value === undefined) {
    $value = userId.$value;
}

if ($oldValue !== undefined && $value !== null && $value != $oldValue) {
		if (localStorage.getItem('mx.auth.session.token')) {				
			var userInfo = JSON.parse(localStorage.getItem("mx.shell.userInfoCache"));
			var token = localStorage.getItem("mx.auth.session.token");
			var server = window.location.hostname;

			if (userInfo && token){
				
				var xhr = new XMLHttpRequest();
				xhr.open("GET", "https://" + server + "/m42Services/api/CatalogServices/Context?recipientId=" + $value + "&catalogId=00000000-0000-0000-0000-000000000000", true);
				xhr.setRequestHeader("Authorization", "Bearer " + token);
				xhr.setRequestHeader("Content-Type", "application/json");
				xhr.onload = function (e) {
					if (xhr.readyState === 4) {
						var result;
						if (xhr.status === 200) {
							result = JSON.parse(xhr.responseText);
							console.log("Success");
							location.reload();
						}
					}
				};
				xhr.onerror = function (e) { 
					var result = xhr.status + ': ' + xhr.statusText + '. ' + xhr.responseText;
					console.log(result);
				};
				xhr.send();
			}

		}
}

return $value;
Erläuterung: Wenn der Wert vom ObjectPicker geändert wird, ruft dieser den WebService CatalogService\Context auf und setzt die RecipientID auf die Auswahl vom Picker. Anschließend wird die aktuelle Seite neue geladen (location.Reload), da ich nicht weiß wie ich sonst das eigentliche CustomControl aktualisieren kann - es ist nicht besonderd schön aber funktioniert ;)

Filter > Advanced Properties:

Code: Alles auswählen

return "ID IN SUBQUERY(SPSUserClassBase as ucb, ucb.ID, ucb.ID = CURRENTUSERID() OR ucb.Manager = CURRENTUSERID())";
Nun muss das ursprüngliche Auswahl-Feld noch versteckt werden. Leider darf das Custom Control nicht auf Visible: False setzt werden, weil sonst verfügbaren Services nicht richtig geladen werden. Als Workaround kann der Parent-Container mit dem Style: Display: None ausgeblendet werden.

Schlussendlich wirkt die Seite wie vorher, jedoch können nur noch der eigene User bzw. untergebene Mitarbeiter ausgewählt werden.

Gruß, Thomas

Antworten

Zurück zu „Customizing und Reporting“

Wer ist online?

Mitglieder in diesem Forum: 0 Mitglieder und 4 Gäste