Examples
Real-world usage patterns and best practices.
Create Account with Contacts
Go
func createAccountWithContacts(ctx context.Context, client *salesforce.Client) error {
// Use composite API for atomic creation
resp, err := client.Composite().Execute(ctx, composite.Request{
AllOrNone: true,
CompositeRequest: []composite.Subrequest{
{
Method: "POST",
URL: "/services/data/v59.0/sobjects/Account",
ReferenceId: "newAccount",
Body: map[string]interface{}{
"Name": "Acme Corp",
"Industry": "Technology",
},
},
{
Method: "POST",
URL: "/services/data/v59.0/sobjects/Contact",
ReferenceId: "contact1",
Body: map[string]interface{}{
"LastName": "Smith",
"AccountId": "@{newAccount.id}",
},
},
},
})
return err
}
Bulk Import from CSV
Go
func importAccounts(ctx context.Context, client *salesforce.Client, csvFile string) error {
// Read CSV
file, _ := os.Open(csvFile)
reader := csv.NewReader(file)
rows, _ := reader.ReadAll()
// Create job
job, _ := client.Bulk().CreateJob(ctx, bulk.CreateJobRequest{
Object: "Account",
Operation: bulk.OperationInsert,
})
// Convert rows to maps
headers := rows[0]
var records []map[string]string
for _, row := range rows[1:] {
record := make(map[string]string)
for i, val := range row {
record[headers[i]] = val
}
records = append(records, record)
}
// Upload and process
client.Bulk().UploadCSV(ctx, job.ID, records, headers)
client.Bulk().CloseJob(ctx, job.ID)
job, _ = client.Bulk().WaitForCompletion(ctx, job.ID, 5*time.Second)
fmt.Printf("Processed: %d, Failed: %d\n",
job.NumberRecordsProcessed, job.NumberRecordsFailed)
return nil
}
Export All Records
Go
func exportAccounts(ctx context.Context, client *salesforce.Client) error {
// Get all records with automatic pagination
records, err := client.Query().ExecuteAllRecords(ctx,
"SELECT Id, Name, Industry, AnnualRevenue FROM Account")
if err != nil {
return err
}
// Write to CSV
file, _ := os.Create("accounts.csv")
writer := csv.NewWriter(file)
writer.Write([]string{"Id", "Name", "Industry", "AnnualRevenue"})
for _, r := range records {
writer.Write([]string{
r.StringField("Id"),
r.StringField("Name"),
r.StringField("Industry"),
fmt.Sprintf("%.2f", r.FloatField("AnnualRevenue")),
})
}
writer.Flush()
return nil
}
Monitor API Limits
Go
func checkLimits(ctx context.Context, client *salesforce.Client) {
limits, _ := client.Limits().GetLimits(ctx)
// Alert if approaching limits
if limits.DailyApiRequests.PercentUsed() > 80 {
log.Warn("API requests at 80%!")
}
if limits.DataStorageMB.PercentUsed() > 90 {
log.Error("Data storage critical!")
}
}