Skip to main content

Build an Overtime Timesheet App in Power Apps — Part 2: Create the SharePoint Site and Lists

· 23 min read
Jagdish Kumawat
Founder @ Dewiride

Every screen and flow of the Overtime Timesheet app reads or writes three things in SharePoint: a list of departments and their approvers, a list of overtime entries, and a library for payroll's monthly workbooks. This part builds them, and the site they live on, column by column and setting by setting.

This is Part 2 of a 20-part series.

  1. Part 1: Plan the App and Set Up the Demo Organization
  2. Part 2: Create the SharePoint Site and Lists (you are here)
  3. Part 3: Keep Overtime Private with SharePoint Permissions
  4. Part 4: Create the Solution, Environment Variables and Canvas App
  5. Part 5: Build the Home Screen
  6. Part 6: Build the Log Overtime Screen
  7. Part 7: Build the My Overtime Screen
  8. Part 8: Build the Approval Flow for Teams and Outlook
  9. Part 9: Show Approvers What's Waiting (coming soon)
  10. Part 10: Build the Departments Screen (coming soon)
  11. Part 11: Build the Reports Screen (coming soon)
  12. Part 12: Import the Old Excel Timesheet (coming soon)
  13. Part 13: Create the Monthly Payroll Workbook with Office Scripts (coming soon)
  14. Part 14: Build the Power BI Overtime Report (coming soon)
  15. Part 15: Share the App and Add It to Microsoft Teams (coming soon)
  16. Part 16: Test Every Role and Department (coming soon)
  17. Part 17: Build a Setup Flow That Creates the Lists (coming soon)
  18. Part 18: Run the Solution Checker and Export the Solutions (coming soon)
  19. Part 19: Install the App in a New Environment (coming soon)
  20. Part 20: Recap, Production Checklist and Next Steps (coming soon)

What You'll Set Up​

  • A communication site, Overtime Timesheet, that exists only to hold the app's data, set to London time, UK dates and the 24-hour clock.
  • Departments: one item per department, with the people who approve its overtime.
  • OvertimeEntries: one item per shift, with 15 columns, a validation rule that refuses impossible shifts, and two indexes.
  • Payroll Exports: a document library for the monthly payroll workbooks.
  • The two departments of the demo organization.

Permissions come in Part 3. Until then, only you, the site's owner, can open any of it.

Prerequisites​

Step 1: Create the Site​

Follow How to Create a SharePoint Communication Site with these values:

SettingValue
Site typeCommunication site
TemplateBlank
Site nameOvertime Timesheet
Site descriptionLists for the Overtime Timesheet app: departments and their approvers, overtime entries, and the monthly payroll workbooks.
Site addressOvertimeTimesheet (filled in from the name)
LanguageEnglish

The Set up your site window with Site name Overtime Timesheet, the description, Site address https://contoso.sharepoint.com/sites/OvertimeTimesheet, both names marked as available, language English, and the Create site button outlined in red

The site opens with an empty home page:

The header of the new Overtime Timesheet site with Home, Documents, Pages, Site contents and Edit navigation, Added to favorites and Site access, and Published on 11/7/26 next to Share and Edit

Note the site's address, https://<your-organization>.sharepoint.com/sites/OvertimeTimesheet; the app's settings use it in Part 4. And note Published on 11/7/26: the site writes 7 November month first. Step 4 changes that.

Step 2: Create the Departments List​

Create a list called Departments (How to Create a List and Add Columns in SharePoint Online) with these columns:

ColumnTypeRequiredSettingsDescription
DepartmentSingle line of textYesEnforce unique values onThe department's name, such as Radiology. Each department can appear only once.
ApproversPersonYesAllow multiple selections on; Allow selection of Groups clearedThe people who approve overtime for this department.
IsActiveYes/NoYesDefault YesYes: staff can choose this department. No: retired, and kept for history.

Then hide Title from the view and the form (How to Hide the Title Column in a SharePoint List). It isn't required in a new list, so it can be hidden straight away. In List settings, the columns look like this:

The Columns section of the Departments list settings with Title not required, and Department (Single line of text), Approvers (Person or Group) and IsActive (Yes/No), each with a tick under Required

