Loading
Salesforce uitbreiden met klikken, en niet code
Voorbeeld van kwalificatie voor één-op-veel en veel-op-veel relaties in Amazon DynamoDB

Voorbeeld van kwalificatie voor één-op-veel en veel-op-veel relaties in Amazon DynamoDB

Een onderneming slaat details van transacties voor miljoenen klanten op en bewaart deze langere tijd. Het gevolg is gegevensvolumes die miljarden records omvatten. In dit voorbeeld is Salesforce het registratiesysteem voor essentiële gegevens over klanten, terwijl details van alle orders van de klant vanwege de schaalgrootte worden opgeslagen in Amazon DynamoDB.

In dit typische voorbeeld van een relatiemodel worden klanten in Salesforce opgeslagen als accounts. Orders, orderitems en producten worden opgeslagen in Amazon DynamoDB en gevirtualiseerd in Salesforce als externe objecten. Het implementeren van een dergelijke oplossing biedt de verkopers en medewerkers van de klantenservice van de onderneming volledige toegang tot de orderhistorie van klanten.

Klanten worden in Salesforce opgeslagen als accounts, terwijl orders, orderitems en producten vanwege de schaalgrootte kunnen worden opgeslagen in DynamoDB en in Salesforce kunnen worden gevirtualiseerd als externe objecten.

Aangezien Amazon DynamoDB een NoSQL-database is en geen ondersteuning biedt voor JOIN-query's, is het raadzaam om alle gerelateerde gegevens voor een bedrijfsactiviteit op te slaan in één DynamoDB-tabel. Om onderscheid te maken tussen items die producten zijn en geen orders of orderitems, moet u andere strategieën gebruiken. Een andere ontwerppraktijk is toegangspatronen te identificeren en ervoor te zorgen dat veelvoorkomende bewerkingen kunnen worden uitgevoerd met één query, waardoor de prestaties goed blijven, ook bij zeer grote tabellen. Het volgende is een voorbeeldtabel op basis van de aanbevolen ontwerppraktijken.

PK SK CUSTOMER ORDERDATE TOTAL SHIPPING QTY PRICE SUBTOTAL NAME
1012 ORDER A123 2022-07-12T14:33:14Z 25,75 5,75        
1012 product#1         2 5,00 10,00 Widget X
1012 product#2         1 15,00 15,00 Widget Y
1 PRODUCT           5,00   Widget X
2 PRODUCT           15,00   Widget Y
3 PRODUCT           20,00   Widget Z
1013 ORDER B456 2022-07-15T18:05:45Z   9,25        
1013 product#1     49,25   1 5,00 5,00 Widget X
1013 product#2         1 15,00 15,00 Widget Y
1013 product#3         1 20,00 20,00 Widget Z

Amazon DynamoDB beheert één-op-veel relaties tussen orders en orderitems op basis van het Adjacency List Design Pattern. Met dit patroon kunnen een order en alle bijbehorende via één query worden opgehaald. Een toepassing voor orderbeheer die is geïmplementeerd in AWS voert de volgende query uit en retourneert één ontvangstbewijs voor een order. Om dit mogelijk te maken wordt de naam van het product bij de checkout gedupliceerd in het orderitem. Het doel van het tabelontwerp is niet het volledig normaliseren van de gegevens zoals bij relationeel databaseontwerp.

SELECT * FROM "OrderManagement" WHERE "pk" = "1012"

Nu de structuur van de Amazon DynamoDB-tabel bekend is, kunnen we kwalificaties maken in Salesforce zodat de Salesforce Connect-adapter voor DynamoDB producten, orders en orderitems kan scheiden. Samen met de andere elementen van de kwalificatie wordt de sorteersleutel (SK) gebruikt om onderscheid te maken tussen de items (vergelijkbaar met recordtypen). Voor producten en orders bevat de sorteersleutel een statische waarde PRODUCT of ORDER als differentiator. Vanwege de statische waarde worden bepaalde bewerkingen vereenvoudigd.

Opmerking
Opmerking Hoewel JSON geen ondersteuning biedt voor opmerkingen, bevatten snippets in dit voorbeeldonderwerp opmerkingen om een en ander te verduidelijken. Als u dit voorbeeld wilt implementeren, gebruikt u een JSON-validatietool om aan te geven welke syntaxis u moet overslaan.

Kwalificaties voor order beheren

