なぜ私は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お待ちしておりますー