UUX | Self Service Portal Empfänger

Post Reply
jkaiser
Posts: 22
Joined: 26. Sep 2019, 18:03
Contact:

UUX | Self Service Portal Empfänger

Post by 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
Posts: 127
Joined: 23. Dec 2011, 14:23
Contact:

Re: UUX | Self Service Portal Empfänger

Post by 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:

Image

Die einzige Alternative wäre aktuell ein eigenes Control zu implementieren, welches die Filterung ermöglicht.
Attachments
SCSettings.png
(51.6 KiB) Downloaded 866 times
neo42 GmbH
Ihr Partner für Unified Endpoint Management, IT Service Management, Software Asset Management und Enterprise Mobility Management
http://www.neo42.de
--------------------------------------------------------------------------
Morpheus42
Entdecke mit uns die Welt des Enterprise Service Management & Matrix42
https://www.morpheus42.com

Steinbit
Posts: 128
Joined: 30. Nov 2017, 16:32
Contact:

Re: UUX | Self Service Portal Empfänger

Post by 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: 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

User avatar
MBoenick
Posts: 117
Joined: 13. May 2009, 14:37
Contact:

Re: UUX | Self Service Portal Empfänger

Post by MBoenick » 04. Jun 2021, 08:50

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.

jkaiser
Posts: 22
Joined: 26. Sep 2019, 18:03
Contact:

Re: UUX | Self Service Portal Empfänger

Post by jkaiser » 13. Jul 2021, 15:22

Danke an alle die geantwortet haben!

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

robudus
Posts: 491
Joined: 07. May 2008, 09:24
Contact:

Re: UUX | Self Service Portal Empfänger

Post by robudus » 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?

muellera
Posts: 8
Joined: 28. Feb 2019, 08:51
Contact:

Re: UUX | Self Service Portal Empfänger

Post by muellera » 01. Mar 2023, 10:24

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

robudus
Posts: 491
Joined: 07. May 2008, 09:24
Contact:

Re: UUX | Self Service Portal Empfänger

Post by robudus » 15. Mar 2023, 09:52

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

robudus
Posts: 491
Joined: 07. May 2008, 09:24
Contact:

Re: UUX | Self Service Portal Empfänger

Post by robudus » 15. Mar 2023, 09:53

Wird in den Global System Settings im Service Bereich eingetragen. Im Filterausdruck.

Post Reply

Return to “Customizing und Reporting”

Who is online

Users browsing this forum: No registered users and 1 guest