# README

SObject Tree API

back

The tree package is an implementation of Salesforce APIs centered on SObject Tree operations. These operations include:

  • Create Multiple Records with Children

As a reference, see Salesforce API documentation

Examples

The following are examples to access the APIs. It is assumed that a go-sfdc session has been created.

Builder

type treeBuilder struct {
	sobject     string
	fields      map[string]interface{}
	referenceID string
}

func (b *treeBuilder) SObject() string {
	return b.sobject
}
func (b *treeBuilder) Fields() map[string]interface{} {
	return b.fields
}
func (b *treeBuilder) ReferenceID() string {
	return b.referenceID
}

// build some records
accountRef1Builder := &treeBuilder{
	sobject:     "Account",
	referenceID: "ref1",
	fields: map[string]interface{}{
		"name":              "SampleAccount11",
		"phone":             "1234567890",
		"website":           "www.salesforce.com",
		"numberOfEmployees": 100,
		"industry":          "Banking",
	},
}
accountRef2Builder := &treeBuilder{
	sobject:     "Account",
	referenceID: "ref4",
	fields: map[string]interface{}{
		"name":              "SampleAccount112",
		"Phone":             "1234567890",
		"website":           "www.salesforce2.com",
		"numberOfEmployees": 100,
		"industry":          "Banking",
	},
}
contactRef3Builder := &treeBuilder{
	sobject:     "Contact",
	referenceID: "ref2",
	fields: map[string]interface{}{
		"lastname": "Smith11",
		"title":    "President",
		"email":    "[email protected]",
	},
}
contactRef4Builder := &treeBuilder{
	sobject:     "Contact",
	referenceID: "ref3",
	fields: map[string]interface{}{
		"lastname": "Evans11",
		"title":    "Vice President",
		"email":    "[email protected]",
	},
}

account1RecordBuilder, err := tree.NewRecordBuilder(accountRef1Builder)
if err != nil {
	fmt.Printf("NewRecordBuilder Error %s\n", err.Error())
	return
}
contact1RecordBuilder, err := tree.NewRecordBuilder(contactRef3Builder)
if err != nil {
	fmt.Printf("NewRecordBuilder Error %s\n", err.Error())
	return
}
contact2RecordBuilder, err := tree.NewRecordBuilder(contactRef4Builder)
if err != nil {
	fmt.Printf("NewRecordBuilder Error %s\n", err.Error())
	return
}
account1RecordBuilder.SubRecords("contacts", contact1RecordBuilder.Build(), contact2RecordBuilder.Build())

account2RecordBuilder, err := tree.NewRecordBuilder(accountRef2Builder)
if err != nil {
	fmt.Printf("NewRecordBuilder Error %s\n", err.Error())
	return
}

Create Accounts with Children

inserter := &treeInserter{
	sobject: "Account",
	records: []*tree.Record{
		account1RecordBuilder.Build(),
		account2RecordBuilder.Build(),
	},
}
resource := tree.NewResource(session)
value, err := resource.Insert(inserter)
if err != nil {
	fmt.Printf("resource.Insert Error %s\n", err.Error())
	return
}
fmt.Printf("%+v\n", *value)

# Functions

NewRecordBuilder will create a new builder.
NewResource creates a new composite tree resource from the session.

# Structs

Attributes are the attributes of the composite tree.
InsertValue is the return value for each record.
Record is the composite tree SObject.
RecordBuilder is record builder for the composite SObject Tree API.
Resource is the composite tree API resource.
Value is the return value from the API call.

# Interfaces

Builder is the SObject Tree builder for the composite SObject Tree API.
Inserter is used to define the SObject and it's records for the composite tree API.