Why the list looks like this:

  • A unique Department. Two items called Radiology would leave the app unsure whose approvers to use. SharePoint refuses a duplicate with This value already exists in the list., and it indexed the column on its own when it became unique.
  • Approvers as people, not names. A Person column only accepts people who exist in your organization, and the approval flow in Part 8 reads each approver's email from it. Allow multiple selections lets a department have more than one approver; groups are left out because approvers are named people.
  • IsActive instead of deleting. A department that closes is switched to No. Its past overtime still points at it, and the app stops offering it.

Step 3: Create the OvertimeEntries List​

Create a second list, OvertimeEntries, with these columns, in this order:

ColumnTypeRequiredSettingsDescription
WorkDateDate and timeYesInclude Time offThe day the shift started.
StartTimeDate and timeYesInclude Time onWhen the shift started.
EndTimeDate and timeYesInclude Time onWhen the shift finished. Can be the next day for a night shift.
BreakMinutesNumberYes0 decimal places; default 0; minimum 0The unpaid break during the shift, in minutes.
HoursNumberYes2 decimal places; minimum 0; maximum 24Hours worked: the time from start to finish, minus the break. Worked out by the app.
DepartmentIdNumberYes0 decimal places; Use thousands separator offThe ID of the department's item in the Departments list.
DepartmentSingle line of textYes—The department's name when the entry was saved.
ReasonMultiple lines of textYesUse enhanced rich text offWhy the overtime was needed.
EmployeeNameSingle line of textYes—The name of the person who worked the shift, when the entry was saved.
EmployeeEmailSingle line of textNo—Their email address when the entry was saved. Empty only for imported entries of people who have left.
StatusChoiceYesChoices Pending, Approved, Rejected; default PendingPending until an approver approves or rejects the entry. Set by the approval flow.
ApproverCommentMultiple lines of textNoUse enhanced rich text offThe approver's comment, if they gave one.
DecisionBySingle line of textNo—The name of the approver who approved or rejected the entry.
DecisionOnDate and timeNoInclude Time onWhen the entry was approved or rejected.
WorkMonthSingle line of textYes—The month the shift started in, as year and month, such as 2026-11. The app and flows filter on it.

Hide Title here too. The finished columns:

The Columns section of the OvertimeEntries list settings listing Title, WorkDate, StartTime, EndTime, BreakMinutes, Hours, DepartmentId, Department, Reason, EmployeeName, EmployeeEmail, Status, ApproverComment, DecisionBy, DecisionOn and WorkMonth with their types, and ticks for the eleven required columns

Why the list looks like this:

  • One item per shift. Each item is one stretch of overtime, approved or rejected on its own.
  • A day and two moments. WorkDate is the day the shift started, for grouping and display. StartTime and EndTime are exact moments, and the hours come from them. Working from real start and finish times is what lets the app count a night shift across midnight, and across a clock change, correctly: the old workbook in Part 1 got Ben Harris's clock-change night wrong because it didn't.
  • Hours is stored. The app works it out when the entry is saved, and the approval flow works it out again from the times and saves its own number with the decision, so reports, the payroll workbook and Power BI all add up the same number.
  • DepartmentId and Department. The ID links an entry to its department with a number instead of a Lookup column. The name is a copy for reports, so an entry still says which department it was for if the department is later renamed.
  • EmployeeName and EmployeeEmail are copies too. SharePoint's own Created By records who saved an entry; these record who worked it, in a form reports can use. EmployeeEmail isn't required because Part 12 imports old entries for Ben Harris, who left before the app existed and has no account.
  • Status starts at Pending. Every new entry waits for approval. Only the approval flow should set it to Approved or Rejected; Part 3 makes sure that editing an entry can't approve it.
  • WorkMonth is text, not a date. Every monthly screen, flow and report asks for "the entries of one month", so each entry carries its month as 2026-11. Power Apps can hand a text = filter to SharePoint (Connect to SharePoint from a canvas app lists = as delegable for text), and a text month is the same for every user. Microsoft's Troubleshoot date and time issues in Power Apps canvas apps lists "The Date Only value shows the wrong date for some users and time zones" among its known issues; a month written as text avoids the question.
  • Plain text and names without spaces: apps read plain text, and column names without spaces are the same everywhere.

Step 4: Set the Site's Time Zone, Date Format and Clock​