De partitiesleutel (PK) van een order is numeriek, maar u bouwt meer flexibiliteit in door van het veld een tekenreeks te maken die relatief is voor Amazon DynamoDB. De kwalificatie voor Order zoekt dus naar numerieke waarden via regex, ook al is het kenmerktype nog steeds een tekenreeks. Hieronder ziet u een JSON-snippet voor een orderkwalificatie.

{
  "tableName": "OrderManagement",
  "columns": {
    "pk": {
      "postFilter": "^[0-9]+$", // regex matching integers
      "type": "S" // attribute must be a String
    },
    "sk": {
      "values": [
        {
          "definition": "\"ORDER\"" // // matches the static value "ORDER"
        }
      ]
    }
  }
}

Hoewel het nuttig is om het partitiesleutelveld (PK) toe te wijzen aan een ordernummer (of een soortgelijk veld) in Salesforce, hoeft de sorteersleutel (SK) niet te worden toegewezen aan een veld van het object Order. Deze sleutel biedt namelijk geen enkele toegevoegde waarde voor eindgebruikers.

Kwalificaties voor product beheren

Gebaseerd op dezelfde benadering als bij Order, ziet u hier een JSON-snippet voor een productkwalificatie.

{
  "tableName": "OrderManagement",
  "columns": {
    "pk": {
      "postFilter": "^[0-9]+$", // regex matching integers
      "type": "S" // attribute must be a String
    },
    "sk": {
      "values": [
        {
          "definition": "\"PRODUCT\"" // // matches the static value "PRODUCT"
        }
      ]
    }
  }
}

Zowel Product als Order heeft andere kenmerken in de Amazon DynamoDB-tabel die moeten worden toegewezen aan velden van externe objecten. Aangezien deze kenmerken geen kwalificatie of vertaling nodig hebben, hoeven ze niet te worden weergegeven in de kwalificatie. De Salesforce Connect-adapter voor Amazon DynamoDB wijst deze andere kenmerken toe aan veldtypen. Bijvoorbeeld:

  • Het tekenreekskenmerk ORDERDATE wordt geconverteerd naar het veldtype DateTime als het kenmerk de notatie ISO 8601 heeft.
  • De kenmerken PRICE en TOTAL worden geconverteerd naar het type Valuta dat is geconfigureerd voor de Salesforce-organisatie.

Kwalificaties voor orderitems beheren

Met kwalificaties kunt u Salesforce-formules gebruiken om virtuele kenmerken te maken die niet fysiek voorkomen in Amazon DynamoDB. Naar dergelijke kenmerken kan worden verwezen als externe kolomnamen wanneer u de velden voor het externe object definieert.

De sorteersleutel (SK) voor orderitems bevat een identifier voor het product, evenals een statische prefix product# om duidelijk te maken dat de waarde verwijst naar een product.

De benadering die in dit voorbeeld wordt gebruikt, combineert PK en SK op een manier die goed werkt met Amazon DynamoDB. De partitiesleutel en sorteersleutel vormen samen een unieke, samengestelde sleutel voor een item. Wanneer de volgende kwalificatie wordt toegepast, heeft de externe ID in Salesforce voor een bepaald orderitem de vorm 1012-1 (PK en SK gescheiden met een afbreekstreepje). De externe ID wordt toegewezen aan een Salesforce-ID om de Salesforce Platform-mogelijkheden in te schakelen die beschikbaar zijn voor externe objecten.

Het volgende is een JSON-snippet voor de kwalificatie die gebruikmaakt van de beschreven benadering en een formule gebruikt om het prefix te verwijderen en de leesbaarheid te vergroten.

{
  "tableName": "OrderManagement",
    "columns": {
    "pk": {
      "postFilter": "^[0-9]+$", // regex matching integers
      "type": "S" // attribute must be a String
    },
    "sk": {
      "filter": "products#%" // prefixed with "products#"
    },
    "productCode": {
      "virtual": true, // productCode does not exist in DynamoDB
      "values": [
        {
          "definition": "RIGHT(sk, LEN(sk) - FIND(\"#\", sk))" // Formula parses out the prefix
        }
      ]
    }
  }
}

Wanneer u een externe opzoekopdracht maakt voor Product vanuit Orderitem, gebruikt u het virtuele kenmerk productCode als de externe kolomnaam. De externe opzoekopdracht voor Order gebruikt de PK als de externe kolomnaam en met behulp van deze kolom kunt u veel-op-veel relaties maken.

 
Wordt geladen
Salesforce Help | Article