hsforce: Salesforce API Client

This is a package candidate release! Here you can preview how this package release will appear once published to the main package index (which can be accomplished via the 'maintain' link below). Please note that once a package has been published to the main package index it cannot be undone! Please consult the package uploading documentation for more information.

[maintain] [Publish]

This package provides bindings to Salesforce API https://github.com/githubuser/hsforce#readme


[Skip to Readme]

Properties

Versions 0.1.0.0, 0.1.0.0, 0.1.0.1
Change log ChangeLog.md
Dependencies aeson (>=1.4.2 && <1.5), base (>=4.7 && <5), bytestring (>=0.10.8 && <0.11), fast-tagsoup (>=1.0.14 && <1.1), HaXml (>=1.25.4 && <1.26), http-conduit (>=2.3.4 && <2.4), network-uri (>=2.6.1 && <2.7), regex-posix (>=0.95.2 && <0.96), tagsoup (>=0.14.7 && <0.15), template-haskell (>=2.14.0 && <2.15), text (>=1.2.2 && <1.3), unordered-containers (>=0.2.7 && <0.3), uri-encode (>=1.5.0 && <1.6) [details]
License BSD-3-Clause
Copyright 2019 Makoto Tajitsu
Author Makoto Tajitsu
Maintainer makoto_tajitsu@hotmail.co.jp
Category Web
Home page https://github.com/tzmfreedom/hsforce#readme
Bug tracker https://github.com/tzmfreedom/hsforce/issues
Source repo head: git clone https://github.com/tzmfreedom/hsforce
Uploaded by tzmfreedom at 2019-03-04T04:59:04Z

Modules

[Index] [Quick Jump]

Downloads

Maintainer's Corner

Package maintainers

For package maintainers and hackage trustees


Readme for hsforce-0.1.0.0

[back to package description]

hsforce

Usage

Login and create Salesforce client.

main :: IO ()
main = do
  username <- getEnv "SALESFORCE_USERNAME"
  password <- getEnv "SALESFORCE_PASSWORD"
  endpoint <- getEnv "SALESFORCE_ENDPOINT"
  version <- getEnv "SALESFORCE_VERSION"
  client <- login username password endpoint version

create data type that is SObject class.

import Data.Aeson as JSON
import Data.Maybe

data Account = Account{
  sfid :: Maybe String,
  name :: Maybe String,
  ex :: Maybe String
} deriving Show

instance SObject Account where
  typeName a = "Account"
  getSfid = fromJust . sfid

instance FromJSON Account where
  parseJSON = withObject "Account" $ \v -> do
    sfid <- v .: "Id"
    name <- v .:? "Name"
    ex <- v .:? "Ex__c"
    return Account{..}

instance ToJSON Account where
  toJSON (Account{sfid, name, ex}) =
    object ["Name" .= name]

CRUD API

-- insert object
insert client Account{sfid = Nothing, name = Just "hogehoge", ex = Nothing}

-- update object
update client Account{sfid = Just "xxxx", name = Just "foobar"}

-- upsert object
upsert client Account{sfid = Nothing, name = Just "foobar", ex = Just "aaa"} "Ex__c" "aaa"

-- delete object
delete client Account{sfid = Just "xxxx"}

-- query
query client "SELECT Id, Name FROM Account WHERE Name = 'foobar'" (Proxy :: Proxy Account)

-- queryMore
queryMore client "/services/data/v20.0/query/01gD0000002HU6KIAW-2000" (Proxy :: Proxy Account)

-- queryAll
queryAll client "SELECT Id, Name FROM Account WHERE Name = 'foobar'" (Proxy :: Proxy Account)

-- queryAllMore
queryAllMore client "/services/data/v20.0/queryMore/01gD0000002HU6KIAW-2000" (Proxy :: Proxy Account)

-- explain
explain client "SELECT Id FROM Account"

-- describe
describe client "Account" (Proxy :: Proxy Account)

-- describeDetail
describeDetail client "Account"

-- describeGlobal
describeGlobal client

-- recordCount
recordCount client ["Account", "Contact", "Opportunity"]

-- versions
versions client