Home
Home
Englische Version
Support
Impressum
23.1 Release ►

    Main Navigation

    • Vorbereitung
      • Einrichten InSpire G7 Primärsystem und Standby Appliances
      • Initiale Inbetriebnahme für G7 Appliances
      • Konnektoren
    • Datenquellen
      • Anleitung zur Datenintegration mithilfe eines SQL Datenbank-Beispiels
      • Handbuch - Mindbreeze InSpire Insight Apps in Salesforce
      • Indizierung benutzerspezifischer Eigenschaften (SharePoint 2013 Connector)
      • Indizierung benutzerspezifischer Objekttypen (Documentum)
      • Installation & Konfiguration - Atlassian Confluence Sitemap Generator Add-On
      • Installation & Konfiguration - Caching Principal Resolution Service
      • Installation & Konfiguration - Jive Sitemap Generator
      • Installation & Konfiguration - Mindbreeze InSpire Insight Apps in Microsoft SharePoint On-Prem
      • Konfiguration - Atlassian Confluence Connector
      • Konfiguration - Best Bets Connector
      • Konfiguration - Box Connector
      • Konfiguration - COYO Connector
      • Konfiguration - Data Integration Connector
      • Konfiguration - Documentum Connector
      • Konfiguration - Dropbox Connector
      • Konfiguration - Egnyte Connector
      • Konfiguration - GitHub Connector
      • Konfiguration - Google Drive Connector
      • Konfiguration - GSA Adapter Service
      • Konfiguration - HL7 Connector
      • Konfiguration - IBM Connections Connector
      • Konfiguration - IBM Lotus Connector
      • Konfiguration - Jira Connector
      • Konfiguration - JiveSoftware Jive Connector
      • Konfiguration - JVM Launcher Service
      • Konfiguration - LDAP Connector
      • Konfiguration - Microsoft Azure Principal Resolution Service
      • Konfiguration - Microsoft Dynamics CRM Connector
      • Konfiguration - Microsoft Exchange Connector
      • Konfiguration - Microsoft File Connector (Legacy)
      • Konfiguration - Microsoft File Connector
      • Konfiguration - Microsoft Graph Connector
      • Konfiguration - Microsoft Project Connector
      • Konfiguration - Microsoft SharePoint Connector
      • Konfiguration - Microsoft SharePoint Online Azure Principal Resolution Service
      • Konfiguration - Microsoft SharePoint Online Connector
      • Konfiguration - Microsoft Stream Connector
      • Konfiguration - Microsoft Teams Connector
      • Konfiguration - Salesforce Connector
      • Konfiguration - SAP KMC Connector
      • Konfiguration - SemanticWeb Connector
      • Konfiguration - ServiceNow Connector
      • Konfiguration - Sitecore Connector
      • Konfiguration - Web Connector
      • Konfiguration - Yammer Connector
      • Konfiguration - Zoho Connector
      • Mindbreeze InSpire Insight Apps in Microsoft SharePoint Online
      • Mindbreeze Web Parts in Microsoft SharePoint
      • Whitepaper - Web Connector Erweiterte JavaScript Anwendungsfälle
    • Konfiguration
      • CAS Authentifizierung
      • Cognito JWT Authentifizierung
      • Cookie Authentifizierung
      • Handbuch - MMC_ Services
      • Handbuch - SSO mit Microsoft AAD oder AD FS
      • Handbuch - Text Classification Insight Services
      • I18n Item Transformation
      • Konfiguration - Alternative Suchvorschläge und automatische Sucherweiterung
      • Konfiguration - Backend Credentials
      • Konfiguration - Benachrichtigungen
      • Konfiguration - Box Connector
      • Konfiguration - CJK Tokenizer Plugin
      • Konfiguration - CSV Metadata Mapping Item Transformation Service
      • Konfiguration - Entity Recognition
      • Konfiguration - Export Funktionalität
      • Konfiguration - External Query Service
      • Konfiguration - Filter Plugins
      • Konfiguration - Gesammelte Ergebnisse
      • Konfiguration - GSA Late Binding Authorization
      • Konfiguration - Identity Conversion Service - Replacement Conversion
      • Konfiguration - InceptionImageFilter
      • Konfiguration - Index-Servlets
      • Konfiguration - Item Property Generator
      • Konfiguration - Kerberos Authentfizierung
      • Konfiguration - Management Center Menü
      • Konfiguration - Metadata Reference Builder Plugin
      • Konfiguration - Metadaten Anreicherung
      • Konfiguration - Mindbreeze InSpire
      • Konfiguration - Mindbreeze Proxy Umgebung (Remote Connector)
      • Konfiguration - NLQA Plugin
      • Konfiguration - Outlook Add-In
      • Konfiguration - Personalisierte Relevanz
      • Konfiguration - Plugin Installation
      • Konfiguration - Principal Validation Plugin
      • Konfiguration - Profile
      • Konfiguration - QueryExpr Label Transformer Service
      • Konfiguration - Reporting Query Log
      • Konfiguration - Reporting Query Performance Tests
      • Konfiguration - Request Header Session Authentisierung
      • Konfiguration - Verteilte Konfiguration (Windows)
      • Konfiguration - Vokabulare für Synonyme und Autovervollständigung
      • Konfiguration von Vorschaubildern
      • Mindbreeze Personalization
      • Mindbreeze Property Expression Language
      • Mindbreeze Query Expression Transformation
      • Non-Inverted Metadata Item Transformer
      • SAML Authentifizierung
      • Spracherkennung mit dem LanguageDetector Plugin
      • Trusted Peer Authentication für Mindbreeze InSpire
      • Verwendung von InSpire-Snapshots in einer CI_CD-Umgebung
    • Betrieb
      • app.telemetry Statistiken zu Suchanfragen
      • Bereitstellen von app.telemetry Informationen mittels SNMPv3 auf G7 Appliances
      • Handbuch - Filemanager
      • Handbuch - Indizierungs- und Suchlogs
      • Handbuch - Kommandozeilenwerkzeuge
      • Handbuch - Sichern & Wiederherstellen
      • Handbuch - Updates und Downgrades
      • Handbuch - Verteilter Betrieb (G7)
      • Index Betriebskonzepte
      • Inspire Diagnose und Ressourcen Monitoring
      • Konfiguration - app.telemetry Dashboards für Nutzungsanalyse
      • Konfiguration - Nutzungsanalyse
      • Löschung der Festplatten
      • Mindbreeze InSpire SFX Update
      • Wiederherstellen des Lieferzustandes
    • Anwenderhandbuch
      • Browser Extension
      • Cheat Sheet
      • iOS App
      • Tastaturbedienung
    • SDK
      • api.v2.alertstrigger Schnittstellenbeschreibung
      • api.v2.export Schnittstellenbeschreibung
      • api.v2.personalization Schnittstellenbeschreibung
      • api.v2.search Schnittstellenbeschreibung
      • api.v2.suggest Schnittstellenbeschreibung
      • api.v3.admin.SnapshotService Schnittstellenbeschreibung
      • Einbetten des Insight App Designers
      • Entwicklung eines API V2 Search Request Response Transformer
      • Entwicklung von Insight Apps
      • Java API Schnittstellenbeschreibung
      • SDK Übersicht
    • Release Notes
      • Release Notes 20.1 Release - Mindbreeze InSpire
      • Release Notes 20.2 Release - Mindbreeze InSpire
      • Release Notes 20.3 Release - Mindbreeze InSpire
      • Release Notes 20.4 Release - Mindbreeze InSpire
      • Release Notes 20.5 Release - Mindbreeze InSpire
      • Release Notes 21.1 Release - Mindbreeze InSpire
      • Release Notes 21.2 Release - Mindbreeze InSpire
      • Release Notes 21.3 Release - Mindbreeze InSpire
      • Release Notes 22.1 Release - Mindbreeze InSpire
      • Release Notes 22.2 Release - Mindbreeze InSpire
      • Release Notes 22.3 Release - Mindbreeze InSpire
      • Release Notes 23.1 Release - Mindbreeze InSpire
    • Sicherheit
      • Bekannte Schwachstellen
    • Produktinformation
      • Produktinformation - Mindbreeze InSpire - Standby
      • Produktinformation - Mindbreeze InSpire
    Home

    Path

    Sure, you can handle it. But should you?
    Let our experts manage the tech maintenance while you focus on your business.
    See Consulting Packages

    Handbuch

    Mindbreeze InSpire Insight Apps in Salesforce

    Copyright ©

    Mindbreeze GmbH, A-4020 Linz, 2023.

    Alle Rechte vorbehalten. Alle verwendeten Hard- und Softwarenamen sind Handelsnamen und/oder Marken der jeweiligen Hersteller.

    Diese Unterlagen sind streng vertraulich. Durch die Übermittlung und Präsentation dieser Unterlagen alleine werden keine Rechte an unserer Software, an unseren Dienstleistungen und Dienstleistungsresultaten oder sonstigen geschützten Rechten begründet. Die Weitergabe, Veröffentlichung oder Vervielfältigung ist nicht gestattet.

    Aus Gründen der einfacheren Lesbarkeit wird auf die geschlechtsspezifische Differenzierung, z.B. Benutzer/-innen, verzichtet. Entsprechende Begriffe gelten im Sinne der Gleichbehandlung grundsätzlich für beide Geschlechter.

    EinleitungPermanenter Link zu dieser Überschrift

    Dieses Dokument beschreibt die Integration von Mindbreeze InSpire Insight Applications mit Salesforce.

    Ein einfacher Anwendungsfall ist beispielsweise die Einbettung einer Insight App in eine Salesforce-Seite, auf der ein Benutzer direkt auf die von der Mindbreeze-Appliance gelieferten Suchergebnisse zugreifen kann. Für eine detaillierte Schritt-für-Schritt-Anleitung können Sie entweder eine Lightning-Komponente, wie in diesem Abschnitt beschrieben erstellen, oder eine Visualforce-Komponente erstellen, wie in diesem Abschnitt beschrieben. Anschließend können Sie den Lightning App Builder verwenden, um Ihre Komponenten wie in diesem Abschnitt beschrieben hinzuzufügen.

    Darüber hinaus kann die Integration von Mindbreeze in Salesforce durch Hinzufügen der folgenden erweiterten Anwendungsfälle (als Beispiele) erweitert werden:

    • Anwendungsfall (1): Zeigen Sie verwandte Dokumente zu einem Salesforce Case („Kundenvorgang“) an, sobald ein Benutzer die Case Page besucht. Dies geschieht durch ein automatisches Auslösen einer Suche (z. B. nach dem Betreff-Felds des Case) in der eingebetteten Insight-App.
      Weitere Details zur Umsetzung finden Sie im folgenden Abschnitt.
    • Anwendungsfall (2):  Anhängen eines Mindbreeze Inspire Suchergebnisdokuments an einen Salesforce Case. Dies kann durch Hinzufügen einer Aktionsschaltfläche bei den Suchergebnissen (z.B. "Attach To Case") erfolgen, die dem Benutzer hilft, einzelne Dokumente an den Case Datensatz anzuhängen.
      Weitere Details zur Umsetzung finden Sie im folgenden Abschnitt.

    Software VoraussetzungenPermanenter Link zu dieser Überschrift

    Die in diesem Dokument enthaltenen Beschreibungen und Anleitungen basieren auf Salesforce.

    Einbetten einer Insight App via einer Lightning-KomponentePermanenter Link zu dieser Überschrift

    Das Lightning Component Framework kann verwendet werden, um eine Mindbreeze Insight App in eine Salesforce page einzubetten.

    In diesem Abschnitt werden Sie eine einfache Lightning-Komponente erstellen, die Ihre Mindbreeze Insight App in einem iframe hostet. Anschließend werden Sie den Lightning App Builder verwenden, um die neue Komponente per Drag & Drop in Ihre Salesforce Home page zu setzen.

    Für komplexere Interaktionen, die eine Kommunikation zwischen dem Salesforce-Objekt und Ihrer Mindbreeze Insight App erfordern, lesen Sie bitte diesen Abschnitt, in dem die alternative Visualforce page Komponente verwendet werden muss.

    Bitte folgen Sie nun diese Schritte um eine Lightning-Komponente zu erstellen:

    1. Innerhalb von Salesforce: klicken Sie auf das Zahnradsymbol oben rechts und wählen Sie dann Developer Console.
    2. In der Developer Console, wählen Sie File > New > Lightning Component.
    3. Benennen Sie die Komponente (z.B. Mindbreeze)
    4. Wählen Sie Lightning Record Page, und klicken Sie dann Submit.
    5. Ersetzen Sie den Inhalt der Komponente durch folgenden Code:

    <aura:component implements="flexipage:availableForAllPageTypes" access="global">

           <iframe src="https://mycompany.myInsightApp:<port#>"

                   width="100%"

                   height="800px"

                   frameBorder="none"

                   scrolling="auto" />

    </aura:component>

    Anmerkung: Passen Sie die Höhe (in Pixeln) so an, sodass die Komponente in die Salesforce Seite passt.

    1. Klicken Sie File > Save.
    2. Fügen Sie die neue Lightning-Komponente in Ihre Salesforce-Startseite ein, indem Sie die im Abschnitt Lightning App Builder beschriebenen Schritte durchführen.

    Authentifizierung in einer Lightning Komponente zu Mindbreeze InSpirePermanenter Link zu dieser Überschrift

    Motivation: Der angemeldete Benutzer in Salesforce soll automatisch auch in Mindbreeze InSpire angemeldet sein, wenn er die integrierte Mindbreeze InSpire Insight App in Salesforce verwendet (Single Sign-On).

    Mindbreeze InSpire bietet dafür eine Lösung an, indem die Authentifizierung mittels eines JSON Web Tokens (JWTs) durchgeführt wird. Führen Sie dafür die folgenden Schritte durch:

    1. Erstellen Sie ein Zertifikat, das für die Signierung des JWT verwendet wird:
      1. Innerhalb von Salesforce: klicken Sie auf das Zahnradsymbol oben rechts und wählen Sie dann Setup.
      2. Suchen Sie nach Certificate and Key Management und wählen Sie diese aus.
      3. Wählen Sie Create Self-Signed Certificate aus.
      4. Vergeben Sie in Label und einen Unique Name und bestätigen Sie Ihre Eingaben mit Save. Hinweis: notieren Sie sich den Unique Name, da Sie ihn später wieder benötigen.
      5. Laden Sie das Zertifikat herunter, indem Sie auf Download Certificate klicken.
    2. Generieren Sie einen JSON Web Key (JWK), das zur Signaturprüfung des JWT am Mindbreeze InSpire Client Service verwendet wird:
      1. Extrahieren Sie den Public Key des Zertifikats, z.B. via Linux Bash:
        openssl x509 -in JwtMindbreezeInSpire.crt -pubkey -noout
      2. Erstellen Sie einen JWK, z.B. via https://russelldavies.github.io/jwk-creator/ indem Sie folgende Felder angeben:
        1. Public Key Use: Signing
        2. Algorithm: RS256
        3. Key ID: JwtMindbreezeInSpire
        4. PEM encoded key: <Extrahierter Public Key des heruntergeladenen Zertifikats>
      3. Klicken Sie auf Convert und notieren Sie sich das generierte JWK. Sie benötigen es im nächsten Schritt.
    3. Konfigurieren Sie das Mindbreeze InSpire Client Service:
      1. Öffnen Sie das Management Center (https://<myappliance>:8443) und wechseln Sie zum Configuration Menü
      2. Wechseln Sie zum Client Services Tab und aktivieren Sie die Advanced Settings
      3. Konfigurieren Sie folgende Einstellungen im Bereich JWT Authentication Settings:
        1. Enable JWT Authentication: aktiv
        2. Optional JWT Authentication: aktivieren Sie diese Option, wenn Sie als Fallback z.B. SAML verwenden.
        3. JWK JSON: Das generierte JWK
        4. Required Claims Patterns[1]
          Claim Name: iss
          Claim Pattern: <Ihre Salesforce Base URL> (z.B. https://mycompany\.my\.salesforce\.com)
        5. Required Claims Patterns[2]
          Claim Name: aud
          Claim Pattern: mindbreeze-inspire-client-service
        6. JWT Identity Claim Name: user_name
    4. TODO: Parametrisierung der Komponente (Properties)

    Einbetten einer Insight-App über eine Visualforce SeitePermanenter Link zu dieser Überschrift

    Visualforce ist ein Framework, mit dem Entwickler benutzerdefinierte Benutzeroberflächen erstellen können, die nativ auf der Lightning-Plattform gehostet werden können. In einer Visualforce-Seite (VF) können Sie direkt HTML-Tags, CSS und JavaScript über <script> tags hinzufügen.

    In diesem Abschnitt erstellen Sie eine VF-Seite, auf der Ihre Mindbreeze Insight-App läuft. Anschließend verwenden Sie den Lightning App Builder, um die neue Komponente per Drag & Drop in eine Case record Seite zu ziehen.

    Bitte folgen Sie nun diese Schritte um eine Visualforce (VF) Seite zu erstellen:

    1. In Salesforce, klicken Sie auf das Zahnradsymbol und anschließend auf Setup.
    2. Suchen Sie nach Visualforce Pages und wählen Sie diese aus.
    3. Klicken Sie auf New.
    4. Geben Sie ein Label ein (z.B. Mindbreeze_Search_Page). Name wird automatisch ausgefüllt.
    5. Aktivieren Sie die Option: Available for Lightning Experience, Experience Builder Sites, and the mobile app
    6. Fügen Sie das Mindbreeze Insight App Snippet in das Visualforce Markup ein.
    7. Anmerkung: Um eine Insight App zu erstellen, sehen Sie sich folgende Dokumentation an.
    8. Klicken Sie auf Save.
    9. Navigieren Sie in Salesforce zu einer Case record page. Fügen Sie dann Ihre neu erstellte Visualforce-Seite wie in diesem Abschnitt beschrieben ein: Lightning App Builder

      Jetzt ist Ihre Mindbreeze Insight App in der case record page eingebettet:

    Lightning App Builder zum Hinzufügen von KomponentenPermanenter Link zu dieser Überschrift

    In diesem Abschnitt erfahren Sie, wie der Salesforce Lightning App Builder verwendet wird, um Komponenten (z. B. benutzerdefinierte Lightning-Komponente oder Visualforce-Seite) in Ihre Salesforce-Zielseite einzufügen.

    Bitte gehen Sie wie folgt vor:

    1. In Salesforce, navigieren Sie zur Ziel record Seite (e.g. Home, Case, …etc.).
    2. Klicken Sie das Zahnradsymbol oben rechts an und anschließend auf Edit Page.
    3. Im mittleren Fensterbereich: Wählen Sie einen Ort und klicken Sie auf Add Component(s) Here
    4. Wählen Sie im (linken) Seitenmenü Visualforce oder Custom > Your_Ligntining_Component.
    5. Wenn Sie VisualForce auswählen, wählen Sie im (rechten) Einstellungsfeld den Namen der VF-Seite, aktivieren oder deaktivieren Sie das Kontrollkästchen Show Label und geben Sie eine geeignete Höhe (in Pixel) für die VF-Seite ein (z. B. 800).
    6. Klicken Sie auf Save.
    7. Klicken Sie auf Activate.
    8. Klicken Sie auf Assign as Org Default, dann auf Next und anschließend auf Save.
    9. Klicken Sie dann auf den blauen Back Button () um den Lightning App Builder zu verlassen und zur Startseite zurückzukehren.

    Anwendungsfall: Festlegen des case record subjects als Suchanfrage auf der VF-SuchseitePermanenter Link zu dieser Überschrift

    In diesem Abschnitt wird beschrieben, wie der Wert des Subject Feld von der case record Seite an die VF-Suchseite gesendet werden kann, um automatisch mit dem Subject Wert zu suchen, wenn ein Agent zum ersten Mal eine Case record page besucht.

    Befolgen Sie bitte folgende Schritte:

    1. In Salesforce, klicken Sie auf das Zahnradsymbol oben rechts und anschließend auf Setup.
    2. Suchen Sie nach Visualforce pages und wählen Sie sie aus.
    3. Wählen Sie die existierende VF page aus. (e.g. Mindbreeze_search_page)
    4. Klicken Sie auf Edit.
    5. Im Visualforce Markup:
      1. Fügen Sie den Case standard controller in die erste Zeile hinzu:

        Code vorher:
        <apex:page>

        Code nachher:
        <apex:page standardController="Case">

    1. Bearbeiten Sie den Mindbreeze <script> tag unten auf der Seite:

      Code vorher:
      <script>
        Mindbreeze.require(["client/application"], function(Application){

           var application = new Application();

        });

      </script>


      Code nachher:
      <script>
         Mindbreeze.require(["client/application"], function(Application){

            var subject = "{! Case.Subject }";
            var App = Application.extend({

                prepareModels: function() {

                   this.setUnparsedUserQuery(subject);

                }

             });

             var application = new App();

         });

      </script>
  • Kehre nun zur case record page zurück. Aktualisieren Sie die Seite. Das case subject field wird nun als Suchanfrage in Ihrer Insight-App ausgelöst.

    Anwendungsfall: Anhängen von Suchergebnisse an einem case recordPermanenter Link zu dieser Überschrift

    In diesem Abschnitt wird beschrieben, wie Sie die bestehende Integration erweitern können, indem Sie eine neue benutzerdefinierte Aktionsschaltfläche Attach To Case für jedes Suchergebnis hinzufügen. Wenn diese Aktionsschaltfläche geklickt wird, wird das Suchergebnis an die Case record page hinzugefügt. Außerdem werden Sie eine neue benutzerdefinierte Lightning-Komponente erstellen, die alle angehängten Ergebnisse eines besuchten Case abruft und sie in einer Tabellenansicht anzeigt.

    Schritt 1 Datenmodellierung via benutzerdefinierte ObjektePermanenter Link zu dieser Überschrift

    In diesem Schritt werden Sie ein benutzerdefiniertes Objekt erstellen und darin einige Felder hinzufügen. Diese Felder werden angezeigt, wenn ein Suchergebnis an den case angehängt wird. Ein Feld kann als eine Eins-zu-Eins-Abbildung einer Suchergebniseigenschaft betrachtet werden.

    Beispiel:

    Wenn Sie daran interessiert sind, die folgenden Eigenschaften der Suchergebnisse anzuzeigen (title, URL, source, and author), dann müssen Sie entsprechende Felder erstellen und sie zu Ihrem benutzerdefinierten Objekt hinzufügen.

    Später wird gezeigt, wie die Zuordnung zwischen den Eigenschaften der Suchergebnisse und den benutzerdefinierten Feldern erfolgt und wie die Lightning-Komponente diese Felder in einer Tabellenansicht in der case record page anzeigt.

    Befolgen Sie bitte folgende Schritte:

    • In Salesforce, Klicken Sie auf das Zahnradsymbol und wählen Sie Edit Object.
    • Klicken Sie auf Object Manager um alle Objekte anzuzeigen.
    • Klicken Sie auf Create im dropdown Menü und wählen Sie Custom Object aus.
    • Füllen Sie die Felder Label und Plural Label aus. Object Name wird automatisch gesetzt.
    • Klicken Sie auf Save.
    • Im linken Menü: Klicken Sie auf Fields & Relationships.
    • Klicken Sie auf New.
    • Wählen Sie ein Data Type (z.B. Text) aus und klicken Sie auf Next.
    • Befüllen Sie die Felder Field Label and a Length. Field Name wird automatisch gesetzt.
    • Klicken Sie auf Next, Next, und anschließend Save.
    • Wiederholen Sie dieselben Schritte um die übrigen Felder hinzuzufügen.
    • Data Type
    • Label
    • Length
    • URL
    • Result Url
    • N/A
    • Text
    • Source
    • 255
    • Text
    • Author
    • 255
    • Erstellen Sie eine Master-Detail Beziehung mit dem Case standard Objekt:
      • Klicken Sie auf Fields & Relationships und dann auf auf New.
      • Wählen Sie das Data Type: Master-Detail Relationship.
      • Wählen Sie vom “Related To” Menü Case aus.
      • Befüllen Sie das Feld Field Label. (z.B. Case).
      • Klicken Sie auf Next, Next, Next und dann auf Save.
      • Notieren Sie sich den API Namen. (z.B. Case__c).
    • Löschen Sie die Standardansicht aus dem Case-Layout:
      • Kehren Sie zur Objektmanagerliste zurück:
      • Wählen Sie Case.
      • Wählen Sie im linken Menü die Option "Case Page Layouts" aus.
      • Wählen Sie Ihr Layout aus der Tabelle aus. (z.B. Case-Layout)
      • Scrollen Sie nach unten, bis Sie die beigefügte Ergebnistabelle finden
      • Löschen Sie es durch Drücken des Minus-Symbols:
      • Klicken Sie auf Save.

    Schritt 2 Erstellen eines benutzerdefinierten Apex ControllerPermanenter Link zu dieser Überschrift

    Benutzerdefinierte Controller enthalten benutzerdefinierte Logik und Datenmanipulation, die von einer Visualforce-Seite verwendet werden können. Ein benutzerdefinierter Controller kann zum Beispiel eine Liste von records von benutzdefinierten Elementen abrufen, die angezeigt, erstellt oder gelöscht werden können.

    In diesem Schritt erstellen Sie den controller AttachResultController, welcher folgendes macht:

    • Holt die angehängten Ergebnisse eines bestimmten case. (Wird von der Lightning-Komponente verwendet, um die an case angehängten Ergebnisse in einer Tabellenansicht anzuzeigen)
    • Entfernt ein angehängtes Ergebnis von einem case.
    • Hängt ein Case Objekt an ein Ergebnis an. (Wird ausgelöst, wenn Aktionsschaltfläche Attach To Case angeklickt wird)


    Bitte befolgen Sie folgende Schritte:

    • In Salesforce, Klicken Sie auf das Zahnradsymbol und wählen Sie Setup.
    • Suchen Sie nach Apex Classes und wählen Sie sie aus.
    • Klicken Sie auf New.
    • Fügen Sie den folgenden code snippet hinzu:

    public class AttachResultController {

        public AttachResultController(ApexPages.StandardController controller) {

        }

        public String ValueReturned {get; set;}

        public void attachResultToCase() {

          Id caseId = System.currentPageReference().getParameters().get('Id');

          String resultName = ApexPages.currentPage().getParameters().get('resultName');

          String resultUrl = ApexPages.currentPage().getParameters().get('resultUrl');

          String source = ApexPages.currentPage().getParameters().get('source');

          String author = ApexPages.currentPage().getParameters().get('author');  

          List<Attached_Result__c> existingAttachedResults = [

            SELECT Name__c FROM Attached_Result__c

            WHERE Case__r.Id = :caseId AND Name__c = :resultName

    ];

      

          if (existingAttachedResults.size() > 0) {

             this.ValueReturned = 'duplicate record';  

          } else {

             Attached_Result__c newRec= new Attached_Result__c();

             newRec.Name__c = resultName;

             newRec.Result_Url__c = resultUrl;

             newRec.Author__c = author;

             newRec.Source__c = source;

             newRec.Case__c = caseId;

             insert newRec;

             this.ValueReturned = 'reload component';

          }

        }

        @AuraEnabled

        public static List<Attached_Result__c> getAttachedResults(Id recordId) {

            return [

               SELECT Name__c, Result_Url__c, Source__c, Author__c

               FROM Attached_Result__c

               WHERE Case__r.Id = :recordId

            ];

        }

        @AuraEnabled

        public static boolean removeAttachedResult(Id recordId, String name) {

            delete [

    SELECT Name__c FROM Attached_Result__c

    WHERE Name__c =: name AND Case__r.Id = :recordId

            ];

            return true;

        }

    }

    Code Highlights:

    In der Funktion attachResultToCase haben Sie im else Block eine neue Instanz Ihres zuvor erstellten benutzerdefinierten Objekts erstellt und dann die Eigenschaften des Suchergebnisses den Feldern des benutzerdefinierten Objekts zugewiesen.

    Schritt 3 Erstellen einer neuen Lightning-Komponente (AttachedResults)Permanenter Link zu dieser Überschrift

    • In diesem Schritt erstellen Sie eine Lightning-Komponente, die der Salesforce Case-Seite hinzugefügt wird. Die Komponente zeigt die Felder des in Schritt 1 erstellten benutzerdefinierten Objekts an.

    Befolgen Sie bitte folgende Schritte:

    1. In Salesforce, Klicken Sie auf das Zahnradsymbol und wählen Sie Developer Console.
    2. In developer console, wählen Sie File > New > Lightning Component.
    3. Benennen Sie die Komponente AttachedResults, wählen Sie Lightning Record Page, und anschließend Submit.
    4. Ersetzen Sie den Inhalt der Komponente durch folgenden Code:

    <aura:component implements="flexipage:availableForAllPageTypes,flexipage:availableForRecordHome,force:hasRecordId" access="global" controller="AttachResultController">

        <aura:handler name="init" value="{!this}" action="{!c.doInit}" />

        <aura:attribute name="recordId" type="Id" />

        <aura:attribute name="AttachedResults" type="Attached_Result__c"/>

        <aura:attribute name="AttachedResultsCount" type="String" />

        <aura:attribute name="Columns" type="List" />

        

        <lightning:card class="slds-card_boundary" iconName="standard:case" title="{! 'Case Attached Results (' + v.AttachedResultsCount + ')' }">

            <!-- Attached Results list goes here -->

            <lightning:datatable data="{! v.AttachedResults }"

                                 class="tableHeader"

                                 columns="{! v.Columns }"

                                 keyField="Id"

                                 hideCheckboxColumn="true"

                                 onrowaction="{! c.handleRowAction }"

                                 wrapTextMaxLines="1" />

        </lightning:card>  

    </aura:component>

    1. Klicken Sie auf File > Save.
    2. Klicken Sie auf CONTROLLER in der Komponentenpalette auf der rechten Seite und ersetzen Sie den Inhalt durch diesen Code:

    ({

       doInit : function(component, event, helper) {

          window.addEventListener("message", $A.getCallback(function(event) {

             if (event.data === 'reloadComponent') {

               helper.renderResults(component);

             }

          }), false);

          var rowActions = [{

             'label': 'Delete',

             'iconName': 'utility:delete',

             'name': 'delete'

          }];

          component.set("v.Columns", [

            {label:"Result Name", fieldName:"Name__c", type:"text", wrapText: true},

            {label:"Result Url", fieldName:"Result_Url__c", type:"url", wrapText: true},

            {label:"Source", fieldName:"Source__c", type:"text", wrapText: true},

            {label:"Author", fieldName:"Author__c", type:"text", wrapText: true},

            {type: 'action', typeAttributes: { rowActions: rowActions }}

          ]);

          helper.renderResults(component);

       },

       handleRowAction: function (cmp, event, helper) {

          var action = event.getParam('action');

          var row = event.getParam('row');

          switch (action.name) {

             case 'delete':

               helper.removeResult(cmp, row);

               break;

          }

       }

    })

    1. Klicken Sie auf File > Save.
    2. Klicken Sie auf HELPER in der Komponentenpalette auf der rechten Seite und ersetzen Sie den Inhalt durch diesen Code:

    ({

        renderResults: function(component) {        

          var action = component.get("c.getAttachedResults");

            if (action) {

                action.setParams({

                    recordId: component.get("v.recordId")

                });

                action.setCallback(this, function(response) {

                  var state = response.getState();

                  if (state === "SUCCESS") {

                     var data = response.getReturnValue();

                     component.set("v.AttachedResultsCount", data.length);

                     component.set("v.AttachedResults", data);

                  }

                });    

                $A.enqueueAction(action);  

            }

        },

        removeResult: function (cmp, row) {

            var action = cmp.get("c.removeAttachedResult");    

            if (action) {

             action.setParams({

                    recordId: cmp.get("v.recordId"),

                    name: row.Name__c

                });

                action.setCallback(this, function(response) {

                  var state = response.getState();

                  if (state === "SUCCESS") {

                    var rows = cmp.get('v.AttachedResults');

                    var rowIndex = rows.indexOf(row);

        

                    rows.splice(rowIndex, 1);

                    cmp.set('v.AttachedResults', rows);

                    cmp.set('v.AttachedResultsCount', rows.length);

                  }

                });

                $A.enqueueAction(action);  

            }

        }

    })

    1. Klicken Sie auf File > Save.
    2. Klicken Sie auf STYLE in der Komponentenpalette auf der rechten Seite und ersetzen Sie den Inhalt durch diesen Code:

    .THIS .tableHeader thead th button {

        visibility: hidden;

        display: none;

    }

    .THIS {

        margin-bottom: 10px;

    }

    .THIS div.slds-card__header {

        border-bottom: var(--lwc-borderWidthThin) solid var(--lwc-cardColorBorder);

        padding: 8px !important;

        background: var(--lwc-pageHeaderColorBackground,rgb(243, 242, 242));

    }

    .THIS div.slds-card__body {

        margin-top: -8px;                  

    }

    1. Klicken Sie auf File > Save.
    2. Fügen Sie die Komponente auf die gleiche Weise wie in diesem Abschnitt Lightning App Builder zum Hinzufügen von Komponenten beschrieben zur Case-Seite hinzu.

    Schritt 4 Einfügen einer neuen benutzerdefinierten Schaltfläche: Attach to casePermanenter Link zu dieser Überschrift

    In diesem Schritt wird die Aktionsschaltfläche Attach To Case zu jedem Suchergebnis hinzugefügt. Darüber hinaus fügen Sie die handler function hinzu, die ausgelöst wird, wenn die Aktionsschaltfläche ausgelöst wird.

    Bitte führen Sie die folgenden Schritte aus:

    1. In Salesforce, Klicken Sie auf das Zahnradsymbol und wählen Sie Setup.
    2. Suchen Sie nach Visualforce pages und wählen Sie sie aus.
    3. Wählen Sie vorhandene VF-Seite aus. (In unserem Beispiel, Mindbreeze_search_page)
    4. Klicken Sie auf Edit.
    5. Im Visualforce Markup:
      1. Fügen Sie der VF-Seite die Erweiterung AttachedResultController hinzu.
        Code vorher:
        <apex:page standardController="Case">

        Code nachher:
        <apex:page standardController="Case"
        extensions="AttachResultController">

    1. Fügen Sie die Apex handler function hinzu:

      Code vorher:
      <script>

         Mindbreeze.require(["client/application"], function(Application){

            var subject = "{! Case.Subject }";

            var App = Application.extend({

                prepareModels: function() {

                   this.setUnparsedUserQuery(subject);

                }

             });

             var application = new App();

         });

      </script>


      Code nachher:
      <script>
         Mindbreeze.require(["client/application"], function(Application){

            var subject = "{! Case.Subject }";

            var App = Application.extend({

                prepareModels: function() {

                   this.setUnparsedUserQuery(subject);

                }

             });

             var application = new App();

         });

      </script>


      <script>
          function handleAttachCaseAction(returnValue) {

              if (returnValue === "duplicate record") {

                 alert("This result is already attached to the current case: {!Case.CaseNumber}");

              } else if (returnValue === "reload component") {

                 var lexOrigin = 'https://<salesforce-page>.lightning.force.com';

                 parent.postMessage('reloadComponent', lexOrigin);

              }

          }

      </script>

      <apex:form >

            <apex:actionFunction name="AttachToCase" action="{!attachResultToCase}" oncomplete="handleAttachCaseAction('{!ValueReturned}')">

                <apex:param name="resultName" value="" />

                <apex:param name="resultUrl" value="" />

                <apex:param name="source" value="" />

                <apex:param name="author" value="" />

            </apex:actionFunction>

      </apex:form>

    1. Fügen Sie die Aktionsschaltfläche Attach To Case & attachResult handler function hinzu:

      Code vorher:
      <script>
        Mindbreeze.require(["client/application”], function(Application) {

              var subject = "{! Case.Subject }";

              var App = Application.extend({

                    prepareModels: function() {

                        this.setUnparsedUserQuery(subject);

                    }

              });

              var application = new App();

           });

      </script>


      Code nachher:
      <script>
      Mindbreeze.require(["client/application"
      , "api/v2/api", "underscore"], function(Application, API, _) {
      var subject = "{! Case.Subject }";

      var App = Application.extend({

         prepareModels: function() {

          this.setUnparsedUserQuery(subject);

         }
      ,
         attachResult: function(options) {

           var model = options.model;

           var actions = model.get("actions");

           var resultName = model.get()["title"].data[0].value;

           var source = model.get('category') + '/' + model.get('categoryinstance');

           var author = model.get('Author') || 'N/A';

           var openAction = _.find(actions, function(action) {

              return action.id == "Open";

           });

           if(!openAction) {

             openAction = _.find(actions, function(action) {

               return action.href;

             });

           }

           if(openAction && openAction.href.length > 255) {

             openAction.href = 'Result URL is too long';

           }

           /* Passing result to controller */

           AttachToCase(resultName, openAction.href, source, author);

         }

      });

      var application = new App();

      API.search.on("loadoutput", function(model, atts, options) {
        if((atts && atts.resultset && atts.resultset.results) || (atts && atts.results)) {

         _.each((atts.resultset&&atts.resultset.results)||atts.results,function(result){      

           var actionName = "attachToCase";

           var htmlAction = "<a role=\"button\" data-action-name=\"attachResult\">Attach to Case</a>";

           result.properties.actions && result.properties.actions.data &&

           result.properties.actions.data.push({

              "html": htmlAction,

              "value": {

        
             "action":{ actionName:{} }
              }

           });

           result.properties.actions && result.properties.actions.properties &&

           result.properties.actions.properties.push({

              "id": actionName,

              "name": actionName,

              "data": [{

                "html": htmlAction,

                "value": {

                  "action":{ actionName: {} }
                }

              }]

           });

         });

        }

      });

      });

      </script>

    Klicken Sie auf Save und kehren Sie zu einer beliebigen Case Seite zurück.

    In den Suchergebnissen sehen Sie nun die neue benutzerdefinierte Aktionsschaltfläche:

    Klicken Sie auf die Attach To Case Schaltfläche und das Suchergebnis wird in einer Tabellenansicht angezeigt.

    TroubleshootingPermanenter Link zu dieser Überschrift

    Einschränkungen der Salesforce-FelderPermanenter Link zu dieser Überschrift

    Beispiel: Das Feld für die Ergebnis-URL hat eine maximale Länge von 255 Zeichen.

    Wenn ein Link länger als 255 Zeichen ist, tritt ein Fehler auf.

    Workaround: Stattdessen wird ein String "Result Url is too long" angezeigt.

    Wie?

    Fügen Sie auf Ihrer VF-Seite im benötigten Mindbreeze <script> -Tag bei der Funktion attachResult den folgenden gelb markierten Code ein:

    <script>

    Mindbreeze.require(["client/application", "api/v2/api", "underscore"], function(Application, API, _) {

    var subject = "{! Case.Subject }";

    var App = Application.extend({

       prepareModels: function() {

        this.setUnparsedUserQuery(subject);

       },

       attachResult: function(options) {

         var model = options.model;

         var actions = model.get("actions");

         var filename = model.get()["title"].data[0].value;

         var source = model.get('category') + '/' + model.get('categoryinstance');

         var author = model.get('Author') || 'N/A';

         var openAction = _.find(actions, function(action) {

            return action.id == "Open";

         });

         if(!openAction) {

           openAction = _.find(actions, function(action) {

             return action.href;

           });

         }

         if(openAction && openAction.href.length > 255) {

        openAction.href = 'Result URL is too long';

         }        

         /* Passing result to controller */

         AttachToCase(filename, openAction.href, source, author);

       }

    });

    var application = new App();

    });

    </script>

    Abfrage von Suchergebnis-Eigenschaften aus dem Mindbreeze-SuchmodellPermanenter Link zu dieser Überschrift

    Das folgende Beispiel fordert die Autor- und Erweiterung Eigenschaften an:

    Fügen Sie zunächst in Ihrem Insight-App-Snippet die folgende HTML-Datei ein:

    <span style="display:none">{{Author}}{{extension}}</span>

    Und dann in der attach result function am <script>-Tag:

    var author = model.get('Author') || 'N/A';

    var extension = model.get('extension');

    Die Schaltfläche Clear button (x) in der Suchleiste funktioniert nichtPermanenter Link zu dieser Überschrift

    In der Browser-Konsole (F12), sehen Sie folgenden Fehler:

    Uncaught SyntaxError: Unexpected token & in JSON at position 2

    Lösung:

    Ersetzen Sie auf der VF-Seite im HTML-Code-Snippet Ihrer Such-App den folgenden Code:
    data-action-object="{&quot;resetSearch&quot;:{}}"

    durch
    data-action-object='{"resetSearch":{}}'

  • PDF herunterladen

    • Handbuch - Mindbreeze InSpire Insight Apps in Salesforce

    Inhalt

    • Einleitung
    • Software Voraussetzungen
    • Einbetten einer Insight App via einer Lightning-Komponente
    • Einbetten einer Insight-App über eine Visualforce Seite
    • Lightning App Builder zum Hinzufügen von Komponenten
    • Anwendungsfall: Festlegen des case record subjects als Suchanfrage auf der VF-Suchseite
    • Anwendungsfall: Anhängen von Suchergebnisse an einem case record
    • Troubleshooting

    PDF herunterladen

    • Handbuch - Mindbreeze InSpire Insight Apps in Salesforce