Hinweis: Unify Lookup erfordert eine dedizierte Unify Lookup Server-Instanz — diese Funktion ist bei Abonnements mit geteilter Infrastruktur nicht verfügbar — und DQE One muss bereits in Ihrer Organisation installiert sein. Wenden Sie sich an den DQE-Support, um diese Funktion für Ihre Organisation aktivieren zu lassen, bevor Sie die folgenden Schritte ausführen.
Custom Settings
- Rufen Sie den Bereich Custom Settings auf. Eine Custom Setting namens DQE Unify Lookup ist verfügbar.
- Klicken Sie auf Manage und erstellen Sie eine Instanz auf Ebene "organization default".
- Geben Sie die erforderlichen Informationen ein.
- Allow Skip: Benutzer können die Unify-Lookup-Vorschläge überspringen und direkt einen neuen Datensatz anlegen.
- App Named Cred: Name des zu verwendenden Named Credential.
- Displayed Fields: Felder, die in der Vorschlagstabelle angezeigt werden.
- Lookup record before insert: Wenn aktiviert, führen die DQE-Formulare zum Erstellen/Bearbeiten von Datensätzen vor dem Anlegen eines neuen Datensatzes eine Unify-Lookup-Suche durch — zusätzlich zur unten beschriebenen Ersetzung der Record-Lookup-Schaltfläche.
Zugriff auf den Record-Lookup-Setup-Tab
Öffnen Sie die App DQE One, gehen Sie zum Tab DQE One Setup und wählen Sie dann den Unter-Tab Lookup. Wählen Sie Ihr Named Credential aus und klicken Sie auf Connect. Dadurch wird die Verbindung zwischen Ihrer Salesforce-Organisation und Ihrer Unify Lookup Server-Instanz hergestellt.
Eine Indizierung starten
Nach einem Klick auf Connect wird die DQE-One-Anwendung unterhalb der Setup-Karte mit zwei Tabs geladen, Salesforce und Heroku Connect (Salesforce ist standardmäßig ausgewählt). Wiederholen Sie die folgenden Schritte für jedes Salesforce-Objekt, das über Record Lookup durchsuchbar sein soll.
- Klicken Sie im Tab Salesforce oben links auf Add. Das Fenster Add Salesforce Data Source öffnet sich.
- Wählen Sie dort das zu indizierende Salesforce-Objekt aus der Dropdown-Liste aus und klicken Sie auf Add. Das Objekt erscheint anschließend als neue Zeile unterhalb der Schaltfläche Add.
- Klicken Sie in der Zeile des Objekts auf die Schaltfläche Rulesets und wählen Sie im sich öffnenden Fenster Ruleset ein Ruleset aus. In dieser Liste erscheinen nur Rulesets, die für dieses Objekt bereits in DQE Unify konfiguriert sind (als Duplicate-Check-Prozess in Ihrer Salesforce-Organisation — siehe "Set up Unify processes and rules"). Ist die Liste leer, legen Sie zuerst diesen Prozess an.
- Klicken Sie optional auf die Schaltfläche Filters und wählen Sie im Fenster Input Filters eine Salesforce-List-View aus, um nur die von dieser List View erfassten Datensätze zu indizieren. Ist kein Filter gesetzt, wird jeder Datensatz des Objekts indiziert.
- Klicken Sie in der Zeile des Objekts auf die Schaltfläche Index Database (Play-Symbol), um die Indizierung zu starten.
- Wurde dieses Objekt bereits zuvor indiziert, erscheint ein Bestätigungsfenster mit dem Titel Erase previous indexation ?, das darauf hinweist, dass der bisherige Index gelöscht wird und die Suchleistung während der neuen Indizierung beeinträchtigt ist. Klicken Sie auf Yes, um fortzufahren, oder auf No, um abzubrechen.
- In der Zeile des Objekts erscheint ein Fortschrittsbalken, der live aktualisiert wird (Reading, dann Running, dann Finished), bis die Indizierung abgeschlossen ist. Sobald Finished angezeigt wird, sind die Datensätze des Objekts über die weiter unten beschriebene Record-Lookup-Schaltfläche durchsuchbar.
Die Zeile jedes Objekts bietet außerdem:
- ein Kontrollkästchen, um dieses Objekt zusätzlich über die native globale Suche von Salesforce (Federated Search, siehe API-Leitfaden weiter unten) verfügbar zu machen;
- Clear DB, um seine indizierten Daten zu entfernen, ohne das Objekt aus der Liste zu entfernen;
- Delete Record Type, um das Objekt vollständig aus den Datenquellen zu entfernen (sein Ruleset und sein Filter werden dabei verworfen).
Record Lookup
Ersetzen Sie, sobald Ihre Objekte indiziert sind, die Standardschaltfläche New bei jedem von ihnen durch die Record-Lookup-Schaltfläche, damit Benutzer vor dem Anlegen eines neuen Datensatzes nach einem vorhandenen suchen können:
- Rufen Sie das Salesforce Setup auf.
- Öffnen Sie den Object Manager.
- Wählen Sie das betreffende Objekt aus.
- Suchen Sie die Schaltfläche New.
- Ersetzen Sie die Schaltfläche durch die Record-Lookup-Schaltfläche.
API-Leitfaden
Dieser Abschnitt beschreibt die APIs, die von der Record-Lookup-App bereitgestellt werden.
Federated Search
OpenSearch Description
Salesforce stellt ein Integrationsprotokoll für externe Datenquellen bereit. Die vollständige Dokumentation finden Sie in der Salesforce Federated Search-Dokumentation.
Um diesem Protokoll zu entsprechen, stellt die Unify-Lookup-Anwendung eine zweiteilige XML-Atom-API bereit. Der erste Teil beschreibt das Format.
- Route: /api/openSearch.xml
-
Aufruf:
curl -X GET https://[YOUR APP URL]/api/openSearch.xml - Antwort:
Da das Format für alle Antworten eindeutig sein muss, ist die Feldliste fest vorgegeben. Für jeden in der Unify-Lookup-App indizierten Datensatztyp können Sie eine Adresse, eine E-Mail-Adresse, eine Telefonnummer, einen Vornamen und einen Nachnamen zuordnen.
Das Feld Source entspricht dem Datensatztyp. Wenn die App beispielsweise Salesforce-Objekte indiziert, sind mögliche Werte Lead, Account und Contact. Bei externen PostgreSQL-Tabellen wird die Quelle nach der Tabelle benannt.
OpenSearch Format
Die zweite OpenSearch-API ist die eigentliche Ressourcenanfrage.
Wenn diese API über die externe Quellensuchleiste in Ihrer Salesforce-Organisation verwendet wird, werden die Einstellungen automatisch übergeben.
- Route: /api/openSearch
-
Parameter:
- search (string): Suchbegriffe
- orgId (string): Salesforce-Organisations-ID
- recordType (string, optional): beschränkt die Suche auf ein einzelnes Salesforce-Objekt oder eine einzelne PostgreSQL-Tabelle, zum Beispiel Lead
-
Aufruf:
curl -X GET https://[YOUR APP URL]/api/openSearch?search=Ms. Cha Fadner&orgId=[YOUR ORG ID]&recordType=Lead - Antwort:
OpenSearch Golden Record
Eine Golden-Record-Variante der obigen OpenSearch-API: Sie liefert nur übergeordnete (golden) Datensätze statt aller übereinstimmenden Datensätze. Richten Sie sie als zweite, eigenständige Federated-Search externe Datenquelle ein, wenn Sie eine eigene, auf Golden Records beschränkte Sucherfahrung wünschen.
- Beschreibungs-Route: /api/openSearchGolden.xml
- Such-Route: /api/openSearchGolden
-
Parameter:
- search (string): Suchbegriffe
- orgId (string): Salesforce-Organisations-ID
-
Aufruf:
curl -X GET https://[YOUR APP URL]/api/openSearchGolden?search=Ms. Cha Fadner&orgId=[YOUR ORG ID]
REST-API
Zusätzlich zu den von Ihrer Salesforce-Organisation verwendeten XML-APIs stellt der Unify-Lookup-Server APIs bereit, mit denen Sie Vorab-Existenzprüfungen in Echtzeit von externen Systemen aus durchführen können. Dieser Abschnitt beschreibt diese APIs und ihre Aufrufmethoden.
Authentifizierung
Alle unten beschriebenen APIs sind mit Basic Auth gesichert. Der Benutzername ist die Kennung der registrierten Salesforce-Organisation, und das Passwort ist der von DQE Software bereitgestellte Lizenzschlüssel. Dies ist derselbe Schlüssel, der in den Umgebungsvariablen Ihrer Anwendung eingetragen ist.
Search
Diese API ist eine Autovervollständigungs-Engine für eine einzelne Suchzeile. Sie gibt eine Liste möglicher Datensätze zurück, die den Suchkriterien entsprechen.
Route: /api/searchRecords
Diese Route ist auch unter /api/searchGolden verfügbar — ein reiner Alias mit exakt demselben Verhalten, er filtert nicht nach Golden Records.
Parameter:
- search (string): Suchbegriffe
- recordType (string, optional): beschränkt die Suche auf ein einzelnes Salesforce-Objekt oder eine einzelne PostgreSQL-Tabelle, zum Beispiel Lead
Jeder weitere Abfrageparameter wird ebenfalls verwendet, um die Ergebnisse nach dem Wert dieses Feldes zu filtern, zum Beispiel PostalCode=77000.
Antwortstruktur:
Die Antwort ist eine Liste von Objekten mit Feldern wie Id, Source, FirstName, LastName, Phone, Email, Street, City, PostalCode, State und Country.
Beispielaufruf:
curl -X GET \ -H "Authorization: Basic {authorization_header}" \ https://[YOUR APP URL]/api/searchRecords?search=Ms. Chantal Fadner&recordType=LeadBeispielantwort:
[ { "Id": "00Q0900000E3ded7FUEAZ", "Source": "Lead", "FirstName": "rerere", "LastName": "azazaza", "Phone": "0*****31", "Email": "*****@hotmail.fr", "Street": "R************NIERES", "City": "A**********X", "PostalCode": "12345", "State": "", "Country": "France" } ]Lookup
Diese API führt eine Vorab-Existenzprüfung durch, indem ein vollständiger Datensatz mit allen indizierten Datensätzen verglichen wird.
Route: /api/lookupRecords
Parameter:
Sie können jedes beliebige Schlüssel/Wert-Paar aus Ihrem Formular angeben, entweder im Anfragetext oder in den Abfrageparametern. Schlüssel unterscheiden zwischen Groß- und Kleinschreibung. Schlüssel, die in den Datensätzen nicht gefunden werden, werden ignoriert.
Antwortstruktur:
Die Antwort ist eine Liste von Objekten mit Feldern wie Id, Source, FirstName, LastName, Phone, Email, Street, City, PostalCode, State und Country.
Beispielaufruf:
curl -X GET \ -H "Authorization: Basic {authorization_header}" \ https://[YOUR APP URL]/api/lookupRecords?Email=airelue.fc@laposte.net&PostalCode=77961&Phone=0695473336&Street=Rue du Clos Gillet&FirstName=Aurélie&LastName=FUALKNERBeispielantwort:
[ { "Phone": "**********", "City": "A*****LE", "FirstName": "Au****ei", "MobilePhone": "", "State": "", "PostalCode": "12345", "LastName": "F****ER", "Country": "France", "Email": "ai******@laposte.net", "Street": "Rue ********et", "Id": "00Q0900000E37F3EAJ", "Source": "Lead" } ]Wenn keine Dedublizierungs-Rulesets in Ihrer Anwendung importiert wurden:
{ "status": "error", "error": "No rules set loaded yet" }Golden record
Diese API führt eine Vorab-Existenzprüfung durch, indem ein vollständiger Datensatz mit allen indizierten Datensätzen verglichen wird. Im Gegensatz zur vorherigen API wird nur der Datensatz mit dem besten Übereinstimmungswert zurückgegeben.
Route: /api/lookupGolden
Parameter:
Sie können jedes beliebige Schlüssel/Wert-Paar aus Ihrem Formular angeben, entweder im Anfragetext oder in den Abfrageparametern. Schlüssel unterscheiden zwischen Groß- und Kleinschreibung. Schlüssel, die in den Datensätzen nicht gefunden werden, werden ignoriert.
Fügen Sie optional strict: true hinzu, um zusätzlich zu verlangen, dass der beste Treffer gegen die Hauptregel des Rulesets validiert wird; ist dies nicht der Fall, wird stattdessen der nächstbeste Treffer geprüft, und es wird kein Datensatz zurückgegeben, falls keiner die Validierung besteht.
Antwortstruktur:
Die Antwort enthält die Übereinstimmungssicherheit, die Regel, die den Datensatz zugeordnet hat, sowie den am besten passenden Datensatz.
Beispiel für einen GET-Aufruf:
curl -X GET \ -H "Authorization: Basic {authorization_header}" \ https://[YOUR APP URL]/api/lookupGolden?Email=ai************.net&PostalCode=1234&Phone=*******&Street=Ru*********t&FirstName=A******&LastName=F*****Beispiel für einen POST-Aufruf:
curl --location 'https://[YOUR APP URL]/api/lookupGolden' \ --header "Authorization: Basic {authorization_header}" \ --header 'Content-Type: text/plain' \ --data-raw '{ "recordType": "PersonAccount", "FirstName": "S*****", "LastName": "T****", "PersonEmail": "s************id" }'Beispielantwort:
{ "certainty": 0.05298333333333333335, "matched_by": "Address", "record": { "Phone": "***************", "City": "**********", "FirstName": "Au***********", "MobilePhone": "", "State": "", "PostalCode": "12345", "LastName": "*******************", "Country": "France", "Email": "******************.net", "Street": "Rue ****************et", "Id": "00Q0900000E37F3EAJ", "Source": "Lead" } }Wenn keine Dedublizierungs-Rulesets in Ihrer Anwendung importiert wurden:
{ "status": "error", "error": "No rules set loaded yet" }In allen anderen Fällen:
{ "status": "error", "error": "bad request" }Add record
Verwenden Sie diese API, um einen Datensatz zu Ihrer Indizierungsregistry hinzuzufügen, ohne einen Prozess für die gesamte Salesforce-Datenbank neu zu starten.
Route: /api/add
Parameter:
- recordType: API-Name des SObject, zum Beispiel Lead, Account oder Contact
- Id: Salesforce-ID
Sie können auch jedes beliebige Schlüssel/Wert-Paar aus Ihrem Datensatz in den Abfrageparametern angeben. Schlüssel unterscheiden zwischen Groß- und Kleinschreibung. Schlüssel, die in den Datensätzen nicht gefunden werden, werden ignoriert.
Beispiel für einen GET-Aufruf:
curl -X GET \ -H "Authorization: Basic {authorization_header}" \ https://[YOUR APP URL]/api/add?recordType=Lead&Email=a************e.net&PostalCode=12345&Phone=0************&Street=Rue*************&FirstName=A**********&LastName=F********RBeispiel für einen POST-Aufruf:
curl --location 'https://[YOUR APP URL]/api/add' \ --header 'Authorization: Basic {authorization_header}' \ --header 'Content-Type: text/plain' \ --data-raw '{ "0": { "Phone": "0***********6", "BillingStreet": "R***********t", "BillingPostalCode": "12345", "LastName": "*****", "PersonEmail": "a**************t", "BillingCity": "H*****************Y", "id": "[SALESFORCE ID]", "FirstName": "A****************e", "attributes": {"type":"PersonAccount"} } }'Erfolgreiche Antwort:
{ "status": "success", "label": "Record added" }Wenn der API-Name des Objekts nicht zu den derzeit für die Indizierung zugelassenen Objekten gehört:
{ "status": "error", "label": "RecordType not mapped in your application" }Gehen Sie in diesem Fall zur Lightning-App Unify Lookup und fügen Sie das Objekt hinzu.
Wenn der Datensatz nicht hinzugefügt werden konnte, weil die Redis-Datenbank keinen Speicherplatz mehr hat:
{ "status": "error", "label": "memory > max memory" }In allen anderen Fällen:
{ "status": "error", "error": "bad request" }Remove record
Verwenden Sie diese API, um einen Datensatz aus Ihrer Indizierungsregistry zu entfernen, ohne einen Prozess für die gesamte Salesforce-Datenbank neu zu starten.
Route: /api/delete
Parameter:
- recordType: API-Name des SObject, zum Beispiel Lead, Account oder Contact
- Id: Salesforce-ID
Sie können auch jedes beliebige Schlüssel/Wert-Paar aus Ihrem Datensatz in den Abfrageparametern angeben. Schlüssel unterscheiden zwischen Groß- und Kleinschreibung. Schlüssel, die in den Datensätzen nicht gefunden werden, werden ignoriert.
Einen einzelnen Datensatz löschen:
curl -X GET \ -H "Authorization: Basic {authorization_header}" \ https://[YOUR APP URL]/api/delete?Id=00DX00000DJ19Q&recordType=Lead&Email=a*********netMehrere Datensätze löschen:
curl -X POST https://[YOUR APP URL]/api/delete \ -H "Authorization: Basic {authorization_header}" \ -d "[JSON Data]"Der JSON-Body muss wie folgt aufgebaut sein:
{ "recordId": { "attributes": { "type": "recordType" } } }Erfolgreiche Antwort:
{ "status": "success", "label": "Record(s) removed" }In allen anderen Fällen:
{ "status": "error", "error": "Failed to remove record" }Index Database
Diese API startet den globalen Indizierungsprozess für ein Objekt. Das Objekt muss bereits über die Oberfläche zur Objektliste hinzugefügt worden sein, und für dieses Objekt muss ein Ruleset konfiguriert sein.
Route: /api/index
Parameter:
- recordType: API-Name des SObject oder Name der PostgreSQL-Tabelle, zum Beispiel Lead, Account oder Contact
-
model:
SF, um ein Salesforce-Objekt zu indizieren, oderHK, um eine PostgreSQL-Tabelle zu indizieren -
access_token: gültiges Salesforce-Sitzungstoken (erforderlich bei
model=SF) -
instance_url: URL der Salesforce-Organisation, im Format
https://xxx.my.salesforce.com(erforderlich beimodel=SF)
Beispielaufruf:
curl -X GET \ -H "Authorization: Basic {authorization_header}" \ https://[YOUR APP URL]/api/index?recordType=Lead&model=SF&access_token=XXXXXXXXXX&instance_url=https://mysforg.my.salesforce.comErfolgreiche Antwort:
{ "status": "success", "label": "indexing by Bulk started" }Wenn der API-Name des Objekts nicht zu den derzeit für die Indizierung zugelassenen Objekten gehört:
{ "status": "error", "label": "RecordType not mapped in your application" }Gehen Sie in diesem Fall zur Lightning-App Unify Lookup und fügen Sie das Objekt hinzu.
In allen anderen Fällen:
{ "status": "error", "error": "bad request" }Apex-REST-Ressourcen
Das AppExchange-Paket Unify Lookup stellt Ressourcen als Apex-Klassen bereit, die aus Ihren eigenen Apex-Klassen oder über APIs aufgerufen werden können.
Authentifizierung
Auf die unten beschriebenen API-Ressourcen kann nur mit einem gültigen, über die OAuth2-API abgerufenen Salesforce-Token zugegriffen werden. Die Variable {authorization_header} in den folgenden Beispielen steht für dieses Sitzungstoken.
UpdateDB
Verwenden Sie diese REST-Ressource, um Datensätze in der indizierten Datenbank einzufügen oder zu entfernen. Geben Sie die Datensatz-IDs, den Objekttyp und den anzuwendenden Vorgang an.
Route: [YOUR SALESFORCE DOMAIN]/services/apexrest/UnifyLookup/updateDB/
Parameter:
- ids: durch Kommas getrennte Salesforce-Datensatz-IDs
- sObjectName: API-Name des SObject, zum Beispiel Lead, Account oder Contact
-
action:
insertoderdelete(Groß-/Kleinschreibung beachten, klein geschrieben)
Beispielaufruf:
curl -X GET https://[YOUR SALESFORCE DOMAIN]/services/apexrest/UnifyLookup/updateDB/?ids=0017R00002ryGbZQAU,0017R00002kqzFHQAY&sObjectName=Account&action=insert \ -H "Authorization: Bearer {authorization_header}"Erfolgreiche Antwort:
{ "status": "success", "label": "Record added" }Bei einem Fehler:
{ "status": "error", "label": "Failed to add record" }Aufruf aus einer Apex-Klasse
Sie können diese Funktionen auch direkt aus Ihren Apex-Klassen aufrufen, da die Apex-Funktionen als global deklariert sind.
deleteRecord
List<String> ids = new List<String>{'0017R00002ryGbZQAU', '0017R00002kqzFHQAY'}; String sObjectName = 'Account'; Map<String, String> res = UnifyLookup.DQE_Lookup_update_db.deleteRecord(ids, sObjectName);insertRecord
List<String> ids = new List<String>{'0017R00002ryGbZQAU', '0017R00002kqzFHQAY'}; String sObjectName = 'Account'; Map<String, String> res = UnifyLookup.DQE_Lookup_update_db.insertRecord(ids, sObjectName);
Verknüpfung mit