Filterung Technisches Ziel - Service

Post Reply
AndreVogel
Posts: 32
Joined: 23. Apr 2015, 14:38
Contact:

Filterung Technisches Ziel - Service

Post by AndreVogel » 30. Sep 2020, 14:26

Hallo zusammen,

gibt es eine Möglichkeit pro Service eine zusätzliche Filterung für das Technische Ziel bei einer Servicebestellung zu hinterlegen?
Wir haben aktuell das Problem, das gewisse Services nur auf Notebooks bestellt werden sollen. Optimalerweise würden wir das gerne so Filtern, das der Kunde entsprechend auch nur Notebooks angezeigt bekommt.

Dies wäre auch an anderer Stelle sinnvoll wo z.b Technische Ziele abhängig vom Betriebssystem angezeigt werden sollen.

Wir haben probiert im Add To Cart Assistenten, im Bereich der Catalog Item Preview die Filterung für das technische Ziel manuell zu setzen, allerdings nimmt er dort keinen Filterausdruck an. Er nimmt immer den allgemeinen Filter, den wir in den Globalen Systemeinstellungen im Service Katalog Bereich hinterlegt haben.

Unsere Idee ist es gewesen, die Services um eine Checkbox und ein Textfeld zu erweitern und wenn die Checkbox angehakt ist, dann soll er den Standard Filter um den benutzerdefinierten ASQL Filter aus dem Textfeld ergänzen. So könnten wir direkt an jedem Service einen benutzerdefinierten ASQL Filter für das technische Ziel hinterlegen. Nur leider nimmt der Assistent AddToCart keine Filterung von uns an.
Auch wenn wir T(SPSComputerClassBase).Name = 'P06970' fest im Assistenten als Filter für das technische Ziel hinterlegen, wird dieser ignoriert.

Hinweis: Wir sind bereits auf Version 10. Mobile Geräte wurden durch das Update bereits in die Computer integriert.

Vielleicht hat ja jemand noch eine Idee.

Gruß Andre
Attachments
ServiceKatalog_GlobaleSystemeinstellungen.png
(127.1 KiB) Downloaded 211 times
AddToCart_Assistent.png
(241.24 KiB) Downloaded 180 times
Mit freundlichen Grüßen
i. A.

Andre Vogel
Systemarchitekt
Stadtbetrieb Informations- und Kommunikationssysteme
402.1303 ServiceDesk

An der Bergbahn 33
42289 Wuppertal

E-Mail andre.vogel@stadt.wuppertal.de

http://www.wuppertal.de

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

Re: Filterung Technisches Ziel - Service

Post by Steinbit » 01. Oct 2020, 14:23

Das System nimmt immer den Standard-Filter und hängt den dort angegebenen ASQL Ausdruck per AND-Operator an. Somit kannst du mit etwas tricksen trotzdem filtern. Ich habe das mit dem Target ADAccount gemacht, sollte aber prinzipell auch mit Asset etc. funktionieren

Ich habe es im Test-System so gemacht, dass ich eine neue Context-Variable angelegt habe und folgenden Code verwendet habe:

Code: Select all

return "1=2 OR T(SPSAccountClassAD).NBAccountName = 'AccountName'";
Als Ergebnis macht Matrix42 folgendes "DefaultFilter AND 1=2 (immer falsch, also keine Ergebnisse) ODER Dein BenutzerFilter (NBAccountName = 'AccountName'

Selbstverständlich kann man auch anstatt den Standard-Filter auszuhebeln diesen mit zusätzlichen Abfragen nach dem AND-Operator verfeinern

AndreVogel
Posts: 32
Joined: 23. Apr 2015, 14:38
Contact:

Re: Filterung Technisches Ziel - Service

Post by AndreVogel » 05. Oct 2020, 12:06

Danke für die schnelle Antwort :)

wenn wir die Filterung fest in eine Context Variable einfügen, dann funktioniert das ganze auch. Wenn wir uns die Filterung aber aus einem Verknüpften Objekt reinladen dann ignoriert er das. Wir haben eine zusätzliche Datendefinition am CI vom Service dran hängen, dort haben wir ein zusätzliches Textfeld angelegt für die Filterung. Hat den Vorteil das man den ASQL Filter dann in der Oberfläche im Dialog vom Service direkt hinterlegen kann. Wenn wir den aber in den Add To Cart Assistenten reinladen, dann zeigt er den Filterausdruck auch richtig an, nur filtert er dann nicht auf diesen. Es scheint also einen Unterschied zu machen ob der Filter Hart in die Variable geschrieben wird oder ob er sich diese Daten erst noch woanders aus der Datendefinition herziehen muss. Vermutlich hat er die Filterung schneller geladen als er die zusätzlichen Daten aus der DD bekommt.
Mit freundlichen Grüßen
i. A.

Andre Vogel
Systemarchitekt
Stadtbetrieb Informations- und Kommunikationssysteme
402.1303 ServiceDesk

An der Bergbahn 33
42289 Wuppertal

E-Mail andre.vogel@stadt.wuppertal.de

http://www.wuppertal.de

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

Re: Filterung Technisches Ziel - Service

Post by Steinbit » 05. Oct 2020, 18:31

Hi,

die Asynchronität kannst du ebenfalls lösen. Zunächst legst du, wie beschrieben deine UD_ServiceExtension DD mit dem Attribut Filter an und verknüpfst es mit dem CI vom Service Artikel. Anschließend kannst du per Service eine Filter Expression (A-SQL) setzen.

