mirror of
https://github.com/forcedotcom/afv-library.git
synced 2026-08-08 08:13:49 +08:00
318 lines
12 KiB
Markdown
318 lines
12 KiB
Markdown
# B2B Commerce Data Model Template
|
|
|
|
Pre-built data model for Salesforce B2B Commerce using `flowchart LR` format with color coding and relationship indicators.
|
|
|
|
## Objects Included
|
|
|
|
| Object | Type | Description |
|
|
|--------|------|-------------|
|
|
| WebStore | STD | Online storefront |
|
|
| WebCart | STD | Shopping cart |
|
|
| CartItem | STD | Cart products |
|
|
| BuyerGroup | STD | Customer groups |
|
|
| BuyerAccount | STD | B2B customers |
|
|
| ProductCatalog | STD | Product catalog |
|
|
| CommerceEntitlementPolicy | STD | Access policies |
|
|
| CartCheckoutSession | STD | Checkout process |
|
|
|
|
---
|
|
|
|
## Query Org Metadata (Recommended)
|
|
|
|
Enrich diagram with live org data:
|
|
|
|
```bash
|
|
python3 ../../scripts/query-org-metadata.py \
|
|
--objects WebStore,WebCart,CartItem,BuyerGroup,BuyerAccount \
|
|
--target-org myorg
|
|
```
|
|
|
|
---
|
|
|
|
## Mermaid Template (Preferred)
|
|
|
|
Left-to-right flowchart with color coding.
|
|
|
|
```mermaid
|
|
%%{init: {"flowchart": {"nodeSpacing": 50, "rankSpacing": 80}} }%%
|
|
flowchart LR
|
|
%% ═══════════════════════════════════════════════════════════════
|
|
%% B2B COMMERCE DATA MODEL
|
|
%% LEGEND: LK = Lookup (-->), MD = Master-Detail (==>)
|
|
%% Colors: Blue = Standard, Orange = Custom, Green = External
|
|
%% ═══════════════════════════════════════════════════════════════
|
|
|
|
%% Store Structure
|
|
WebStore["WebStore<br/>(count)"]
|
|
ProductCatalog["ProductCatalog<br/>(count)"]
|
|
Product2["Product2<br/>(count)"]
|
|
|
|
%% Buyer Structure
|
|
BuyerGroup["BuyerGroup<br/>(count)"]
|
|
BuyerAccount["BuyerAccount<br/>(count)"]
|
|
BuyerGroupMember["BuyerGroupMember<br/>(count)"]
|
|
Account["Account<br/>(count)"]
|
|
|
|
%% Cart Structure
|
|
WebCart["WebCart<br/>(count)"]
|
|
CartItem["CartItem<br/>(count)"]
|
|
CartCheckout["CartCheckoutSession<br/>(count)"]
|
|
|
|
%% Entitlements
|
|
CEPolicy["CommerceEntitlementPolicy<br/>(count)"]
|
|
CEProduct["CommerceEntitlementProduct<br/>(count)"]
|
|
CEBuyerGroup["CommerceEntitlementBuyerGroup<br/>(count)"]
|
|
|
|
%% Store to Products
|
|
WebStore -->|"LK"| ProductCatalog
|
|
ProductCatalog ==>|"MD"| Product2
|
|
|
|
%% Buyer Structure
|
|
BuyerGroup ==>|"MD"| BuyerGroupMember
|
|
Account -->|"LK"| BuyerAccount
|
|
WebStore -->|"LK"| BuyerAccount
|
|
BuyerAccount -->|"LK"| BuyerGroupMember
|
|
|
|
%% Cart
|
|
WebStore -->|"LK"| WebCart
|
|
Account -->|"LK"| WebCart
|
|
WebCart ==>|"MD"| CartItem
|
|
Product2 -->|"LK"| CartItem
|
|
WebCart -->|"LK"| CartCheckout
|
|
|
|
%% Entitlements
|
|
CEPolicy ==>|"MD"| CEProduct
|
|
CEPolicy ==>|"MD"| CEBuyerGroup
|
|
Product2 -->|"LK"| CEProduct
|
|
BuyerGroup -->|"LK"| CEBuyerGroup
|
|
|
|
%% Standard Objects - Sky Blue
|
|
style WebStore fill:#bae6fd,stroke:#0369a1,color:#1f2937
|
|
style ProductCatalog fill:#bae6fd,stroke:#0369a1,color:#1f2937
|
|
style Product2 fill:#bae6fd,stroke:#0369a1,color:#1f2937
|
|
style BuyerGroup fill:#bae6fd,stroke:#0369a1,color:#1f2937
|
|
style BuyerAccount fill:#bae6fd,stroke:#0369a1,color:#1f2937
|
|
style BuyerGroupMember fill:#bae6fd,stroke:#0369a1,color:#1f2937
|
|
style Account fill:#bae6fd,stroke:#0369a1,color:#1f2937
|
|
style WebCart fill:#bae6fd,stroke:#0369a1,color:#1f2937
|
|
style CartItem fill:#bae6fd,stroke:#0369a1,color:#1f2937
|
|
style CartCheckout fill:#bae6fd,stroke:#0369a1,color:#1f2937
|
|
style CEPolicy fill:#bae6fd,stroke:#0369a1,color:#1f2937
|
|
style CEProduct fill:#bae6fd,stroke:#0369a1,color:#1f2937
|
|
style CEBuyerGroup fill:#bae6fd,stroke:#0369a1,color:#1f2937
|
|
```
|
|
|
|
---
|
|
|
|
## Key Concepts
|
|
|
|
### B2B Commerce Flow
|
|
```
|
|
WebStore → ProductCatalog → Product2
|
|
↓ ↓
|
|
BuyerAccount → WebCart → CartItem → Order
|
|
↓
|
|
BuyerGroup → Entitlements (What they can see/buy)
|
|
```
|
|
|
|
### Buyer vs Account
|
|
| Object | Purpose |
|
|
|--------|---------|
|
|
| Account | Standard CRM account |
|
|
| BuyerAccount | Commerce-enabled account |
|
|
| BuyerGroup | Pricing/entitlement grouping |
|
|
|
|
### Entitlement Model
|
|
```
|
|
CommerceEntitlementPolicy
|
|
├── CommerceEntitlementProduct (What products)
|
|
└── CommerceEntitlementBuyerGroup (Who can see)
|
|
```
|
|
|
|
Controls which products each BuyerGroup can view and purchase.
|
|
|
|
### Cart States
|
|
| Status | Description |
|
|
|--------|-------------|
|
|
| Active | Current shopping cart |
|
|
| Checkout | In checkout process |
|
|
| Closed | Converted to Order |
|
|
| Abandoned | Inactive cart |
|
|
|
|
---
|
|
|
|
## Simplified Version (Core Objects Only)
|
|
|
|
For presentations focusing on core commerce flow:
|
|
|
|
```mermaid
|
|
%%{init: {"flowchart": {"nodeSpacing": 50, "rankSpacing": 80}} }%%
|
|
flowchart LR
|
|
WebStore["WebStore"]
|
|
BuyerAccount["BuyerAccount"]
|
|
WebCart["WebCart"]
|
|
Order["Order"]
|
|
|
|
WebStore -->|"hosts"| BuyerAccount
|
|
BuyerAccount -->|"LK"| WebCart
|
|
WebCart -.->|"converts"| Order
|
|
|
|
style WebStore fill:#bae6fd,stroke:#0369a1,color:#1f2937
|
|
style BuyerAccount fill:#bae6fd,stroke:#0369a1,color:#1f2937
|
|
style WebCart fill:#bae6fd,stroke:#0369a1,color:#1f2937
|
|
style Order fill:#bae6fd,stroke:#0369a1,color:#1f2937
|
|
```
|
|
|
|
---
|
|
|
|
## Pricing Model
|
|
|
|
```mermaid
|
|
%%{init: {"flowchart": {"nodeSpacing": 50, "rankSpacing": 80}} }%%
|
|
flowchart LR
|
|
BuyerGroup["BuyerGroup"]
|
|
Pricebook2["Pricebook2"]
|
|
PBE["PricebookEntry"]
|
|
Product2["Product2"]
|
|
WebStorePB["WebStorePricebook"]
|
|
WebStore["WebStore"]
|
|
|
|
BuyerGroup -->|"LK"| Pricebook2
|
|
Pricebook2 ==>|"MD"| PBE
|
|
Product2 -->|"LK"| PBE
|
|
WebStore ==>|"MD"| WebStorePB
|
|
Pricebook2 -->|"LK"| WebStorePB
|
|
|
|
style BuyerGroup fill:#bae6fd,stroke:#0369a1,color:#1f2937
|
|
style Pricebook2 fill:#bae6fd,stroke:#0369a1,color:#1f2937
|
|
style PBE fill:#bae6fd,stroke:#0369a1,color:#1f2937
|
|
style Product2 fill:#bae6fd,stroke:#0369a1,color:#1f2937
|
|
style WebStorePB fill:#bae6fd,stroke:#0369a1,color:#1f2937
|
|
style WebStore fill:#bae6fd,stroke:#0369a1,color:#1f2937
|
|
```
|
|
|
|
---
|
|
|
|
## Cart to Order Conversion
|
|
|
|
```mermaid
|
|
%%{init: {"flowchart": {"nodeSpacing": 50, "rankSpacing": 80}} }%%
|
|
flowchart LR
|
|
WebCart["WebCart"]
|
|
CartItem["CartItem"]
|
|
CartCheckout["CartCheckoutSession"]
|
|
Order["Order"]
|
|
OrderItem["OrderItem"]
|
|
OrderSummary["OrderSummary"]
|
|
|
|
WebCart ==>|"MD"| CartItem
|
|
WebCart -->|"LK"| CartCheckout
|
|
CartCheckout -.->|"creates"| Order
|
|
Order ==>|"MD"| OrderItem
|
|
Order -->|"LK"| OrderSummary
|
|
|
|
style WebCart fill:#bae6fd,stroke:#0369a1,color:#1f2937
|
|
style CartItem fill:#bae6fd,stroke:#0369a1,color:#1f2937
|
|
style CartCheckout fill:#bae6fd,stroke:#0369a1,color:#1f2937
|
|
style Order fill:#bae6fd,stroke:#0369a1,color:#1f2937
|
|
style OrderItem fill:#bae6fd,stroke:#0369a1,color:#1f2937
|
|
style OrderSummary fill:#bae6fd,stroke:#0369a1,color:#1f2937
|
|
```
|
|
|
|
---
|
|
|
|
## ASCII Fallback
|
|
|
|
```
|
|
┌─────────────────────────────────────────────────────────────────────────────┐
|
|
│ B2B COMMERCE DATA MODEL (L→R) │
|
|
│ Legend: LK = Lookup (-->), MD = Master-Detail (==>) │
|
|
└─────────────────────────────────────────────────────────────────────────────┘
|
|
|
|
STORE & PRODUCTS
|
|
┌──────────────┐ ┌──────────────────┐ ┌──────────────┐
|
|
│ WEBSTORE │── LK ──>│ PRODUCT_CATALOG │═══ MD ═>│ PRODUCT2 │
|
|
│ (count) │ │ (count) │ │ (count) │
|
|
└──────┬───────┘ └──────────────────┘ └──────────────┘
|
|
│
|
|
│ BUYERS
|
|
│
|
|
│ LK ┌──────────────────┐ ┌──────────────┐
|
|
└────────────────>│ BUYER_ACCOUNT │◄── LK ──│ ACCOUNT │
|
|
│ (count) │ │ (count) │
|
|
└────────┬─────────┘ └──────────────┘
|
|
│
|
|
│ LK
|
|
▼
|
|
┌──────────────────┐
|
|
│ BUYER_GROUP_ │◄══ MD ══┌──────────────┐
|
|
│ MEMBER (count) │ │ BUYER_GROUP │
|
|
└──────────────────┘ │ (count) │
|
|
└──────────────┘
|
|
|
|
CART
|
|
┌──────────────┐ ┌──────────────────┐ ┌──────────────┐
|
|
│ WEBSTORE │── LK ──>│ WEBCART │═══ MD ═>│ CART_ITEM │
|
|
│ │ │ (count) │ │ (count) │
|
|
└──────────────┘ └────────┬─────────┘ └──────────────┘
|
|
│
|
|
│ LK
|
|
▼
|
|
┌──────────────────┐ converts ┌──────────────┐
|
|
│CART_CHECKOUT_ │·········>│ ORDER │
|
|
│SESSION (count) │ │ (count) │
|
|
└──────────────────┘ └──────────────┘
|
|
```
|
|
|
|
---
|
|
|
|
## Key Relationships Summary
|
|
|
|
| Parent | Child | Type | Behavior |
|
|
|--------|-------|------|----------|
|
|
| WebStore | ProductCatalog | LK | Store products |
|
|
| WebStore | BuyerAccount | LK | Store customers |
|
|
| WebStore | WebCart | LK | Shopping carts |
|
|
| ProductCatalog | Product2 | MD | Catalog products |
|
|
| BuyerGroup | BuyerGroupMember | MD | Group members |
|
|
| Account | BuyerAccount | LK | Commerce enablement |
|
|
| WebCart | CartItem | MD | Cart products |
|
|
| WebCart | CartCheckoutSession | LK | Checkout |
|
|
| CommerceEntitlementPolicy | CommerceEntitlementProduct | MD | Product access |
|
|
| CommerceEntitlementPolicy | CommerceEntitlementBuyerGroup | MD | Group access |
|
|
|
|
---
|
|
|
|
## Limits & Considerations
|
|
|
|
| Limit | Value |
|
|
|-------|-------|
|
|
| Products per store | Unlimited (LDV) |
|
|
| Buyer accounts per store | Unlimited |
|
|
| Cart items per cart | 500 |
|
|
| Active carts per buyer | 1 |
|
|
| Price books per buyer group | Multiple |
|
|
| Entitlement policies | Unlimited |
|
|
|
|
---
|
|
|
|
## B2B vs B2C Commerce
|
|
|
|
| Feature | B2B Commerce | B2C Commerce |
|
|
|---------|--------------|--------------|
|
|
| Customer | Business (Account) | Consumer (Contact) |
|
|
| Pricing | Contract/negotiated | List price |
|
|
| Catalog | Entitlement-based | Public |
|
|
| Checkout | Quote/approval | Immediate |
|
|
| Platform | LWR/Aura | LWR/Headless |
|
|
|
|
---
|
|
|
|
## Best Practices
|
|
|
|
1. **Use `flowchart LR`** - Left-to-right flow for readability
|
|
2. **Keep objects simple** - Name + record count only
|
|
3. **Replace `(count)` placeholders** - With actual counts from query
|
|
4. **Add LDV indicator** - For objects >2M records: `LDV[~4M]`
|
|
5. **Color code object types** - Blue=Standard, Orange=Custom, Green=External
|