A collection of go packages to aid with Workday integrations.
I no longer have access to a Workday tenant to test this package. If you can or know of someone who can provide a test tenant please reach out.
Name | Path | Description |
---|---|---|
raas | /pkg/raas/ |
Reports as a Service (RaaS) client and utilities |
wd | /pkg/wd/ |
Shared Workday type and utilities |
session | /pkg/wd/session |
Provides configuration for Workday service clients |
credentials | /pkg/wd/credentials |
Credential retrieval and management |
Session provides configuration for Workday service clients.
The following environment variables can be used to configure a session.
Name | Description |
---|---|
WD_ENVIRONMENT |
Workday Environment: Production or Implementation |
WD_TENANT |
Workday tenant name |
Basic Auth | |
WD_BASIC_AUTH_USERNAME |
Basic auth username |
WD_BASIC_AUTH_PASSWORD |
Basic auth password |
OAuth Client Credentials | |
WD_CLIENT_CREDENTIALS_CLIENT_ID |
OAuth client credentials client ID |
WD_CLIENT_CREDENTIALS_CLIENT_SECRET |
OAuth client credentials secret |
WD_CLIENT_CREDENTIALS_REFRESH_TOKEN |
OAuth client credentials refresh token |
import (
"github.com/ianlopshire/go-workday/pkg/wd/session"
)
sess, err := session.NewSession()
if err != nil {
log.fatal(err)
}
The session can also be manually configured.
import (
"github.com/ianlopshire/go-workday/pkg/wd"
"github.com/ianlopshire/go-workday/pkg/wd/credentials"
"github.com/ianlopshire/go-workday/pkg/wd/session"
)
config := session.Config{
Environment: wd.String(wd.EnvironmentImplementation),
Tenant: wd.String("Tenant"),
Credentials: &credentials.BasicAuthCredentials{
Username: "username",
Password: "password",
},
}
sess, err := session.NewSession(session.FromConfig(config))
if err != nil {
log.Fatal(err)
}
The RaaS client aids in fetching Workday data via RaaS.
sess, err := session.NewSession()
if err != nil {
log.Fatal(err)
}
client := raas.NewClient(sess)
def := raas.Definition{
Owner: "imlopshire",
Name: "example_worker_report",
}
// Define the layout of the data in the custom report.
var layout []struct {
WID string `xml:"wid"`
Name string `xml:"name"`
YearsOfService int `xml:"years_of_service"`
}
// Define the values for any report prompts.
query := url.Values{}
query.Set("workers", "Employee_ID:1001")
// Fetch the report data and decode into layout.
err = client.CallXML(context.Background(), def, query, &layout)
if err != nil {
log.Fatal(err)
}
// Use the resulting data.
for i := range layout {
fmt.Printf("%+v", layout[i])
}