Skip to content
Merged
Show file tree
Hide file tree
Changes from all commits
Commits
File filter

Filter by extension

Filter by extension

Conversations
Failed to load comments.
Loading
Jump to
The table of contents is too big for display.
Diff view
Diff view
  •  
  •  
  •  
33 changes: 32 additions & 1 deletion README.md
Original file line number Diff line number Diff line change
Expand Up @@ -70,7 +70,37 @@ Workday-built apps, maintained by Workday. Both tables below are kept in sync wi
<!-- catalog:start -->
| Example | Description | Type |
| --- | --- | --- |
| [`work-from-anywhere-extend-app`](catalog/work-from-anywhere-extend-app) | Enable employees to request to work from anywhere, for a manager to approve, and see requests on a calendar view. | Extend App |
| [`AWSStarterKit`](catalog/AWSStarterKit) | Jumpstart your AWS app with the AWS starter kit examples. | Extend App |
| [`capitalProjectPlanning`](catalog/capitalProjectPlanning) | This application simplifies requesting new capital projects and managing their planned capital funds, providing transparency and accountability. It allows you to track financial impact, manage funds efficiently, and make informed investment decisions. Built to complement Workday Adaptive Planning capabilities, it enhances the end-user experience and streamlines capital project request workflows, especially beneficial for Healthcare, SLED, and beyond. | Extend App |
| [`charitableDonations`](catalog/charitableDonations) | Enable employees to donate to charities with one-time and recurring payroll deductions. Features hubs and cards. | Extend App |
| [`charitableDonationsWithSentimentAnalysis`](catalog/charitableDonationsWithSentimentAnalysis) | Enable employees to donate to charities with one-time and recurring payroll deductions, with the AI Gateway's sentiment analysis API rating charity descriptions. Features hubs and cards. | Extend App |
| [`chartDictionary`](catalog/chartDictionary) | Get familiar with new chart 2.0 widgets with sections for many additional chart features. | Reference |
| [`createAWorkEvent`](catalog/createAWorkEvent) | Enable employees to propose and create work events, to register for events, and use a calendar view. | Extend App |
| [`createSpotBonus`](catalog/createSpotBonus) | Create Spot Bonuses using a single API request from Orchestrate. Powered by Workday Graph API. | Orchestration |
| [`documentIntelligenceWithTheAIGateway`](catalog/documentIntelligenceWithTheAIGateway) | Leverage Workday AI Gateway's Document Intelligence API to scan and capture text from resumes, receipts, and more. | Extend App |
| [`AWSBadgeGenerator`](catalog/AWSBadgeGenerator) | Allow employees to get a photo badge with AI-powered face detection and image generation with Amazon Web Services (AWS). Now featuring Event Bridge for logic routing. | Extend App |
| [`employeeDemographicOutbound`](catalog/employeeDemographicOutbound) | This employee demographic solution can be used as a starting point to generate a delimited file containing employee demographic information. | Integration App |
| [`employeeRecognition`](catalog/employeeRecognition) | Give feedback to your coworkers and even reward them with gift cards for their hard work. | Extend App |
| [`employeeRelationsIncidentManagement`](catalog/employeeRelationsIncidentManagement) | Enable HR to manage protected cases of HR incidents | Extend App |
| [`orchestrationToolkit`](catalog/orchestrationToolkit) | Take advantage of reusable patterns and reference orchestrations for many different Extend use cases. | Reference |
| [`generateWQL`](catalog/generateWQL) | Create WQL Statements with either UI or natural language query using the AI Gateway. | Extend App |
| [`helpCaseCreation`](catalog/helpCaseCreation) | Build a custom Workday UI to facilitate creation of Workday Help Cases. | Extend App |
| [`learningEnrollments`](catalog/learningEnrollments) | This is a sample app that demonstrates fetching the workers that meet a certain condition and enrolling them in a course. In the example case, Workers who are not enrolled in the ‘Test Content’ course are being fetched and enrolled. | Integration App |
| [`locationChangesOutbound`](catalog/locationChangesOutbound) | Post-process the output of Core Connector: Locations with Workday Orchestrate. | Integration App |
| [`multiRater`](catalog/multiRater) | This app enhances the performance review process by allowing multiple raters to provide feedback and the manager to update ratings based on this feedback. | Extend App |
| [`pmdScripting`](catalog/pmdScripting) | See some of the most common uses of PMD Scripting in action. | Reference |
| [`pmdWidgetDictionary`](catalog/pmdWidgetDictionary) | Get to know a wide variety of Presentation Components tags, all demonstrated in this app. | Reference |
| [`prismAndExtendDesignPatterns`](catalog/prismAndExtendDesignPatterns) | This app highlights the importance for designing scalable pages when interacting with large data sets. It also highlights a single threaded pattern for triggering Prism Data Change Tasks (DCT). | Extend App |
| [`requestCreditCard`](catalog/requestCreditCard) | Create a Credit Card request using Workday Orchestrate. | Extend App |
| [`supplierInvoicesInbound`](catalog/supplierInvoicesInbound) | Use Orchestrate for Integrations to import supplier invoices. | Integration App |
| [`tuitionReimbursement`](catalog/tuitionReimbursement) | Create a Tuition Reimbursement Request app using Model Components and an Orchestration to submit a One Time Payment. | Extend App |
| [`updateServiceDateBoomerang`](catalog/updateServiceDateBoomerang) | Update service date based on a certain condition | Integration App |
| [`updateWorkdayAccounts`](catalog/updateWorkdayAccounts) | Fetch workers that meet a certain condition and update their workday accounts. | Integration App |
| [`vehicleRegistration`](catalog/vehicleRegistration) | Allow employees to register their car according to their location. Includes translations, and powered by Workday Graph API and external APIs. | Extend App |
| [`workFromAlmostAnywhere`](catalog/workFromAlmostAnywhere) | Enable employees to request to work from anywhere, for a manager to approve, and use a calendar view. | Extend App |
| [`orchestrateForIntegrationsSampler`](catalog/orchestrateForIntegrationsSampler) | Take advantage of reusable patterns and reference orchestrations for many different integration use cases. | Reference |
| [`wql`](catalog/wql) | Compare organization data from the standard endpoint with the data from WQL. | Reference |
| [`workerInboundImageUpload`](catalog/workerInboundImageUpload) | Use an Integration System orchestration to retrieve and load worker photos. | Integration App |
<!-- catalog:end -->

