Page 1 of 1

UUX | Self Service Portal Empfänger

Posted: 11. Sep 2020, 13:09
by jkaiser
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

Re: UUX | Self Service Portal Empfänger

Posted: 22. Sep 2020, 09:23
by cboss
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:

Image

Die einzige Alternative wäre aktuell ein eigenes Control zu implementieren, welches die Filterung ermöglicht.

Re: UUX | Self Service Portal Empfänger

Posted: 25. Sep 2020, 12:27
by Steinbit
Ü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: Select all

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: Select all

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

Re: UUX | Self Service Portal Empfänger

Posted: 04. Jun 2021, 08:50
by MBoenick
Bevor man diese Art von Customizings ansetzt, lohnt sich ein Blick in Settings der Service Catalog App. Dort kann man sowohl für die Benutzerauswahl als auch für die Auswahl der technischen Ziele ein ASQL Statement setzen, um die Auswahl zu filtern.

Re: UUX | Self Service Portal Empfänger

Posted: 13. Jul 2021, 15:22
by jkaiser
Danke an alle die geantwortet haben!

Herr Boenick: Das ist genau das was ich gesucht habe. Vielen Dank für den Hinweis!

Re: UUX | Self Service Portal Empfänger

Posted: 16. Sep 2022, 16:24
by robudus
Hallo Zusammen,
wie müsste das ASQl lauten damit man in der suche nur sich selbst oder der Vorgsetzte seine Teamzugehörigen wählen kann?
Ist sowas umsetzbar?

Re: UUX | Self Service Portal Empfänger

Posted: 01. Mar 2023, 10:24
by muellera
robudus wrote: 16. Sep 2022, 16:24 Hallo Zusammen,
wie müsste das ASQl lauten damit man in der suche nur sich selbst oder der Vorgsetzte seine Teamzugehörigen wählen kann?
Ist sowas umsetzbar?
Hallo zusammen,
die Antwort auf diese Frage würde mich auch sehr interessieren. Hat das schon jemand per entsprechendem ASQL-Statement gelöst?

Vielen Dank!

Gruß
Alex

Re: UUX | Self Service Portal Empfänger

Posted: 15. Mar 2023, 09:52
by robudus
Falls jemand eine Lösung sucht :-)

Manager = CurrentUserID() OR ProxyPerson = CurrentUserID() OR ID = CurrentUserID()
Somit werden in der gefilterten Liste nur diejenigen angezeigt, die diesem Ausdruck genügen. 

Teil 1: Manager = CurrentUserID()

Hier tauchen nur die Personen auf, deren Manager der eingeloggte User ist.

Teil 2: ProxyPerson = CurrentUserID()

Hier wird auch dem Vertreter des Managers ermöglicht, für ihn die Bestellung durchzuführen. Wenn das nicht gewollt ist, kann dieser Ausdruck auch entfernt werden. Das war nur eine optionale Bedingung.

Teil 3: ID = CurrentUserID()
Der eingeloggte User darf für sich selber bestellen.

Viel Spaß bei der Umsetzung.

G ROBudus

Re: UUX | Self Service Portal Empfänger

Posted: 15. Mar 2023, 09:53
by robudus
Wird in den Global System Settings im Service Bereich eingetragen. Im Filterausdruck.