Technical Implementation Guide

This guide provides technical details about our Salesforce NPSP integration implementation.

Integration Architecture

Our Salesforce integration is built on a layered architecture:

  1. Base Integration Layer

    • CrmIntegration base class
    • Common CRM operations
    • Authentication handling
  2. Salesforce Specific Layer

    • Salesforce class extending CrmIntegration
    • NPSP-specific implementations
    • Custom Salesforce API handling
  3. Model Layer

    • SalesforceIntegration model
    • Field mapping management
    • Integration configuration

Core Classes

Salesforce Integration Class

The main integration class (App\Integrations\Salesforce) provides:

class Salesforce extends CrmIntegration
{
    // Authentication and connection management
    protected function accessToken()
    protected function http()
    
    // Data synchronization methods
    public function pullDonors()
    public function pullCampaigns()
    public function pullTransactions()
    // ... other pull methods
    
    public function pushDonor()
    public function pushTransaction()
    public function pushCampaign()
    // ... other push methods
}

Salesforce Integration Model

The SalesforceIntegration model (App\Models\SalesforceIntegration) handles:

class SalesforceIntegration extends Model
{
    // Field mapping management
    public function getContactFieldOptionsAttribute()
    public function getAccountFieldOptionsAttribute()
    public function getOpportunityFieldOptionsAttribute()
    // ... other field options
    
    // Integration configuration
    public function setupDefaultMappings()
    public function createMappingRule()
}

Key Implementation Patterns

1. Data Synchronization

Pull Operations

// Example pull operation
protected function pullDonors($from = null, $to = null)
{
    // SOQL query construction
    // Data transformation
    // Model creation/update
}

// Example push operation
public function pushTransaction(Transaction $transaction)
{
    // Payload compilation
    // API call
    // Response handling
}

2. Field Mapping

Field mapping is managed through the SalesforceIntegration model:

// Example field options
public function getContactFieldOptionsAttribute()
{
    return $this->getFieldOptions('Contact');
}

// Mapping rule creation
public function createMappingRule($data)
{
    // Rule validation
    // Mapping creation
    // Configuration update
}

3. Data Transformation

Payload Compilation

// Example payload compilation
public function compileDonorPayload(Donor $donor): array
{
    // Field mapping
    // Data transformation
    // Validation
}

public function compileTransactionPayload(Transaction $transaction)
{
    // Opportunity creation
    // Payment handling
    // Allocation management
}

4. Error Handling

The integration implements comprehensive error handling:

// Example error handling
protected function handleApiError($response)
{
    // Error logging
    // Rate limit handling
    // Retry logic
}

API Integration Details

Authentication

protected function accessToken()
{
    // OAuth token management
    // Token refresh
    // Error handling
}

HTTP Client

public function http()
{
    // Client configuration
    // Headers management
    // Rate limiting
}

Data Models

Core Models

  1. Donor Model

    • Maps to Salesforce Contact
    • Handles individual and organizational donors
    • Supports merge operations
  2. Transaction Model

    • Maps to Salesforce Opportunity
    • Includes payment information
    • Supports allocations
  3. Campaign Model

    • Maps to Salesforce Campaign
    • Manages campaign members
    • Supports events and fundraisers

Supporting Models

  1. ScheduledDonation

    • Maps to Recurring Donation
    • Payment schedule management
  2. Pledge

    • Maps to NPSP Pledge
    • Commitment tracking
  3. SoftCredit

    • Influence tracking
    • Attribution management

Best Practices

1. API Usage

  • Implement proper rate limiting
  • Use batch operations when possible
  • Handle API errors gracefully
  • Monitor API call limits

2. Data Management

  • Use provided sync methods
  • Follow field mapping conventions
  • Implement proper validation
  • Handle merges correctly

3. Performance

  • Implement caching where appropriate
  • Use batch operations
  • Monitor API call patterns
  • Optimize query patterns

4. Security

  • Secure token management
  • Proper error handling
  • Data validation
  • Access control

Troubleshooting

Common Issues

  1. API Rate Limits

    • Monitor API call patterns
    • Implement proper retry logic
    • Use batch operations
  2. Data Synchronization

    • Check field mappings
    • Verify data transformation
    • Monitor sync logs
  3. Authentication

    • Token refresh handling
    • Connection management
    • Error recovery

Debugging

  1. Logging

    • Integration logs
    • API call tracking
    • Error monitoring
  2. Monitoring

    • Performance metrics
    • API usage
    • Sync status

Development Guidelines

  1. Code Structure

    • Follow existing patterns
    • Maintain separation of concerns
    • Document new features
  2. Testing

    • Unit test new features
    • Integration testing
    • API mocking
  3. Documentation

    • Update field mappings
    • Document new features
    • Maintain technical docs