Loading
Utöka komponenten OmniscriptBaseMixin

Utöka komponenten OmniscriptBaseMixin

Aktivera en egen Lightning för att interagera med ett Omniscript genom att utöka komponenten OmniscriptBaseMixin. OmniscriptBaseMixin innehåller metoder för att uppdatera ett Omniscripts data-JSON, skicka parametrar, med mera.

När du har utökat komponenten OmniscriptBaseMixin, lägg till ett eget LWC-inmatningselement i ett Omniscript och specificera namnet på en komponent som utökar OmnIScriptBaseMixin. Se Eget LWC-element.

  1. Utöka komponenten
    Få reda på hur en egen Lightning utökar OmniscriptBaseMixin-komponenten till att omge ett Salesforce Lightning.
  2. Validera komponenten
    Lär dig lägga till validering i komponenten OmniscriptBaseMixin genom att omdefiniera checkValidity().
  3. Navigering mellan steg
    Få reda på vilka mixins du kan ställa in för stegen i ett Omniscript så att användare kan gå mellan dessa steg.
  4. Spara data inuti en egen komponent
    Om den egna komponenten inte finns i DOM, lagra data i ett läge. För att lagra data i en delstat, använd funktionen omniSaveState(). Funktionen omniSaveState accepterar tre argument: ett dataobjekt, en nyckel och en boolesk.
  5. Hämta egna komponentdata från ett Omniscript
    Använd funktionen omniGetSaveState() för att hämta egna komponentdata från ett Omniscript.
  6. Rensa ett sparat läge från ett föregående steg
    När en egen LWC:s sparade läge förlitar sig på data från ett föregående steg kan du villkorligt rensa det sparade läget för den egna LWC:n när en användare går till ett föregående steg. Efter konfigurationen skickar elementet Steg en boolesk flagga till den egna LWC:n. Koden i din egna LWC måste använda boolean för att avgöra om ett nytt sparat läge ska instansieras eller fortsätta använda det befintliga sparade läget.
  7. Gå till layouten för komponenten OmniscriptBaseMixin
    Anropa layouten för din egna LWC genom att skicka parametern data-omni-layout till metoden getAttribute.
  8. Fjärrsamtal
    Låt användare ringa fjärrsamtal från en egen LWC med hjälp av metoden omniRemoteCall().
  9. Data JSON-uppdatering
    Uppdatera det egna Lightning, mappa svar till Omniscripts data-JSON och skapa och mappa data inuti det egna Lightning.

Utöka komponenten

Få reda på hur en egen Lightning utökar OmniscriptBaseMixin-komponenten till att omge ett Salesforce Lightning.

Se detta kodexempel för att utöka komponenten OmniscriptBaseMixin:
import tmpl from './customLightningElement.html';
import { LightningElement } from 'lwc';
import { OmniscriptBaseMixin } from 'c/omniscriptBaseMixin';

export default class customLightningElementWithMixin extends OmniscriptBaseMixin(LightningElement) {
    handleBlur(evt) {
        this.omniUpdateDataJson(evt.target.value);
    }

    render() {
        return tmpl;
    }
}

Validera komponenten

Lär dig lägga till validering i komponenten OmniscriptBaseMixin genom att omdefiniera checkValidity().

Detta kodexempel innehåller en checkValidity() som returnerar falskt när summan är mindre än noll.
import { api } from 'lwc';
import { OmniscriptBaseMixin } from 'c/omniscriptBaseMixin';
export default class MyCustomLwc extends OmniscriptBaseMixin(LightningElement) {
   sum = 0;

       // defining custom validation conditions   
   @api checkValidity() { 
      return this.sum < 100;
   }
}

Navigering mellan steg

Få reda på vilka mixins du kan ställa in för stegen i ett Omniscript så att användare kan gå mellan dessa steg.

omniNextStep()

Tar användare till nästa steg i Omniscript.

JS-exempel HTML-exempel
nextButton(evt) {
        if (evt) {
            this.omniNextStep();
        }
    }
<button onclick={nextButton}>Custom Next Button </button>

omniPrevStep()

Tar användare till föregående steg i Omniscript.

JS-exempel HTML-exempel
prevButton(evt) {
        if (evt) {
            this.omniPrevStep();
        }
    }
<button onclick={prevButton}>Custom Prev Button </button>

omniNavigateTo(step)

Tar användare till ett specifikt steg i Omniscript genom att skicka ett argument. Argumentet som skickas till funktionen kan vara ett nummer som refererar till stegets index i Omniscript eller ett stegs elementnamn som skickas som en hårdkodad sträng. Indexet för det aktuella steget är tillgängligt med egenskapens this.omniScriptHeaderDef.asIndex.

