diff --git a/connection-guides/hris/workday-raas.mdx b/connection-guides/hris/workday-raas.mdx index c7fb2a7..c51edf7 100644 --- a/connection-guides/hris/workday-raas.mdx +++ b/connection-guides/hris/workday-raas.mdx @@ -6,12 +6,11 @@ description: "Follow these steps to connect Workday via Report as a Service (Raa import IntegrationFooter from "/snippets/integration-footer.mdx" - This guidance assumes that you have admin privileges for your Workday account. + This guidance assumes you have administrative privileges for your Workday account. -Workday Report as a Service (RaaS) allows you to create custom reports and expose them as web services for integration purposes. This guide will walk you through setting up an Integration System User, creating a custom report, and connecting it through the integration platform. -## Set up an Integration System User +## Set Up an Integration System User (Optional) Setting up an **Integration System User (ISU)** is recommended but optional. You can use an existing Workday user account with appropriate permissions instead. @@ -19,90 +18,52 @@ Workday Report as a Service (RaaS) allows you to create custom reports and expos - - Search and navigate to the `Create Integration System User` task. - + + Search for and open the `Create Integration System User` task. - Create Integration System User + Create Integration System User - Enter a username and password in the Account Information section. - + Enter a username and strong password in the Account Information section, then click `OK` to create the user. - Account Information + Account Information - - Click `OK` to create the user. -## Create Custom Report - - - Enter "Create Custom Report" in the Workday search bar and select it from the results. +## Create and View a Custom Report (Optional) + + + Search and navigate to the `Create Custom Report` task - Accessing Report Designer + Accessing Report Designer - - Click "Create Custom Report" to begin the setup process. - - - -## Configure Report Settings - - - - Enter the required information: - - - **Report Name**: Must be unique within your tenant - - **Report Type**: Select "Simple" - + + Follow the steps below to configure the custom report: + + - **Report Name**: Must be unique within the tenant + - **Report Type**: Select **Advanced** + - **Optimised for Performance**: Tick this box to enhance performance + - **Data Source**: Choose the appropriate data source based on the data you need (e.g. Workers for HCM reporting). + - Create Custom Report + Create Custom Report - - - - Choose the appropriate data sources for your report based on the information you need to extract. - - - - Add and configure the necessary fields for your integration: - - 1. Click "Add Field" - 2. Select the source object - 3. Choose the specific field - 4. Configure field properties as needed - 5. Set each "Column Heading Override XML Alias" to the corresponding field names + Click `OK` to continue. + Add and configure report fields: + - Click the `+` icon to add a field. + - Select a Business Object (e.g. Worker) in the **Business Object** column. + - Choose the specific field (e.g. Employee ID) in the **Field** column. + - Set aliases in **Column Heading Override** and **Column Heading Override XML Alias** to ensure stable field names in API responses. - For employee data, you may want to include fields such as: + For employee data, you can include the following fields: - Employee_ID - First_Name - Last_Name @@ -118,165 +79,66 @@ Workday Report as a Service (RaaS) allows you to create custom reports and expos - Termination_Date - Company_Name - - Basic Settings + Fields and Aliases Settings - - - Add filters to refine the data displayed in your report. You can select the field and operators to filter by. + + Add filters to narrow the result data set (e.g. Supervisory Organisation – Primary Position). - Filters + Filters Settings - - -## Enable RaaS Settings - - - - Navigate to the "Advanced" tab and enable web service settings: + + Enable prompt display by ticking **Display Prompt Values in Subtitle**. Leave other settings at their defaults. - RaaS Settings + Prompts Settings - - 1. Check "Enable as Web Service" - 2. Press "OK" to save - - - Press the three-dot menu and select "Web Service" => "View URLs". + + Tick **Optimised for Performance** and **Enable As Web Service**. Leave other advanced options unchanged. - View URLs + Advanced Settings + Click `OK` to save the report. - - - Copy the URL and save it. This will be used to configure the integration. + + Search for `View Custom Report`, select the report you just created, then click `OK` to open it. - Copy Report URL + Accessing Report Designer - - -## Configure Security Group Permissions - - - - Search for "Create Security Group" and select "Integration System Security Group (Unconstrained)" as the type. Enter a name for the security group and add the Integration System User you created earlier. - - - - Ensure the Integration System User has access to the custom report: - - - Navigate to "Maintain Permissions for Security Group" - - Select your security group - - Grant **Get Only** access to the custom report - - Verify the ISU has access to the report's data source - - - -## Approve Security Policy Changes - - - - In the Search bar, search for "Activate Pending Security Policy Changes". Review the policies that need approval in the summary of the changes in the security policy. Approve the pending security policy changes to activate them. - - - -## Linking your Account -Now that you have all the required information, you can link your account. - - - - Navigate to the Integrations page in your platform. - - - - Search for Workday RaaS in the list of available integrations and click on it. - - - - Fill in the required fields with the information you gathered: - - - **Report URL**: The URL you copied from the custom report - - **Username**: The Integration System User username - - **Password**: The Integration System User password - - - - Click Test Connection to verify the connection, then click Save to complete the integration. + + Open the three‑dot menu, select _Web Service_ > _View URLs_; you will be redirected to the **View URLs Web Service** page. + + View URLs + + Right‑click the **Workday XML** link and copy its URL. + + Copy Workday XML URL + - - -## Available data - -This integration provides access to custom report data from Workday. The available data depends on the fields you configured in your custom report and can include: -
    -
  • Employee Information
  • -
  • Job Details
  • -
  • Compensation Data
  • -
  • Organizational Information
  • -
  • Time Off and Leave
  • -
  • Custom Fields
  • -
