# 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)