2018-09-10

Salesforce SOAP APIのgolangクライアント作った

なぜ私はSalesforceのツールを作るのか…。ということでgolangのクライアント作りました。

モチベーションとしてはYet Another Salesforce Dataloaderをgolangで作ろうと思っているんですが、それを作るにはまずSOAPのクライアントで複数件の一括CRUDを実現させなければならない、ということでヤクの毛刈りをした感じです。

使い方

↓でインストール
go get github.com/tzmfreedom/go-soapforce

ログイン

client := soapforce.NewClient()
res, err := client.Login("username", "password")

Insert

sobjects := []*soapforce.SObject{
	{
		Type: "Account",
		Fields: map[string]string{
			"Name": "Foo",
		},
	},
}
res, err := client.Create(sobjects)

Update

sobjects := []*soapforce.SObject{
	{
		Type: "Account",
		Id: "001xxxxxxxxxxxxxxx",
		Fields: map[string]string{
			"Name": "Foo",
		},
	},
}
res, err := client.Update(sobjects)

Upsert

sobjects := []*soapforce.SObject{
	{
		Type: "Account",
		Id:"001xxxxxxxxxxxxxxx",
		Fields: map[string]string{
			"Name": "Foo",
		},
	},
}
res, err := client.Upsert(sobjects, "Id")

Delete

ids := []string{
	"001xxxxxxxxxxxxxxx",
}
sResult, err := client.Delete(ids)

Undelete

ids := []string{
	"001xxxxxxxxxxxxxxx",
}
sResult, err := client.Undelete(ids)

Query

res, err := client.Query("SELECT id, Name FROM Account")

QueryMore

res, err := client.Query("SELECT id, Name FROM Account")
res, err = client.QueryMore(res.QueryLocator)

バッチサイズを変更

client.SetBatchSize(200)

GetUserInfo

res, err := client.GetUserInfo()

Sandboxの場合

client.SetLoginUrl("test.salesforce.com") # マイドメインの場合はそのままマイドメインをセットすればOK

リクエスト/レスポンスのデバッグをしたい場合

client.SetDebug(true)

アプローチ

基本的にはgowsdlでpartner.wsdlを食わせてスタブを自動的に作成しました。そのままだとエラーになる箇所があったので適宜修正しています

一応Describeも使いそうなやつだけ対応してますが対応メソッド増やしたい場合はPullRequestお待ちしておりますー

このエントリーをはてなブックマークに追加