+## Connecting to StackOne -## Troubleshooting +Use the **ISU Username**, **ISU Password**, and **Report URL** to create a connection. + + StackOne Connector Hub + + + If you are encountering issues after connecting and calling the unified **List Employees** endpoint, you can visit [Integration Configuration & Concepts guide of Workday RaaS](https://hub.stackone.com/integration-configuration-concepts/hris/workday-raas) + - - - If experiencing authentication errors: - - - Verify security group settings - - Check that the ISU has access to the report - - Ensure the username and password are correct - - - - To improve performance: - - - Use indexed fields where possible - - Use filters to limit the data returned - - Consider scheduling report generation during off-peak hours - - ## Useful Links https://community.workday.com - + \ No newline at end of file diff --git a/images/workday-raas/workday_raas_assign_ISU_to_security_group.png b/images/workday-raas/workday_raas_assign_ISU_to_security_group.png new file mode 100644 index 0000000..3e129b3 Binary files /dev/null and b/images/workday-raas/workday_raas_assign_ISU_to_security_group.png differ diff --git a/images/workday-raas/workday_raas_check_confirm_permissions.png b/images/workday-raas/workday_raas_check_confirm_permissions.png new file mode 100644 index 0000000..0919d46 Binary files /dev/null and b/images/workday-raas/workday_raas_check_confirm_permissions.png differ diff --git a/images/workday-raas/workday_raas_connect_hub_stackone.png b/images/workday-raas/workday_raas_connect_hub_stackone.png new file mode 100644 index 0000000..dd0054c Binary files /dev/null and b/images/workday-raas/workday_raas_connect_hub_stackone.png differ diff --git a/images/workday-raas/image6.png b/images/workday-raas/workday_raas_create_ISU.png similarity index 100% rename from images/workday-raas/image6.png rename to images/workday-raas/workday_raas_create_ISU.png diff --git a/images/workday-raas/workday_raas_create_custom_report.png b/images/workday-raas/workday_raas_create_custom_report.png new file mode 100644 index 0000000..99d699f Binary files /dev/null and b/images/workday-raas/workday_raas_create_custom_report.png differ diff --git a/images/workday-raas/workday_raas_create_security_group.png b/images/workday-raas/workday_raas_create_security_group.png new file mode 100644 index 0000000..188b32f Binary files /dev/null and b/images/workday-raas/workday_raas_create_security_group.png differ diff --git a/images/workday-raas/workday_raas_custom_report_advanced.png b/images/workday-raas/workday_raas_custom_report_advanced.png new file mode 100644 index 0000000..42de28f Binary files /dev/null and b/images/workday-raas/workday_raas_custom_report_advanced.png differ diff --git a/images/workday-raas/workday_raas_custom_report_prompt.png b/images/workday-raas/workday_raas_custom_report_prompt.png new file mode 100644 index 0000000..c50c950 Binary files /dev/null and b/images/workday-raas/workday_raas_custom_report_prompt.png differ diff --git a/images/workday-raas/workday_raas_default_report_owner.png b/images/workday-raas/workday_raas_default_report_owner.png new file mode 100644 index 0000000..268f1a5 Binary files /dev/null and b/images/workday-raas/workday_raas_default_report_owner.png differ diff --git a/images/workday-raas/workday_raas_domain_security_policy_permissions.png b/images/workday-raas/workday_raas_domain_security_policy_permissions.png new file mode 100644 index 0000000..3eae279 Binary files /dev/null and b/images/workday-raas/workday_raas_domain_security_policy_permissions.png differ diff --git a/images/workday-raas/workday_raas_fields_aliases.png b/images/workday-raas/workday_raas_fields_aliases.png new file mode 100644 index 0000000..d6bd981 Binary files /dev/null and b/images/workday-raas/workday_raas_fields_aliases.png differ diff --git a/images/workday-raas/workday_raas_filter_for_custom_report.png b/images/workday-raas/workday_raas_filter_for_custom_report.png new file mode 100644 index 0000000..520f093 Binary files /dev/null and b/images/workday-raas/workday_raas_filter_for_custom_report.png differ diff --git a/images/workday-raas/workday_raas_navigate_to_activate_pending_permissions.png b/images/workday-raas/workday_raas_navigate_to_activate_pending_permissions.png new file mode 100644 index 0000000..e999d52 Binary files /dev/null and b/images/workday-raas/workday_raas_navigate_to_activate_pending_permissions.png differ diff --git a/images/workday-raas/workday_raas_report_TO_from_share_tab.png b/images/workday-raas/workday_raas_report_TO_from_share_tab.png new file mode 100644 index 0000000..1398d1c Binary files /dev/null and b/images/workday-raas/workday_raas_report_TO_from_share_tab.png differ diff --git a/images/workday-raas/workday_raas_report_TO_select_ISU.png b/images/workday-raas/workday_raas_report_TO_select_ISU.png new file mode 100644 index 0000000..89e4960 Binary files /dev/null and b/images/workday-raas/workday_raas_report_TO_select_ISU.png differ diff --git a/images/workday-raas/workday_raas_report_edit.png b/images/workday-raas/workday_raas_report_edit.png new file mode 100644 index 0000000..f58d17c Binary files /dev/null and b/images/workday-raas/workday_raas_report_edit.png differ diff --git a/images/workday-raas/workday_raas_report_transfer_ownership.png b/images/workday-raas/workday_raas_report_transfer_ownership.png new file mode 100644 index 0000000..da24b4e Binary files /dev/null and b/images/workday-raas/workday_raas_report_transfer_ownership.png differ diff --git a/images/workday-raas/image5.png b/images/workday-raas/workday_raas_search_create_ISU.png similarity index 100% rename from images/workday-raas/image5.png rename to images/workday-raas/workday_raas_search_create_ISU.png diff --git a/images/workday-raas/workday_raas_search_custom_report.png b/images/workday-raas/workday_raas_search_custom_report.png new file mode 100644 index 0000000..1980bf4 Binary files /dev/null and b/images/workday-raas/workday_raas_search_custom_report.png differ diff --git a/images/workday-raas/workday_raas_search_for_maintain_permission_for_security_group.png b/images/workday-raas/workday_raas_search_for_maintain_permission_for_security_group.png new file mode 100644 index 0000000..98587e4 Binary files /dev/null and b/images/workday-raas/workday_raas_search_for_maintain_permission_for_security_group.png differ diff --git a/images/workday-raas/workday_raas_search_security_group.png b/images/workday-raas/workday_raas_search_security_group.png new file mode 100644 index 0000000..04df605 Binary files /dev/null and b/images/workday-raas/workday_raas_search_security_group.png differ diff --git a/images/workday-raas/workday_raas_search_to_activate_pending_permissions.png b/images/workday-raas/workday_raas_search_to_activate_pending_permissions.png new file mode 100644 index 0000000..be8bc90 Binary files /dev/null and b/images/workday-raas/workday_raas_search_to_activate_pending_permissions.png differ diff --git a/images/workday-raas/workday_raas_search_view_custom_report.png b/images/workday-raas/workday_raas_search_view_custom_report.png new file mode 100644 index 0000000..efe060f Binary files /dev/null and b/images/workday-raas/workday_raas_search_view_custom_report.png differ diff --git a/images/workday-raas/workday_raas_search_view_custom_report_1.png b/images/workday-raas/workday_raas_search_view_custom_report_1.png new file mode 100644 index 0000000..e02376a Binary files /dev/null and b/images/workday-raas/workday_raas_search_view_custom_report_1.png differ diff --git a/images/workday-raas/workday_raas_select_created_security_group.png b/images/workday-raas/workday_raas_select_created_security_group.png new file mode 100644 index 0000000..5773567 Binary files /dev/null and b/images/workday-raas/workday_raas_select_created_security_group.png differ diff --git a/images/workday-raas/workday_raas_view_custom_report_view_url.png b/images/workday-raas/workday_raas_view_custom_report_view_url.png new file mode 100644 index 0000000..ec6b1d9 Binary files /dev/null and b/images/workday-raas/workday_raas_view_custom_report_view_url.png differ diff --git a/images/workday-raas/workday_raas_workday_xml_url_page.png b/images/workday-raas/workday_raas_workday_xml_url_page.png new file mode 100644 index 0000000..41712aa Binary files /dev/null and b/images/workday-raas/workday_raas_workday_xml_url_page.png differ diff --git a/integration-configuration-concepts.mdx b/integration-configuration-concepts.mdx index 98f21f0..8c36321 100644 --- a/integration-configuration-concepts.mdx +++ b/integration-configuration-concepts.mdx @@ -26,7 +26,6 @@ import { IntegrationTile } from '/snippets/integration-tile.mdx'; - @@ -35,4 +34,5 @@ import { IntegrationTile } from '/snippets/integration-tile.mdx'; - \ No newline at end of file + + \ No newline at end of file diff --git a/integration-configuration-concepts/ats/workday-raas.mdx b/integration-configuration-concepts/ats/workday-raas.mdx deleted file mode 100644 index ab46fc2..0000000 --- a/integration-configuration-concepts/ats/workday-raas.mdx +++ /dev/null @@ -1,206 +0,0 @@ ---- -title: "Creating Custom Workday RaaS Reports" -description: "Configure custom Workday Report as a Service (RaaS) reports for system integration. Follow this step-by-step guide to set up and deploy your reports." ---- - -import IntegrationFooter from "/snippets/integration-footer.mdx"; - - - This guidance assumes that you have admin privileges for your Workday account. - - - -## Set up an Integration System User - - - Setting up an **Integration System User (ISU)** is recommended but optional. You can use an existing Workday user account with appropriate permissions instead. - The key requirement is having valid credentials **(username and password)** with access to create and manage custom reports. - - - - - Search and navigate to the `Create Integration System User` task. - - Create Integration System User - - - - - Enter a username and password in the Account Information section. - - Account Information - - - Click `OK` to create the user. - - - - -## Access Report Designer - - - - Enter "Create Custom Report" in the Workday search bar and select it from the results. - - - Accessing Report Designer - - - - Click "Create Custom Report" to begin the setup process. - - - -## Configure Basic Settings - - - - Enter the required information: - - - Report Name (must be unique within your tenant) - - Report Type: Select "Simple" - - - Create Custom Report - - - - Choose the appropriate data sources for your report. - - - Add and configure the necessary fields for your integration: - - 1. Click "Add Field" - 2. Select the source object - 3. Choose the specific field - 4. Configure field properties as needed - 5. Set each "Column Heading Override XML Alias" to the corresponding field names that this integration reads: - - - Employee_ID - - First_Name - - Last_Name - - Display_Name - - Email_Home - - Email_Work - - Phone_Home - - Phone_Work - - Job_Title - - Hire_Date - - Gender - - Preferred_Language - - Ethnicity_Code - - Date_Of_Birth - - Marital_Status - - Termination_Date - - Company_Name - - - Basic Settings - - - - Add filters to refine the data displayed in your report. Here you can select the field and operators to filter by. - - - Filters - - - - -## Enable RaaS Settings - - - - Navigate to the "Advanced" tab and enable web service settings: - - - RaaS Settings - - 1. Check "Enable as Web Service" - 2. Press "OK" to save - - - Press the three-dot menu and select "Web Service" =\> "View URLs". - - - Testing - - - - Copy the URL and save it. This will be used to configure the integration. - - - Testing - - - - -## Troubleshooting - - - - If experiencing authentication errors: - - - Verify security group settings - - Check ISU has access to the report - - - To improve performance: - - - Use indexed fields where possible - - Use filters to limit the data returned - - - - - -## Useful Links - - - https://community.workday.com - \ No newline at end of file diff --git a/integration-configuration-concepts/hris/workday-raas.mdx b/integration-configuration-concepts/hris/workday-raas.mdx new file mode 100644 index 0000000..91e01f0 --- /dev/null +++ b/integration-configuration-concepts/hris/workday-raas.mdx @@ -0,0 +1,319 @@ +--- +title: "Workday RaaS" +description: "Follow these steps to configure and connect Workday via Report as a Service (RaaS) successfully." +--- + +import IntegrationFooter from "/snippets/integration-footer.mdx" + + + This guidance assumes you have administrative privileges for your Workday account. + + +Workday Report as a Service (RaaS) allows you to create custom reports and expose them as web services for integration purposes. +This guide walks you through setting up an Integration System User, creating and sharing a web‑service‑enabled Advanced custom report, +configuring security group permissions, and connecting it through the integration platform. + + +## Set Up an Integration System User (Optional) + + + Setting up an **Integration System User (ISU)** is recommended but optional. You can use an existing Workday user account with appropriate permissions instead. + The key requirement is having valid credentials **(username and password)** with access to create and manage custom reports. + + + + + Search for and open the `Create Integration System User` task. + + Create Integration System User + + + + + Enter a username and strong password in the Account Information section, then click `OK` to create the user. + + Account Information + + + + + +## Create and View a Custom Report (Optional) + + + + Search and navigate to the `Create Custom Report` task + + Accessing Report Designer + + + + + Follow the steps below to configure the custom report: + + - **Report Name**: Must be unique within the tenant + - **Report Type**: Select **Advanced** + - **Optimised for Performance**: Tick this box to enhance performance + - **Data Source**: Choose the appropriate data source based on the data you need (e.g. Workers for HCM reporting). + + + Create Custom Report + + Click `OK` to continue. + + Add and configure report fields: + - Click the `+` icon to add a field. + - Select a Business Object (e.g. Worker) in the **Business Object** column. + - Choose the specific field (e.g. Employee ID) in the **Field** column. + - Set aliases in **Column Heading Override** and **Column Heading Override XML Alias** to ensure stable field names in API responses. + + For employee data, you can include the following fields: + - Employee_ID + - First_Name + - Last_Name + - Display_Name + - Email_Work + - Email_Home + - Phone_Work + - Phone_Home + - Job_Title + - Hire_Date + - Gender + - Date_Of_Birth + - Termination_Date + - Company_Name + + + Fields and Aliases Settings + + + + + Add filters to narrow the result data set (e.g. Supervisory Organisation – Primary Position). + + Filters Settings + + + + + Enable prompt display by ticking **Display Prompt Values in Subtitle**. Leave other settings at their defaults. + + Prompts Settings + + + + + Tick **Optimised for Performance** and **Enable As Web Service**. Leave other advanced options unchanged. + + Advanced Settings + + Click `OK` to save the report. + + + + Search for `View Custom Report`, select the report you just created, then click `OK` to open it. + + Accessing Report Designer + + + + + Open the three‑dot menu, select _Web Service_ > _View URLs_; you will be redirected to the **View URLs Web Service** page. + + View URLs + + Right‑click the **Workday XML** link and copy its URL. + + Copy Workday XML URL + + + + + +## Connecting to StackOne + +Use the **ISU Username**, **ISU Password**, and **Report URL** to create a connection. + + StackOne Connector Hub + + + After connecting and calling the unified **List Employees** endpoint, you may see: + 1. A response with all fields populated. + 2. A response with fields present but values are `null`. + 3. An error: `The task submitted is not authorized.` + 4. An error: `Report not found`. + + **Scenario 1** = successful configuration. + **Scenario 2** = missing Security Group permissions for the ISU. + **Scenarios 3 & 4** = insufficient report access for the ISU credentials used. + + Proceed to [Configure Security Group Permissions for the ISU (Required for non‑null data)](#configure-security-group-permissions-for-the-isu-required-for-non‑null-data) + and [Configure Custom Report Access for the ISU (Required for report access)](#configure-custom-report-access-for-the-isu-required-for-report-access) to resolve issues. + + + +## Configure Security Group Permissions for the ISU (Required for non‑null data) + + + + Search for and open the **Create Security Group** task. + + Search Security Group + + + + + Choose `Integration System Security Group (Unconstrained)` and enter a name for the Security Group. + + Create Security Group + + Click `OK`. + + + + Select `Integration System Users`. Pick the ISU created earlier (or another integration user). + + Add Members to Security Group + + Click `OK` to save. + + + + Search for `Maintain Permissions for Security Group` and open it. + + Search Domain Security Policy Permissions + + Select the Security Group you created in the steps above. + + Select Created Security Group + + + + + Set required Domain Security Policy Permissions to **Get Only** in the _View/Modify Access_ column. Common Domain Security Policy Permissions are listed below: + + View/Modify Access + + + Please note that Domain Security Policy Permissions can be customised within a Workday organisation, and this list does not account for such customisations. + + | Domain Security Policy | View/Modify Access | + | ---------------------- | ------------------ | + | Job Information | Get Only | + | Person Data: Date of Birth | Get Only | + | Person Data: Ethnicity | Get Only | + | Person Data: Gender | Get Only | + | Person Data: Home Email | Get Only | + | Person Data: ID Information | Get Only | + | Person Data: Marital Status | Get Only | + | Person Data: Personal Data | Get Only | + | Person Data: Work Email | Get Only | + + + Depending on the fields included in your custom report, additional Domain Security Policy Permissions may be required. + If you encounter `null` values in the API response, review and add the necessary permissions accordingly. + + + + + Search for **Activate Pending Security Policy Changes** and open it. + + Search to Activate Pending Permissions + + Optionally add a comment, then continue. + + Navigate to Activate Pending Permissions + + Review the summary, tick the confirmation box, and click `OK`. + + Confirm Permissions + + + You must activate security changes each time you modify Domain Security Policy Permissions; otherwise changes will not take effect. + + + + + +## Configure Custom Report Access for the ISU (Required for report access) + + + + Search for `View Custom Report`. + + Search View Custom Report + + Select your custom report. + + Select Custom Report + + + + + Navigate to the `Share` tab and view the **Report Owned by** value. + + Default Report Owner + + + + + + **Transferring ownership** revokes access from the current owner. + After transferring, ensure you reconnect in the StackOne Connector Hub using the new owner’s ISU credentials; otherwise you will encounter the `The task submitted is not authorized` error. + + If the current owner is not the ISU you intend to use to connect with StackOne, open the three‑dot menu under _Custom Report_ and select `Transfer Ownership`. + + Change Report Owner + + Enter the new ISU username in `New Owner` and click `OK`. + + Enter New Owner + + + + + + Granting access retains the current owner. Authorised users can access the report and connect via the StackOne Connector Hub using their ISU credentials and the Report URL. + + To grant access, choose `Edit` under _Custom Report_ from the three‑dot menu. + + Edit Report + + + Three options exist under **Report Definition Sharing Options**; the appropriate option for controlled user access is described in this guide. + + Go to the `Share` tab, select `Share with specific authorized groups and users`, choose the desired ISU in `Authorized Users`, then click `OK`. + + - **Do Not Share Report Definition**: Only the owner can access and retrieve data through the Report URL. If ownership changes or other ISU credentials are used, errors such as `Report not found` or `The task submitted is not authorized` may occur. + - **Share with All Authorized Users**: All ISU users can access the report. Ownership should remain with the report creator; otherwise StackOne connections using other users’ credentials may encounter a `Report not found` error. + - **Share with Specific Authorized Groups and Users**: Restrict access to selected groups/users. + - No selection acts like `Do Not Share Report Definition`. + - Selecting users allows both owner and selected ISU users to access the report (ownership must still stay with the report creator to avoid a `Report not found` error). + + + Share Tab Settings + + + + + +## Troubleshooting + + + + - Verify ISU credentials in the StackOne Connector Hub. + - Verify the Report URL is correct and reachable. + + + - Add missing **Domain Security Policy Permissions** as described in the security configuration section. + - Activate pending security policy changes after modifications. + - Retry the endpoint (fields populate once permissions are effective). + + + + +## Useful Links + + + https://community.workday.com + \ No newline at end of file