Anteckning
Anteckning Du kan inte automatiskt gå vidare till ett steg mer än ett steg före.
JS-exempel HTML-exempel
goToStep(evt) {
        if (evt) {
            this.omniNavigateTo(this.omniScriptHeaderDef.asIndex - 2);
        }
    }
<button onclick={goToStep}>Custom Step Button </button>

Spara data inuti en egen komponent

Om den egna komponenten inte finns i DOM, lagra data i ett läge. För att lagra data i en delstat, använd funktionen omniSaveState(). Funktionen omniSaveState accepterar tre argument: ett dataobjekt, en nyckel och en boolesk.

Metod: omniSaveState(input,key,usePubSub=false):

Argument:

  • input: De data som ska sparas.
    let mySaveState = {"my":"data"};
    this.omniSaveState(mySaveState);
  • key: (Valfritt) Ett strängvärde som objektparametern mappar till som ett nyckelvärdepar. Om en nyckel inte skickas som en parameter blir nyckeln som standard namnet på komponenten.
    let mySaveState = {"my":"data"};
    let key = 'customLwcKey';
    this.omniSaveState(mySaveState, key);
  • usePubSub: (Valfritt) Sätt booleskt till sant för att lagra data för användning i ett pubsub-mönster. Mer information om pubsub-mönster finns i pubsub-händelser. När de lämnas tomma eller inställda på falskt kan händelser använda dessa data. Mer information om händelser finns i LWC-händelser. När omniSaveState är i en disconnectedCallback måste usePubSub ställas in till true för att skicka händelsen i pubsub istället för händelsebubblande.

Om du vill kan du spara delstaten inom en frånkopplad callback. Att spara status inom en frånkopplad callback aktiverar status för elementet att spara när användare lämnar elementet automatiskt. I frånkopplade callbacks måste argumentet usePubSub vara satt till true. Händelser i frånkopplade callbacks kan endast skickas med pubsub.

Exempel
Exempel omniSaveState som anropas i en disconnectedCallback:
disconnectedCallback() {
  let mySaveState = {"my":"data", "here" : 8};
  let key = 'customLwcKey';
  let usePubSub = true;
  this.omniSaveState(mySaveState, key, usePubSub);
}

Hämta egna komponentdata från ett Omniscript

Använd funktionen omniGetSaveState() för att hämta egna komponentdata från ett Omniscript.

omniGetSaveState(key): omniGetSaveState accepterar en nyckel som ett valfritt argument. Om ingen nyckel skickas blir nyckeln som standard namnet på den egna komponenten. Nyckeln lagrar data från omniSaveState().

Exempel
Exempel

Med ett nyckelargument:

let key = 'customLwcKey';
const state = this.omniGetSaveState(key);

Utan nyckel:

// assumes the data is inside of the same custom component
const state = this.omniGetSaveState() 

Rensa ett sparat läge från ett föregående steg

