Wanneer u Salesforce implementeert, moet u het doorgaans integreren met andere toepassingen. Hoewel elk integratiescenario uniek is, zijn er veelvoorkomende vereisten en problemen die ontwikkelaars en architecten moeten oplossen.
Dit document beschrijft strategieën (in de vorm van patronen) voor deze veel voorkomende integratiescenario's. Elk patroon beschrijft het ontwerp en de aanpak voor een bepaald scenario in plaats van een specifieke implementatie te beschrijven. In dit document vindt u:
- Een aantal patronen die betrekking hebben op belangrijke integratiescenario's voor "archetypen"
- Een selectiematrix om te bepalen welk patroon het beste bij uw scenario past
- Integratietips en best practices
Doel en bereik
Dit document is bedoeld voor ontwerpers en architecten die het Salesforce Platform moeten integreren met andere toepassingen in hun onderneming. Deze inhoud is een distillatie van vele succesvolle implementaties door Salesforce-architecten en -partners.
Lees Patroonsamenvatting en patroonselectiehandleiding om vertrouwd te raken met integratiemogelijkheden en opties die beschikbaar zijn voor grootschalige acceptatie van op Salesforce gebaseerde toepassingen. Architecten en ontwikkelaars moeten rekening houden met deze patroondetails en best practices tijdens de ontwerp- en implementatiefase van een Salesforce-integratieproject.
Als deze patronen op de juiste manier worden geïmplementeerd, kunt u zo snel mogelijk naar productie gaan en beschikt u over de meest stabiele, schaalbare en onderhoudsvrije set toepassingen. De eigen consultingarchitecten van Salesforce gebruiken deze patronen als referentiepunten tijdens architectuurbeoordelingen en onderhouden en verbeteren ze actief.
Zoals bij alle patronen omvat deze inhoud de meeste integratiescenario's, maar niet alle. Hoewel Salesforce integratie van de gebruikersinterface (UI) toestaat, bijvoorbeeld mashups, valt een dergelijke integratie buiten het bereik van dit document.
Patroonsjabloon
Elk integratiepatroon volgt een consistente structuur. Dit biedt consistentie in de informatie die in elk patroon wordt gegeven en maakt het ook gemakkelijker om patronen te vergelijken.
Naam
De patroonidentifier die ook het type integratie aangeeft dat in het patroon is opgenomen.
Context
Het algemene integratiescenario waarop het patroon betrekking heeft. Context geeft informatie over wat gebruikers proberen te bereiken en hoe de toepassing zich gedraagt om aan de vereisten te voldoen.
Probleem
Het scenario of probleem (uitgedrukt als een vraag) waarvoor het patroon is ontworpen. Lees bij het beoordelen van de patronen deze sectie om snel te begrijpen of het patroon geschikt is voor uw integratiescenario.
Krachten
De beperkingen en omstandigheden die het opgegeven scenario moeilijk op te lossen maken.
Oplossing
De aanbevolen manier om het integratiescenario op te lossen.
Sketch
Een UML-volgordediagram dat toont hoe de oplossing het scenario aanpakt.
Resultaten
Legt de details uit van de manier waarop u de oplossing toepast op uw integratiescenario en hoe deze de krachten oplost die aan dat scenario zijn gekoppeld. Deze sectie bevat ook nieuwe uitdagingen die kunnen ontstaan als gevolg van het toepassen van het patroon.
Sidebars
Aanvullende secties gerelateerd aan het patroon die belangrijke technische problemen, variaties van het patroon, patroonspecifieke problemen, enzovoort bevatten.
Voorbeeld
Een end-to-end scenario dat beschrijft hoe het ontwerppatroon wordt gebruikt in een Salesforce-scenario uit de praktijk. In het voorbeeld worden de integratiedoelen uitgelegd en wordt uitgelegd hoe u het patroon implementeert om die doelen te bereiken.
Patroonsamenvatting
De volgende tabel vermeldt de integratiepatronen in dit document.
Lijst van patronen remote-process-aanroep--verzoek-en-antwoord
| Patronen | Scenario |
|---|---|
| Aanroeping van extern proces: verzoek en antwoord | Salesforce roept een proces op een extern systeem aan, wacht op voltooiing van dat proces en houdt vervolgens de status bij op basis van de respons van het externe systeem. |
| Aanroeping van extern proces—Fire and Forget | Salesforce roept een proces aan in een extern systeem, maar wacht niet op voltooiing van het proces. In plaats daarvan ontvangt en bevestigt het externe proces het verzoek en draagt het de controle vervolgens weer over aan Salesforce. |
| Batchgegevenssynchronisatie | Gegevens die zijn opgeslagen in Lightning Platform, worden gemaakt of vernieuwd om updates van een extern systeem weer te geven en wanneer wijzigingen van Lightning Platform naar een extern systeem worden verzonden. Updates in een van beide richtingen worden uitgevoerd in een batch. |
| Externe oproep | Gegevens die zijn opgeslagen in Salesforce Platform, worden gemaakt, opgehaald, bijgewerkt of verwijderd door een extern systeem. |
| UI-update op basis van gegevenswijzigingen | De Salesforce-gebruikersinterface moet automatisch worden bijgewerkt als gevolg van wijzigingen in Salesforce-gegevens. |
| Gegevensvirtualisatie | Salesforce heeft in real-time toegang tot externe gegevens. Hierdoor is het niet meer nodig om gegevens in Salesforce te bewaren en de gegevens vervolgens af te stemmen tussen Salesforce en het externe systeem. |
Pattern Approach
De integratiepatronen in dit document zijn ingedeeld in drie categorieën:
-
Gegevensintegratie: deze patronen hebben betrekking op de vereiste om gegevens te synchroniseren die zich in twee of meer systemen bevinden, zodat beide systemen altijd tijdige en betekenisvolle gegevens bevatten. Gegevensintegratie is vaak het eenvoudigste type integratie om te implementeren, maar vereist de juiste informatiebeheertechnieken om de oplossing duurzaam en kosteneffectief te maken. Dergelijke technieken omvatten vaak aspecten van masterdata management (MDM), data governance, mastering, de-duplicatie, gegevensstroomontwerp en andere.
-
Procesintegratie—De patronen in deze categorie geven aan dat een bedrijfsproces twee of meer toepassingen moet gebruiken om de taak te voltooien. Wanneer u een oplossing voor dit type integratie implementeert, moet de activerende toepassing over procesgrenzen heen andere toepassingen aanroepen. Meestal omvatten deze patronen ook zowel doeltreffende combinaties (waarbij één toepassing de centrale “controller” is) als choreografie (waarbij toepassingen meerdere deelnemers zijn en er geen centrale “controller” is). Deze integraties vereisen vaak complexe vereisten voor ontwerp, testen en het afhandelen van uitzonderingen. Dergelijke samengestelde toepassingen stellen doorgaans hogere eisen aan de onderliggende systemen, omdat ze vaak langdurige transacties ondersteunen en de mogelijkheid bieden om te rapporteren over de processtatus of deze te beheren.
-
Virtuele integratie—De patronen in deze categorie hebben betrekking op de noodzaak voor een gebruiker om gegevens weer te geven, te zoeken en te wijzigen die zijn opgeslagen in een extern systeem. Wanneer u een oplossing voor dit type integratie implementeert, moet de activerende toepassing andere toepassingen aanroepen en in real-time met hun gegevens werken. Dit type integratie verwijdert de noodzaak van gegevensreplicatie tussen systemen en betekent dat gebruikers altijd interactie hebben met de meest actuele gegevens.
Het kiezen van de beste integratiestrategie voor uw systeem is niet triviaal. Er zijn vele aspecten om rekening mee te houden en vele tools die kunnen worden gebruikt, waarbij sommige tools geschikter zijn dan andere voor bepaalde taken. Elk patroon behandelt specifieke kritieke gebieden, waaronder de mogelijkheden van elk van de systemen, het volume van gegevens, de afhandeling van storingen en transactionaliteit.
Patroonselectiehandleiding
De selectiematrixtabellen vermelden de patronen en hun belangrijkste aspecten om u te helpen bepalen welk patroon het beste aansluit op uw integratievereisten. De patronen worden gecategoriseerd met behulp van deze dimensies.
| Aspect | Beschrijving |
|---|---|
| Type | Geeft de stijl van integratie aan: Proces, Gegevens of Virtueel.
|
| Timing | Geeft de stijl van integratie aan: Proces, Gegevens of Virtueel.
|
Salesforce integreren met een ander systeem
Deze tabel vermeldt de patronen en hun belangrijkste aspecten om u te helpen bepalen welk patroon het beste aansluit op uw vereisten wanneer uw integratie plaatsvindt van Salesforce naar een ander systeem.
| Type | Timing | Sleutelpatroon om te overwegen |
|---|---|---|
| Procesintegratie | Synchroon | Aanroeping van extern proces: verzoek en antwoord |
| Procesintegratie | Asynchronous | Aanroeping van extern proces—Fire and Forget |
| Gegevensintegratie | Synchroon | Aanroeping van extern proces: verzoek en antwoord |
| Gegevensintegratie | Asynchronous | UI-update op basis van gegevenswijzigingen |
| Virtuele integratie | Synchroon | Gegevensvirtualisatie |
Een ander systeem integreren met Salesforce
Deze tabel vermeldt de patronen en hun belangrijkste aspecten om u te helpen het patroon te bepalen dat het beste aansluit op uw vereisten wanneer uw integratie plaatsvindt vanuit een ander systeem naar Salesforce.
| Type | Timing | Sleutelpatroon om te overwegen |
|---|---|---|
| Procesintegratie | Synchroon | Externe oproep |
| Procesintegratie | Asynchronous | Externe oproep |
| Gegevensintegratie | Synchroon | Externe oproep |
| Gegevensintegratie | Asynchronous | Batchgegevenssynchronisatie |
Termen en definities van middleware
Deze tabel vermeldt enkele belangrijke termen die zijn gerelateerd aan middleware en hun definities met betrekking tot deze patronen.
| Term | Definitie |
|---|---|
| Afhandeling van events | Eventafhandeling is de ontvangst van een identificeerbaar voorval bij een aangewezen ontvanger ("handler"). De belangrijkste processen die betrokken zijn bij eventverwerking omvatten:
Houd er rekening mee dat de eventhandler de event uiteindelijk kan doorsturen naar een eventconsument. Veelvoorkomende toepassingen van deze voorziening met middleware kunnen worden uitgebreid met de populaire mogelijkheid "publiceren/abonneren" of "pub/sub". In een scenario voor publiceren/abonneren routeert de middleware verzoeken of berichten naar actieve data-eventabonnees van actieve data-eventuitgevers. Deze consumenten met actieve luisteraars kunnen de events dan ophalen wanneer ze worden gepubliceerd. In Salesforce-integraties die middleware gebruiken, neemt de middlewarelaag de controle over eventverwerking over. Het verzamelt alle relevante events, synchroon of asynchroon, en beheert de distributie naar alle eindpunten, inclusief Salesforce. Deze mogelijkheid kan ook worden bereikt met het Salesforce-platform voor ondernemingsberichtenverkeer door middel van de eventbus met platformevents. |
| Protocolconversie | Protocolconversie is doorgaans een softwaretoepassing die het standaard- of gepatenteerde protocol van het ene apparaat converteert naar het protocol dat geschikt is voor een ander apparaat om interoperabiliteit te bereiken. In de context van middleware kan connectiviteit met een bepaald doelsysteem worden beperkt door het protocol. In dergelijke gevallen moet de berichtindeling worden geconverteerd naar of worden ingekapseld binnen de indeling van het doelsysteem, waar de payload kan worden geëxtraheerd. Dit wordt ook wel tunneling genoemd. Salesforce ondersteunt geen native protocolconversie, dus wordt aangenomen dat aan dergelijke vereisten wordt voldaan door de middlewarelaag of het eindpunt. |
| Vertaling en transformatie | Transformatie is het vermogen om de ene gegevensindeling toe te wijzen aan de andere om de interoperabiliteit te waarborgen tussen de verschillende systemen die worden geïntegreerd. Doorgaans omvat het proces het onderweg opnieuw opmaken van berichten om te voldoen aan de vereisten van de afzender of ontvanger. In complexere gevallen kan één toepassing een bericht in zijn eigen native indeling verzenden, terwijl twee of meer andere toepassingen elk een kopie van het bericht in hun eigen native indeling kunnen ontvangen. Middleware-vertaal- en transformatietools bieden vaak de mogelijkheid om servicefaçades te maken voor verouderde of andere niet-standaardeindpunten. Met deze servicefaçades kunnen die eindpunten serviceadresseerbaar lijken. Bij Salesforce-integraties wordt aangenomen dat aan dergelijke vereisten wordt voldaan door de middlewarelaag of het eindpunt. Transformatie van gegevens kan worden gecodeerd in Apex, maar wordt afgeraden vanwege onderhouds- en prestatieoverwegingen. |
| In wachtrij plaatsen en bufferen | Wachtrijen en bufferen vertrouwen over het algemeen op het doorgeven van asynchrone berichten, in tegenstelling tot een verzoek-reactiearchitectuur. In asynchrone systemen bieden berichtwachtrijen tijdelijke opslag wanneer het bestemmingsprogramma bezet is of wanneer de connectiviteit wordt gecompromitteerd. Daarnaast bieden de meeste asynchrone middlewaresystemen permanente opslag als back-up van de berichtenwachtrij. Het belangrijkste voordeel van een asynchroon berichtenproces is dat als de ontvangertoepassing om welke reden dan ook mislukt, de afzenders niet kunnen worden beïnvloed. De verzonden berichten worden gewoon verzameld in de berichtenwachtrij voor latere verwerking wanneer de ontvanger opnieuw wordt gestart. Salesforce biedt alleen expliciete wachtrijmogelijkheden in de vorm van op werkstromen gebaseerd uitgaand berichtenverkeer. Voor het bieden van true message queueing voor andere integratiescenario's, inclusief doeltreffende combinatie, proceschoreografie en servicekwaliteit, is een middleware-oplossing vereist. |
| Synchrone transportprotocollen | Synchrone transportprotocollen verwijzen naar protocollen die activiteiten ondersteunen waarbij "één thread in de beller het verzoekbericht verzendt, blokkeert om te wachten op het antwoordbericht en vervolgens het antwoord verwerkt... De thread van het verzoek die wacht op het antwoord, impliceert dat er slechts één open verzoek is of dat het antwoordkanaal voor dit verzoek privé is voor deze thread". |
| Asynchrone transportprotocollen | Asynchrone transportprotocollen verwijzen naar protocollen die activiteiten ondersteunen waarbij "één thread in de beller het verzoekbericht verzendt en een callback instelt voor het antwoord. Een afzonderlijke thread luistert naar antwoordberichten. Wanneer een antwoordbericht binnenkomt, roept de antwoordthread de juiste callback aan, die de context van de beller herstelt en het antwoord verwerkt. Met deze benadering kunnen meerdere openstaande verzoeken één antwoordthread delen.” |
| Routering voor bemiddeling | Bemiddelingsroutering is de specificatie van een complexe "stroom" van berichten van component naar component. Veel op middleware gebaseerde oplossingen zijn bijvoorbeeld afhankelijk van een berichtenwachtrijsysteem. Hoewel sommige implementaties routeringslogica toestaan door de berichtenverkeerslaag zelf, zijn andere afhankelijk van clienttoepassingen om routeringsinformatie te bieden of een combinatie van beide paradigma's mogelijk te maken. In dergelijke complexe gevallen vereenvoudigt bemiddeling door middleware de ontwikkeling, integratie en validatie. De coördinator [Mediator] kan ervoor zorgen dat de juiste boodschap bij de juiste consument terechtkomt.” |
| Proceschoreografie en dienstorkestratie | Proceschoreografie en service doeltreffende combinatie zijn beide vormen van “service samenstelling” waarbij een willekeurig aantal eindpunten en mogelijkheden worden gecoördineerd.
Het verschil tussen choreografie en dienstorkestratie is:
Delen van bedrijfsproceschoreografieën kunnen worden samengesteld in Salesforce-werkstromen of met behulp van Apex. We raden aan dat alle complexe doeltreffende combinaties worden geïmplementeerd in de middlewarelaag vanwege Salesforce-time-outwaarden en beheerlimieten, met name in oplossingen die echte transactieverwerking vereisen. |
| Transactionaliteit (encryptie, ondertekening, betrouwbare levering, transactiebeheer) | Transactionaliteit kan worden gedefinieerd als het vermogen om globale transacties te ondersteunen die alle noodzakelijke bewerkingen voor elke vereiste resource omvatten. Transactionaliteit impliceert de ondersteuning van alle vier ZUUR-eigenschappen, atomiciteit, consistentie, isolatie, duurzaamheid, waarbij atomiciteit alles-of-niets-uitkomsten garandeert voor de eenheid van werk (transactie).
Hoewel Salesforce op zichzelf transactioneel is, kan het niet deelnemen aan gedistribueerde transacties of transacties die buiten Salesforce worden geïnitieerd. Daarom wordt aangenomen dat voor oplossingen die complexe transacties met meerdere systemen vereisen, transactionaliteit en gekoppelde roll-back-/compensatiemechanismen worden geïmplementeerd op de middlewarelaag. |
| Routering | Routering kan worden gedefinieerd als het opgeven van de complexe stroom van berichten van component naar component. In moderne op services gebaseerde oplossingen kunnen dergelijke berichtstromen worden gebaseerd op een aantal criteria, waaronder koptekst, inhoudstype, regel en prioriteit.
Bij Salesforce-integraties wordt aangenomen dat aan dergelijke vereisten wordt voldaan door de middlewarelaag of het eindpunt. Berichtroutering kan worden gecodeerd in Apex, maar wordt niet aanbevolen vanwege onderhoud en prestatieoverwegingen. |
| Extraheren, transformeren en laden | Extraheren, transformeren en laden (ETL) verwijst naar een proces dat het volgende omvat:
Salesforce ondersteunt nu ook Gegevensvastlegging wijzigen, hetgeen neerkomt op het publiceren van wijzigingsevents die wijzigingen in Salesforce-records vertegenwoordigen. Met Gegevensvastlegging wijzigen ontvangt de client of het externe systeem vrijwel realtime wijzigingen van Salesforce-records. Met deze informatie kan de client of het externe systeem overeenkomende records in een externe gegevensopslag synchroniseren. |
| Lange polling | Lange polling, ook wel Comet-programmering genoemd, emuleert een informatiepush van een server naar een client. Net als bij een normale opiniepeiling maakt de client verbinding met en verzoekt deze om informatie van de server. Maar in plaats van een lege respons te verzenden als er geen informatie beschikbaar is, houdt de server het verzoek vast en wacht tot er informatie beschikbaar is (er vindt een event plaats). De server verzendt vervolgens een volledige respons naar de client. De cliënt vraagt dan direct om informatie. De client onderhoudt continu een verbinding met de server, waardoor deze altijd wacht op een reactie. Als de server een time-out ondervindt, maakt de client opnieuw verbinding en begint deze opnieuw. De Salesforce Streaming-API gebruikt het Bayeux-protocol en CometD voor lange polling.
|
Context
U gebruikt Salesforce om leads bij te houden, uw pijplijn te beheren, opportunities te maken en orderdetails vast te leggen die leads converteren naar klanten. Het Salesforce-systeem bevat of verwerkt echter geen orders. Nadat de orderdetails zijn vastgelegd in Salesforce, wordt de order gemaakt in het externe systeem, dat de order tot aan de conclusie beheert.
Wanneer u dit patroon implementeert, roept Salesforce het externe systeem aan om de order te maken en wacht vervolgens op succesvolle voltooiing. Indien geslaagd, antwoordt het externe systeem synchroon met de orderstatus en het ordernummer. Als onderdeel van dezelfde transactie werkt Salesforce het ordernummer en de status intern bij. Het ordernummer wordt gebruikt als externe sleutel voor daaropvolgende updates van het externe systeem.
Probleem
Wanneer een event zich voordoet in Salesforce, hoe initieert u dan een proces in een extern systeem, geeft u de vereiste informatie door aan dat proces, ontvangt u een reactie van het externe systeem en gebruikt u die reactiegegevens vervolgens om updates aan te brengen binnen Salesforce?
Krachten
Denk aan de volgende krachten bij het toepassen van oplossingen op basis van dit patroon.
- Vereist de aanroep naar het externe systeem dat Salesforce wacht op een reactie voordat de verwerking wordt voortgezet? Is de aanroep naar het externe systeem een synchroon verzoek-antwoord of een asynchroon verzoek?
- Als de aanroep naar het externe systeem synchroon is, moet Salesforce de respons dan verwerken als onderdeel van dezelfde transactie als de initiële aanroep?
- Is de berichtgrootte klein of groot?
- Is de integratie gebaseerd op het optreden van een specifieke event, zoals een knopklik in de Salesforce-gebruikersinterface of op DML gebaseerde events?
- Kan het externe eindpunt met een lage latentie op het verzoek reageren? Hoeveel gebruikers voeren deze transactie waarschijnlijk uit tijdens een piekperiode?
Oplossing
Deze tabel bevat oplossingen voor dit integratieprobleem.
| Oplossing | Passen | Opmerkingen |
|---|---|---|
| Externe services roept een REST-API-aanroep aan | Beste | Met Externe services kunt u een extern gehoste service declaratief aanroepen (geen code vereist). Deze voorziening wordt het best gebruikt wanneer aan de volgende voorwaarden wordt voldaan:
|
| Salesforce Lightning: Lightning component of pagina initieert een synchrone Apex REST of SOAP aanroep.</ Als het externe eindpunt een risico op een hoge latentierespons inhoudt (raadpleeg hier de documentatie over de nieuwste limieten voor de van toepassing zijnde limieten), wordt een asynchrone aanroep, ook wel een voortzetting genoemd, aanbevolen om te voorkomen dat synchrone Apex transactiebeheerlimieten worden bereikt. |
Beste | Met Salesforce kunt u een WSDL verbruiken en een resulterende proxy Apex klasse genereren. Deze klasse biedt de benodigde logica om de externe service aan te roepen. Met Salesforce kunt u ook HTTP-services (REST) aanroepen met behulp van de standaardmethoden GET, POST, PUT en DELETE. Een door de gebruiker geïnitieerde actie op een Lightning pagina roept vervolgens een Apex controller actie aan die vervolgens deze proxy Apex klasse uitvoert om het externe gesprek uit te voeren. Lightning pagina's vereisen aanpassing van de Salesforce-toepassing. |
| Een synchrone trigger die wordt aangeroepen vanuit Salesforce-gegevenswijzigingen, voert een asynchrone Apex SOAP- of HTTP-aanroep uit. | Suboptimal | U kunt Apex triggers gebruiken om automatisering uit te voeren op basis van recordgegevenswijzigingen. Een Apex proxyklasse kan worden uitgevoerd als resultaat van een DML-bewerking door middel van een Apex trigger. Alle aanroepen die worden gedaan vanuit de triggercontext, moeten echter asynchroon worden uitgevoerd vanuit de initiërende event. Daarom wordt deze oplossing niet aanbevolen voor dit integratieprobleem. Deze oplossing is beter geschikt voor het patroon Aanroepen van extern proces—Branden en vergeten. |
| Een batch Apex taak voert een synchrone Apex SOAP of HTTP aanroep uit. | Suboptimal | U kunt aanroepen naar een extern systeem doen vanuit een batchtaak. Deze oplossing maakt batchgewijze uitvoering van externe processen en verwerking van de respons vanuit het externe systeem in Salesforce mogelijk. Een bepaalde batch heeft echter limieten voor het aantal aanroepen. Zie voor meer informatie Governor Limits. Een bepaalde batchuitvoering kan meerdere transactiecontexten uitvoeren (doorgaans met intervallen van 200 records). De beheerlimieten worden per transactiecontext opnieuw ingesteld. |
Sketch
Dit diagram illustreert een synchrone externe procesaanroep met behulp van Apex aanroepen.
Salesforce aanroepen naar een extern systeem
In dit scenario:
- Een actie wordt geïnitieerd op de Lightning pagina (bijvoorbeeld een knopklik).
- De browser (via een client-side controller in het geval van een Lightning component) voert een HTTP POST uit die op zijn beurt een actie uitvoert op de corresponderende Apex controller.
- De controller roept de feitelijke aanroep naar de externe webservice aan.
- De respons van het externe systeem wordt geretourneerd naar de Apex controller. De controller verwerkt de respons, werkt indien nodig gegevens in Salesforce bij en geeft de pagina opnieuw weer.
In gevallen waarin de daaropvolgende status moet worden bijgehouden, retourneert het externe systeem een unieke identifier die is opgeslagen in de Salesforce-record.
Resultaten
De toepassing van de oplossingen die zijn gerelateerd aan dit patroon, maakt event-geïnitieerde externe procesaanroepen mogelijk, waarbij Salesforce de verwerking afhandelt.
Aanroepmechanismen
Het aanroepmechanisme is afhankelijk van de oplossing die is gekozen om dit patroon te implementeren.
| Aanroepmechanisme | Beschrijving |
|---|---|
| Uitgebreide externe service ingebed in een stroom of Lightning component of Apex controllers |
Wordt gebruikt wanneer het externe proces wordt geactiveerd als onderdeel van een end-to-end proces waarbij de gebruikersinterface is betrokken, en het resultaat moet worden weergegeven of bijgewerkt in een Salesforce-record. Bijvoorbeeld, de indiening van een creditcardbetaling bij een externe betalingsgateway en de betalingsresultaten worden onmiddellijk geretourneerd en weergegeven aan de gebruiker. |
| Apex triggers | Wordt voornamelijk gebruikt voor het aanroepen van externe processen met behulp van Apex aanroepen vanuit door DML geïnitieerde events. Zie voor meer informatie over dit aanroepmechanisme Patroon Externe procesaanroep—Branden en vergeten. |
| Apex batchklassen | Gebruikt voor het aanroepen van externe processen in batch. Zie voor meer informatie over dit aanroepmechanisme Patroon Externe procesaanroep—Branden en vergeten. |
Foutafhandeling en herstel
Het is belangrijk om een strategie voor foutafhandeling en herstel op te nemen als onderdeel van de algemene oplossing.
-
Foutafhandeling: wanneer er een fout optreedt (uitzonderingen of foutcodes worden geretourneerd aan de beller), beheert de beller de foutafhandeling. Bijvoorbeeld een foutbericht dat wordt weergegeven op de pagina van de eindgebruiker of dat wordt vastgelegd bij een tabel die verdere actie vereist.
-
Herstel: wijzigingen worden pas doorgevoerd naar Salesforce als de beller een succesvolle reactie ontvangt. Zo wordt de orderstatus pas bijgewerkt in de database nadat er een respons is ontvangen die aangeeft dat de order is geslaagd. Indien nodig kan de beller de bewerking opnieuw proberen.
Overwegingen bij impotent ontwerp
Idempotente mogelijkheden garanderen dat herhaalde aanroepen veilig zijn. Als idempotentie niet is geïmplementeerd, kunnen herhaalde aanroepen van hetzelfde bericht verschillende resultaten hebben, wat mogelijk leidt tot problemen met de gegevensintegriteit. Mogelijke problemen zijn het maken van duplicaatrecords of duplicaatverwerking van transacties.
Het is belangrijk ervoor te zorgen dat de externe procedure die wordt aangeroepen, idempotent is. Als de aanroep wordt gedaan via de gebruikersinterface, moeten we zorgen voor idempotentie op de integratielaag, vooral als er geen garantie is dat Salesforce slechts één keer aanroept.
De meest typische methode voor het samenstellen van een idempotente ontvanger is het bijhouden van duplicaten op basis van unieke bericht-ID's die door de consument zijn verzonden. Apex webservice- of REST-aanroepen moeten worden aangepast om een unieke bericht-ID te verzenden.
Daarnaast moeten bewerkingen die records maken op het externe systeem, controleren op duplicaten voordat ze worden ingevoegd. Controleer dit door een unieke record-ID van Salesforce door te geven. Als de record voorkomt op het externe systeem, werkt u de record bij. In de meeste systemen wordt deze bewerking een upsert-bewerking genoemd.
Beveiligingsoverwegingen
Elke aanroep naar een extern systeem moet de vertrouwelijkheid, integriteit en beschikbaarheid van het verzoek waarborgen. De volgende beveiligingsoverwegingen zijn specifiek voor het gebruik van Apex SOAP- en HTTP-aanroepen in dit patroon.
-
Eenrichtings-SSL is standaard ingeschakeld, maar tweeweg-SSL wordt ondersteund met zowel zelfondertekende als door een certificeringsinstantie ondertekende certificaten om de authenticiteit van zowel de client als de server te behouden.
-
Als u uw Apex code wilt stroomlijnen en de set-up van geauthenticeerde aanroepen wilt vereenvoudigen, geeft u een benoemd gegeven op in het eindpunt van de aanroep.
-
Overweeg het gebruik van OAUTH 2.0 als authenticatiemechanisme voor integratie met externe systemen.
-
Overweeg waar nodig het gebruik van hashes in één richting of digitale handtekeningen met behulp van de Apex Crypto-klassemethoden om de integriteit van verzoeken te waarborgen.
-
Het externe systeem moet worden beschermd door de juiste firewallmechanismen te implementeren. Zie Beveiligingsoverwegingen.
-
Salesforce biedt momenteel geen ondersteuning voor WS-Security. Hoewel deze complexe WS-Security-headers niet automatisch worden gegenereerd of afgedwongen vanuit een inkomende WSDL, kunt u ze handmatig samenstellen en implementeren door aangepaste Apex klassen te maken voor het afhandelen van de SOAP-headers en beveiligingstokens voor inkomende verzoeken.
Sidebars
Geen.
Timeliness
Tijdigheid is in dit patroon van groot belang. Doorgaans:
- Het verzoek wordt doorgaans aangeroepen vanuit de gebruikersinterface, dus het proces mag de gebruiker niet in de wachtstand houden.
- Salesforce heeft een configureerbare time-out van maximaal 120 seconden voor aanroepen vanuit Apex.
- Voltooiing van het externe proces wordt tijdig uitgevoerd om te worden voltooid binnen de Salesforce-time-outlimiet en binnen de verwachtingen van de gebruiker.
- Externe aanroepen zijn onderworpen aan Apex beheerlimieten voor synchrone transacties. Zorg er dus voor dat u het risico verkleint dat u meer dan 50 transacties instantieert die elk meer dan vijf seconden worden uitgevoerd. Naast het garanderen dat het externe eindpunt presteert, omvatten opties om het risico van een time-out te beperken:
- De time-out van de externe aanroep instellen op vijf seconden.
- Een voortzetting in Lightning Components gebruiken om langlopende transacties af te handelen
Gegevensvolumes
Dit patroon wordt voornamelijk gebruikt voor real-time activiteiten met een klein volume, vanwege de kleine time-outwaarden en de maximale grootte van het verzoek of de reactie voor de Apex call-oplossing. Gebruik dit patroon niet in batchverwerkingsactiviteiten waarbij de gegevenspayload is opgenomen in het bericht.
Ondersteuning van eindpuntmogelijkheden en standaarden
De mogelijkheden en standaardondersteuning voor het eindpunt zijn afhankelijk van de oplossing die u kiest.
| Oplossing | Overwegingen bij eindpunten |
|---|---|
| Apex HTTP-aanroepen | Het eindpunt moet HTTP-aanroepen kunnen ontvangen. Salesforce moet toegang hebben tot het eindpunt via het openbare internet. Voor privé en veilige communicatie is Salesforce nu ook begonnen met het veilig ondersteunen van Salesforce Private Connect via het Hyperforce Platform. Zie Salesforce Private Connect voor meer informatie.
U kunt Apex HTTP-aanroepen gebruiken om REST-services aan te roepen met behulp van de standaardmethoden GET, POST, PUT, DELETE en PATCH. |
| Apex SOAP-aanroepen | Het eindpunt moet HTTP-aanroepen kunnen ontvangen. Salesforce moet toegang hebben tot het eindpunt via het openbare internet. Voor privé en veilige communicatie is Salesforce nu ook begonnen met het veilig ondersteunen van Salesforce Private Connect via het Hyperforce Platform. Zie Salesforce Private Connect voor meer informatie.
Deze oplossing vereist dat het externe systeem compatibel is met de standaarden die door Salesforce worden ondersteund. Op het moment van schrijven zijn de webservicestandaarden die Salesforce ondersteunt voor Apex SOAP-aanroepen:
|
Staatsbeheer
Bij het integreren van systemen zijn sleutels belangrijk voor het continu bijhouden van de status. Er zijn twee opties.
- Salesforce slaat de primaire of unieke vervangende sleutel van het externe systeem voor de externe record op.
- Het externe systeem slaat de unieke Salesforce-record-ID of een andere unieke vervangende sleutel op.
Er zijn specifieke overwegingen bij het afhandelen van integratiesleutels, afhankelijk van welk systeem de hoofdrecord bevat, zoals getoond in de volgende tabel.
| Master | Systeem Beschrijving |
|---|---|
| Salesforce | Het externe systeem slaat de Salesforce RecordId of een andere unieke vervangende sleutel uit de record op. |
| Extern systeem | De aanroep naar het externe proces retourneert de unieke sleutel uit de toepassing en Salesforce slaat die sleutelwaarde op in een uniek recordveld. |
Complexe integratiescenario's
In bepaalde gevallen kan de oplossing die door dit patroon wordt voorgeschreven, de implementatie van verschillende complexe integratiescenario's vereisen. Dit komt het best tot zijn recht door middleware te gebruiken of Salesforce een samengestelde service te laten aanroepen. Deze scenario's omvatten:
- Afstemming van bedrijfsprocessen en regels met complexe stroomlogica
- Aggregatie van gesprekken en de resultaten ervan over gesprekken naar meerdere systemen
- Transformatie van zowel inkomende als uitgaande berichten
- Transactionele integriteit behouden voor alle aanroepen naar meerdere systemen
Gouverneurlimieten
Zie Uitvoeringsbeheer en limieten in de Apex Developer Guide voor informatie over Apex limieten.
Middlewaremogelijkheden
De volgende tabel markeert de gewenste eigenschappen van een middlewaresysteem dat aan dit patroon deelneemt.
| Eigenschap | Verplicht | Wenselijk | Niet verplicht |
|---|---|---|---|
| Afhandeling van events | X | ||
| Protocolconversie | X | ||
| Vertaling en transformatie | X | ||
| In wachtrij plaatsen en bufferen | X | ||
| Synchrone transportprotocollen | X | ||
| Asynchrone transportprotocollen | X | ||
| Routering voor bemiddeling | X | ||
| Proceschoreografie en dienstorkestratie | X | ||
| Transactionaliteit (encryptie, ondertekening, betrouwbare levering, transactiebeheer) | X | ||
| Routering | X | ||
| Extraheren, transformeren en laden | X | ||
| lange polling | X |
Voorbeeld
Een nutsbedrijf gebruikt Salesforce en heeft een afzonderlijk systeem dat factureringsgegevens van klanten bevat. Als onderdeel van het bestelproces moeten nieuwe factureringsaccounts worden gemaakt in het factureringssysteem en moet Salesforce het factuuraccountnummer weerspiegelen binnen het orderactiveringsproces. Ze hebben een bestaande webservice waarmee een factuuraccount kan worden gemaakt en het factuuraccountnummer als reactie kan worden geretourneerd.
Aan deze eis kan worden voldaan met de volgende benadering.
- Salesforce verbruikt de WSDL van de factureringsaccountservice vanuit een Apex proxyklasse.
- Voer de Apex proxyklasse uit met de klantgegevens die zijn doorgegeven aan de externe webservice vanuit een aangepaste Apex controller of externe service.
- De aangepaste controller parseert vervolgens de retourwaarden uit de Apex aanroep en slaat die informatie op in het salesforce-object.
Dit voorbeeld toont aan dat:
- De status van de klant wordt bijgehouden met een accountnummer dat is opgeslagen in het Salesforce-accountobject.
- Verwerking van het antwoordbericht door de beller
Context
U gebruikt Salesforce om leads bij te houden, uw pijplijn te beheren, opportunities te maken en orderdetails vast te leggen die leads converteren naar klanten. Als onderdeel van de processen voor Orderbeheer moet er echter een factureringsaccount worden gemaakt in het factureringssysteem voor de order.
Wanneer u dit patroon implementeert, roept Salesforce het externe systeem aan om de factuuraccount te maken, maar wacht niet op de succesvolle voltooiing van het gesprek. Het externe systeem kan Salesforce optioneel bijwerken met de nieuwe factuuraccount die in een afzonderlijke transactie is gemaakt.
Probleem
Wanneer een event zich voordoet in Salesforce, hoe initieert u dan een proces in een extern systeem en geeft u de vereiste informatie door aan dat proces zonder te wachten op een reactie van het externe systeem?
Krachten
Denk aan de volgende krachten bij het toepassen van oplossingen op basis van dit patroon.
- Vereist de aanroep naar het externe systeem dat Salesforce wacht op een reactie voordat de verwerking wordt voortgezet? Is de aanroep naar het externe systeem synchroon of asynchroon?
- Als de aanroep naar het externe systeem synchroon is, moet de respons dan door Salesforce worden verwerkt als onderdeel van dezelfde transactie als de aanroep?
- Is de berichtgrootte klein?
- Is de integratie gebaseerd op het optreden van een specifieke event, zoals een knopklik in de Salesforce-gebruikersinterface of op DML gebaseerde events?
- Is gegarandeerde berichtlevering vanuit Salesforce naar het externe systeem een vereiste?
- Kan het externe systeem deelnemen aan een contract-first integratie waarin Salesforce het contract opgeeft? In sommige oplossingsvarianten (bijvoorbeeld uitgaand berichtenverkeer) geeft Salesforce een contract op dat het externe systeemeindpunt implementeert.
- Ondersteunt het eindpunt of de Enterprise Service Bus (ESB) lange polling?
- Hebben declaratieve configuratiemethoden de voorkeur boven aangepaste Apex ontwikkeling? In dit geval hebben oplossingen zoals platformevents de voorkeur boven Apex aanroepen.
Oplossing
De volgende tabel bevat oplossingen voor dit integratieprobleem.
| Oplossing | Passen | Opmerkingen |
|---|---|---|
| Stroomgestuurde platformevents | Beste | Maak declaratief stromen om platformevents te implementeren. De aanbevolen oplossing is wanneer het externe proces wordt aangeroepen vanuit een insert- of update-event. Platform-events zijn de eventberichten (of kennisgevingen) die uw apps verzenden en ontvangen om verdere actie te ondernemen. Platformevents vereenvoudigen het proces van het communiceren van wijzigingen en het reageren erop zonder complexe logica te schrijven. Een of meer abonnees kunnen naar dezelfde event luisteren en acties uitvoeren. Een softwaresysteem kan bijvoorbeeld events verzenden met informatie over printerinktcartridges. Abonnees kunnen zich abonneren op de events om printerinktniveaus te bewaken en orders te plaatsen voor het vervangen van cartridges met een laag inktniveau. Externe apps kunnen naar eventberichten luisteren door zich te abonneren op een kanaal via CometD. Platform-apps, zoals Lightning componenten, kunnen zich ook abonneren op eventberichten met CometD. De Salesforce PubSub-API die is gebaseerd op de gRPC en HTTP/2, kan hier ook worden gebruikt. Salesforce ondersteunt ook door platformevents geactiveerde stromen, waardoor u effectief een luisteraar kunt maken met behulp van de Flow Builder-interface. Dit type stroom start automatisch wanneer een specifiek Platform-eventbericht wordt gepubliceerd naar de Salesforce Event Bus. |
| Pub/Sub-API | Beste | De Pub/Sub-API is de aanbevolen manier voor externe consumenten om de events in de Event Bus te verbruiken. De op gRPC gebaseerde Pub/Sub-API:
Zodra een platformevent is gedefinieerd in Salesforce, komt deze beschikbaar voor zowel interne als externe consumenten. |
| Gegevensvastlegging wijzigen | Beste | Gegevensvastlegging wijzigen (CDC) publiceert events voor wijzigingen in Salesforce-records die overeenkomen met bewerkingen voor maken, bijwerken, verwijderen en verwijderen. Het inschakelen van Change Gegevensvastlegging (CDC) in Salesforce is een puur declaratief proces, waarvoor geen Apex code is vereist. Kennisgevingsberichten worden verzonden naar de eventbus waarop clients zich kunnen abonneren met behulp van Pub/Sub API of Apex triggers. Eventgestuurde systemen stroomlijnen de communicatie tussen gedistribueerde ondernemingssystemen, vergroten de schaalbaarheid en leveren realtime gegevens. Als ordergegevens zich bijvoorbeeld in zowel uw ERP-systeem als Salesforce bevinden, kunt u orderwijzigingsevents streamen van Salesforce naar een integratie-app. De app synchroniseert vervolgens de wijzigingen in het ERP-systeem |
| Omnistudio-integratieprocedures | Goed | Gebruik Omnistudio-integratieprocedures om gegevensinteracties tussen Salesforce en externe externe toepassingen declaratief te automatiseren. Integratieprocedures verwerken complexe gegevenstransformaties, API-aanroepen en eventgestuurde automatisering, en kunnen meerdere acties uitvoeren in één serveraanroep. Gebruik Integratieprocedures wanneer er geen gebruikersinteractie vereist is tijdens de uitvoering en u het volgende wilt doen:
Bekijk meer details over integratieprocedures hier. |
| Door aanpassing gestuurde platformevents | Goed | Gelijk aan door stroom gestuurde platformevents, maar de events worden gemaakt door Apex triggers of klassen. U kunt platformevents publiceren en consumeren met behulp van Apex of een API. Platformevents worden geïntegreerd met het Salesforce Platform via Apex triggers. Triggers zijn de eventconsumenten op het Salesforce-platform die naar eventberichten luisteren. Wanneer een externe app de API gebruikt of een native Salesforce-app Apex gebruikt om het eventbericht te publiceren, wordt een trigger voor die event geactiveerd. Triggers voeren de acties uit als reactie op de eventkennisgevingen. |
| Stroomgestuurd uitgaand berichtenverkeer | Passen | De aanbevolen oplossing voor dit type integratie is wanneer het externe proces wordt aangeroepen vanuit een insert- of update-event. Salesforce biedt een stroomgestuurde mogelijkheid voor uitgaand berichtenverkeer waarmee SOAP-berichten kunnen worden verzonden naar externe systemen die worden geactiveerd door een invoeg- of updatebewerking in Salesforce. Deze berichten worden asynchroon verzonden en zijn onafhankelijk van de Salesforce-gebruikersinterface. Het uitgaande bericht wordt verzonden naar een specifiek extern eindpunt. De externe service moet kunnen deelnemen aan een contract-first integratie waarbij Salesforce het contract levert. Als de externe service na ontvangst van het bericht niet reageert met een positieve bevestiging, probeert Salesforce het bericht opnieuw te verzenden, waarbij een vorm van gegarandeerde levering wordt geboden. |
| Aangepaste Lightning component die een Apex SOAP of HTTP asynchrone aanroep initieert | Suboptimal | Deze oplossing wordt doorgaans gebruikt in op gebruikersinterface gebaseerde scenario's, maar vereist wel aanpassing. Daarnaast moet de oplossing een gegarandeerde levering van het bericht in de code afhandelen. Vergelijkbaar met de oplossing voor de Remote Process Invocation—Request and Reply pattern solution die het gebruik van een Lightning component opgeeft, samen met een Apex aanroep. Het verschil is dat Salesforce in dit patroon niet wacht tot het verzoek is voltooid voordat het de controle overdraagt aan de gebruiker. Na ontvangst van het bericht reageert het externe systeem en geeft het de ontvangst van het bericht aan, waarna het bericht asynchroon wordt verwerkt. Het externe systeem geeft de controle terug aan Salesforce voordat het begint met de verwerking van het bericht; Salesforce hoeft dus niet te wachten op de voltooiing van de verwerking. |
| Apex triggers om Apex SOAP of HTTP asynchrone aanroep te maken | Suboptimal | U kunt Apex triggers gebruiken om automatisering uit te voeren op basis van recordgegevenswijzigingen. Een Apex proxyklasse kan worden uitgevoerd als resultaat van een DML-bewerking door middel van een Apex trigger. Alle aanroepen die worden gedaan vanuit de triggercontext, moeten echter asynchroon worden uitgevoerd. |
| Apex triggers om Apex SOAP of HTTP asynchrone aanroep te maken | Suboptimal | Aanroepen naar een extern systeem kunnen worden uitgevoerd vanuit een batchtaak. Deze oplossing maakt batchgewijze uitvoering van externe processen en verwerking van de respons vanuit het externe systeem in Salesforce mogelijk. Er zijn echter limieten aan het aantal aanroepen voor een bepaalde batchcontext. Zie de Salesforce Developer Limits and Allocations Quick Reference voor meer informatie.
|
Sketch
Het volgende diagram illustreert een aanroep van Salesforce naar een extern systeem waarin het maken of bijwerken van bewerkingen voor een record het gesprek activeert.
In dit scenario:
- Een extern systeem abonneert zich op de platformevent.
- Een update of invoeging vindt plaats voor een bepaalde set records in Salesforce.
- Een Salesforce-stroom wordt geactiveerd wanneer aan een set voorwaarden wordt voldaan.
- Deze stroom maakt een platformevent.
- De externe luisteraar ontvangt het eventbericht en plaatst het bericht in een lokale wachtrij.
- De toepassing in de wachtrij stuurt het bericht door naar de externe toepassing voor verwerking.
In het geval dat het externe systeem bewerkingen tegen Salesforce moet uitvoeren, kunt u een optionele callbackbewerking implementeren.
Resultaten
De toepassing van de oplossingen die gerelateerd zijn aan dit patroon maakt het volgende mogelijk:
- Door gebruikersinterface geïnitieerde externe procesaanroepen waarin het resultaat van de transactie kan worden weergegeven aan de eindgebruiker
- Door DML-events geïnitieerde externe procesaanroepen waarin het resultaat van de transactie kan worden verwerkt door het aanroepproces
Aanroepmechanismen
Het aanroepmechanisme is afhankelijk van de oplossing die is gekozen om dit patroon te implementeren.
| Aanroepmechanisme | Beschrijving |
|---|---|
| Stroom | Gebruikt door zowel de procesgestuurde als de aanpassingsgestuurde oplossingen. Events activeren het Salesforce-proces, dat vervolgens een platformevent kan publiceren voor abonnement door een extern systeem. |
| Pub / Sub API | De Pub/Sub-API biedt één interface voor het publiceren van en abonneren op platformevents, inclusief events voor realtime eventbewaking en events voor gegevensvastlegging. Op basis van gRPC en HTTP/2 publiceert en levert de Pub/Sub-API efficiënt binaire eventberichten in de Apache Avro-indeling. |
| Gegevensvastlegging wijzigen | Salesforce Change Gegevensvastlegging publiceert wijzigingsevents, die wijzigingen in Salesforce-records vertegenwoordigen. Wijzigingen omvatten het maken van een nieuwe record, updates van een bestaande record, verwijdering van een record en het ongedaan maken van de verwijdering van een record. |
| Lightning component en Apex controllers | Gebruikt om een extern proces asynchroon aan te roepen met behulp van een Apex aanroep. |
| Stroomgestuurd uitgaand berichtenverkeer | Wordt alleen gebruikt voor de oplossing voor uitgaand berichtenverkeer. DML-events maken en bijwerken activeren de Salesforce-werkstroomregels, die vervolgens een bericht kunnen verzenden naar een extern systeem. |
| Apex triggers | Gebruikt voor triggergestuurde platformevents en aanroepen van externe processen, met behulp van Apex aanroepen vanuit door DML geïnitieerde events. |
| Apex batchklassen | Gebruikt voor het aanroepen van externe processen in batchmodus. |
Foutafhandeling en herstel
Een strategie voor foutafhandeling en herstel moet worden beschouwd als onderdeel van de algemene oplossing. De beste methode is afhankelijk van de oplossing die u kiest.
| Oplossing | Strategie voor foutafhandeling en herstel |
|---|---|
| Stroom |
|
| Apex aanroepen |
|
| Gegevensvastlegging wijzigen (CDC) / Platform-events |
|
Overwegingen bij impotent ontwerp
Platformevents worden slechts eenmaal naar de bus gepubliceerd. Er wordt niet opnieuw geprobeerd aan de Salesforce-zijde. Het is aan de ESB om te verzoeken dat de events opnieuw worden afgespeeld. In een herhaling blijft de herhalings-ID van het platformevent hetzelfde en kan de ESB dubbele berichten proberen op basis van de herhalings-ID.
Idempotentie is belangrijk voor uitgaand berichtenverkeer omdat het asynchroon is en nieuwe pogingen worden geïnitieerd wanneer er geen positieve bevestiging wordt ontvangen. Daarom moet de externe service berichten van Salesforce op een idempotente manier kunnen afhandelen.
Uitgaand berichtenverkeer verzendt een unieke ID per bericht en deze ID blijft hetzelfde voor alle pogingen. Het externe systeem kan dubbele berichten bijhouden op basis van deze unieke ID. De unieke record-ID voor elke record die wordt bijgewerkt, wordt ook verzonden en kan worden gebruikt om het maken van dubbele records te voorkomen.
De idempotente ontwerpoverwegingen in het patroon Aanroeping van extern proces: verzoek en antwoord zijn ook van toepassing op dit patroon.
Beveiligingsoverwegingen
Elke aanroep naar een extern systeem moet de vertrouwelijkheid, integriteit en beschikbaarheid van het verzoek waarborgen. Afhankelijk van de oplossing die u kiest, gelden verschillende beveiligingsoverwegingen.
| Oplossing | Beveiligingsoverwegingen |
|---|---|
| Apex aanroepen | Een aanroep naar een extern systeem moet de vertrouwelijkheid, integriteit en beschikbaarheid van het verzoek waarborgen. Hieronder volgen beveiligingsoverwegingen die specifiek zijn voor het gebruik van Apex SOAP- en HTTP-aanroepen in dit patroon.
|
| Gegevensvastlegging wijzigen (CDC) / Platform-events | Voor platformevents moet het abonnerende externe systeem kunnen verifiëren bij de Salesforce Streaming API. Platform-events voldoen aan het bestaande beveiligingsmodel dat is geconfigureerd in de Salesforce-organisatie. Om zich te abonneren op een event heeft de gebruiker leestoegang nodig tot de evententiteit. Voor het publiceren van een event heeft de gebruiker de machtiging "Maken" voor de evententiteit nodig. |
Sidebars
Geen.
Timeliness
Tijdigheid is minder een factor bij het vuur-en-vergeet patroon. De controle wordt onmiddellijk aan de klant overgedragen of na een positieve bevestiging van een geslaagde overdracht aan het externe systeem. Bij uitgaand berichtenverkeer van Salesforce moet de bevestiging binnen 24 uur plaatsvinden (dit kan worden verlengd tot zeven dagen); anders vervalt het bericht. Voor platformevents stuurt Salesforce de events naar de eventbus en wacht niet op een bevestiging of bevestiging van de abonnee. Als de abonnee het bericht niet ontvangt, kan de abonnee verzoeken om de event opnieuw af te spelen met behulp van de ID van het eventantwoord. Eventberichten met groot volume worden 72 uur (drie dagen) bewaard. Als u eventberichten uit het verleden wilt ophalen, gebruikt u CometD-clients om u te abonneren op een kanaal.
Gegevensvolumes
Overwegingen bij gegevensvolumes zijn afhankelijk van welke oplossing u kiest. Zie voor de limieten van elke oplossing de Salesforce Limits Quick Reference.
Ondersteuning van eindpuntmogelijkheden en standaarden
De mogelijkheden en standaardondersteuning voor het eindpunt zijn afhankelijk van de oplossing die u kiest.
| Oplossing | Overwegingen bij eindpunten |
|---|---|
| Apex SOAP-aanroepen | Het eindpunt moet een webserviceaanroep kunnen verwerken via HTTP. Salesforce moet toegang hebben tot het eindpunt via het openbare internet. Deze oplossing vereist dat het externe systeem compatibel is met de standaarden die door Salesforce worden ondersteund. Op het moment van schrijven zijn de webservicestandaarden die Salesforce ondersteunt voor Apex SOAP-aanroepen:
|
| Apex HTTP-aanroepen | Het eindpunt moet HTTP-aanroepen kunnen ontvangen en via het openbare internet toegankelijk zijn voor Salesforce. Apex HTTP-aanroepen kunnen worden gebruikt om RESTful services aan te roepen met behulp van de standaardmethoden GET, POST, PUT en DELETE. |
| Gegevensvastlegging wijzigen (CDC) / Platform-events |
|
Staatsbeheer
Bij het integreren van systemen zijn unieke record-ID's belangrijk voor het continu bijhouden van de status. Als er bijvoorbeeld een record wordt gemaakt op het externe systeem, hebt u twee opties.
- Salesforce slaat de primaire of unieke vervangende sleutel van het externe systeem voor de externe record op.
- Het externe systeem slaat de unieke Salesforce-record-ID of een andere unieke vervangende sleutel op.
De volgende tabel vermeldt overwegingen voor statusbeheer in dit patroon.
| Master | Systeem Beschrijving |
|---|---|
| Salesforce | Het externe systeem moet de Salesforce RecordId of een andere unieke vervangende sleutel in de Salesforce-record opslaan. |
| Extern systeem | Salesforce moet een verwijzing naar de unieke identifier opslaan in het externe systeem. Omdat het proces asynchroon is, kan het opslaan van deze unieke identifier geen deel uitmaken van de oorspronkelijke transactie. Salesforce moet een unieke ID opgeven in de aanroep naar het externe proces. Het externe systeem moet vervolgens Salesforce aanroepen om de record in Salesforce bij te werken met de unieke identifier van het externe systeem, met behulp van de unieke Salesforce-ID. De callback impliceert specifieke statusafhandeling in de externe toepassing voor de opslag van de unieke Salesforce-identifier voor die transactie die moet worden gebruikt voor de callback wanneer de verwerking is voltooid, of de unieke Salesforce-identifier wordt opgeslagen in de record van het externe systeem. |
Complexe integratiescenario's
Elke oplossing in dit patroon heeft verschillende overwegingen voor complexe integratiescenario's zoals transformatie en procescombinatie.
| Oplossing | Overwegingen |
|---|---|
| Apex aanroepen | In bepaalde gevallen vereisen oplossingen die door dit patroon worden voorgeschreven, de implementatie van diverse complexe integratiescenario's die het best kunnen worden gebruikt met middleware of Salesforce een samengestelde service laten aanroepen. Deze scenario's omvatten:
|
| Gegevensvastlegging wijzigen (CDC) / Platform-events | Gezien het statische, declaratieve karakter van events kunnen er geen complexe integratiescenario's, zoals aggregatie, doeltreffende combinatie of transformatie, worden uitgevoerd in Salesforce. Het externe systeem of de middleware moet deze typen bewerkingen afhandelen. |
| OmniStudio-integratieprocedures | Integratieprocedures (OmniStudio) bieden doeltreffende combinaties aan de serverzijde om meerdere back-endservices te coördineren tijdens het uitvoeren van complexe, declaratieve gegevenstransformaties. Ketenstappen van integratieprocedures zoals HTTP-acties, DataRaptor-extractie/transformatie/laden, Waarden instellen, Lus/als en Matrix-zoekopdrachten voor het normaliseren, verrijken, aggregeren en toewijzen van payloads tussen UI-contracten en ongelijksoortige API's. Ze ondersteunen robuuste run-time besturingselementen zoals voorwaardelijke vertakking, paginering, time-outs, opnieuw proberen, afhandeling van gedeeltelijke mislukkingen en continue-on-error, evenals prestatieoptimalisaties zoals caching aan serverzijde en het vormgeven van respons. IP's kunnen synchroon worden aangeroepen vanuit OmniScripts, of headless via REST, waardoor herbruikbare, versiegebonden "integratiefaçades" mogelijk worden die back-endcomplexiteit verbergen voor kanalen. |
Gouverneurlimieten
Vanwege het multitenant karakter van het Salesforce-platform zijn er limieten aan uitgaande aanroepen. Limieten zijn afhankelijk van het type uitgaand gesprek en de timing van het gesprek.
Zie de Platforms Events Developer Guide voor limieten en toewijzingen die van toepassing zijn op platformevents.
Betrouwbaar berichtenverkeer
Betrouwbaar berichtenverkeer probeert het probleem op te lossen van het garanderen van de levering van een bericht aan een extern systeem waarin de afzonderlijke componenten onbetrouwbaar zijn. De methode om de ontvangst van een bericht door het externe systeem te waarborgen, is afhankelijk van de oplossing die u kiest.
In het geval van Salesforce Change Gegevensvastlegging worden typen wijzigingsevents geleverd om speciale situaties af te handelen, zoals het vastleggen van wijzigingen die niet zijn vastgelegd in de Salesforce-toepassingsservers, of het afhandelen van grote hoeveelheden wijzigingen.
In sommige gevallen verzendt Salesforce Gap-events in plaats van wijzigingsevents om abonnees te informeren over fouten of als het niet mogelijk is om wijzigingsevents te genereren. Een gap-event bevat informatie over de wijziging in de koptekst, zoals het wijzigingstype en de record-ID. Het bevat geen details over de wijziging, zoals recordvelden. Om wijzigingen efficiënter vast te leggen, worden overloopevents gegenereerd voor afzonderlijke transacties die een drempelwaarde overschrijden. Voor meer informatie zie hier.
| Oplossing | Betrouwbare overwegingen bij berichtenverkeer |
|---|---|
| Apex aanroepen | Salesforce biedt geen expliciete ondersteuning voor betrouwbare berichtenverkeersprotocollen (bijvoorbeeld WS-ReliableMessaging). Het wordt aanbevolen dat het externe eindpunt dat het Salesforce-bericht ontvangt, een betrouwbaar berichtenverkeerssysteem implementeert, zoals JMS of MQ. Dit systeem garandeert volledige end-to-end gegarandeerde levering aan het externe systeem dat het bericht uiteindelijk verwerkt. Dit systeem garandeert echter geen gegarandeerde levering van Salesforce naar het externe eindpunt dat wordt aangeroepen. Gegarandeerde levering moet worden afgehandeld via aanpassingen aan Salesforce. Er moeten specifieke technieken worden geïmplementeerd, zoals het verwerken van een positieve bevestiging van het externe eindpunt naast aangepaste logica voor opnieuw proberen. |
| Gegevensvastlegging wijzigen (CDC) / Platform-events | Platform-events probeert betrouwbaar berichtenverkeer te bieden door tijdelijk aanhoudende eventberichten in de eventbus. Abonnees kunnen gemiste eventberichten inhalen door berichten uit de eventbus opnieuw af te spelen met behulp van de ID voor opnieuw afspelen van eventberichten. De eventbus is een gedistribueerd systeem en heeft niet dezelfde garanties als een transactionele database. Daarom kan Salesforce geen synchrone respons bieden voor een verzoek om publicatie van een event. Events worden in de wachtrij geplaatst en gebufferd, terwijl Salesforce probeert de events asynchroon te publiceren. In zeldzame gevallen blijft het eventbericht mogelijk niet behouden in het gedistribueerde systeem tijdens de initiële of daaropvolgende pogingen. Dit betekent dat de events niet worden geleverd aan abonnees en dat ze niet kunnen worden hersteld. |
Middlewaremogelijkheden
De volgende tabel markeert de gewenste eigenschappen van een middlewaresysteem dat aan dit patroon deelneemt.
| Eigenschap | Verplicht | Wenselijk | Niet verplicht |
|---|---|---|---|
| Afhandeling van events | X | ||
| Protocolconversie | X | ||
| Vertaling en transformatie | X | ||
| In wachtrij plaatsen en bufferen | X | ||
| Synchrone transportprotocollen | X | ||
| Asynchrone transportprotocollen | X | ||
| Routering voor bemiddeling | X | ||
| Proceschoreografie en dienstorkestratie | X | ||
| Transactionaliteit (encryptie, ondertekening, betrouwbare levering, transactiebeheer) | X | ||
| Routering | X | ||
| Extraheren, transformeren en laden | X | ||
| lange polling | X (vereist voor platformevents) |
Oplossingsvariant—Platformevents: Publicatiewerking en transacties
Wanneer Platform-eventberichten onmiddellijk worden gepubliceerd, houdt het publiceren van events zich niet aan transactiegrenzen van het publicatieproces. Eventberichten kunnen worden gepubliceerd voordat de transactie is voltooid of zelfs als een transactie mislukt. Deze werking kan leiden tot problemen wanneer een abonnee verwacht gegevens te vinden die de publicerende transactie doorvoert. De gegevens zijn mogelijk niet aanwezig wanneer de abonnee het eventbericht ontvangt. Als u dit probleem wilt oplossen, stelt u de publicatiewerking van het platformevent in op Publiceren na verbintenis in de eventdefinitie. De publicatiewerkingen die u kunt instellen in een platformeventdefinitie zijn:
- Publiceren na verbintenis om het eventbericht pas te laten publiceren nadat een transactie met succes is gecommit. Selecteer deze optie als abonnees vertrouwen op gegevens die de publicerende transactie vastlegt. Een proces publiceert bijvoorbeeld een eventbericht en maakt een taakrecord. Een tweede proces dat is geabonneerd op de event, wordt geactiveerd en verwacht de taakrecord te vinden. Een andere reden om voor deze werking te kiezen is wanneer u niet wilt dat het eventbericht wordt gepubliceerd als de transactie mislukt.
- Onmiddellijk publiceren om het eventbericht te laten publiceren wanneer de aanroep voor publiceren wordt uitgevoerd. Selecteer deze optie als u wilt dat het eventbericht wordt gepubliceerd, ongeacht of de transactie slaagt. Kies deze optie ook als de uitgever en abonnees onafhankelijk zijn en abonnees niet afhankelijk zijn van gegevens die door de uitgever zijn vastgelegd. Zo is de werking voor onmiddellijk publiceren geschikt voor een event dat wordt gebruikt voor het vastleggen van doeleinden. Met deze optie kan een abonnee het eventbericht ontvangen voordat gegevens worden vastgelegd door de uitgeverstransactie.
Voorbeeld
Een telecommunicatiebedrijf wil Salesforce gebruiken als front-end voor het maken van accounts met behulp van het lead-naar-opportunityproces. Er wordt een order gemaakt in Salesforce wanneer de opportunity is gesloten en gewonnen, maar het back-end ERP-systeem is de gegevensbeheerder. De order moet worden opgeslagen in de Salesforce-opportunityrecord en de opportunitystatus moet worden gewijzigd om aan te geven dat de order is gemaakt.
De volgende beperkingen zijn van toepassing.
- Alleen declaratieve ontwikkeling kan worden geïmplementeerd.
- U hoeft het ordernummer niet onmiddellijk te melden nadat de opportunity naar een order is geconverteerd.
- De organisatie heeft een ESB die het CometD-protocol ondersteunt en zich kan abonneren op platformevents.
Dit voorbeeld kan het best worden geïmplementeerd met behulp van Salesforce Platform-events, maar vereist wel dat de ESB zich abonneert op de Platform-event.
Aan de Salesforce-zijde:
- Maak een stroom om de platformevent te initiëren (bijvoorbeeld wanneer de opportunitystatus verandert in Close-Won).
- Maak een nieuw platformevent dat de opportunitydetails publiceert.
Aan de externe systeemzijde:
- De ESB abonneert zich op het Salesforce Platform-event met behulp van het CometD-protocol.
- De ESB ontvangt een of meer kennisgevingen die aangeven dat de opportunity moet worden geconverteerd naar een order.
- De ESB stuurt het bericht door naar het back-end ERP-systeem zodat de order kan worden gemaakt.
- Nadat de order is gemaakt in het ERP-systeem, roept een afzonderlijke thread Salesforce aan met behulp van de SessionId als authenticatietoken. De callback werkt de opportunity bij met het ordernummer en de status. U kunt deze callback uitvoeren met behulp van gedocumenteerde patroonoplossingen, zoals Salesforce Platform-events, Salesforce SOAP API, REST API of een Apex webservice.
Dit voorbeeld toont het volgende aan.
- Implementatie van een extern proces dat asynchroon wordt aangeroepen
- End-to-end gegarandeerde levering
- Daaropvolgende callback naar Salesforce om de status van de record bij te werken
Context
U verplaatst uw CRM-implementatie naar Salesforce en wilt:
- Extraheer en transformeer accounts, contactpersonen en opportunities uit het huidige CRM-systeem en laad de gegevens in Salesforce (initiële gegevensimport).
- Extraheer, transformeer en laad factureringsgegevens van klanten wekelijks in Salesforce vanuit een extern systeem (doorlopend).
- Extraheer informatie over klantactiviteit uit Salesforce en importeer deze wekelijks in een on-premises gegevensmagazijn (doorlopend).
Probleem
Hoe importeert u gegevens in Salesforce en exporteert u gegevens uit Salesforce, rekening houdend met het feit dat deze import en export de activiteiten van eindgebruikers tijdens kantooruren kunnen verstoren en grote hoeveelheden gegevens kunnen omvatten?
Krachten
Er zijn verschillende krachten om rekening mee te houden bij het toepassen van oplossingen op basis van dit patroon:
- Moeten de gegevens worden opgeslagen in Salesforce? Zo niet, dan zijn er andere integratiemogelijkheden die een architect kan en moet overwegen (mashups bijvoorbeeld).
- Als de gegevens moeten worden opgeslagen in Salesforce, moeten de gegevens dan worden vernieuwd als reactie op een event in het externe systeem?
- Moeten de gegevens op geplande basis worden vernieuwd?
- Ondersteunt de data primaire bedrijfsprocessen?
- Zijn er vereisten voor analyses (rapportage) die worden beïnvloed door de beschikbaarheid van deze gegevens in Salesforce?
Oplossing
De volgende tabel bevat diverse oplossingen voor dit integratieprobleem.
| Oplossing | Passen | Hoofdgegevens | Opmerkingen |
|---|---|---|---|
| Replicatie via externe ETL-tool | Beste | Extern systeem | Waar een extern systeem een grote hoeveelheid gegevens naar Salesforce moet verzenden, kunt u gebruikmaken van een externe ETL-tool waarmee u gegevensvastlegging voor wijzigingen kunt uitvoeren op brongegevens. De tool reageert op wijzigingen in de brongegevensset, transformeert de gegevens en roept vervolgens de Salesforce Bulk-API aan om DML-instructies uit te geven. Dit kan ook worden geïmplementeerd met behulp van de Salesforce REST-API's als het aantal records kleiner is. |
| Replicatie via externe ETL-tool | Goed | Salesforce | Maak gebruik van een externe ETL-tool waarmee u gegevensvastlegging voor wijzigingen kunt uitvoeren op ERP- en Salesforce-gegevenssets. In deze oplossing is Salesforce de gegevensbron en kunt u tijd-/statusgegevens op afzonderlijke rijen gebruiken om een query uit te voeren op de gegevens en de doelresultatenset te filteren. Dit kan worden geïmplementeerd door middel van bulk-API 2.0 of standaard-REST-API's (als het aantal records kleiner is). |
| Wizard Gegevens importeren en Data Loader | Passen | Salesforce / extern systeem | Wizard Gegevens importeren en Data Loader kunnen worden gebruikt voor het importeren, exporteren en migreren van gegevens. Hoewel Data Loader-opdrachten ook kunnen worden uitgevoerd met scripts om de import en export van gegevens te automatiseren, is de opdrachtregelinterface alleen voor Windows. Geen van deze tools is een aanbevolen basis voor een gegevensintegratiestrategie. Ze moeten in plaats daarvan uw strategie voor gegevensbeheer en onderhoud aanvullen. Voor meer informatie over Data Loader, zie hier. |
| Externe oproep | Suboptimal | Extern systeem | Het is mogelijk voor een extern systeem om Salesforce aan te roepen met behulp van een van de API's en updates van gegevens uit te voeren wanneer deze zich voordoen. Dit veroorzaakt echter een aanzienlijk doorgaand verkeer tussen de twee systemen. Er moet meer nadruk worden gelegd op foutafhandeling en vergrendeling. Dit patroon kan leiden tot continue updates, wat van invloed kan zijn op de prestaties voor eindgebruikers. |
| Aanroepen van externe processen | Suboptimal | Salesforce | Salesforce kan een extern systeem aanroepen en updates van gegevens uitvoeren wanneer deze zich voordoen. Dit veroorzaakt echter een aanzienlijk doorgaand verkeer tussen de twee systemen. Er moet meer nadruk worden gelegd op foutafhandeling en vergrendeling. Dit patroon kan leiden tot continue updates, wat van invloed kan zijn op de prestaties voor eindgebruikers. |
Sketch
Het volgende diagram illustreert de volgorde van events in dit patroon, waarbij Salesforce het gegevenshoofdobject is.
Het volgende diagram illustreert de daaropvolgende synchronisatie van events in vrijwel realtime, waarbij Salesforce de gegevensbeheerder is.
Resultaten
In de volgende scenario's kunt u gegevens die extern afkomstig zijn, integreren met Salesforce:
- Extern systeem is de gegevensbeheerder: Salesforce verbruikt gegevens die worden aangeleverd door één bronsysteem of meerdere systemen. In dit scenario is het gebruikelijk om een datawarehouse of datamart te hebben die de gegevens aggregeert voordat de gegevens in Salesforce worden geïmporteerd.
- Salesforce is de gegevensbeheerder—Salesforce is het registratiesysteem voor bepaalde entiteiten en clienttoepassingen van Salesforce Change Gegevensvastlegging kunnen worden geïnformeerd over wijzigingen in Salesforce-gegevens.
In een typisch Salesforce-integratiescenario voert het implementatieteam een van de volgende handelingen uit:
- Implementeer gegevensvastlegging voor de brongegevensset.
- Implementeer een set ondersteunende databasestructuren, ook wel controletabellen genoemd, in een tussentijdse, on-premises database.
De ETL-tool wordt vervolgens gebruikt om programma's te maken die:
- Lees een controletabel om de laatste uitvoeringstijd van de taak te bepalen en eventuele andere benodigde controlewaarden te extraheren.
- Gebruik de bovenstaande controlewaarden als filters en voer een query uit op de brongegevensset.
- Pas vooraf gedefinieerde verwerkingsregels toe, inclusief validatie, verrijking, enzovoort.
- Gebruik beschikbare connectoren/transformatiemogelijkheden van de ETL-tool om de bestemmingsgegevensset te maken.
- Schrijf de gegevensset naar Salesforce-objecten.
- Als de verwerking is geslaagd, werkt u de controlewaarden in de controletabel bij.
- Als de verwerking mislukt, werkt u de controletabellen bij met waarden die een herstart en beëindiging mogelijk maken.
Opmerking: U wordt aangeraden om de besturingstabellen en gekoppelde gegevensstructuren te maken in een omgeving waartoe de ETL-tool toegang heeft, zelfs als er geen toegang tot Salesforce beschikbaar is. Dit biedt voldoende veerkracht. Salesforce moet in dit proces als spreekbuis worden beschouwd en de ETL-infrastructuur is de hub.
Als u een ETL-tool maximaal wilt laten profiteren van gegevenssynchronisatiemogelijkheden, moet u rekening houden met het volgende:
- Koppel en sequence de ETL-taken om een samenhangend proces te bieden.
- Gebruik primaire sleutels van beide systemen om inkomende gegevens te vergelijken.
- Gebruik specifieke API-methoden om alleen bijgewerkte gegevens te extraheren.
- Als u onderliggende records importeert in een hoofd-/detail- of opzoekrelatie, groepeert u de geïmporteerde gegevens met behulp van de bovenliggende sleutel ervan bij de bron om vergrendeling te voorkomen. Als u bijvoorbeeld contactpersoonsgegevens importeert, moet u de contactpersoonsgegevens groeperen op de bovenliggende accountsleutel, zodat het maximale aantal contactpersonen voor één account in één API-aanroep kan worden geladen. Als u de geïmporteerde gegevens niet groepeert, wordt doorgaans de eerste contactpersoonsrecord geladen en mislukken daaropvolgende contactpersoonsrecords voor die account in de context van de API-aanroep.
- Elke verwerking na de import, zoals triggers, mag gegevens alleen selectief verwerken.
- Als uw scenario grote gegevensvolumes omvat, volgt u de best practices uit deze Trailhead module Best Practices for Implementations with Large Data Volumes (Best practices voor implementaties met grote gegevensvolumes) .
Foutafhandeling en herstel
Een strategie voor foutafhandeling en herstel moet worden beschouwd als onderdeel van de algemene oplossing. De beste methode is afhankelijk van de oplossing die u kiest.
| Foutlocatie | Strategie voor foutafhandeling en herstel |
|---|---|
| Lezen vanuit Salesforce met behulp van Gegevensvastlegging wijzigen |
|
| Lezen vanuit Salesforce met behulp van een extern ETL-systeem |
|
| Schrijven naar Salesforce |
|
| Extern hoofdsysteem | Fouten moeten worden afgehandeld volgens de best practices van het hoofdsysteem. |
Beveiligingsoverwegingen
Elke aanroep naar een extern systeem moet de vertrouwelijkheid, integriteit en beschikbaarheid van het verzoek waarborgen. Afhankelijk van de oplossing die u kiest, gelden verschillende beveiligingsoverwegingen.
- Een Lightning Platform-licentie met minstens "API Only"-gebruikersmachtigingen is vereist om geauthenticeerde API-toegang tot de Salesforce-API toe te staan.
- Het wordt aanbevolen standaardencryptie te gebruiken om wachtwoordtoegang veilig te houden.
- Gebruik het HTTPS-protocol bij het aanroepen van de Salesforce-API's. U kunt ook proxyverkeer naar de Salesforce-API's sturen via een on-premises beveiligingsoplossing, indien nodig.
Sidebars
Geen.
Timeliness
Tijdigheid is in dit patroon niet van betekenis. Er moet echter voor worden gezorgd dat de interfaces zo zijn ontworpen dat alle batchprocessen worden voltooid in een bepaald batchvenster.
Zoals bij alle batchgeoriënteerde bewerkingen wordt sterk aangeraden om de bron- en doelsystemen te isoleren tijdens batchverwerkingsvensters. Het laden van batches tijdens kantooruren kan leiden tot een meningsverschil, wat kan resulteren in het mislukken van de update van een gebruiker of, belangrijker nog, het mislukken van het laden van een batch (of het gedeeltelijk laden van een batch).
Voor organisaties die globale activiteiten hebben, is het mogelijk niet mogelijk om alle batchprocessen tegelijkertijd uit te voeren, omdat het systeem mogelijk continu in gebruik is. Gegevenssegmenteringstechnieken met behulp van recordtypen en andere filtercriteria kunnen in deze gevallen worden gebruikt om gegevenscontroverse te voorkomen.
Staatsbeheer
U kunt statusbeheer implementeren door middel van vervangende sleutels tussen de twee systemen. Als u elk type transactiebeheer binnen Salesforce-entiteiten nodig hebt, raden we u aan om het patroon Externe oproep te gebruiken met behulp van Apex.
Standaard optimistische recordvergrendeling vindt plaats op het platform en updates die worden aangebracht met behulp van de API, vereisen dat de gebruiker, die de record bewerkt, de record vernieuwt en de transactie start. In de context van de Salesforce-API verwijst optimistisch vergrendelen naar een proces waarbij:
- Salesforce houdt niet de status bij van een record die door een specifieke gebruiker wordt bewerkt.
- Bij het lezen wordt het tijdstip vastgelegd waarop de gegevens zijn geëxtraheerd.
- Als de gebruiker de record bijwerkt en opslaat, controleert Salesforce of een andere gebruiker de record tussentijds heeft bijgewerkt.
- Als de record is bijgewerkt, informeert het systeem de gebruiker dat er een update is uitgevoerd en moet de gebruiker de nieuwste versie van de record ophalen voordat hij of zij doorgaat met de updates.
Middlewaremogelijkheden
De meest effectieve externe technologieën die worden gebruikt om dit patroon te implementeren, zijn traditionele ETL-tools. Het is belangrijk dat de gekozen middlewaretools de Salesforce Bulk-API ondersteunen.
Het is nuttig, maar niet essentieel, dat de middlewaretools de functie getUpdated() ondersteunen. Deze functie komt het dichtst in de buurt van de standaard mogelijkheid voor gegevensvastlegging voor wijzigingen op het Salesforce-platform.
De volgende tabel markeert de gewenste eigenschappen van een middlewaresysteem dat aan dit patroon deelneemt.
| Eigenschap | Verplicht | Wenselijk | Niet verplicht |
|---|---|---|---|
| Afhandeling van events | X | ||
| Protocolconversie | X | ||
| Vertaling en transformatie | X | ||
| In wachtrij plaatsen en bufferen | X | ||
| Synchrone transportprotocollen | X | ||
| Asynchrone transportprotocollen | X | ||
| Routering voor bemiddeling | X | ||
| Proceschoreografie en dienstorkestratie | X | ||
| Transactionaliteit (encryptie, ondertekening, betrouwbare levering, transactiebeheer) | X | ||
| Routering | X | ||
| Extraheren, transformeren en laden | X | ||
| Lange polling | X (vereist voor Salesforce Change gegevensvastlegging) |
Voorbeeld
Een nutsbedrijf gebruikt een op een mainframe gebaseerd batchproces dat prospects toewijst aan afzonderlijke verkoopvertegenwoordigers en teams. Deze informatie moet elke nacht in Salesforce worden geïmporteerd.
De klant heeft besloten gegevensvastlegging voor de brontabellen te implementeren met behulp van een commercieel beschikbare ETL-tool. De oplossing werkt als volgt:
- Een cronachtige planner voert een batchtaak uit die prospects toewijst aan gebruikers en teams.
- Nadat de batchtaak is uitgevoerd en de gegevens zijn bijgewerkt, herkent de ETL-tool deze wijzigingen met behulp van gegevensvastlegging. De ETL-tool verzamelt de wijzigingen uit de gegevensopslag.
- De ETL-connector gebruikt de Salesforce REST-API om de wijzigingen in Salesforce te laden.
Context
U gebruikt Salesforce om leads bij te houden, uw pijplijn te beheren, opportunities te maken en orderdetails vast te leggen die leads converteren naar klanten. Het Salesforce-systeem maakt de orders intern en pusht die gegevens vervolgens naar het externe factureringssysteem voor levering en activering. Factuurorders worden beheerd door een extern (extern) systeem. Dat externe systeem moet de orderstatus in Salesforce bijwerken wanneer de order of factureringsentiteit in de status van het factureringssysteem verandert.
Probleem
Hoe kan een extern systeem verbinding maken met en authenticeren met Salesforce om Salesforce te informeren over externe events, records te maken en bestaande records bij te werken?
Krachten
Er zijn verschillende krachten om rekening mee te houden bij het toepassen van oplossingen op basis van dit patroon:
- Is het doel van het externe gesprek met Salesforce om Salesforce te informeren over een event dat extern heeft plaatsgevonden met behulp van een eventgestuurde architectuur? Of is het doel het uitvoeren van CRUD-bewerkingen op specifieke records? Als u een eventgestuurde architectuur gebruikt, wordt de eventproducer (het externe proces) losgekoppeld van de Salesforce-eventconsument.
- Vereist de aanroep naar Salesforce dat het externe proces wacht op een reactie voordat de verwerking wordt voortgezet? Externe aanroepen naar Salesforce zijn altijd synchroon verzoek-antwoord, hoewel het externe proces de respons kan negeren als het niet nodig is om een asynchroon gesprek te simuleren.
- Werkt elke transactie met één Salesforce-object of meerdere gerelateerde objecten?
- Wat is de indeling van het bericht (bijvoorbeeld SOAP of REST, of beide via HTTP)?
- Is de berichtgrootte relatief klein of groot?
- Als het externe systeem SOAP-geschikt is, kan het externe systeem dan deelnemen aan een contract-first benadering, waarbij Salesforce het contract dicteert? Dit is verplicht wanneer onze SOAP API wordt gebruikt, waarvoor een vooraf gedefinieerde WSDL wordt geleverd.
- Is transactieverwerking vereist?
- Wat is de mate waarin u tolerant bent voor aanpassing in Salesforce?
Oplossing
Deze tabel bevat diverse oplossingen voor dit integratieprobleem.
| Oplossing | Passen | Opmerkingen |
|---|---|---|
| Samengestelde API | Beste | Salesforce biedt een samengestelde API die in feite een REST-API is en samengestelde verzoeken ondersteunt. Dit kan door externe systemen worden gebruikt om:
Synchrone API: nadat de API-aanroep is gedaan, wacht de externe clienttoepassing totdat deze een respons van de service ontvangt. Werking van transactie/verbintenis—Standaard biedt de samengestelde API geen gedeeltelijk succes als sommige records zijn gemarkeerd met fouten. Dit kan worden gewijzigd door de vlag "alles of niets" als false (onwaar) te markeren, wat gedeeltelijk succes mogelijk maakt. Foutafhandeling: Bij een juiste foutafhandeling moet de hoofdtekst van de reactie worden onderzocht, niet alleen HTTP-statuscodes. Een samengesteld eindpunt reageert met 200 HTTP-statuscode, zelfs als binnen de hoofdtekst van de reactie wordt aangegeven dat een van de subverzoeken is mislukt en de transactie moest worden teruggedraaid. |
| REST API | Beste | Toegankelijkheid: Salesforce biedt een REST-API die externe systemen kunnen gebruiken voor:
Synchrone API: nadat de API-aanroep is gedaan, wacht de externe clienttoepassing totdat deze een respons van de service ontvangt. De REST-API respecteert beveiliging op objectniveau en veldniveau die in Salesforce is geconfigureerd op basis van het profiel van de ingelogde gebruiker. REST maakt resources (entiteiten/objecten) zichtbaar als URI's en gebruikt HTTP-werkwoorden om CRUD-bewerkingen voor deze resources te definiëren. In tegenstelling tot SOAP vereist de REST-API geen vooraf gedefinieerd contract, wordt XML en JSON gebruikt voor responsen en wordt er los getypt. De REST-API is licht van gewicht en biedt een eenvoudige methode voor interactie met Salesforce. De voordelen omvatten eenvoudige integratie en ontwikkeling, en het is een uitstekende keuze voor gebruik met mobiele apps en webapps. Werking van transactie/verbintenis: standaard wordt elke record als een afzonderlijke transactie behandeld en afzonderlijk vastgelegd. Het mislukken van één recordwijziging leidt niet tot het terugdraaien van andere recordwijzigingen. Deze werking kan worden gewijzigd in een "alles of niets"-werking. Gebruik de samengestelde resources van de REST-API om een reeks updates in één API-aanroep uit te voeren. Bulkgegevens—Elke gegevensbewerking die meer dan 2000 records bevat, is een goede kandidaat voor Bulk-API 2.0 voor het met succes voorbereiden, uitvoeren en beheren van een asynchrone werkstroom die het Bulk-framework gebruikt. |
| Bulk-API 2.0 | Beste voor bulkbewerkingen | Bulk-API 2.0 is de moderne, gestroomlijnde API van Salesforce voor het afhandelen van grootschalige gegevensbewerkingen. De op REST gebaseerde Bulk-API 2.0 biedt een programmatische optie voor het asynchroon invoegen, upsert, bevragen of verwijderen van grote gegevenssets in uw Salesforce-organisatie. Het is ontworpen voor efficiëntie wanneer u grote hoeveelheden gegevens in Salesforce moet laden of bulkquery's op de gegevens van uw organisatie moet uitvoeren. In tegenstelling tot Bulk-API 1.0 verwerkt Bulk-API 2.0 batches altijd parallel en ondersteunt deze geen seriële modus. Dit betekent dat:
Elke batch in Bulk-API 2.0 wordt verwerkt als een eigen transactie. Dit betekent:
Hoewel de SOAP-API ook kan worden gebruikt voor het verwerken van grote aantallen records, wordt deze minder optimaal wanneer gegevenssets honderdduizenden tot miljoenen records bevatten. Dit komt door de relatief hoge overhead en lagere prestatiekenmerken.
|
| Pub/Sub-API | Beste |
De Pub/Sub-API is de aanbevolen manier voor externe uitgevers om events te publiceren in de Event Bus. Pub/Sub-API is een op gRPC gebaseerde API waarmee externe systemen platformevents kunnen publiceren. De Pub/Sub-API:
Zodra een platformevent is gedefinieerd in Salesforce, komt deze beschikbaar voor zowel interne als externe consumenten. |
| Platform-events | Beste |
Platformevents worden gedefinieerd op dezelfde manier als waarop u Salesforce-objecten definieert. Platform-events kunnen worden gepubliceerd met behulp van verschillende mechanismen zoals REST-API's, Bulk-API's en SOAP-API's.
Een event publiceren via de REST-API is hetzelfde als een Salesforce-record maken. Eindpuntindeling: POST /services/data/vXX.X/sobjects/EventName__e/
Met de Bulk-API worden alleen de bewerkingen Maken en Invoegen ondersteund. Events binnen een batch worden asynchroon naar de Salesforce-eventbus gepubliceerd terwijl de batchtaak wordt verwerkt. Aangezien Platform-events SObjecten zijn, worden standaard SOAP API-bewerkingen ondersteund. |
| SOAP-API | Passen |
Toegankelijkheid: Salesforce biedt een SOAP-API die externe systemen kunnen gebruiken voor:
Synchrone API: nadat de API-aanroep is gedaan, wacht de externe clienttoepassing totdat deze een respons van de service ontvangt. Asynchrone aanroepen naar Salesforce worden niet ondersteund. Gegenereerde WSDL: Salesforce biedt twee WSDL's voor externe systemen:
Beveiliging—De client die de SOAP-API uitvoert, moet een geldige login hebben en een sessie verkrijgen om API-aanroepen uit te voeren. De API respecteert beveiliging op objectniveau en veldniveau die in Salesforce is geconfigureerd op basis van het profiel van de ingelogde gebruiker. Werking van transactie/verbintenis—Standaard zorgt elke API-aanroep voor gedeeltelijk succes als sommige records zijn gemarkeerd met fouten. Dit kan worden gewijzigd in een "alles of niets"-werking waarbij alle resultaten worden teruggedraaid als er een fout optreedt. Het is niet mogelijk om een transactie over meerdere API-aanroepen te spreiden. Om deze beperking te omzeilen is het mogelijk dat één API-aanroep van invloed is op meerdere objecten. |
| Apex webservices | Suboptimal |
Apex klassenmethoden kunnen als webservicemethoden worden blootgesteld aan externe toepassingen. Deze methode is een alternatief voor de SOAP-API en wordt doorgaans alleen gebruikt wanneer aan de volgende aanvullende vereisten moet worden voldaan.
Het voordeel van het gebruik van een Apex webservice moet worden afgewogen tegen de extra code die in Salesforce moet worden onderhouden. Niet van toepassing op platformevents omdat logica voor het vooraf invoegen van transacties bij de consument niet van toepassing is in een eventgestuurde architectuur. Als u een Salesforce-organisatie wilt informeren dat een event heeft plaatsgevonden, gebruikt u de SOAP-API, REST-API of Bulk-API 2.0. |
| Apex REST-services | Suboptimal |
Een Apex klasse kan worden weergegeven als REST resources die zijn toegewezen aan specifieke URI's met een gedefinieerd HTTP werkwoord (bijvoorbeeld POST of GET).
U kunt samengestelde resources van de REST-API gebruiken om meerdere updates in één transactie uit te voeren. In tegenstelling tot SOAP hoeft de client geen servicedefinitie/contract (WSDL) te verbruiken en client-stubs te genereren. Het externe systeem vereist alleen de mogelijkheid om een HTTP-verzoek te maken en de geretourneerde resultaten (XML of JSON) te verwerken. Niet van toepassing op platformevents omdat logica voor het vooraf invoegen van transacties bij de consument niet van toepassing is in een eventgestuurde architectuur. Als u een Salesforce-organisatie wilt informeren dat een event heeft plaatsgevonden, gebruikt u de SOAP-API, REST-API of Bulk-API 2.0. |
Sketch
De volgende diagrammen illustreren de volgorde van events wanneer u dit patroon implementeert met behulp van de REST-API voor kennisgevingen van externe events of de SOAP-API voor het uitvoeren van een query op een Salesforce-object. De volgorde van events is dezelfde bij gebruik van de REST-API.
Extern systeem voert query's uit op Salesforce via de SOAP-API
Extern systeem Salesforce informeren met events via REST-API
Resultaten
In een eventgestuurde architectuur roept het externe systeem Salesforce aan met behulp van de SOAP-API, REST-API of Bulk-API 2.0 om een event te publiceren naar de Salesforce-eventbus. Het publiceren van een event informeert alle abonnees. Eventabonnees kunnen zich op het Salesforce Platform bevinden, zoals Stromen, of Lightning Components, Apex triggers. Eventabonnees kunnen ook extern zijn voor het Salesforce Platform, zoals CometD-abonnees.
Wanneer u rechtstreeks met Salesforce-objecten werkt, bieden de oplossingen die aan dit patroon zijn gerelateerd, de volgende mogelijkheden:
- Het externe systeem roept de Salesforce-API's aan om een query uit te voeren op de database en bewerkingen met één object uit te voeren (maken, bijwerken, verwijderen, enzovoort).
- Het externe systeem om de samengestelde Salesforce REST API-resources aan te roepen om een reeks objectbewerkingen uit te voeren.
- Extern systeem voor het aanroepen van op maat gemaakte Salesforce-API's (services) die transactiebewerkingen voor meerdere objecten en aangepaste pre-/postverwerkingslogica kunnen ondersteunen.
Aanroepmechanismen
Het aanroepmechanisme is afhankelijk van de oplossing die is gekozen om dit patroon te implementeren.
| Aanroepmechanisme | Beschrijving |
|---|---|
| SOAP-API | Het externe systeem gebruikt Salesforce Enterprise of Partner WSDL om client-stubs te genereren die op hun beurt worden gebruikt om de standaard SOAP-API aan te roepen. |
| REST API | Het externe systeem moet zich verifiëren voordat het toegang krijgt tot een Apex REST-service. Het externe systeem kan OAuth 2.0 of authenticatie met gebruikersnaam en wachtwoord gebruiken. In beide gevallen moet de client de HTTP-header voor autorisatie instellen met de juiste waarde (een OAuth-toegangstoken of een sessie-ID kan worden verkregen via een inlogaanroep naar de SOAP-API). Het externe systeem genereert vervolgens REST-aanroepen (HTTP-verzoeken) met de juiste werkwoorden en verwerkt de geretourneerde resultaten (JSON- en XML-gegevensindelingen worden ondersteund). |
| Apex webservice | Het externe systeem verbruikt de aangepaste Apex webservice WSDL om client-stubs te genereren die op hun beurt worden gebruikt om de aangepaste Apex webservice aan te roepen. |
| Apex REST-service | Volgens de REST-API worden de resource-URI en van toepassing zijnde werkwoorden gedefinieerd met behulp van de annotaties @RestResource, @HttpGet en @HttpPost. |
| Bulk-API 2.0 | Bulk-API 2.0 is een op REST gebaseerde API, waardoor dezelfde aanroepmechanismen als de REST-API van toepassing zijn. |
| REST-API om stroom aan te roepen | Gebruik de REST-API om een eindpunt van aangepaste aanroepbare acties aan te roepen om een automatisch gestarte stroom aan te roepen. |
Foutafhandeling en herstel
Een strategie voor foutafhandeling en herstel moet worden beschouwd als onderdeel van de algemene oplossing.
- Afhandeling van fouten: alle externe aanroepmethoden, standaard- of aangepaste API's, vereisen dat het externe systeem eventuele daaropvolgende fouten, zoals time-outs en het beheer van nieuwe pogingen, afhandelt. Middleware kan worden gebruikt om de logica voor foutafhandeling en herstel te bieden.
- Herstel — Er moet een aangepast mechanisme voor opnieuw proberen worden gemaakt als dit vereist is vanwege de kwaliteit van de service. In dit geval is het belangrijk om te zorgen voor idempotente ontwerpkenmerken. Platform-event laat abonnees de replay-ID gebruiken om berichten op te halen binnen een bepaald tijdsbestek nadat die berichten zijn gepubliceerd.
Overwegingen bij impotent ontwerp
Idempotente mogelijkheden garanderen dat herhaalde aanroepen veilig zijn en geen negatief effect hebben. Als idempotentie niet is geïmplementeerd, kunnen herhaalde aanroepen van hetzelfde bericht verschillende resultaten hebben, wat mogelijk kan leiden tot problemen met de gegevensintegriteit, bijvoorbeeld het maken van duplicaatrecords, duplicaatverwerking van transacties, enzovoort.
Het externe systeem moet meerdere (duplicaat)aanroepen beheren, in het geval van fouten of time-outs, om dubbele invoegingen en redundante updates te voorkomen (met name als triggers verderop in de stroom en werkstroomregels worden geactiveerd). Hoewel het mogelijk is om bepaalde van deze situaties binnen Salesforce te beheren (met name in het geval van aangepaste SOAP- en REST-services), raden we aan dat het externe systeem (of middleware) foutafhandeling en idempotent ontwerp beheert.
Beveiligingsoverwegingen
Er gelden verschillende beveiligingsoverwegingen, afhankelijk van de gekozen patroonoplossing. In alle gevallen gebruikt het platform de toegangsrechten van de ingelogde gebruiker (bijvoorbeeld profielinstellingen, regels voor delen, machtigingensets, enzovoort). Daarnaast kunnen IP-beperkingen voor profielen worden gebruikt om toegang tot de API voor een specifiek IP-adresbereik te beperken.
| Oplossing | Beveiligingsoverwegingen |
|---|---|
| SOAP-API | alesforce ondersteunt SSL-protocollen (Secure Sockets Layer v3) en TLS-protocollen (Transport Layer Security). Ciphers moeten een sleutellengte van minstens 128 bits hebben. Het externe systeem moet inloggen met geldige inloggegevens om een sessie-ID te verkrijgen. Als het externe systeem al een geldige sessie-ID heeft, kan het de API aanroepen zonder expliciet inloggen. Dit wordt gebruikt in call-backpatronen die eerder in dit document worden behandeld, waarbij een voorafgaand uitgaand Salesforce-bericht een sessie-ID en record-ID bevatte voor later gebruik. Clients die de SOAP-API in het cachegeheugen aanroepen en de sessie-ID hergebruiken, wordt aangeraden om de prestaties te maximaliseren, in plaats van voor elke aanroep een nieuwe sessie-ID te verkrijgen. |
| REST API | We raden aan dat het externe systeem een OAuth Trust voor autorisatie instelt. REST-aanroepen kunnen vervolgens op specifieke resources worden gedaan met behulp van HTTP-werkwoorden. Het is ook mogelijk om REST-aanroepen te doen met een geldige sessie-ID die mogelijk op een andere manier is verkregen (bijvoorbeeld opgehaald door de SOAP-API aan te roepen of geleverd via een uitgaand bericht). Clients die de REST API-cache aanroepen en de sessie-ID hergebruiken, wordt aangeraden om de prestaties te maximaliseren, in plaats van voor elke aanroep een nieuwe sessie-ID te verkrijgen. |
| Apex webservice | We raden aan dat het externe systeem een OAuth Trust voor autorisatie instelt. |
| Apex REST-service | We raden aan dat het externe systeem een OAuth Trust voor autorisatie instelt. |
| Bulk-API 2.0 | We raden aan dat het externe systeem een OAuth Trust voor autorisatie instelt. |
Sidebars
Geen.
Timeliness
SOAP API en Apex webservice API zijn synchroon. De volgende time-outs zijn van toepassing:
- Sessietime-out: de sessie treedt op als er geen activiteit is op basis van de sessietime-outinstelling van de Salesforce-organisatie.
- Querytime-out: elke SOQL-query heeft een individuele time-outlimiet van 120 seconden.
Gegevensvolumes
Overwegingen bij gegevensvolumes zijn afhankelijk van welke oplossing en welk communicatietype u kiest.
| Oplossing | Communicatietype | Limieten |
|---|---|---|
| SOAP-API of REST-API | Synchroon |
|
| Bulk-API 2.0 | Asynchronous | Bulk-API 2.0 is geoptimaliseerd voor het asynchroon importeren en exporteren van grote sets gegevens. Elke gegevensbewerking die meer dan 2000 records omvat, is een goede kandidaat voor Bulk-API 2.0 voor het met succes voorbereiden, uitvoeren en beheren van een asynchrone werkstroom die het Bulk-framework gebruikt. Taken met minder dan 2000 records moeten "in bulk" synchrone aanroepen in REST (bijvoorbeeld Composiet) of SOAP omvatten. Bulk-API 2.0 is synchroon bij het indienen van het batchverzoek en de gekoppelde gegevens. De feitelijke verwerking van de gegevens vindt asynchroon plaats. Zie Limieten voor meer informatie over API- en batchverwerkingslimieten. |
Ondersteuning van eindpuntmogelijkheden en standaarden
De mogelijkheden en standaardondersteuning voor het eindpunt zijn afhankelijk van de oplossing die u kiest.
| Oplossing | Overwegingen bij eindpunten |
|---|---|
| SOAP-API | Het externe systeem moet een client kunnen implementeren die de Salesforce SOAP-API kan aanroepen, op basis van een vooraf door Salesforce gedefinieerde berichtindeling. Het externe systeem (de client) moet deelnemen aan een implementatie waarbij het contract eerst wordt geleverd door Salesforce (bijvoorbeeld Enterprise of Partner WSDL). |
| REST API | Het externe systeem moet een REST-client kunnen implementeren die Salesforce—gedefinieerde REST-services aanroept en de XML- of JSON-resultaten verwerkt. |
| Apex webservice | Het externe systeem moet een client kunnen implementeren die SOAP-berichten kan aanroepen met een vooraf gedefinieerde indeling, zoals gedefinieerd door Salesforce. Het externe systeem moet deelnemen aan een code-first implementatie, waarbij het contract wordt geleverd door Salesforce nadat de Apex webservice is geïmplementeerd. Elke Apex webservice heeft zijn eigen WSDL. |
| Apex REST-service | Dezelfde eindpuntoverwegingen als de REST-API zijn van toepassing. |
Staatsbeheer
Bij het integreren van systemen zijn sleutels belangrijk voor het continu bijhouden van de status, bijvoorbeeld als een record wordt gemaakt in het externe systeem, om doorlopende updates van die record te ondersteunen. Er zijn twee opties:
- Salesforce slaat de primaire of unieke vervangende sleutel van het externe systeem voor de externe record op.
- Het externe systeem slaat de unieke Salesforce-record-ID of een andere unieke vervangende sleutel op. Er zijn specifieke overwegingen bij het afhandelen van integratiesleutels in dit synchrone patroon.
| Master | systeem Beschrijving |
|---|---|
| Salesforce | In dit scenario slaat het externe systeem de Salesforce RecordId of een andere unieke vervangende sleutel uit de record op. |
| Extern systeem | In dit scenario slaat Salesforce een verwijzing naar de unieke identifier op in het externe systeem. Omdat het proces synchroon is, kan de sleutel worden geleverd als onderdeel van dezelfde transactie met behulp van externe ID-velden. |
Complexe integratiescenario's
Elke oplossing in dit patroon heeft verschillende overwegingen bij het afhandelen van complexe integratiescenario's zoals transformatie en procescombinatie.
| Oplossing | Overwegingen |
|---|---|
| SOAP-API of REST-API | SOAP-API en REST-API bieden eenvoudige transacties voor objecten. Complexe integratiescenario's, zoals aggregatie, doeltreffende combinatie en transformatie, kunnen niet worden uitgevoerd in Salesforce. Deze scenario's moeten worden afgehandeld door het externe systeem of middleware, met middleware als de voorkeursmethode. |
| Apex webservice of Apex REST service | Aangepaste webservices kunnen voorzien in functionaliteit voor kruisobjecten, aangepaste logica en complexere transactieondersteuning. Deze oplossing moet met zorg worden gebruikt en u moet altijd rekening houden met de geschiktheid van middleware voor elke transformatie-, doeltreffende en foutafhandelingslogica. |
Gouverneurlimieten
Vanwege het multitenant karakter van het Salesforce-platform zijn er limieten bij het gebruik van de API's.
| Oplossing | Limieten |
|---|---|
| SOAP API, REST API en aangepaste Apex API's |
|
| Bulk-API 2.0 | Zie de zijbalk Gegevensvolumes voor meer informatie. |
| Platform-events |
|
Betrouwbaar berichtenverkeer
Betrouwbaar berichtenverkeer probeert het probleem op te lossen van het garanderen van de levering van een bericht aan een extern systeem, waarbij de afzonderlijke componenten zelf mogelijk onbetrouwbaar zijn. De Salesforce SOAP-API en REST-API zijn synchroon en bieden niet per se expliciete ondersteuning voor betrouwbare berichtenverkeersprotocollen (bijvoorbeeld WS-ReliableMessaging).
We raden aan dat het externe systeem een betrouwbaar berichtenverkeerssysteem implementeert om ervoor te zorgen dat fout- en time-outscenario's met succes worden beheerd. Het publiceren van platformevents vanuit externe systemen is afhankelijk van Salesforce-API's, waardoor dezelfde overwegingen voor de SOAP-API en de REST-API van toepassing zijn.
Middlewaremogelijkheden
Deze tabel markeert de gewenste eigenschappen van een middlewaresysteem dat deelneemt aan dit patroon:
| Eigenschap | Verplicht | Wenselijk | Niet verplicht |
|---|---|---|---|
| Afhandeling van events | X | ||
| Protocolconversie | X | ||
| Vertaling en transformatie | X | ||
| In wachtrij plaatsen en bufferen | X | ||
| Synchrone transportprotocollen | X | ||
| Asynchrone transportprotocollen | X | ||
| Routering voor bemiddeling | X | ||
| Proceschoreografie en dienstorkestratie | X | ||
| Transactionaliteit (encryptie, ondertekening, betrouwbare levering, transactiebeheer) | X | ||
| Routering | X | ||
| Extraheren, transformeren en laden | X (voor bulk/batches) |
Voorbeeld
Een bedrijf dat afdrukbenodigdheden en -services levert, gebruikt Salesforce als front-end om printerbenodigdheden en -orders te maken en te beheren. Salesforce-activumrecords die printers vertegenwoordigen, worden periodiek bijgewerkt met afdrukgebruiksstatistieken (inktstatus, papierniveau) vanuit het on-premises Printer Management System (PMS), dat printers op clientsites regelmatig controleert. Bij het bereiken van een ingestelde drempelwaarde (bijvoorbeeld een lage inktstatus of een laag/leeg papierniveau van minder dan 30%) worden meerdere apps/processen (variabelen) die geïnteresseerd zijn in de event geïnformeerd, worden e-mail- of Chatter waarschuwingen verzonden en wordt er een orderrecord gemaakt. In het PMS wordt de Salesforce-ID opgeslagen (Salesforce is de hoofdrecord van het activum).
De volgende beperkingen zijn van toepassing:
- Het PMS kan deelnemen aan een contract-first integratie, waarbij Salesforce het contract levert en het PMS optreedt als een klant (consument) van de Salesforce-service (gedefinieerd via de Enterprise of Partner WSDL).
- Salesforce mag geen aangepaste ontwikkeling bevatten.
Dit voorbeeld kan het best worden geïmplementeerd met behulp van de Salesforce SOAP-API of REST-API voor het publiceren van events en declaratieve automatisering (stroom) in Salesforce. De primaire reden voor het gebruik van platformevents is het variabele en niet-eindige aantal abonnees. Voor eenvoudige updates van een eindige lijst van records zoals orders gebruikt u echter SOAP of de REST-API om de records bij te werken.
In Salesforce:
- Definieer een platformevent in Salesforce om de kennisgevingsgegevens te bevatten die afkomstig zijn uit het PMS.
- Maak een stroom die wordt geactiveerd door de kennisgeving van de printerevent. Het proces werkt het printeractivum bij en maakt een order (met behulp van een automatisch gestarte stroom).
- Download de Enterprise of Partner WSDL en lever deze aan het externe systeem aan.
In het externe systeem:
- Maak een client-stub vanuit de Enterprise of Partner WSDL.
- Authenticeer bij Salesforce (via OAuth-webserver of bearertokenstroom) met behulp van de inloggegevens van de integratiegebruiker.
- Bij de event voor de printerstatus roept het PMS de API aan om de event voor het printerstatusplatform (met statistieken over printergebruik) te maken. De Salesforce-eventbus informeert de stroomabonnee en alle andere abonnees.
Wanneer u platformevents gebruikt, kunt u met de eventbus events gedurende 72 uur opnieuw afspelen voor platformevents met groot volume. Het publiceren van die events met behulp van een middleware-oplossing kan helpen bij het opnemen van foutafhandeling aan de publicatiezijde. U kunt foutafhandeling echter implementeren aan de abonnementszijde als u meer betrouwbaarheid nodig hebt.
Dit voorbeeld toont het volgende:
- Implementatie van een Salesforce-synchrone API-client (consument).
- Een callback naar Salesforce om een platformevent te publiceren (uitgelijnd met eerder behandelde platformeventpatronen voor verzoeken/antwoorden).
Context
U gebruikt Salesforce voor het beheer van klantcases. Een medewerker van de klantenservice is aan de telefoon met een klant die aan een case werkt. De klant doet een betaling en de klantenservicemedewerker moet een real-time update binnen de Salesforce-toepassing zien vanuit de toepassing voor betalingsverwerking, die aangeeft dat de klant het openstaande bedrag van de order met succes heeft betaald.
Probleem
Wanneer een event zich voordoet in Salesforce, hoe kan de gebruiker dan worden geïnformeerd in de Salesforce-gebruikersinterface zonder zijn of haar scherm te hoeven vernieuwen en potentieel werk te verliezen?
Krachten
Er zijn verschillende krachten om rekening mee te houden bij het toepassen van oplossingen op basis van dit patroon:
- Moeten de gegevens waarop wordt gehandeld, worden opgeslagen in Salesforce?
- Kan er een aangepaste gebruikersinterfacelaag worden samengesteld voor het weergeven van deze gegevens?
- Krijgt de gebruiker toegang voor het aanroepen van de aangepaste gebruikersinterface?
Oplossing
De aanbevolen oplossing voor dit integratieprobleem is het gebruik van platformevents die vrijwel realtime eventing in Salesforce garanderen. Platform-events bieden een gestructureerde, flexibele payload onafhankelijk van Salesforce-objecten. Het garandeert ook duurzame onderwerpen met een herhalingsvenster van 72 uur. Dit zorgt ervoor dat events beschikbaar zijn, zelfs als een offline consument later beschikbaar komt. Deze oplossing bestaat uit de volgende componenten :
- Apex Trigger of Stromen met een logica om een platformevent over een onderwerp te publiceren
- Een onderwerp waarmee u een event kunt publiceren vanuit Apex Trigger of Flow
- Een op JavaScript gebaseerde implementatie van het protocol van Bayeux (momenteel CometD ) die kan worden gebruikt door de gebruikersinterface
- Een Lightning component
- Een JavaScript-bibliotheek die is opgenomen als een statische resource
Sketch
Het volgende diagram illustreert hoe de Streaming-API kan worden geïmplementeerd om kennisgevingen naar de Salesforce-gebruikersinterface te streamen. Deze kennisgevingen worden geactiveerd door recordwijzigingen in Salesforce.
UI-update in Salesforce geactiveerd door een gegevenswijziging
Resultaten
Voordelen
De toepassing van de oplossing gerelateerd aan dit patroon heeft de volgende voordelen:
- Elimineert de noodzaak voor het schrijven van aangepaste pollingmechanismen
- Elimineert de noodzaak van een door de gebruiker geïnitieerde feedbacklus
Niet-ondersteunde vereisten
De oplossing heeft de volgende beperkingen:
- Levering van kennisgevingen is niet gegarandeerd.
- De volgorde van kennisgevingen is niet gegarandeerd.
- Kennisgevingen worden niet gegenereerd vanuit recordwijzigingen die zijn aangebracht door de Bulk-API.
Beveiligingsoverwegingen
Standaardbeveiliging op Salesforce-organisatieniveau wordt nageleefd. U wordt aangeraden om het HTTPS-protocol te gebruiken om verbinding te maken met de Streaming-API. Zie Beveiligingsoverwegingen
Sidebars
De optimale oplossing bestaat uit het maken van een aangepaste gebruikersinterface in Salesforce. Het is noodzakelijk dat u rekening houdt met een geschikte gebruikersinterfacecontainer die kan worden gebruikt voor het weergeven van de aangepaste gebruikersinterface. Ondersteunde browsers worden vermeld in de Streaming API Developer Guide
Voorbeeld
Een telecommunicatiebedrijf gebruikt Salesforce voor het beheer van klantcases. De klantenservicemanagers willen een kennisgeving ontvangen wanneer een case met succes wordt gesloten door een van hun medewerkers.
De klant moet de in dit patroon voorgeschreven oplossing implementeren door:
- Maak een Apex Trigger PushTopic die een platformevent verzendt wanneer een case wordt opgeslagen met de status "Gesloten" en de oplossing "Geslaagd".
- Maak een aangepaste gebruikersinterface die beschikbaar is voor klantenservicemanagers. Deze gebruikersinterface abonneert zich op de eventbus om platformevents te verbruiken.
- Implementeer logica in de aangepaste gebruikersinterface die waarschuwingen toont die zijn gegenereerd door de medewerkers van de klantenservice van die manager.
Context
U gebruikt Salesforce om leads bij te houden, uw pijplijn te beheren, opportunities te maken en orderdetails vast te leggen die leads converteren naar klanten. Salesforce is echter niet het systeem dat orders bevat of verwerkt. Orders worden beheerd door een extern (remote) systeem. Verkoopvertegenwoordigers willen echter real-time ordergegevens in Salesforce weergeven en bijwerken zonder het externe systeem te hoeven leren of gebruiken.
Probleem
Hoe kunt u in Salesforce gegevens weergeven, zoeken en wijzigen die zijn opgeslagen buiten Salesforce, zonder de gegevens van het externe systeem naar Salesforce te verplaatsen?
Krachten
Er zijn verschillende krachten om rekening mee te houden bij het toepassen van oplossingen op basis van dit patroon:
- Wilt u een declaratieve/point-and-click uitgaande integratie of UI-mashup samenstellen in Salesforce?
- Hebt u een grote hoeveelheid gegevens die u niet naar uw Salesforce-organisatie wilt kopiëren?
- Moet u tegelijkertijd toegang hebben tot kleine hoeveelheden externe systeemgegevens?
- Hebt u realtime toegang nodig tot de nieuwste gegevens?
- Slaat u uw gegevens op in de cloud of in een back-officesysteem, maar wilt u die gegevens weergeven of verwerken in uw Salesforce-organisatie?
- Hebt u problemen met de gegevensverblijfplaats bij het opslaan van bepaalde typen gegevens in Salesforce?
Oplossing
De volgende tabel bevat diverse oplossingen voor dit integratieprobleem.
| Oplossing | Passen | Opmerkingen |
|---|---|---|
| Salesforce Connect | Beste | Gebruik Salesforce Connect voor toegang tot gegevens uit externe bronnen, naast uw Salesforce-gegevens. Haal gegevens op uit systemen zoals SAP, Microsoft, Oracle en andere op de cloud gebaseerde systemen zoals Snowflake in real-time zonder een kopie te maken van de gegevens in Salesforce. Salesforce Connect wijst gegevenstabellen in externe systemen toe aan externe objecten in uw organisatie. Externe objecten lijken op aangepaste objecten, met dit verschil dat ze verwijzen naar gegevens buiten uw Salesforce-organisatie. Salesforce Connect gebruikt een live verbinding met externe gegevens om externe objecten altijd up-to-date te houden. Toegang tot een extern object haalt de gegevens in real-time op van het externe systeem. Salesforce Connect biedt de volgende mogelijkheden:
Als u toegang wilt tot gegevens die zijn opgeslagen op een extern systeem met behulp van Salesforce Connect, kunt u een van de volgende adapters gebruiken:
|
| Verzoek en antwoord | Suboptimal |
Gebruik Salesforce-webservice-API's om ad-hocgegevensverzoeken in te dienen voor toegang tot externe systeemgegevens en deze bij te werken. Deze oplossing omvat de volgende benaderingen:
Gebruik de Salesforce SOAP-API. Een aangepaste pagina of knop initieert een Apex REST/SOAP-aanroep op een synchrone manier. In Salesforce kunt u een WSDL verbruiken en een resulterende proxy Apex klasse genereren. Deze klasse biedt de benodigde logica om de externe service aan te roepen. Een door de gebruiker geïnitieerde actie op een pagina roept vervolgens een Apex controller actie aan die deze proxy Apex klasse uitvoert om het externe gesprek uit te voeren. De pagina's vereisen aanpassing van de Salesforce-app. Gebruik de Salesforce REST-API. Een aangepaste pagina of knop initieert synchroon een Apex HTTP-aanroep (REST-service). In Salesforce kunt u HTTP-services aanroepen met behulp van de standaardmethoden GET, POST, PUT en DELETE. Zie Externe procesaanroep—Verzoek en antwoord voor meer informatie over deze oplossing. |
Sketch
Het volgende diagram illustreert hoe u Salesforce Connect kunt gebruiken om gegevens op te halen uit een extern systeem met behulp van een OData adapter.
In dit scenario:
- De browser voert een AJAX-aanroep uit die op zijn beurt een actie uitvoert op de overeenkomende adapter voor het externe object.
- De adapter vertaalt de actie naar een OData aanvraag en doet een HTTP GET aanvraag naar het externe systeem via de lagen Integration en Services.
- Het externe systeem retourneert een JSON-respons naar Salesforce via de lagen Integratie en Services.
- De respons wordt vanuit Odata vertaald naar een extern object en vervolgens terug gepresenteerd aan de browser.
Resultaten
De toepassing van de oplossingen die zijn gerelateerd aan dit patroon, maakt door de gebruikersinterface geïnitieerde aanroepen mogelijk waarin het resultaat van de transactie kan worden weergegeven aan de eindgebruiker.
Aanroepmechanismen
Het aanroepmechanisme is afhankelijk van de oplossing die is gekozen om dit patroon te implementeren.
| Aanroepmechanisme | Beschrijving |
|---|---|
| Externe objecten | Salesforce Connect wijst externe Salesforce-objecten toe aan gegevenstabellen in externe systemen. In plaats van de gegevens naar uw organisatie te kopiëren, opent Salesforce Connect de gegevens on demand en in real-time. Hoewel de gegevens buiten uw organisatie worden opgeslagen, biedt Salesforce Connect naadloze integratie met het Lightning Platform. Externe objecten zijn beschikbaar voor Salesforce-tools, zoals globaal zoeken, opzoekrelaties, recordfeeds en de mobiele Salesforce-app. Externe objecten zijn ook beschikbaar voor Apex, SOSL, SOQL-query's, Salesforce-API's en implementatie via de API voor metagegevens, wijzigingssets en pakketten. |
| Verlichtingscomponenten | Wordt gebruikt wanneer het externe proces wordt geactiveerd als onderdeel van een end-to-end proces waarbij de gebruikersinterface is betrokken, en het resultaat moet worden weergegeven of bijgewerkt in een Salesforce-record. Bijvoorbeeld een proces dat creditcardbetalingen indient bij een externe betalingsgateway en onmiddellijk betalingsresultaten retourneert die aan de gebruiker worden weergegeven. Integratie die wordt geactiveerd vanuit gebruikersinterface-events, vereist doorgaans het maken van aangepaste Lightning componenten. |
Foutafhandeling
Het is belangrijk om foutafhandeling op te nemen als onderdeel van de totaaloplossing. Wanneer een fout optreedt (uitzonderingen of foutcodes worden geretourneerd aan de beller), beheert de beller de foutafhandeling. De Salesforce Connect Validator is een gratis tool om enkele veel voorkomende query's uit te voeren en fouttypen en oorzaken van fouten op te merken.
Voordelen
Enkele voordelen van het gebruik van een Salesforce Connect oplossing zijn:
- Deze oplossing verbruikt geen gegevensopslag in Salesforce.
- Gebruikers hoeven zich geen zorgen te maken over het regelmatig synchroniseren van gegevens tussen het externe systeem en Salesforce.
- Een declaratieve set-up die snel kan worden bereikt met OData, of een inter-organisatorische adapter, of met behulp van minimale code met een aangepaste Apex adapter.
- Gebruikers hebben toegang tot externe gegevens met vrijwel dezelfde functionaliteit als aangepaste objecten in de vorm van externe objecten.
- Mogelijkheid om een gebundelde zoekopdracht uit te voeren in het verbonden externe systeem met behulp van globaal zoeken.
- Mogelijkheid om rapporten uit te voeren die toegang hebben tot externe gegevens vanuit cloud- en on-premises bronnen. Raadpleeg onderstaande overwegingen bij rapportage.
Salesforce Connect overwegingen
De Salesforce Connect oplossing heeft de volgende overwegingen:
- Externe objecten werken als aangepaste objecten, maar sommige voorzieningen zijn niet beschikbaar voor externe objecten. Zie Overwegingen bij Salesforce-compatibiliteit voor Salesforce Connect voor meer informatie.
- Externe objecten kunnen van invloed zijn op rapportprestaties. Zie Rapportoverwegingen voor Salesforce Connect voor meer informatie.
- Zie Overwegingen bij Salesforce Connect—Alle adapters voor aanvullende overwegingen bij het gebruik van Salesforce Connect adapters.
- Als u overweegt om een inter-organisatorische adapter te gebruiken, raadpleegt u Overwegingen bij Salesforce Connect: inter-organisatorische adapter.
- Zie Overwegingen bij Salesforce Connect: OData 2.0- en 4.0-adapters als u overweegt om een OData adapter te gebruiken.
- Als u overweegt om een aangepaste Apex adapter te gebruiken, raadpleegt u Overwegingen bij Salesforce Connect: aangepaste adapter.
Beveiligingsoverwegingen
Oplossingen voor dit patroon moeten voldoen aan standaardbeveiliging op Salesforce-organisatieniveau. U wordt aangeraden om het HTTPS-protocol te gebruiken om verbinding te maken met elk extern systeem. Zie Beveiligingsoverwegingen voor meer informatie.
Als u een OData connector gebruikt, zorg er dan voor dat u de speciale werkingen, beperkingen en aanbevelingen voor Cross-Site Request Forgery (CSRF) voor externe Odata gegevensbronnen begrijpt. Zie CSRF-overwegingen voor Salesforce Connect — OData 2.0- en 4.0-adapters voor meer informatie.
Sidebars
Geen.
Timeliness
Tijdigheid is in dit patroon van groot belang. Houd rekening met het volgende:
- Het verzoek wordt doorgaans aangeroepen vanuit de gebruikersinterface, dus het proces mag de gebruiker niet in de wachtstand houden.
- Afhankelijk van de beschikbaarheid van en de verbinding met het externe systeem kan het ophalen van externe gegevens veel tijd in beslag nemen. Salesforce heeft een configureerbare maximale time-outwaarde van 120 seconden om te wachten op een reactie van het externe systeem.
- Voltooiing van het externe proces moet tijdig en binnen de Salesforce-time-outlimiet en binnen de verwachtingen van de gebruiker worden uitgevoerd.
Gegevensvolumes
Dit patroon wordt voornamelijk gebruikt voor real-time activiteiten met een klein volume, vanwege de kleine time-outwaarden en de maximale grootte van het verzoek of de reactie voor de Apex call-oplossing. Gebruik dit patroon niet in batchverwerkingsactiviteiten waarbij de gegevenspayload is opgenomen in het bericht.
Ondersteuning van eindpuntmogelijkheden en standaarden
De mogelijkheden en standaardondersteuning voor het eindpunt zijn afhankelijk van de oplossing die u kiest.
| Oplossing | Overwegingen bij eindpunten |
|---|---|
| Salesforce Connect | OData API's — Gebruik het Open Data Protocol voor toegang tot gegevens die zijn opgeslagen buiten Salesforce. De externe gegevens moeten toegankelijk zijn via Odata producers. Andere API's: gebruik het Apex Connector Framework om uw eigen aangepaste adapter te ontwikkelen wanneer de andere beschikbare adapters niet aansluiten op uw behoeften. Een aangepaste adapter kan gegevens uit elke bron verkrijgen. Sommige gegevens kunnen bijvoorbeeld via aanroepen van het internet worden opgehaald, terwijl andere gegevens kunnen worden gemanipuleerd of zelfs programmatisch kunnen worden gegenereerd. Verbinden met Salesforce: gebruikt de Lightning Platform REST-API voor toegang tot gegevens die zijn opgeslagen in andere Salesforce-organisaties. Verbinden via Middleware Verbinden via middleware -- Het partnerecosysteem van Salesforce Connect heeft nauw samengewerkt met Salesforce om ervoor te zorgen dat hun middleware gateways OData eindpunten van hun service beschikbaar stellen, zodat Salesforce ermee kan verbinden zonder extra code te hoeven schrijven. |
| Verzoek en antwoord | Apex SOAP-aanroepen - Het eindpunt moet een webserviceaanroep kunnen ontvangen via HTTP. Apex HTTP-aanroepen - Het eindpunt moet HTTP-aanroepen kunnen ontvangen. U kunt Apex HTTP-aanroepen gebruiken om RESTful services aan te roepen met behulp van de standaardmethoden GET, POST, PUT en DELETE |
Staatsbeheer
Bij het integreren van systemen zijn sleutels belangrijk voor continue status bijhouden. Als een record bijvoorbeeld wordt gemaakt op het externe systeem, heeft de record doorgaans een soort identificerende sleutel nodig om doorlopende updates te ondersteunen. Er zijn twee opties voor het opslaan van sleutels.
- Salesforce slaat de primaire of unieke vervangende sleutel voor de externe record op.
- Het externe systeem slaat de unieke Salesforce-record-ID of een andere unieke vervangende sleutel op. Er zijn specifieke overwegingen bij het afhandelen van integratiesleutels in dit synchrone patroon.
| Hoofdsysteem | Beschrijving |
|---|---|
| Salesforce | Het externe systeem slaat de Salesforce-record-ID of een andere unieke vervangende sleutel uit de record op. |
| Extern systeem | De aanroep naar het externe proces retourneert de unieke sleutel uit de toepassing en Salesforce slaat die sleutelwaarde op in een uniek recordveld. |
Complexe integraties
In bepaalde gevallen kan de oplossing die door dit patroon wordt voorgeschreven, de implementatie van een complex integratiescenario vereisen. Deze scenario's worden vaak opgelost met behulp van middleware.
- Aggregatie van gesprekken en de resultaten ervan over gesprekken naar meerdere systemen
- Transformatie van zowel inkomende als uitgaande berichten
- Transactionele integriteit behouden voor alle aanroepen naar meerdere systemen
- Andere procescombinatieactiviteiten tussen Salesforce en het externe systeem
Beheerslimieten
Er gelden verschillende limieten voor verschillende adapters. Zie Algemene limieten voor Salesforce Connect voor meer informatie.
Middlewaremogelijkheden
De volgende tabel markeert de gewenste eigenschappen van een middlewaresysteem dat aan dit patroon deelneemt.
| Eigenschap | Verplicht | Wenselijk | Niet verplicht |
|---|---|---|---|
| Afhandeling van events | X | ||
| Protocolconversie | X | ||
| Vertaling en transformatie | X | ||
| In wachtrij plaatsen en bufferen | X | ||
| Synchrone transportprotocollen | X | ||
| Asynchrone transportprotocollen | X | ||
| Routering voor bemiddeling | X | ||
| Proceschoreografie en dienstorkestratie | X | ||
| Transactionaliteit (encryptie, ondertekening, betrouwbare levering, transactiebeheer) | X | ||
| Routering | X | ||
| Extraheren, transformeren en laden | X | ||
| Lange polling | X |
Externe objectrelaties
Externe objecten ondersteunen standaard opzoekrelaties, die de Salesforce-record-ID van 18 tekens gebruiken om gerelateerde records te koppelen. Gegevens die buiten uw Salesforce-organisatie zijn opgeslagen, bevatten echter vaak niet die record-ID's. Daarom zijn er twee speciale typen opzoekrelaties beschikbaar voor externe objecten: externe opzoekopdrachten en indirecte opzoekopdrachten.
Deze tabel geeft een overzicht van de typen relaties die beschikbaar zijn voor externe objecten.
| Relatie | Toegestane onderliggende objecten | Toegestane bovenliggende objecten | Bovenliggend veld voor overeenkomende records |
|---|---|---|---|
| Opzoeken | Standaard, Aangepast, Extern | Standaard, aangepast | De Salesforce-record-ID van 18 tekens |
| Extern opzoeken | Standaard, Aangepast, Extern | Extern | Het standaardveld Externe ID |
| Indirecte opzoekopdracht | Extern | Standaard, aangepast | Selecteer een aangepast veld met de kenmerken Externe ID en Uniek |
Overwegingen bij groot gegevensvolume voor Salesforce Connect: OData 2.0- en 4.0-adapters
Als uw organisatie scorelimieten bereikt bij toegang tot externe objecten, kunt u overwegen om de optie Groot gegevensvolume te selecteren voor de gekoppelde externe gegevensbronnen. Hiermee worden de meeste scorelimieten omzeild, maar gelden enkele speciale werkingen en beperkingen. Zie Overwegingen bij groot gegevensvolume voor Salesforce Connect voor meer informatie.
Clientgestuurde en servergestuurde paginering voor Salesforce Connect: OData 2.0- en 4.0-adapters
Het komt vaak voor dat Salesforce Connect's op externe gegevens een grote resultatenset hebben die is opgesplitst in kleinere batches of pagina's. U bepaalt of de werking van de paginering wordt bepaald door het externe systeem (servergestuurd) of door de OData 2.0- of 4.0-adapter voor Salesforce Connect (clientgestuurd). Het veld Servergestuurde paginering voor de externe gegevensbron geeft aan of clientgestuurde of servergestuurde paginering moet worden gebruikt. Als u servergestuurde paginering inschakelt voor een externe gegevensbron, negeert Salesforce de aangevraagde paginagrootten, inclusief de standaard batchgrootte van queryMore() van 500 rijen. De pagina's die door het externe systeem worden geretourneerd, bepalen de batches, maar elke pagina mag niet groter zijn dan 2000 rijen. De limieten voor de OData adapters voor Salesforce Connect zijn echter nog steeds van toepassing.
Voorbeeld
Een productiebedrijf gebruikt Salesforce voor het beheer van klantcases. De klantenserviceagenten willen toegang tot de real-time orderinformatie vanuit het back-office ERP-systeem om een 360-weergave van de klant te krijgen zonder dat ze rapporten handmatig in ERP hoeven uit te voeren.
Als u de oplossing implementeert die door dit patroon wordt voorgeschreven, moet u:
- Configureer uw externe gegevensbron met een OData eindpunt. Uw externe toepassing kan native ondersteuning voor Odata bevatten. Voor andere toepassingen werken grote integratieleveranciers zoals Dell Boomi, Informatica, Jitterbit, MuleSoft en Progress Software samen met Salesforce voor het samenstellen van adapters.
- Richt Salesforce Connect naar het OData eindpunt, rechtstreeks of via een middleware-oplossing.
- Synchroniseer uw externe databasetabellen met externe objecten in Salesforce. Wanneer een gebruiker een pagina opent met gegevens uit deze externe objecten, voert Salesforce Connect realtime aanroepen uit naar uw back-endtoepassingen.
Ontwikkelaarsdocumentatie
Trailhead
Om effectieve leden van het ondernemingsportfolio te zijn, moeten alle toepassingen worden gemaakt en geïntegreerd met relevante beveiligingsmechanismen. Moderne IT-strategieën maken gebruik van een combinatie van on-premises en cloudgebaseerde services.
Hoewel het integreren van cloud-naar-cloud-services zich doorgaans richt op webservices en gekoppelde autorisatie, leidt het verbinden van on-premises en cloudservices vaak tot meer complexiteit. Deze sectie beschrijft beveiligingstools, -technieken en Salesforce-specifieke overwegingen.
Omgekeerde proxyserver
Een reverse proxy is een server die zich voor webservers bevindt en clientverzoeken (bijvoorbeeld webbrowser) doorstuurt naar die webservers. Reverse proxy's worden doorgaans geïmplementeerd om de beveiliging, prestaties en betrouwbaarheid te verbeteren.
Het is een type proxyserver dat namens een client resources ophaalt van een of meer servers. Deze resources worden vervolgens geretourneerd naar de client alsof ze afkomstig zijn van de proxyserver zelf. In tegenstelling tot een voorwaartse proxy, die een tussenpersoon is voor de gekoppelde clients om contact te maken met een server, is een reverse proxy een tussenpersoon voor de gekoppelde servers om contact te maken met een willekeurige client.
In Salesforce-implementaties wordt een dergelijke service doorgaans geleverd via een extern gatewayproduct. Open source-opties zoals Apache HTTP, lighttpd en nginix kunnen bijvoorbeeld worden gebruikt. Commerciële producten omvatten IBM WebSeal en Computer Associates SiteMinder. Deze producten kunnen gemakkelijk worden geconfigureerd om namens de interne verzoeker proxy te gebruiken en alle uitgaande Salesforce-verzoeken te beheren.
Encryptie
Sommige ondernemingen vereisen dat geselecteerde transacties of gegevensvelden worden versleuteld tussen een combinatie van on-premises en cloudgebaseerde toepassingen. Als uw organisatie moet voldoen aan aanvullende nalevingsvereisten, kunt u alternatieven implementeren, waaronder:
-
On-premises commerciële gatewayservices voor encryptie, inclusief Salesforce's eigen, CipherCloud, IBM DataPower, Computer Associates. Voor elke oplossing wordt de encryptie-engine of gateway aangeroepen op de transactiegrens door het verzenden en ontvangen van een versleutelde payload of bij het versleutelen of ontsleutelen van specifieke gegevensvelden voordat het HTTP(S)-verzoek wordt uitgevoerd.
-
Op de cloud gebaseerde opties, zoals Salesforce Shield Platform-encryptie. Shield Platform Encryption biedt uw gegevens een geheel nieuwe beveiligingslaag met behoud van kritieke platformfunctionaliteit. De gegevens die u selecteert, worden "at rest" versleuteld met behulp van een geavanceerd sleutelafleidingssysteem. U kunt uw gegevens veiliger dan ooit tevoren beschermen. Raadpleeg de online Help van Salesforce voor meer informatie.
Gespecialiseerde WS-* Protocolondersteuning
Om te voldoen aan de vereisten van beveiligingsprotocollen (zoals WS-*), raden we deze alternatieven aan.
-
Beveiliging/XML-gateway: injecteer WS-Security-inloggegevens (IBM WebSeal of Datapower, Layer7, TIBCO, enzovoort) in de transactiestroom zelf. Deze benadering vereist geen wijzigingen in webservices op toepassingsniveau of webserviceaanroepen van Salesforce. U kunt deze benadering ook opnieuw gebruiken binnen de Salesforce-installatie. Het vereist echter extra ontwerp, configuratie, testen en onderhoud om de juiste WS-Security-injectie in de bestaande beveiligingsgatewaybenadering te beheren.
-
Encryptie op transportniveau: versleutel het communicatiekanaal met behulp van SSL- en IP-beperkingen in twee richtingen. Hoewel deze benadering het WS-*-protocol op zichzelf niet rechtstreeks implementeert, beveiligt het het communicatiekanaal tussen de on-premises toepassingen en Salesforce zonder een gebruikersnaam en wachtwoord door te geven. Er zijn ook geen wijzigingen in door Salesforce gegenereerde klassen vereist. Er zijn echter mogelijk enkele on-premises webservicesaanpassingen vereist (in de toepassing zelf of in de middleware-/ESB-laag).
-
Aangepaste Salesforce-ontwikkeling: voeg WS-Security-headers toe aan het uitgaande SOAP-verzoek via het hulpprogramma WSDL2Apex. Dit genereert een Java-achtige Apex klasse op basis van het WSDL-bestand dat wordt gebruikt om de interne service aan te roepen. Hoewel deze benadering geen wijzigingen in back-end webservices of aanvullende componenten in de DMZ vereist, vereist deze wel:
- Meer inspanningen voor samenstellen en testen
- Een relatief complex en handmatig proces voor het handmatig coderen van de WS-Security kenmerken (inclusief XML serialisering binnen de Apex code)
- Een hogere onderhoudsinspanning op lange termijn
Opmerking: De laatste optie wordt niet aanbevolen vanwege de complexiteit ervan en het risico dat dergelijke integraties periodieke beoordelingen vereisen op basis van regelmatige updates van Salesforce.
Andere beveiligingsoverwegingen
-
Benoemde gegevens: Bedoeld om geauthenticeerde API-aanroepen naar externe systemen te beveiligen en te vereenvoudigen, geeft een benoemd gegeven de URL van een eindpunt van een aanroep en de vereiste authenticatieparameters ervan in één definitie op. Als u uw Apex code wilt stroomlijnen en de set-up van geauthenticeerde aanroepen wilt vereenvoudigen, geeft u een benoemd gegeven op als het eindpunt van de aanroep. Voor meer details zie hier.
-
OAUTH 2.0: OAuth 2.0 is een industriestandaard autorisatieframework waarmee een gebruiker beperkte toegang tot zijn beschermde resources kan verlenen aan een externe toepassing zonder zijn of haar inloggegevens (zoals wachtwoorden) te delen. In plaats van een directe wachtwoorduitwisseling keurt de gebruiker een aanvraag voor een toegangstoken goed, die de toepassing vervolgens gebruikt om toegang te krijgen tot de gegevens van de gebruiker vanaf een resourceserver. Dit proces scheidt de clienttoepassing van de identiteit en het wachtwoord van de gebruiker, waardoor de beveiliging wordt verbeterd door een tijdelijke, bereikspecifieke "sleutel" te bieden voor toegang tot resources. Voor meer informatie zie hier.
-
Privé verbinden: Wanneer u uw Salesforce-organisatie integreert met toepassingen die worden gehost op cloudservices van derden, is het essentieel om HTTP/s-verkeer veilig te kunnen verzenden en ontvangen. Met Privé verbinden vergroot u de beveiliging van uw AWS-integraties (Amazon Web Services) door een volledig beheerde netwerkverbinding in te stellen tussen uw Salesforce-organisatie en uw AWS Virtual Private Cloud (VPC). Routeer vervolgens uw cross-cloud verkeer via de verbinding in plaats van via het openbare internet om blootstelling aan externe beveiligingsrisico's te verminderen. Private Connect is beschikbaar in samenwerking met AWS via een voorziening met de naam AWS PrivateLink. Privé verbinden is tweerichtingsverkeer: u kunt zowel inkomend als uitgaand verkeer initiëren. Met inkomende verbindingen kunt u verkeer naar Salesforce verzenden met behulp van de standaard-API's. En met uitgaande verbindingen kunt u verkeer uit Salesforce sturen via voorzieningen zoals Apex aanroepen, Externe services en Externe objecten. Voor meer informatie over VPC kunt u hier terecht.
Met de Salesforce Event Bus met Platform Events, Change Gegevensvastlegging (CDC) en Pub /Sub-API kunnen ondernemingen Event Drived Style Architectures (EDA's) maken.
Een EDA ontkoppelt consumenten van eventberichten (abonnees) van producenten van eventberichten (uitgevers), waardoor schaalbaarheid en flexibiliteit mogelijk zijn. Specifieke patronen worden in dit document behandeld als onderdeel van de bestaande patroonstructuur die gerelateerde alternatieven of opties vergelijkt en contrasteert. Het verkrijgen van een holistisch inzicht in de eventgestuurde architectuur en de manier waarop patronen samenwerken, kan u echter helpen het juiste patroon voor uw behoeften te selecteren.
Khalid Mohammed is een vooraanstaand architect binnen de Professional Services van Salesforce. Sinds hij in 2015 bij Salesforce kwam werken, heeft hij zijn uitgebreide expertise in Enterprise Application and Architecture benut, die hij vóór zijn aanstelling bij Salesforce door talrijke klanttransformaties heeft gescherpt. Khalid leidt de Delivery Architecture Board en wordt ook erkend als gecertificeerd technisch architect.
Gulal Kumar is Software Engineering Architect bij Salesforce, met een focus op data- en integratiearchitectuur. Met meer dan 20 jaar ervaring in integratie en API's, moderniseringsprogramma's, beveiliging en AIML-initiatieven brengt hij een schat aan expertise met zich mee. Gulal zet zich in voor het bevorderen van bedrijfstransformatie-initiatieven, het verbeteren van beveiliging en veerkracht, het bevorderen van architectuurexcellentie en het leiden van AIML-initiatieven binnen verschillende domeinen.
Sushant is technisch architect bij Salesforce, gespecialiseerd in oplossingsarchitectuur en end-to-end levering van Salesforce-platforms. Met diepgaande expertise in platform-governance, toepassingsontwikkeling, integratie en DevOps heeft hij tal van transformatieprogramma's voor klanten in verschillende sectoren geleid. Sushant zet zich in voor het stimuleren van uitstekende levering en schaalbare architectonische resultaten.