## Examples
Expand All @@ -82,6 +112,7 @@ Community examples, open to everyone. This is the section external contributions
| --- | --- | --- |
| [`expense-policy-agent-skill`](examples/expense-policy-agent-skill) | A markdown skill that teaches an agent to answer expense policy questions and escalate anything it cannot verify. | Agent Skill |
| [`employee-data-orchestration`](examples/employee-data-orchestration) | An orchestration that reads worker data from one tenant and creates matching records through the Workday REST API. | Orchestration |
| [`stock-notifications`](examples/stock-notifications) | An Extend app that fetches Workday's current stock price from an external API and displays it on a home page card. | Extend App |
<!-- examples:end -->

## Contributing
Expand Down
150 changes: 150 additions & 0 deletions catalog/AWSBadgeGenerator/README.md
Original file line number Diff line number Diff line change
@@ -0,0 +1,150 @@
---
title: Employee Badge Provisioning with Amazon Web Services
description: Allow employees to get a photo badge with AI-powered face detection and image generation with Amazon Web Services (AWS). Now featuring Event Bridge for logic routing.
---

_Version 2025.1_

_For details and updates associated with this version of the app, see the [App Catalog Changelog](https://forum.developer.workday.com/t/app-catalog-changelog/8423)._

# Introduction

_View the [Amazon Web Services starting page on the developer forum](https://forum.developer.workday.com/t/start-here-welcome-to-the-ea-program/5550) for more details._

_View the [Additional Docs for this App](https://forum.developer.workday.com/t/new-devcon-2025-reference-app-badge-generator/24279) for more details._

## Overview

This app extends Workday’s delivered onboarding business process to:

1. Guide new hires on uploading a photo for the new badge
2. Provide interactive validation and feedback to new hires on their photo
3. Automate the decision making process of whether the HR Partner should approve the photo
4. Automate the provisioning of a virtual badge

# Deploy Instructions

## Create Copy (Recommended)

1. Click the "Create Copy" button above.
2. To modify app source code:
1. Open the app in the [Console](https://developer.workday.com/console/apps).
2. Click **Open in App Builder**.
3. After making any changes, **Save and Deploy**.

# Workday Configuration Instructions

## App Security

### Create an ISU

1. Navigate to your app under the App Manager Task.
2.
3. Name this user `AWSExtendISU`.
4. Set a password for this user.
5. Click the _OK_ button.

### Create a New Integration System Security Group (ISSG)

1. Navigate to the task `Create Security Group`
2. For the Type of Tenanted Security Group choose `Integration System Security Group (Unconstrained)`
3. Name your Security Group `AWSExtendISSG`. Click _OK_.
4. Add the ISU you created `AWSExtendISU` to the Integration System Users field. Click OK.

### Client Credentials Mapping

1. [Create Your API Client](https://developer.workday.com/documentation/zwx1518028675482). Make note of the client ID and client secret of your app. For _Redirect URI_ and _Authorized CORS Domains_, you can input any value as they will not be used for this application.
2. Navigate to the task _Create Client Credentials Mapping_ in your tenant.
3. For Client ID, input the client ID from Step 1.
4. Add the ISU you created `AWSExtendISU` to the _Integration System User_ field. Click _OK_.

### Create Model Security Domains

Using _App Manager_, perform the following steps:

1. In the _Model Components_ section, locate the Security Domain `AWS Onboarding App` and click _Create_ in the _Domain Security Policy_ column.
2. Check `Confirm` and click _OK_.
3. Add the following `Report/Task Permissions` to the Domain Security Policy: _Modify:_ `Employee as Self` and `AWSExtendISSG`

### Business Process Security Policy

1. In the Search Bar within your tenant, type in `bp: onboarding`. Then, choose the definition you would like to modify. For example, choose the _Onboarding for Global Modern Services_ business process definition if you are in a GMS tenant.
2. Next, choose the _Related Actions_ next to the definition, and choose `Business Process Policy -> Edit`. Click the _OK_ button on the pop-up screen.
3. Add the `AWSExtendISSG` security group to the _View All_ action.
4. Click the _OK_ button at the bottom of the screen.
5. Run task Activate Pending Security Policy Changes.

## **Business Process and Notifications**

The purpose of this automation is to automatically validate Worker images and provision badges when onboarding new hires. We'll need to modify the onboarding business process:

1. In the Search Bar within your tenant, type in bp: onboarding. Then, choose the definition you would like to modify. For example, choose the _Onboarding for Global Modern Services_ business process definition if you are in a GMS tenant.
2. Next, choose the _Related Actions_ next to the definition, and choose Business Process -\> Edit Definition. Click the _OK_ button on the pop-up screen.
3. Here, click the + button to add a new step to the Business Process:

- Input a new _Order_. For example, input _b_ so that badge provisioning is the first step after initiation of the business process.
- For _Type_, choose `To Do`
- For _Specify_, choose `Get your badge`
- For _Group_, choose `Employee as Self` and `AWSExtendISSG`
- Click _OK_

4. After you've added the step, we now need to configure a custom notification to the new hire letting them know their badge has been created. Choose the _Related Actions_ next to the definition, and choose Business Process -\> Add Notification. Click the _OK_ button on the pop-up screen.
5. In the **Triggers** section, choose On Exit and select the business process step you created in step 3. For example, b - To Do: Get your badge.
6. In the **Recipients** section, choose Employee as Self in the **Groups** field.
7. In the **Message Content** section, input Your badge has been created. in the Text field of the **Subject** sub-section.
8. In the **Message Content** section, add the following 4 rows in the **Body** sub-section:

- Text: `Congratulations! Your badge has been created.`
- Field: `Line Break`
- Field: `Line Break`
- Text: `\<a href="url"\>www.workday.com\</a\>`

##

## AWS Configuration Instructions

All AWS services required for the sample Badge application are already configured in your account. Review the following items in your AWS account as a guide to using AWS services.

**Lambda Functions**

Your AWS account contains two Lambda Functions. From the AWS Console, navigate to Lambda from the top Service menu. This takes you to the Functions list screen where you see the functions:

- **badge-validate-photo** – this function validates the photo submitted by the user of the Extend app. It is invoked by the _ **validatePhoto** _ orchestration in Extend.
- **badge-create** – this function generates a badge from the photo submitted by the user and places the badge image file in your S3 bucket.

Source code for these Lambda functions is located in your S3 bucket under the **apps/badge-create** folder. The Python source code for each function is located in a ZIP file, which you can download, open, and review.

**S3 Bucket**

All files and data for your application are located in one S3 bucket named:

- workday-devcon-hackathon-[team name]

To review the contents of this bucket, navigate to the S3 service using the AWS Console.

**Event Bridge**

All messages between Extend and AWS are sent on the Event Bridge Event Bus named

- tenant-event-bus

An example of sending messages from Extend to AWS using the event bus can be reviewed in the **generateBadge** orchestration in Extend.

To send messages from AWS back to Extend, three items are configured in your AWS account. These are all visible by navigating to the Event Bridge service from the Services menu in the AWS Console. These include:

- **API Destination Connection** named _WorkdayExtendConnection_. This item contains the OAuth credentials and Endpoint to authenticate requests to your Extend tenant. It is configured with the _client Id_ and _secret_ referred to in the Client Credentials Mapping section above
- **API Destination** named _APIDestination-xxxxxxx._ This item is configured to POST messages back to the **inboundBadgeComplete** orchestration in the Extend sample app. The destination is configured with an endpoint specific to that orchestration. The API Destination uses the API Destination Connection to authenticate the POST request. If you create additional Extend orchestrations to process inbound messages, you must create a new API Destination for each orchestration, but can reuse the same API Destination Connection.
- **Event Bus Rules** are accessed from the _Buses / Rules_ menu item in Event Bridge and by selecting the _tenant-event-bus_.
- **APIDestinationInboundRule** handles messages put to the _tenant-event-bus_ by the **badge-create** Lambda function. These messages are posted back to the **inboundBadgeComplete** orchestration in the Extend sample
- **SampleAppBadgeCreateRule** handles messages posted from the **generateBadge** orchestration in Extend and are routed to the **badge-create** Lambda function for processing.

##

## Usage Instructions

1. Run the **Launch Onboarding** task to initiate the onboarding process for a new hire. For example, in a GMS tenant, Logan McNeil can initiate the process for James Walker.
2. Run task **Manage Badges** to view all badges issued for the current Worker.
3. Click on the **Create Badge** task in the new hire's inbox.
4. Run task **View My Badge** to view the badge for the current Worker.

Note that the last 3 tasks can only be run by the current user for themselves (Employee As Self), per the **Create Model Security Domains** configuration instructions above.
4 changes: 4 additions & 0 deletions catalog/AWSBadgeGenerator/appManifest.json
Original file line number Diff line number Diff line change
@@ -0,0 +1,4 @@
{
"referenceId": "awsBadgeGenerator",
"name": "AWS Badge Generator"
}
20 changes: 20 additions & 0 deletions catalog/AWSBadgeGenerator/example.json
Original file line number Diff line number Diff line change
@@ -0,0 +1,20 @@
{
"title": "Employee Badge Provisioning with Amazon Web Services",
"description": "Allow employees to get a photo badge with AI-powered face detection and image generation with Amazon Web Services (AWS). Now featuring Event Bridge for logic routing.",
"type": "Extend App",
"components": [
"Presentation",
"Model",
"Orchestration",
"AWS Integration",
"3rd-Party Technology"
],
"products": [
"Workday Extend",
"Workday Orchestrate",
"Workday HCM"
],
"authors": [],
"tutorial": "https://forum.developer.workday.com/t/new-devcon-2025-reference-app-badge-generator/24279",
"source": "workday"
}
Original file line number Diff line number Diff line change
@@ -0,0 +1,6 @@
{
"id": 1,
"name": "AwsOnboardingApp",
"label": "AWS Onboarding App",
"enabledForPageSecurity": true
}
30 changes: 30 additions & 0 deletions catalog/AWSBadgeGenerator/model/Badge.businessobject
Original file line number Diff line number Diff line change
@@ -0,0 +1,30 @@
{
"id": 1,
"name": "Badge",
"label": "Badge",
"defaultSecurityDomains": [
"AwsOnboardingApp"
],
"defaultCollection": {
"name": "badges",
"label": "Badges"
},
"fields": [
{
"id": 3,
"name": "worker",
"label": "Worker",
"type": "SINGLE_INSTANCE",
"target": "WORKER",
"secureByTarget": true,
"useForDisplay": false
},
{
"id": 4,
"name": "photo",
"label": "Photo",
"type": "SINGLE_INSTANCE",
"target": "BadgePhoto"
}
]
}
23 changes: 23 additions & 0 deletions catalog/AWSBadgeGenerator/model/BadgePhoto.attachment
Original file line number Diff line number Diff line change
@@ -0,0 +1,23 @@
{
"id": 1,
"name": "BadgePhoto",
"label": "Badge Photo",
"defaultSecurityDomains": [
"AwsOnboardingApp"
],
"defaultCollection": {
"name": "badgePhotos",
"label": "Badge Photos"
},
"fields": [
{
"id": 1,
"name": "badge",
"label": "Badge",
"type": "SINGLE_INSTANCE",
"target": "Badge",
"secureByTarget": true,
"useForDisplay": false
}
]
}
9 changes: 9 additions & 0 deletions catalog/AWSBadgeGenerator/model/CreateBadge.task
Original file line number Diff line number Diff line change
@@ -0,0 +1,9 @@
{
"id": 1,
"name": "CreateBadge",
"label": "Create Badge",
"securityDomains": [
"AwsOnboardingApp"
],
"routePath": "/UploadBadgePhoto"
}
9 changes: 9 additions & 0 deletions catalog/AWSBadgeGenerator/model/ManageBadges.task
Original file line number Diff line number Diff line change
@@ -0,0 +1,9 @@
{
"id": 3,
"name": "ManageBadges",
"label": "Manage Badges",
"securityDomains": [
"AwsOnboardingApp"
],
"routePath": "/ReviewBadges"
}
30 changes: 30 additions & 0 deletions catalog/AWSBadgeGenerator/model/Selfie.attachment
Original file line number Diff line number Diff line change
@@ -0,0 +1,30 @@
{
"id": 2,
"name": "Selfie",
"label": "Selfie",
"defaultSecurityDomains": [
"AwsOnboardingApp"
],
"defaultCollection": {
"name": "selfies",
"label": "Selfies"
},
"fields": [
{
"id": 1,
"name": "worker",
"label": "Worker",
"type": "SINGLE_INSTANCE",
"target": "WORKER",
"secureByTarget": true,
"useForDisplay": false
},
{
"id": 2,
"name": "badge",
"label": "Badge",
"type": "SINGLE_INSTANCE",
"target": "Badge"
}
]
}
11 changes: 11 additions & 0 deletions catalog/AWSBadgeGenerator/model/ViewMyBadge.task
Original file line number Diff line number Diff line change
@@ -0,0 +1,11 @@
{
"id": 2,
"name": "ViewMyBadge",
"label": "View My Badge",
"securityDomains": [
"AwsOnboardingApp"
],
"routePath": "/ViewMyBadge",
"businessObject": "WORKER",
"secured": true
}

Large diffs are not rendered by default.

Loading