Modern Collaboration and Business Automation 101
Your company is looking for a new Brand Manager and Data Analyst to assist. Expecting a high volume of applications, the management has tasked your HR team with streamlining the recruitment process. Your goal is to automate the process of:
- Collecting and organizing the job applications
- Scheduling interviews based on availability of hiring managers
- Sending out timely interview invitations to candidates
- Ensuring that hiring managers are well-prepared for each interview session
Before you continue make sure that you have access to your SKKU M365 account (@o365.skku.edu).
If you don’t have an account yet register here using your @skku.edu e-mail to activate the free M365 A1 account.
The case and the companies
Today, the following groups are working for:
Group | Company name |
---|---|
Group 1 | Bukchon Boats |
Group 2 | Gangnam Games |
Group 3 | Hallyu Hub |
Group 4 | Hangul House |
Group 5 | Kimchi Komedy Klub |
Group 6 | Kingo Kitchenware |
Group 7 | Namsan Noodle Factory |
Group 8 | Seoul Studios |
Bonus Group | Daehakro Dishes |
Get your Team(s) ready
In order for your team to securly get access to the same resourced and effeciently work together, let’s make a Team in Microsoft Teams.
Go to https://www.office.com and log in with your @o365.skku.edu account.
If you are already logged into another Microsoft account in your browser, consider to make a seperate browser profile for this class or right-click the office link above and select ‘open in incognito / inPrivate window’
Click on the Teams icon to open Microsoft Teams in the browser To use Teams in the browser, click ‘cancel’ and ‘use the web app instead’
1.1 Create your Team
- In Teams, go to (all) Teams -> ‘Join or Create a Team’ ->
- Team name:
HR [Company Name]
- Description:
Team for managing the new wave of job applicants
- Privacy:
Private
- Click next
- Team name:
- Invite your group members (@o365.skku.edu) and make them owner
- Add me (
p.i.m@
) to the team as a member
1.2 Create your list(s)
To keep track of the applicants and their progress, let’s set up a Microsoft List.
1.2.1 Create the applicants list
- In top of the general channel in Teams, add a tab by clicking the plus (+) sign
- Select (Microsoft) Lists
- Select Save
- Wait for the list tab to appear above the channel and click it
- When you see the ‘Welcome to Lists’ screen, click ‘Create a list’
- Click ‘+ Blank list’ and make a new list
- Name:
Applicants
- Description:
Tracker for job applicants
- Icon: select the clipboard icon
- Press Create
- Name:
- When the new list opens, add column by clicking ‘+ Add column’ on top of the list and add the following columns:
- Type:
Choice
- Name:Status
- Description:Applicant status
- Choices:New, Inviting, Invited, Dropped, Offer, Error
- Default value (standard choice):New
- Save - Type:
Choice
- Name:Position
- Description:Applied role
- Choices:Brand Manager, Data Analyst
- Save - Type:
Text
- Name:Email
- Description:Applicant e-mail address
- Save - Type:
Text
- Name:Phone
- Description:Applicant phone number
- Save - Type:
Person
- Name:Interviewer
- Description:Host of the interview session
- Show profile photo:yes
- Save - Type:
Date
- Name:Interview date
- Description:Applicant interview
- Include Time:Yes
- Save - Type:
Date
- Name:Invitation
- Description:Invitation sent date
- Save - Type:
Text
- Name:Notes
- Description:Applicant notes
- Type:Multiple lines of text
- Type:
- Rename the Title column
- Right click little arrow () next to the ‘Title’ column
- Column settings -> Rename ->
Name
-> Save
- Move the Status and action colum to the left
- Order now looks like Status -> Name -> …
1.2.2 Add sample data to applicants list
Let’s add an applicant to the applicant list to further develop and test things
- Go to the Applicants list tab on top of the ‘General’ channel
- Press + New
- Now let’s enter our first applicant test data:
- Name:
James Dean
- Position:
Brand Manager
- Email:
James@dean.com
- Address: ‘Seoul’
- Name:
- Press Save
Now click on the name of the participant and see the ‘comments’. Tag (@) one of your team members to ask if they would like to have this applicant in their interview session.
1.2.3 Add an applicants channel
Let’s create a new channel to receive notification cards when a new application comes in
- On the right of the the HR Team, click the more menu () and select ‘Add Channel’
- Create a new channel
- Channel name:
Applicants
- Description:
Applicant notifications
- Privacy: Standard
- Select ‘Automatically show this channel in everyone’s channel list’
- Click add
- Channel name:
1.3 Spin up your planner
HR Team planning board
- The buckets:
Interviews, Reviews, Hiring, Onboarding
Let’s Automate
Now we have our team up and running and our lists ready, let’s build some no-code automation using power automate. With this site and your Teams site open, now open https://make.powerautomate.com in a new tab.
Flow 1: New applicants notifications
Let’s make a flow that posts a new card in this channel every time a new job application comes in
- On the Power Automate homepage, click ‘+ Create’
- Click on Automated cloud flow
- Flow name:
New applicant notification
- Flow trigger:
When an item is created (SharePoint)
- Click ‘create’
- Switch to classic designer if possible
- Flow name:
- Select the site (Team’s name site) and List name (Applicants)
- Click new step and search for ‘post card’ and select ‘Post card in a chat or channel (Microsoft Teams)’
- Post as:
Flow bot
- Post in:
Channel
- Team: Select your HR team
- Channel: Select Applications
- Adaptive card:
{}
- Post as:
- Click the Save button on the top right
- Let me know if you face any errors
If all goes well, paste the code below in the ‘Adaptive Card’ field
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
{
"$schema": "http://adaptivecards.io/schemas/adaptive-card.json",
"type": "AdaptiveCard",
"version": "1.3",
"body": [
{
"type": "TextBlock",
"wrap": true,
"style": "heading",
"spacing": "None",
"size": "large",
"weight": "Bolder",
"text": "@{triggerOutputs()?['body/Title']}"
},
{
"type": "FactSet",
"facts": [
{
"title": "Job Position:",
"value": "@{triggerOutputs()?['body/Position/Value']}"
},
{
"title": "E-mail:",
"value": "@{triggerOutputs()?['body/Email']}"
},
{
"title": "Phone:",
"value": "@{triggerOutputs()?['body/Phone']}"
}
]
}
]
}
- Double click on the values (like XXNAME) and replace them with Dynamic Content provided by the trigger ‘When an item is created’
- Click test again, manually, and have a team member add a new applicant in the applicants list. Then, keep an eye on the applicants channel in Teams.
- Share the flow with your team
Flow 2: Trigger on ‘inviting’
- In Power Automate, create a new Automated flow
- Flow name:
TRIGGER inviting
- As a trigger select,’When an item is created or modified (SharePoint)’
If a connection shows up, click on ‘change connection’ -> add new -> sign in
- In the parameters select
- Site address: Find the site with by Team’s name
- List name: click the name of the list with applicants
- How often do you want to check for items? -> every 5 seconds
- Open the more menu () and click ‘Settings’
- Split on -> @triggerOutputs()?[‘body/value’]
- Trigger conditions:
@equals(triggerOutputs()?['body/Status/value'], 'Inviting')
- Press done (or save)
- Click ‘+ Next step’ (or add action) -> Compose (Data operation) -> inputs -> select ‘body’ from the trigger
- Press save, press test (manually)
- In the applicant list, change an applicant’s status to ‘Inviting’ and see if the flow runs. Make sure that the applicant has an interview date.
- Check if the flow has run
- check the test values in the input/output fields of the compose component
- Edit the flow again and add a new step
- Select ‘Update Item (Sharepoint)
- Select your team’s site address
- Select the applicant list
- In id, select ID from the trigger
- Status value:
Invited
- Invitation field: Add expression
utcNow()
- Click test again and change an applicant status to inviting
If this all runs succesful, let’s add some additional steps:
- Click Edit -> + New step (or add an action) -> Compose (Data operation)
- In the inputs, ~select expression~ and paste
@formatDateTime(XXX, 'yyyyMMddTHHmmssZ')
. Replace XXX with a dynamic value, the interview date value from the lookup field. - Test again, this time automatically with the last trigger. Check if there is an interview date.
- Share the flow with your team
Flow 3: Send an invitation e-mail
To easily send an automated e-mail, let’s open and edit the ‘TRIGGER inviting’ flow
- Go to my flows -> Shared with me -> Tigger inviting
- Click Edit
- Add a new step after Compose
- Find ‘Send e-mail V2 (Gmail)’
- In the To field, click ‘add dynamic expression’ and find the Email field
- Subject:
Job interview
- Paste the following values for the e-mail
1
2
3
4
5
Dear,
Congratulations, you are selected for an interview for the position of XXX at XXX. Please come to our offce at XXX, your interviewer will be XXX
Kind regards,
- Replace the XXX values with dynamic values from the list
Compose a iCalendar variable
- Compose now with expression
formatDateTime(utcNow(), 'yyyyMMddTHHmmssZ')
- Compose date with
formatDateTime(triggerBody()['text_2'], 'yyyyMMddTHHmmssZ')
- Compose end with expression
addHours(triggerBody()['text_2'], 1, 'yyyyMMddTHHmmssZ')
- Compose ICS with the text below
To make it easier for the participants to save this event into their calendar, we will send an ICS (iCalendar) file with the invitation e-mail. This universal file format is widely used by Outlook, Google Calendar, Apple Calendar, and others.
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
BEGIN:VCALENDAR
VERSION:2.0
PRODID:-//Your Company//Interviews Calendar//EN
CALSCALE:GREGORIAN
METHOD:PUBLISH
BEGIN:VEVENT
UID:20231015T1500Z-1234@yourdomain.com
DTSTAMP:@{outputs('Compose_now')}
DTSTART:@{outputs('Compose_date')}
DTEND:@{outputs('Compose_end')}
SUMMARY:Job Interview
LOCATION:Sungkyunkwan University
URL;VALUE=URI:https://www.camphouse.me
DESCRIPTION:Your job interview is coming up!
TZID:Asia/Seoul
END:VEVENT
END:VCALENDAR
Let me break down some keys in this file:
- DTSTAMP is the timestamp of when this ICS file is created
- DTSTART holds the starting datetime of the event, DTEND the ending time
- UID should be a unique identifier for the event
The
Z
in the timestamp stands for the Zero timezone, because it is offset by 0 from the Coordinated Universal Time (UTC). When you are working with local times (such as KST), make sure to transform them into UTC before using them in code. Seoul to UTC scheme
If you want to know more about the ICS format or want to check if you ICS file is valid, use the iCalendar Validator
- Add the ICS variable as an attachment to the e-mail
- Attachment name:
invite.ics
- Attachment contect: Output from ICS
- Content type:
text/calendar
- Attachment name:
Flow 4: Google forms to Applicants list
Let’s connect the Google form via a Webhook to the applicants list
- In Power Automate, create a new Instant Cloud Flow
- Flow name:
WEBHOOK Google Form
- Trigger: ‘When an HTTP request is received’
- Click create
- In the ‘When an HTTP request is received’ box click on ‘Show advanced options’ and select ‘POST’ for method.
- Click ‘+ Next step’
- Find and select ‘Parse JSON’ as operation
- Content: Select ‘Body’ from the trigger
- Schema: Enter
{}
- Press Save
- After saving, click the ‘When a HTTP request is received’
- Who can trigger the flow? Select ‘Anyone’
- Copy the HTTP POST URL
- Click Save
- Click test and test the Google form. When the test is successful:
- Click the Parse JSON Bar and copy the value of Output
- Click edit
- Paste the example in Parse JSON in ‘generate from example’
- Add new step -> Create item (Sharepoint)
- Select your Team’s site and applicant list
- Match the JSON fields to your list fields
- Flow name:
The Application form
One of the objectives of today’s course is to connect two unrelated cloud applications via (REST) API’s. Because many internet users are familiar with Google Forms, we will use Google forms to design an application form and use it as the input for our Application tracker.
Go to https://forms.google.com/, Start a new form and use the ‘Contact Information’ template as a base.
- Change the name and title to
Job Application Form
- In the form description type
Please apply for one of our exciting jobs using the form down below!
- Add a question
- Title it
Position
- Change the type to dropdown
- Add the options
Brand Manager
andData Analyst
- Make it required
- Title it
- Preview the form by clicking on the eye icon.
Now let’s make sure that the information of the form is send to your Applicants tracker after submission. To achieve this, we are going to send an HTTP POST request (Webhook) to our Power Automate instance.
- In the form editor, click the hamburger menu icon and click ‘Get add-ons’
- Search for ‘Email Notifications for Google Forms’ and install
- After installation, click on the puzzle icon and select ‘Email Notifications for Google Forms’
- Enable notifications
- click on the puzzle icon again, select ‘Email Notifications for Google Forms’ and click ‘Webhooks for Google forms’
- Create webhook
- Webhook name:
Power Automate
- Method:
Post
- Request URL: Past the Power Automate HTTP request URL
- Request Body:
application/json
- Test - It should respond with code 202
- Save
- Webhook name:
Alternatively
Creating webhooks for Google forms is time consuming. Alternatively we could make use of the new and built-in forms experience of Microsoft Lists.
- Open the applicants list in SharePoint
- Add
?env=WebViewList
at the end of the url (right after /AllItems.aspx) - Click the ‘forms’ button and make a ‘New form’
- Add the title ‘Job Application Form’ and your team’s name
- Rename ‘Title’ to ‘Name’
- Hide all fields except ‘Name’, ‘Position’, ‘Email’ and ‘Notes’
- Click ‘Send form’ and share the link with Pim
Let’s apply!
- Check and discuss incoming applicants
- Discover the different grouping possibilities
Let’s beautify
Conditional formatting for the Status column:
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
74
75
76
77
78
79
80
81
82
83
84
85
86
87
88
89
90
91
92
93
94
95
96
97
98
99
100
101
102
103
104
105
106
107
108
109
110
111
112
113
114
115
116
117
118
119
120
121
122
123
124
125
126
127
128
129
130
131
132
133
134
135
136
137
138
139
140
141
142
143
144
145
146
147
148
149
150
151
152
153
154
155
156
157
158
159
160
161
162
163
164
165
166
167
168
169
170
171
172
173
174
175
176
177
178
179
180
181
182
183
184
185
186
187
188
189
190
191
192
193
194
195
196
197
198
199
200
201
202
203
204
205
206
207
208
209
210
211
212
213
214
215
216
217
218
219
220
221
222
223
224
225
226
227
228
229
230
231
232
233
234
235
236
237
238
239
240
241
242
243
244
245
246
247
248
249
250
251
252
253
254
255
256
257
258
259
260
261
262
263
264
265
266
267
268
269
270
271
272
273
274
275
276
277
278
279
280
281
282
283
284
285
286
287
288
289
290
291
292
293
294
295
296
297
298
299
300
301
302
303
304
305
306
307
308
309
310
311
312
313
314
315
316
317
318
319
320
321
322
323
324
325
326
327
328
329
330
331
332
333
334
335
336
337
338
339
340
341
342
343
344
345
346
347
348
349
350
351
352
353
354
355
356
357
358
359
360
361
362
363
364
365
366
367
368
369
370
371
372
373
374
375
376
377
378
379
380
381
382
383
384
385
386
387
388
389
390
391
392
393
394
395
396
397
398
399
400
401
402
403
404
405
406
407
408
409
410
411
412
413
414
415
416
417
418
419
420
421
422
423
424
425
426
427
428
429
430
431
432
433
434
435
436
437
438
439
440
441
442
443
444
445
446
447
448
449
450
451
452
453
454
455
456
457
458
459
460
461
462
463
464
465
466
467
468
469
470
471
472
473
474
475
476
477
478
479
480
481
482
483
484
485
486
487
488
489
490
491
492
493
494
495
496
497
498
499
500
501
502
503
504
505
506
507
508
509
{
"$schema": "https://developer.microsoft.com/json-schemas/sp/v2/column-formatting.schema.json",
"elmType": "div",
"style": {
"flex-wrap": "wrap",
"display": "flex"
},
"children": [
{
"elmType": "div",
"style": {
"box-sizing": "border-box",
"padding": "4px 8px 5px 8px",
"overflow": "hidden",
"text-overflow": "ellipsis",
"display": "flex",
"border-radius": "16px",
"height": "24px",
"align-items": "center",
"white-space": "nowrap",
"margin": "4px 4px 4px 4px"
},
"attributes": {
"class": {
"operator": ":",
"operands": [
{
"operator": "==",
"operands": [
"[$Status]",
""
]
},
"",
{
"operator": ":",
"operands": [
{
"operator": "==",
"operands": [
"[$Status]",
"New"
]
},
"sp-css-backgroundColor-BgCornflowerBlue",
{
"operator": ":",
"operands": [
{
"operator": "==",
"operands": [
"[$Status]",
"Inviting"
]
},
"sp-css-backgroundColor-BgLightGray sp-css-borderColor-LightGrayFont",
{
"operator": ":",
"operands": [
{
"operator": "==",
"operands": [
"[$Status]",
"Invited"
]
},
"sp-css-backgroundColor-BgCyan sp-field-borderAllRegular sp-field-borderAllSolid sp-css-borderColor-CyanFont",
{
"operator": ":",
"operands": [
{
"operator": "==",
"operands": [
"[$Status]",
"Dropped"
]
},
"sp-css-backgroundColor-BgGray sp-css-borderColor-WhiteFont",
{
"operator": ":",
"operands": [
{
"operator": "==",
"operands": [
"[$Status]",
"Offer"
]
},
"sp-css-backgroundColor-BgGreen sp-css-borderColor-WhiteFont",
{
"operator": ":",
"operands": [
{
"operator": "==",
"operands": [
"[$Status]",
"Error"
]
},
"sp-css-backgroundColor-BgDarkRed sp-css-borderColor-WhiteFont",
"sp-field-borderAllRegular sp-field-borderAllSolid sp-css-borderColor-neutralSecondary"
]
}
]
}
]
}
]
}
]
}
]
}
]
}
},
"children": [
{
"elmType": "span",
"style": {
"line-height": "16px",
"height": "14px",
"display": {
"operator": ":",
"operands": [
{
"operator": "==",
"operands": [
"[$Status]",
""
]
},
"none",
{
"operator": ":",
"operands": [
{
"operator": "==",
"operands": [
"[$Status]",
"New"
]
},
"none",
{
"operator": ":",
"operands": [
{
"operator": "==",
"operands": [
"[$Status]",
"Inviting"
]
},
"none",
{
"operator": ":",
"operands": [
{
"operator": "==",
"operands": [
"[$Status]",
"Invited"
]
},
"inherit",
{
"operator": ":",
"operands": [
{
"operator": "==",
"operands": [
"[$Status]",
"Dropped"
]
},
"inherit",
{
"operator": ":",
"operands": [
{
"operator": "==",
"operands": [
"[$Status]",
"Offer"
]
},
"inherit",
{
"operator": ":",
"operands": [
{
"operator": "==",
"operands": [
"[$Status]",
"Error"
]
},
"inherit",
"none"
]
}
]
}
]
}
]
}
]
}
]
}
]
}
},
"attributes": {
"iconName": {
"operator": ":",
"operands": [
{
"operator": "==",
"operands": [
"[$Status]",
""
]
},
"",
{
"operator": ":",
"operands": [
{
"operator": "==",
"operands": [
"[$Status]",
"New"
]
},
"",
{
"operator": ":",
"operands": [
{
"operator": "==",
"operands": [
"[$Status]",
"Inviting"
]
},
"",
{
"operator": ":",
"operands": [
{
"operator": "==",
"operands": [
"[$Status]",
"Invited"
]
},
"Mail",
{
"operator": ":",
"operands": [
{
"operator": "==",
"operands": [
"[$Status]",
"Dropped"
]
},
"Dislike",
{
"operator": ":",
"operands": [
{
"operator": "==",
"operands": [
"[$Status]",
"Offer"
]
},
"Like",
{
"operator": ":",
"operands": [
{
"operator": "==",
"operands": [
"[$Status]",
"Error"
]
},
"Warning",
""
]
}
]
}
]
}
]
}
]
}
]
}
]
},
"class": {
"operator": ":",
"operands": [
{
"operator": "==",
"operands": [
"[$Status]",
""
]
},
"",
{
"operator": ":",
"operands": [
{
"operator": "==",
"operands": [
"[$Status]",
"New"
]
},
"",
{
"operator": ":",
"operands": [
{
"operator": "==",
"operands": [
"[$Status]",
"Inviting"
]
},
"sp-css-color-LightGrayFont",
{
"operator": ":",
"operands": [
{
"operator": "==",
"operands": [
"[$Status]",
"Invited"
]
},
"sp-css-color-CyanFont",
{
"operator": ":",
"operands": [
{
"operator": "==",
"operands": [
"[$Status]",
"Dropped"
]
},
"sp-css-color-WhiteFont",
{
"operator": ":",
"operands": [
{
"operator": "==",
"operands": [
"[$Status]",
"Offer"
]
},
"sp-css-color-WhiteFont",
{
"operator": ":",
"operands": [
{
"operator": "==",
"operands": [
"[$Status]",
"Error"
]
},
"sp-css-color-WhiteFont",
""
]
}
]
}
]
}
]
}
]
}
]
}
]
}
}
},
{
"elmType": "span",
"style": {
"overflow": "hidden",
"text-overflow": "ellipsis",
"padding": "0 3px"
},
"txtContent": "[$Status]",
"attributes": {
"class": {
"operator": ":",
"operands": [
{
"operator": "==",
"operands": [
"[$Status]",
""
]
},
"",
{
"operator": ":",
"operands": [
{
"operator": "==",
"operands": [
"[$Status]",
"New"
]
},
"sp-css-color-CornflowerBlueFont",
{
"operator": ":",
"operands": [
{
"operator": "==",
"operands": [
"[$Status]",
"Inviting"
]
},
"sp-css-color-LightGrayFont",
{
"operator": ":",
"operands": [
{
"operator": "==",
"operands": [
"[$Status]",
"Invited"
]
},
"sp-css-color-CyanFont",
{
"operator": ":",
"operands": [
{
"operator": "==",
"operands": [
"[$Status]",
"Dropped"
]
},
"sp-css-color-WhiteFont",
{
"operator": ":",
"operands": [
{
"operator": "==",
"operands": [
"[$Status]",
"Offer"
]
},
"sp-css-color-WhiteFont",
{
"operator": ":",
"operands": [
{
"operator": "==",
"operands": [
"[$Status]",
"Error"
]
},
"sp-css-color-WhiteFont",
""
]
}
]
}
]
}
]
}
]
}
]
}
]
}
}
}
]
}
]
}
Conditional formatting for invitation column:
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
{
"$schema": "https://developer.microsoft.com/json-schemas/sp/v2/column-formatting.schema.json",
"elmType": "div",
"attributes": {
"class": "ms-fontColor-themePrimary ms-fontColor-themeDarker--hover"
},
"style": {
"flex-direction": "row",
"justify-content": "left",
"align-items": "center",
"flex-wrap": "nowrap"
},
"children": [
{
"elmType": "span",
"txtContent": "[$Invitation]",
"style": {
"display": "=if([$Invitation] != '', 'block', 'none')"
}
},
{
"elmType": "button",
"customRowAction": {
"action": "setValue",
"actionInput": {
"Status": "Inviting",
"Events": "send invite clicked"
}
},
"attributes": {
"class": "ms-fontColor-themePrimary ms-fontColor-themeDarker--hover"
},
"style": {
"border": "none",
"background-color": "transparent",
"cursor": "pointer",
"display": "=if(([$Status] == 'New' && [$Interviewer] != '' && [$Interviewdate] != '' && [$Invitation] == ''), 'block', 'none')"
},
"children": [
{
"elmType": "span",
"attributes": {
"iconName": "Mail"
},
"style": {
"padding-right": "6px"
}
},
{
"elmType": "span",
"txtContent": "Send invite"
}
]
}
]
}
Conditional formatting for the Position column:
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
{
"$schema": "https://developer.microsoft.com/json-schemas/sp/v2/column-formatting.schema.json",
"elmType": "div",
"style": {
"flex-wrap": "wrap",
"display": "flex"
},
"children": [
{
"elmType": "div",
"style": {
"box-sizing": "border-box",
"padding": "4px 8px 5px 8px",
"overflow": "hidden",
"text-overflow": "ellipsis",
"display": "flex",
"border-radius": "16px",
"height": "24px",
"align-items": "center",
"white-space": "nowrap",
"margin": "4px 4px 4px 4px"
},
"attributes": {
"class": {
"operator": ":",
"operands": [
{
"operator": "==",
"operands": [
"[$Position]",
""
]
},
"",
{
"operator": ":",
"operands": [
{
"operator": "==",
"operands": [
"[$Position]",
"Brand Manager"
]
},
"sp-css-backgroundColor-BgLightGray sp-field-borderAllRegular sp-field-borderAllDashed sp-css-borderColor-BlackText sp-css-color-BlackText",
{
"operator": ":",
"operands": [
{
"operator": "==",
"operands": [
"[$Position]",
"Data Analyst"
]
},
"sp-css-backgroundColor-BgLightGray sp-field-borderAllRegular sp-field-borderAllSolid sp-css-borderColor-BlackText sp-css-color-BlackText",
"sp-field-borderAllRegular sp-field-borderAllSolid sp-css-borderColor-neutralSecondary"
]
}
]
}
]
}
},
"txtContent": "[$Position]"
}
]
}
If time allows…
- Create a board view based on status
- Add error handling