Verwendung von Object Queries
- Anne Krieg
Einführung
Für Produkteigenschaften mit Berechnung sowie Produkteigenschaften ohne Berechnung lassen sich für die Typen "Beziehung" und "Tabelle" im Feld "Object Query" Abfragen generieren. Mit diesen Abfragen kann man die Inhalte jedes beliebigen Standard- oder Custom Objects in Salesforce in der Produkteigenschaft anzeigen lassen und auswählbar machen. Die Query ist in mehrere Abschnitte unterteilt und lässt sich sich von sehr einfach bis beliebig komplex gestalten.
Bitte beachten Sie, dass bei Object Queries u.U. sehr große Datenmengen abgefragt werden und wir durch das Salesforce Row Limit eingeschränkt sind. Wir unterstützen derzeit ca. 4 Eigenschaften vom Typ Tabelle oder Relation je Produkt. Kommt es dennoch zu einer Fehlermeldung, passen Sie bitte die Filterkriterien Ihrer Object Queries an, um die Datenmenge zu reduzieren.
Zur besseren Übersicht können Sie Ihre Tabellen nach den Einträgen in den einzelnen Spalten auf- oder absteigend sortieren. Diese Sortierung wird auch für die laufende Quote-Session beibehalten.
Formatierung
Die Object Query ist als String aufgebaut. Für die Eingabe sind erlaubt API-Feldnamen, Leerzeichen, Komma, Pipe und Zeilenumbrüche. Sonstige Sonderzeichen und/oder nicht korrekte API-Feldnamen führen automatisch zu einer Fehlermeldung und verhindern das Einfügen des zugehörigen Produkts.
Syntax
Reihenfolge | Priorität | Funktion | Struktur | Hinweis | Beispiel | Erläuterung |
---|---|---|---|---|---|---|
1 | Pflicht | Auf dieses Objekt bezieht sich die Abfrage. | <Objektname>| | Nur ein Wert gültig | Auspraegung__c| | |
2 | Empfohlen, nicht mehr notwendig in appero quote Lightning | Auflistung sämtlicher Felder, die in der folgenden Query abgefragt werden. | <Feldname>| | Komma separiert | Feld1__c,Feld2__c,Feld3__c| | Sämtliche Felder die in der Abfrage ab 3 verwendet werden, müssen auch in 2 eingefügt werden. Die Felder "Id" und "Name" werden automatisch von Quote hinterlegt und müssen nicht manuell ergänzt werden. Um die Datenmenge möglichst gering zu halten (Ladezeit) kann die Auswahl bereits an dieser Stelle durch einen Filter eingeschränkt werden, s. unten Tipps zur Verwendung. |
3 | Optional | Kalkulation | <Feldname Kalkulation>| | Nur Typ Währung oder Zahl | Sonderpreis__c| | Betr. Produkteigenschaften mit Berechnung. Sofern hier ein gültiges Feld zugeordnet ist, ergibt dies bei Produktoptionen mit Berechnung den Wert für die Berechnung angewendet. Der "Wert zur Kalkulation" sf42_quotefx__SF42_calc_Value__c der Produktoption selbst wird dann ignoriert. Der in der Produkteigenschaft hinterlegte Operator (+/-/=) wird auf den Wert des hier gewählten Datensatzes angewandt. |
4 | Optional | Produktfilter | <Feldname Produktfilter>| | Relation zu Produkt | Product2Id| | Sofern dem der Objekt-Query zugrundeliegenden Objekt eine Relation zum Standardobjekt Produkt zugeordnet ist, filtern sich die in der Produktoption auswählbaren Datensätze auf die Salesforce Id des Produkts der Angebotsposition. Dadurch lässt sich eine Auswahl zielgerichtet auf ein Produkt einschränken. |
5 | Optional | Filter | <Feldname Filter>| | Nur Typ Checkbox, Auswahlliste | Auswahl__c,aktiv__c| | Variante 1: einfache Feldnamen zur Anzeige Variante 2:
Variante 3: Feldnamen mit Verweis auf andere Produktoptionen vom Typ "Tabelle" / "Beziehung" |
6 | Optional | Darstellung | <Feldname Darstellung>| | Komma separiert | Feld1__c,(Feld3__c)| | Für den Typ "Tabelle" kann hier gesteuert werden, welche der in 2 hinterlegten Felder tatsächlich in der tabellarischen Darstellung ausgegeben werden sollen. Wenn diese Option leer bleibt, werden automatisch alle Felder aus 2 in der Tabelle angezeigt. Wenn man den Feldnamen in Klammern schreibt z.B. "(Feld3__c)" dann wird die Spalte in der Tabelle zwar im Editor ausgegeben, im fertigen Angebotsdokument jedoch ausgeblendet. Für den Typ "Relation" reicht ein einziges Feld. Wenn diese Option leer bleibt, wird automatisch das Feld "Name" in der Auswahlliste angezeigt. Feldnamen in Klammern werden ignoriert. |
7 | Optional | Account | <Feldname Account>| | Relation zu Account | Account__c| | Sofern hier eine Relation zum Standardobjekt Account zugeordnet ist, filtern sich die in der Produktoption auswählbaren Datensätze auf die Salesforce Id des Accounts, der an der zugehörigen Opportunity hinterlegt ist. Dadurch lässt sich eine Auswahl zielgerichtet auf den verwendeten Account einschränken. |
8 | Optional | Eigene Labels | <Eigene Labels Darstellung>| | Felder aus Darstellung | Feld1__c=Titel| | Für den Typ "Tabelle" können an dieser Stelle eigene Spaltenüberschriften definiert werden. Gerade wenn die Standardbezeichnungen der Felder zu lang sind, oder eine Übersetzung notwendig ist, kann diese Option sehr hilfreich sein. Sofern diese Option leer bleibt, werden automatisch die Feldbezeichnungen aus Salesforce verwendet |
9 | Optional | load on demand | <load on demand>| | "true" oder "false" | false| | Betrifft nur appero quote Classic: Sofern dieser Wert leer ist, oder mit "false" hinterlegt, werden die benötigten Datensätze aus dieser Object Query mit Start des Angebotseditors geladen. Mit der Option "true" kann man gerade bei hohen Datenmengen die Ladezeit wesentlich verkürzen, weil dann die Daten erst nachgeladen werden, sobald die Produkteigenschaft angezeigt wird. WICHTIG: Aktuell lässt sich die Option nur sinnvoll anwenden, wenn in der Objekt Query der "Produktfilter" oder die "Publikation" zugeordnet ist. |
10 | MediaVelox | Publikation | <Feldname Publikation> | Relation zu Publikation | Publikation__c, | Diese Option kann nur dann verwendet werden, wenn MediaVelox installiert ist. Sofern die Option gesetzt ist, filtern sich die angezeigten Datensätze auf die Publikation die aus dem ausgewählten Produkt resultiert (am Produkt muss die Relation zur Platzierung befüllt sein). |
11 | MediaVelox | Publikationsgruppe | <Feldname Publikationsgruppe>| | Relation zu Publikationsgruppe | Publikationsgruppe__c| | Diese Option kann nur dann verwendet werden, wenn MediaVelox installiert ist. Sofern die Option gesetzt ist, filtern sich die angezeigten Datensätze zusätzlich zur Publikation auch auf die Publikationsgruppe. |
12 | MediaVelox | Platzierung | <Feldname Platzierung>| | Relation zu Platzierung | Platzierung__c| | Diese Option kann nur dann verwendet werden, wenn MediaVelox installiert ist. Sofern die Option gesetzt ist, filtern sich die angezeigten Datensätze zusätzlich auf die Platzierung die aus dem ausgewählten Produkt resultiert (am Produkt muss die Relation zur Platzierung hinterlegt sein). |
13 | MediaVelox | Anzeigenformat | <Feldname Anzeigenformat> | Relation zu Anzeigeformat | Format__c | Diese Option kann nur dann verwendet werden, wenn MediaVelox installiert ist. Sofern die Option gesetzt ist, filtern sich die angezeigten Datensätze zusätzlich auf das Anzeigenformat welches aus dem ausgewählten Produkt resultiert (am Produkt muss die Relation zum Anzeigenformat hinterlegt sein) |
Das zweite Element der Objektabfrage, die Auflistung aller in der Abfrage verwendeten Felder, kann für appero quote Lightning entfallen.
Eine derart reduzierte Objektabfrage erzeugt allerdings eine Fehlermeldung bei der Verwendung von appero quote Classic.
Tipps zur Verwendung
Um die Leistung der Tabelle zu verbessern, werden im Produkt-Detail-Dialog nur noch 30 Datensätze gleichzeitig gerendert. Enthält die Tabelle mehr als 30 Datensätze, wird der Benutzer über einen Hinweis aufgefordert, die Suche zu verfeinern.
Minimumkonfiguration
Wenn eine Object Query nur aus dem Objektnamen besteht, werden automatisch die Felder "Id" und "Name" geladen und das Feld "Name" zur Anzeige verwendet. Gerade bei der Darstellung einfacher Objekte in Relationen, kann das sehr hilfreich sein.
Nicht benötigte Optionen
Natürlich kann es vorkommen, dass man in der Object Query manche Optionen nicht benötigt, in diesem Fall reicht es den Wert zwischen beiden Pipes einfach leer zu lassen, Beispiel "||". Da es manchmal auch viele Pipes sein können, lohnt sich das "Mitzählen". Es empfiehlt sich, je Pipe eine neue Zeile zu beginnen, um eine bessere Übersichtlichkeit zu gewährleisten.
Datenmengen optimieren
Oftmals kann es Filterkriterien geben, die ggf. schon beim Laden der Daten sinnvoll wären um die Datenmenge und damit die Ladezeit einer Produkteigenschaft zu reduzieren. Das kann ein Status sein, oder auch ein Recordtype. Dies lässt sich sehr einfach realisieren, wenn man bei Punkt 2 "Feldnamen" schon einen Filter einsetzt. In dem Beispiel StageName='Prospecting' würden schon beim Laden der Daten nur alle Opportunity-Datensätze geladen werden, die mit dem gefilterten Wert übereinstimmen. Generell gilt, dass eine Tabelle nur max. 200 Datensätze lädt, für genauere Ergebnisse muß die Tabellenanzeige ggf. im Editor über das Suchfeld eingeschränkt werden.
Wichtig: Filter auf den Feldtyp String und Id müssen in appero quote Classic immer mit einfachen Anführungszeichen umschlossen sein. Filter auf Datumswerte und Zahlen benötigen diese nicht.
Anzeige im Angebotseditor
Die ermittelten Werte werden im Produkt-Detail-Dialog in Form einer Dropdown-Liste (Typ Beziehung) oder als Tabelle abgefragt:
Abhängige Filter zu anderen Produktoptionen
Häufig besteht die Anforderung, dass ein selektierter Wert einer Produktoption vom Typ "Table" / "Relation" als Filterkriterium für eine andere Object Query angewendet werden soll. Dies lässt sich über den Abschnitt 5 (Filter) ergänzen.
Beispiel
Die erste Produkteigenschaft bietet über die Object Query eine tabellarische Darstellung der verfügbaren Accounts:
Account|Name,Id
In der zweiten Abfrage sollen nur diejenigen Kontakte angezeigt werden, die zum in der ersten Abfrage ermittelten Account gehören. Hierzu wird unter 5. auf die ID der ersten Query und das zu referenzierende Feld, in diesem Fall die AccountID verwiesen.
Contact|Name,Id,AccountId|||AccountId={Id:property1Id}
Konfiguration
Es gibt vier verschieden Möglichkeiten, den Filter zu setzen, eindeutig, ausschließend, ergänzend und als Vorbelegung. Eine Übersicht der verschiedenen Funktionen und die zugehörige Syntax finden Sie hier:
Verwendung | Syntax | Beispiel | Erklärung | |
---|---|---|---|---|
1 | Dynamischer eindeutiger Filter | = Beispiel Abschnitt 5: <Feldname>={<Feldname Object Query weiterer Produktoption>:<Salesforce Id der weiteren Produktoption>} | Id={PreisRubrik__c:a0q9E000001Zq5WQAS} | Die Option ermittelt den exakten Feldwert der verknüpften Produktoption und nutzt diesen als Filterwert für das angegebene Feld der eigenen Object Query. Es werden also nur Datensätze angezeigt, die dem exakten Filterkriterium entsprechen |
2 | Dynamischer ausschliessender Filter | -= Beispiel Abschnitt 5: <Feldname>-={<Feldname Object Query weiterer Produktoption>:<Salesforce Id der weiteren Produktoption>} | Id-={PreisRubrik__c:a0q9E000001Zq5WQAS} | Die Option ermittelt den exakten Feldwert der verknüpften Produktopionen, nutzt diesen jedoch als eindeutigen Filter auch im Vergleich von exakten leeren Werten |
3 | Dynamischer ergänzender Filter | += Beispiel Abschnitt 5: <Feldname>+={<Feldname Object Query weiterer Produktoption>:<Salesforce Id der weiteren Produktoption>} | Id+={PreisRubrik__c:a0q9E000001Zq5WQAS} | Die Option ermittelt den exakten Feldwert der verknüpften Produktoptionen, nutzt diesen jedoch als Zusatzfilter. Damit werden Datensätze mit leerem Wert auf das gefilterte Feld dennoch angezeigt. |
4 | Dynamische Vorbelegung | : Beispiel Abschnitt 5: <Feldname>:{<Feldname Object Query weiterer Produktoption>:<Salesforce Id der weiteren Produktoption>} | Id:{PreisRubrik__c:a0q9E000001Zq5WQAS} | Die Option nutzt den exakten Feldwert lediglich zur Vorbelegung des ersten gefundenen Datensatzes in der Liste, ohne jedoch die Datensatzanzahl einzuschränken. |
Vorbelegung einer weiteren Produkteigenschaft
Bei einigen Produkteigenschaften können Sie über das Feld “Vorbelegter Wert”/ sf42_quotefx__SF42_PreassignedValue__c über eine Variable auf den selektierten Wert einer anderen Produkteigenschaft vom Typ Tabelle/Relation zugreifen und damit Ihre Produkteigenschaft dynamisch vorbelegen. Möglich ist dies für die Eigenschaftstypen:
- Text/ Textbereich
- Dropdown/Multipicklist
- Datum
- Zahl/ Basismenge
Beispielkonfiguration
Produkteigenschaft 1, Typ: Tabelle
Id: xyz
Query: Account|Id,Name,Industry
Produkteigenschaft 2, Typ: Text
Id: abc
Vorbelegter Wert: {xyz:Industry}
Ergebnis: Die zweite Produkteigenschaft vom Typ Text ist mit dem in der ersten Tabelle selektieren Wert in der Spalte "Industry" vorbelegt.