När en egen LWC:s sparade läge förlitar sig på data från ett föregående steg kan du villkorligt rensa det sparade läget för den egna LWC:n när en användare går till ett föregående steg. Efter konfigurationen skickar elementet Steg en boolesk flagga till den egna LWC:n. Koden i din egna LWC måste använda boolean för att avgöra om ett nytt sparat läge ska instansieras eller fortsätta använda det befintliga sparade läget.

  1. I Omniscript, bestäm det steg som rensar det sparade läget för Egna LWC.
  2. I egenskaperna för steget, klicka på Redigera som JSON.
  3. Ange egenskapens "omniClearSaveState": [ ].
  4. I egenskapen omniClearSaveState, ange namnet på ett eller flera egna LWC-element "omniClearSaveState": [ "CustomLWC1"]. Steget skickar data till den egna LWC:n så att den egna LWC:n kan avgöra om steget återges.
  5. I din egna LWC-kod, hämta aktuell status.
    const state = this.omniGetSaveState() 
  6. I din egna LWC-kod, ange en variabel som är lika med this.omniGetSaveState(this.omniJsonDef.name + '-$Vlocity.cleared'. Funktionen utvärderar om föregående steg som innehåller egenskapen omniClearSaveState återges och returnerar en boolesk.
    let stateCleared = this.omniGetSaveState(this.omniJsonDef.name + '-$Vlocity.cleared');
                   
  7. Ändra din kod genom att använda det booleska värdet för att avgöra om du vill behålla det aktuella sparade läget eller instansiera ett nytt sparat läge.

Gå till layouten för komponenten OmniscriptBaseMixin

Anropa layouten för din egna LWC genom att skicka parametern data-omni-layout till metoden getAttribute.

Använd denna metod:
this.getAttribute('data-omni-layout')

Fjärrsamtal

Låt användare ringa fjärrsamtal från en egen LWC med hjälp av metoden omniRemoteCall().

Metod: omniRemoteCall(params, boolean)

Argument:

  • Det första argumentet måste vara ett objekt med egenskapsinmatningen, sClassName, sMethodName och alternativ. Värdena för var och en av egenskaperna måste vara i datatypen Sträng.
    Anteckning
    Anteckning Metoder som anropas inom ett paket måste ha namnutrymmet förberett med ${this._ns}. Till exempel `${this._ns}IntegrationProcedureService`.
    const params = {
    	input: JSON.stringify(this.omniJsonData),
    	sClassName: 'SomeApexClass',
    	sMethodName: 'someApexMethod',
    	options: '{}',
    };
  • Det andra argumentet för omniRemoteCall är ett valfritt booleskt värde som länkar en spårad egenskap som heter omniSpinnerEnabled. HTML-koden måste ha någon kod för att kontrollera booleans värde.

    Här är ett HTML-exempel:

    <template if:true={omniSpinnerEnabled}>
          <div class="slds-spinner-container__wrapper">
            <c-spinner variant="brand"
                       alternative-text="Loading.."
                       size="medium">
            </c-spinner>
          </div>
    </template>

Efter att omniRemoteCall har körts returnerar callbacken ett objekt som innehåller de två egenskaperna result och error.

  • result: Resultategenskapen innehåller ett rått svar från servern.
  • error: Felegenskapen lagrar ett felvärde från Vlocitys GenericInvoke2-klass.

Omnistudio tillhandahåller egenskaper som, när de skickas i alternativen, låter jobb vara köer, framtida, kedjebara och kontinuerliga.

Användningsfallexempel
Användningsfallexempel
  • Fjärranrop som åberopar en Apex klass
    const params = {
    	input: this.omniJsonDataS,
    	sClassName: 'SomeApexClass',
    	sMethodName: 'someApexMethod',
    	options: '{}',
    };
    
    this.omniRemoteCall(params, true).then(response => {
    	window.console.log(response, 'response');
    }).catch(error => {
    	window.console.log(error, 'error');
    });
  • Anrop för integreringsförfarande
    const params = {
    	input: this.omniJsonDataStr,
    	sClassName: `${this._ns}IntegrationProcedureService`,
    	sMethodName: 'test_RemoteAction', this will need to match the VIP -> type_subtype
    	options: '{}',
    };
    
    this.omniRemoteCall(params, true).then(response => {
    	window.console.log(response, 'response');
    }).catch(error => {
    	window.console.log(error, 'error');
    });
  • Anrop för kedjeintegreringsförfarande som skickar egenskapens chainable: true. Använd kedjebart när en integreringsprocess överskrider Salesforces styrande CPU-gräns.
    const options = {
    	chainable: true,
    };
    const params = {
    	input: this.omniJsonDataStr,
    	sClassName: `${this._ns}IntegrationProcedureService`,
    	sMethodName: 'test_RemoteAction', this will need to match the VIP -> type_subtype
    	options: JSON.stringify(options),
    };
    
    this.omniRemoteCall(params, true).then(response => {
    	window.console.log(response, 'response');
    }).catch(error => {
    	window.console.log(error, 'error');
    });
  • Köbart fjärrsamtal som skickar fastighetens useQueueableApexRemoting: true . Mer information om hur köer fungerar finns i Köbar Apex.
    const options = {
    	input: this.omniJsonDataStr,
    	vlcClass: 'SomeApexClass',
    	vlcMethod: 'someApexMethod',
    	useQueueableApexRemoting: true,
    };
    const params = {
    	input: this.omniJsonDataStr,
    	sClassName: `${this._ns}VFActionFunctionController.VFActionFunctionControllerOpen`,
    	sMethodName: 'runActionFunction',
    	options: JSON.stringify(options),
    };
    
    this.omniRemoteCall(params, true).then(response => {
    	window.console.log(response, 'response');
    }).catch(error => {
    	window.console.log(error, 'error');
    });
  • Framtida fjärrsamtal som passerar fastighetens useFuture: true. Mer information om hur framtida metoder fungerar finns i Framtida metoder.
    const options = {
    	useFuture: true,
    };
    const params = {
    	input: this.omniJsonDataStr,
    	sClassName: 'SomeApexClass',
    	sMethodName: 'someApexMethod',
    	options: JSON.stringify(options),
    };
    
    this.omniRemoteCall(params, true).then(response => {
    	window.console.log(response, 'response');
    }).catch(error => {
    	window.console.log(error, 'error');
    });
  • Fjärranrop för fortsättning som skickar parametern useContinuation: true. Mer information om hur fortsättning fungerar finns i Fortsättningsklass.
    const options = {
    	input: this.omniJsonDataStr,
    	vlcClass: 'SomeApexClass',
    	vlcMethod: 'someApexMethod',
    	useContinuation: true,
    };
    const params = {
    	input: this.omniJsonDataStr,
    	sClassName: 'SomeApexClass',
    	sMethodName: 'someApexMethod',
    	options: JSON.stringify(options),
    };
    
    this.omniRemoteCall(params, true).then(response => {
    	window.console.log(response, 'response');
    }).catch(error => {
    	window.console.log(error, 'error');
    });

Data JSON-uppdatering

Uppdatera det egna Lightning, mappa svar till Omniscripts data-JSON och skapa och mappa data inuti det egna Lightning.

  1. Uppdatering av data för det egna Lightning
    Tillämpa svaret från ett Eget LWC-anrop till Eget LWC-element genom att använda metoden omniUpdateDataJson.
  2. Mappning av svar på Omniscriptets data-JSON
    Tillämpa svar från egna åtgärder med omniApplyCallResp().
  3. Skapa och mappa data inuti det egna LWC-elementet
    Konstruera ytterligare JSON-datanoder i Eget LWC-element och överför värden från elementet till de nya JSON-noderna med händelsen omniaggregate..

Uppdatering av data för det egna Lightning

Tillämpa svaret från ett Eget LWC-anrop till Eget LWC-element genom att använda metoden omniUpdateDataJson.

Metod: omniUpdateDataJson(input, aggregateOverride = false)

Argument:

  • input: Det första argumentet, indata, accepterar data i ett objekt eller en primitiv datatyp. Odefinierad accepteras inte. Indata ersätter antingen det aktuella värdet eller kopplas till befintliga data beroende på inställningen för det andra argumentet, aggregateOverride.
  • aggregateOverride: Det andra argumentet, aggregrateOverride, styr hur data sparas till data-JSON. Det är ett valfritt argument som är inställt till falskt som standard. När satt till falskt slås indata samman med befintliga data. Om data inte är ett objekt kopplas de inte till data-JSON. När satt till sant åsidosätter indata befintliga data i elementet Egen LWC.
Exempel
Exempel
  • Skicka input med standardbeteendet för aggregrateOverride:
    let myData = "myvalue" // any kind of data that is a string, object, number, etc
    
    
    this.omniUpdateDataJson(this.myData);
  • Skicka argumentet input med argumentet aggregateOverride satt till falskt:
    // 1. first call to omniUpdateDataJson
    // input for omniUpdateDataJson when aggregateOverride = false
    {
      "prop1" : "data1" 
    }
    
    // 2. output of data JSON after the first call
    // 
    {
    "Step1" : {
       "CustomLWC1" : {
          "prop1": "data1"
       }
    }
    
    // 3. second call to omniUpdateDataJson
    // input for omniUpdateDataJson when aggregateOverride = false
    {
      "prop2" : "data2"
    }
    
    // 4. output of data JSON after the second call
    // notice that the value of CustomLWC1 contains both prop1 and prop2 
    // because the data is merged instead of replaced when aggregateOverride is set to false
    {
    "Step1" : {
       "CustomLWC1" : {
          "prop1": "data1",
          "prop2": "data2"
       }
    }

Mappning av svar på Omniscriptets data-JSON

Tillämpa svar från egna åtgärder med omniApplyCallResp().

Metoden accepterar ett objekt som den skickar till Omniscriptets data-JSON. Om rotdatanodnamnet i svaret matchar ett elementnamn i Omniscriptet fyller dessa data i elementet i förväg, och eventuella kapslade element, när de återges i Omniscriptet. Om rotnodnamnet inte matchar ett element i data-JSON infogas noden i data-JSON omedelbart. Att tillämpa svaret fungerar liknande egenskapen Skicka/Svara. Mer information finns i Hantera JSON med egenskaperna för Skicka/Svara-transformationer.

Anteckning
Anteckning Metoden kan inte stödja proxyobjekt. För att inkludera proxyinmatningar måste du först klona indataobjektet genom att använda JSON.parse och JSON.stringify och sedan skicka det till metoden, enligt detta exempel.
Exempel
Exempel
input = JSON.parse(JSON.stringify(input)); 
      this.omniApplyCallResp(input);

Metod: omniApplyCallResp(response, usePubsub = false)

Argument:

  • response: Objekt som kopplas till data-JSON.
  • usePubSub: Styr hur svaret skickas upp till Omniscript-sidhuvudet för att kopplas till data-JSON. Denna booleska är inställd till falskt som standard. När satt till falskt skickas response till Omniscript-sidhuvudet via javascript-händelser. När satt till sant skickas response till Omniscript-sidhuvudet av modulen pubsub.

    Argumentet usePubSub låter användare anropa omniApplyCallResp asynkront. När du kör asynkront blockeras inte användargränssnittet i väntan på svaret.

    Om du vill kan du utföra ett fjärranrop med metoden omniNextStep() och anropa omniApplyCallResp() asynkront.

Hur metoden omniApplyCallResp() uppdaterar Data JSON
Hur metoden omniApplyCallResp() uppdaterar Data JSON
  1. Se aktuell data-JSON innan du kör omniApplyCallResp().
    {
        "Step1" : {
           "Currency1" : 12345,
           "Text1" : "data1"
        },
        "Step2" : {
           "Text3": "data3"
        }
    }
  2. Anropa omniApplyCallResp och skicka data som ett argument.
    let myData = {
       "Step1" : {
          "CustomLWC1" : "newprop"
       },
       "Anotherprop" : {
          "prop1" : "anothervalue"
       }
    }
    
    this.omniApplyCallResp(myData);
  3. Visa JSON för uppdaterade data.
    {
        "Step1" : {
           "Currency1" : 12345,
           "Text1" : "data1",
           "CustomLWC1" : "newprop"
        },
        "Step2" : {
           "Text3": "data3"
        },
        "Anotherprop" : {
          "prop1" : "anothervalue"
       }
    }

Skapa och mappa data inuti det egna LWC-elementet

Konstruera ytterligare JSON-datanoder i Eget LWC-element och överför värden från elementet till de nya JSON-noderna med händelsen omniaggregate..

Mer information om händelser finns i Skapa och skicka händelser.

Händelse: omniaggregate

  1. Skapa en egen aggregeringsfunktion och sätt omniaggregate till en variabel.
    Exempel:
    customAggregate() {
        const eventName = 'omniaggregate'
    }
  2. Skapa en variabel för att lagra LWC-elementets indata.
    Exempel:
    customAggregate() {
        const eventName = 'omniaggregate'
        const data = {
            anyKeyName : 'myElementData'
        };
    }
  3. Konstruera ett objekt genom att mappa data till nyckeldata och ett elementnamn till key elementId.
    Exempel:
    customAggregate() {
        const eventName = 'omniaggregate' 
        const data = {
            anyKeyName : 'myElementData'
        };
        const detail = {
            data: data,
            elementId: 'elementName2'
        };
    }
  4. (Valfritt) I detaljobjektet, inkludera aggregateOverride: true nyckelvärdepar för att åsidosätta alla befintliga data i elementet Egen LWC.
    Exempel:
    customAggregate() {
        const eventName = 'omniaggregate' 
        const data = {
            anyKeyName : 'myElementData'
        };
        const detail = {
            data: data,
            elementId: 'elementName2',
            aggregateOverride: true
        };
    }
  5. Skapa ett nytt händelseobjekt som skickar händelsen omniaggregat och ett objekt som innehåller dessa fyra egenskaper:
    • bubblor: En boolesk som avgör om händelsen bubblar upp till DOM.
    • annullerbar: En boolesk som avgör om händelsen går att avbryta.
    • består av: En boolesk som avgör om händelsen kan passera genom skugggränsen.
    • detalj: Data som skickas i händelsen.
    Exempel:
    omniAggregate() {
        const eventName = 'omniaggregate' 
        const data = {
            anyKeyName : 'myElementData'
        };
        const detail = {
            data: data,
            elementId: 'elementName2'
        };
        const myEvent = new CustomEvent(eventName, {
            bubbles: true,
            cancelable: true,
            composed: true,
            detail: detail,
        });
    }
  6. Anropa this.dispatchEvent() och skicka i händelseobjektet som en parameter.

    Kodexempel

    Exempel på JSON-resultat för data

    // code to call
    omniAggregate() {
        const eventName = 'omniaggregate' 
        const data = {
            anyKeyName : 'myElementData'
        };
        const detail = {
            data: data,
            elementId: 'elementName2'
        };
        const myEvent = new CustomEvent(eventName, {
            bubbles: true,
            cancelable: true,
            composed: true,
            detail: detail,
        });
        this.dispatchEvent(myEvent);
    }   
    "CustomLWC12": {
        "elementName1": {
            "prop": "prop1"
        },
        "elementName2": {
            "anyKeyName": "myElementData"
        }
    }
 
Laddar
Salesforce Help | Article