Technical Implementation Guide

Technical details and implementation patterns for our Salesforce NPSP integration

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