Open the OvertimeEntries list, select + New, and pick 7 November at 22:00 in WorkDate and StartTime (then Cancel: don't save it). The form uses US settings:

The WorkDate field showing 11/7/2026 and the StartTime field showing 11/7/2026 10:00 PM, both outlined in red

Each date field also had an (i) icon naming the site's time zone: (UTC-08:00) Pacific Time (US and Canada). A new site takes the SharePoint admin center's default time zone, which is Pacific Time until an admin changes it. For a UK team, all three settings need changing. In Regional settings, in this order:

SettingValueGuide
LocaleEnglish (United Kingdom) (change it first: it resets the other settings to its defaults)How to Change the Date Format of a SharePoint Site
Time zone(UTC) Dublin, Edinburgh, Lisbon, LondonHow to Change the Time Zone of a SharePoint Site
Time format24 Hour (the UK locale sets it already)How to Show Times in 24-Hour Format in SharePoint

The Regional Settings choices with Time zone (UTC) Dublin, Edinburgh, Lisbon, London, Locale English (United Kingdom), First day of week Monday, working hours 08:00 to 17:00 and Time format 24 Hour

Select OK. The same form now shows UK dates and the 24-hour clock, and the time zone icons are gone:

The WorkDate field showing 07/11/2026 and the StartTime field showing 07/11/2026 22:00, both outlined in red

These settings decide what people see when they open the lists in SharePoint. The app formats its own dates and times, in Part 6. If your organization isn't in the UK, choose your own locale and time zone.

Step 5: Refuse Impossible Shifts with List Validation​

The app will check every shift before saving it, in Part 6. But anyone who can edit an entry can also edit it in SharePoint, so the list checks it too. Follow How to Add List Validation in SharePoint to Compare Two Columns and enter this formula in OvertimeEntries → List settings → Validation settings:

A code window titled OvertimeEntries → List validation showing =AND([EndTime]>[StartTime],[EndTime]-[StartTime]<=1,[BreakMinutes]<([EndTime]-[StartTime])*1440), which passes only when the shift ends after it starts, lasts no more than a day, and is longer than its break

OvertimeEntries → Validation settings → Formula
=AND([EndTime]>[StartTime],[EndTime]-[StartTime]<=1,[BreakMinutes]<([EndTime]-[StartTime])*1440)
  • [EndTime]>[StartTime]: the shift finishes after it starts.
  • [EndTime]-[StartTime]<=1: subtracting dates gives days, so the shift lasts no more than 24 hours.
  • [BreakMinutes]<([EndTime]-[StartTime])*1440: the break, in minutes, is shorter than the shift; a day has 1,440 minutes.

And this User Message:

OvertimeEntries → Validation settings → User Message
The finish must be after the start and no more than 24 hours later, and the break must be shorter than the shift.

A night shift with the finish left on the start day, 22:00 to 06:00 both on 7 November, is refused with that message:

The new item form with Error: The finish must be after the start and no more than 24 hours later, and the break must be shorter than the shift at the top, and StartTime 07/11/2026 22:00 and EndTime 07/11/2026 06:00 outlined in red

Step 6: Change Both Lists' Settings​

Follow How to Turn Off Attachments and Hide a SharePoint List from Search for each list:

SettingDepartmentsOvertimeEntries
DescriptionDepartments and their overtime approvers. Used by the Overtime Timesheet app.Overtime entries: one item per shift worked. Written by the Overtime Timesheet app.
AttachmentsDisabledDisabled
Allow items to appear in search resultsYes (the default)No

Neither list needs attachments. Overtime is personal, so its entries stay out of search results. Search isn't what keeps them private, though: Part 3's permissions do that.

Step 7: Index the Columns the App Filters On​

Add two indexes to OvertimeEntries (How to Index a Column in a SharePoint List). Departments already has one, on Department, from Step 2:

The Indexed Columns page of OvertimeEntries saying You have created 2 of maximum 20 indices on this list, with Status and WorkMonth listed

SharePoint's list view threshold is 5,000 items: a query that has to look through more than that, with no index to narrow it down, can fail. Overtime entries only ever grow, month after month. With these indexes, a month's entries and the pending queue stay small queries however big the list gets. How to Index a Column in a SharePoint List explains the threshold.

IndexUsed byAsks SharePoint for
WorkMonthMy Overtime, Reports, the payroll workbook, the Home screen's month totalThe entries of one month
StatusThe approval screens and flowsThe entries still pending

Both indexes went in while the list was still empty, before the app writes its first entry.

Step 8: Create the Payroll Exports Library​

Follow How to Create a Document Library in SharePoint Online, then How to Rename a SharePoint Library Without Changing Its URL:

SettingValue
TypeBlank library
Name when createdPayrollExports
DescriptionMonthly overtime workbooks for payroll. Created by the Overtime Timesheet app.
Show in site navigationCleared
Name after renamingPayroll Exports

The List Information section of the library's settings with Name Payroll Exports and Web Address https://contoso.sharepoint.com/sites/OvertimeTimesheet/PayrollExports/Forms/AllItems.aspx, both outlined in red

Payroll sees a friendly name; the flow in Part 13 uses the address without spaces. The library stays out of the site's menu because only payroll will be able to open it, from Part 3.

Step 9: Add the Departments​

Add the demo organization's two departments with + New (How to Add an Item to a SharePoint List):

DepartmentApproversIsActive
Emergency DepartmentOlivia BennettYes
RadiologyDaniel BrooksYes

The Departments list with Emergency Department and Olivia Bennett, and Radiology and Daniel Brooks, each with a tick under IsActive

When I typed "Olivia", the picker first suggested her old job title, Head of Sales, hours after Part 1 changed it. SharePoint's copy of people's profiles updates on its own schedule: Fixed: SharePoint People Picker Shows a User's Old Job Title. The item stores the person, so it doesn't matter.

Two people in the demo organization are covered by these departments without being approvers: Aisha Khan logs overtime in the Emergency Department, and covers one Radiology shift, which goes to Daniel. Daniel's own overtime can't go to himself; Part 8's flow sends it to his manager instead.

OvertimeEntries stays empty. The app writes to it from Part 6, and Part 12 imports the old workbook.

The Finished Site​

Site contents shows the two lists and the library next to the libraries every site starts with:

The Site contents page of the Overtime Timesheet site listing Documents, Form Templates, Payroll Exports, Site Assets, Style Library, Departments with 2 items, OvertimeEntries with 0 items, Events and Site Pages, with modified dates in day-first UK format

Common Mistakes​

MistakeWhat happensDo this instead
Leaving the site on Pacific Time and US datesTimes and dates in SharePoint read wrong for a UK teamSet the locale first, then the time zone, in Regional settings
Making EmployeeEmail requiredThe import in Part 12 can't save entries for people who have leftLeave it optional
Using a Date column for the monthMonthly filters depend on time zonesStore WorkMonth as text such as 2026-11
Giving Approvers multiple groupsApprovals go to whole groupsLeave Allow selection of Groups cleared
Adding test entries to OvertimeEntriesTest data mixes with real overtimeLeave it empty; the app and the import fill it

Troubleshooting​

SymptomLikely causeFix
This value already exists in the list. when adding a departmentThat department is already thereEdit the existing item instead
A night shift is refused when savingThe finish is on the same day as the startPut the finish on the next day
Dates show month firstThe locale is still English (United States)Regional settings → Locale
The picker shows an old job titleSharePoint's copy of the profile hasn't syncedWait; pick the person anyway

FAQ​

Why two lists and a library, not one list?​

Departments change rarely and are managed by admins; entries are written all day by everyone; workbooks are files. Each gets the permissions it needs in Part 3.

Why a Number column for the department, not a Lookup?​

It's simple to store, filter and write from the app, and the app shows the department's name from the copy in Department.

Why does SharePoint store the hours at all?​

So every report adds up the same stored number. The app works it out, and the approval flow in Part 8 works it out again from the start and finish times, shows that number to the approver and saves it with the decision.

Can people see each other's overtime now?​

Nobody but you could open the site at this point. Part 3 gives the team access, with SharePoint's item-level permissions so each person can open only their own entries.

Do I have to build these lists by hand in every organization?​

No. Part 17 builds a setup flow that creates them for you.

Conclusion​

The Overtime Timesheet site now has everything the app stores: a Departments list with named approvers, an OvertimeEntries list whose columns, defaults, ranges and validation rule keep each shift sensible, two indexes for the queries the app makes most, and a library for payroll. The site shows London time, UK dates and the 24-hour clock.

Part 3 keeps overtime private: unique permissions on each list and the library, item-level permissions so staff open only their own entries, content approval so an edited entry goes back for approval, and a check of what each person can see.

Additional Resources​

← Previous: Part 1: Plan the App and Set Up the Demo Organization Next → Part 3: Keep Overtime Private with SharePoint Permissions