Nun gehst du wieder zurück zum Wizard Add-To-Cart.

1. Dort fügst du eine neue Source custom_Service (Entity-Name SPSArticleTypeService > Source Execution Mode: Inital and Update) ein.
2. Als ObjectID Input wählst du die ObjectId aus der Source Service_Details.return.ObjectId.
3. Nun erstellst du dir zwei Context Variable showDetails (Boolean), sowie technicalTargetFilter (String)
4. Anschließend wählst du bei deiner custom_Service Source die Property $sourceState und fügst 3 verknüpfte Datenmodel Eigenschaften hinzu:
- filter (watchable: false) > custom_service.SPSArticleTypeService.Ud_ServiceExtension.Filter
- technicalTargetFilter (watchable: false) > Context.technicalTargetFilter
- showDetails (watchable: false) > Context.showDetails

Anschließend setzt du die Advanced Expression:

Code: Select all

if ($value == 2) {
    technicalTargetFilter.$setValue(filter.$value);
    showDetails.$setValue(true);
}

return $value;
Nun musst du nur noch die Variablen entsprechend zuweisen:
5. repeater-1 (Typ: Repeater Control): Visibility > Context.showDetails
6. catalog-item-preview-1 (Catalog Item Review): Technical Target Filter > Context.technicalTargetFilter

Der Trick:
Erst sobald die Source custom_Service DD geladen wurde, setzt die Werte der Variablen technicalTargetFilter und showDetails. Da die Sichtbarkeit des Repeater Control abhängig von der Variable showDetails wechselt, wird dieses neu gerendert, sofern sich dessen Wert ändert. Während des Rendern des Repeater-Controls besitzt die Variable technicalTargetFilter bereits einen Wert, weshalb der ASQL Filter übernommen wird.

AndreVogel
Posts: 32
Joined: 23. Apr 2015, 14:38
Contact:

Re: Filterung Technisches Ziel - Service

Post by AndreVogel » 06. Oct 2020, 09:55

Da war das fehlende Bindeglied, vielen Dank für die Hilfe. Funktioniert :)
Mit freundlichen Grüßen
i. A.

Andre Vogel
Systemarchitekt
Stadtbetrieb Informations- und Kommunikationssysteme
402.1303 ServiceDesk

An der Bergbahn 33
42289 Wuppertal

E-Mail andre.vogel@stadt.wuppertal.de

http://www.wuppertal.de

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

Re: Filterung Technisches Ziel - Service

Post by Steinbit » 06. Oct 2020, 20:41

Habe mir das ganze heute nochmal etwas genauer angeschaut. Leider ist mir bei der von mir zuvor beschriebenen Lösung aufgefallen, dass hier bei Klick "Add to Cart" der Items im Catalog leider aufgrund von leerer Service Details.ObjectId (null) die custom Source nicht erfolgreich abläuft und daher der Dialog nicht korrekt sichtbar gemacht wird.

Mittels Anpassung existierender und neuer Context Variablen konnte ich aber für den Add To Cart Wizard eine Lösung entwickeln:

Ändern: Object.Id
ItemId (Watchable: true) Context.Object.ItemId
extendedDetails (Watchable: false) Context.extendedDetails

Expression:

Code: Select all

/* This is a fix for ID/ObjectId issue in Add to cart wizard ONLY ! */
/* return itemId.$value || _.get(r, "Context.Object.SPSArticleClassBase.ID"); */

/* Followed by custom code */
$value = itemId.$value || _.get(r, "Context.Object.SPSArticleClassBase.ID");

if ($value !== undefined && $value != $oldValue) {
    mx.Data.Fragments.getList("SPSArticleClassBase?where=ID IN ('"+$value+"')&columns=[Expression-ObjectId] as FragmentId,T(Ud_ServiceExtension).Filter AS technicalTargetFilter").then(function(data){

    	data.forEach(function(item) {
            extendedDetails.$setValue({
                "FragmentID":item.FragmentId,
                "TechnicalTargetFilter": item.technicalTargetFilter ,
                "Show":"True"
            });
        });
        
    });
}

return $value;
Neu: Context.extendedDetails > Object
Zusätzlich legen wir dessen Unter-Properties an:
- Context.extendedDetails.FragmentId > Guid
- Context.extendedDetails.TechnicalTargetFilter > String
- Context.extendedDetails.Show > Boolean

Nun setzen wir wieder diese 2 Variablen hinter die Control-Elemente:
5. repeater-1 (Typ: Repeater Control): Visibility > Context.extendedDetails.Show
6. catalog-item-preview-1 (Catalog Item Review): Technical Target Filter > Context.extendedDetails.technicalTargetFilter


Folgende Probleme / Nachteile treten jedoch weiterhin auf:
1. Das Feld TechnicalTarget wird weiterhin automatisch mit einem Default-Wert befüllt. Die A-SQL Filterung zieht erst bei der Änderung / Auswahl eines neuen Wertes.
2. Im Shopping Chart Wizard wird das ausgewählte Ziel übernommen, jedoch ist im Custom-Control (Tag: mx-shopping-cart) der Standard-Filter aktiv und dort finde ich keine Möglichkeit einzuharken.

Post Reply

Return to “Administration”

Who is online

Users browsing this forum: No registered users and 3 guests