


At Penthara Technologies, we strive to manifest our values into actions every day. We believe that our success should benefit the local communities we operate in. Taking a step towards the path of driving positive change by giving back to the society, this December we organized our very first cloth donation drive: Mission Do Garmi.
Still working remotely at the time, our team got on a call to discuss and find a meaningful way to give back to the society. A few minutes in, we had a winner. For those who don’t stay in Northern India, people here face harsh winters which generally begin a fortnight before Christmas. Many people residing in slums who don’t have enough warm clothes have it the worst. A cloth donation drive where people can donate warm clothes they no longer need to the needy seemed to be the fittest solution to spread some warmth and love right before the holiday season. That’s how Mission Do Garmi was born. The name basically means “A Mission to Give Warmth”.
To undertake a big mission like this, we knew we couldn’t do this alone. With a humble ask and quick show of hands, we had volunteers from our team across India, ready to contribute to the cause. The journey began and the roadmap pretty much looked like this -
















With everything packed and ready to go, all that was left to do was to bring this mission to fruition. We picked the first week of December for running the donation drive so that people could receive warm clothes before the harsh winters strike. On 5th December 2021, our volunteer team in Punjab went shelter-to-shelter to distribute our collections among two slums in sector 4 and sector 14 of the Panchkula district. The clothes that had found their way here from the generous donors in four cities across India, namely Panchkula, Mohali, Lucknow and Mumbai, had now found new owners to keep warm this winter. It was an eventful day. We went home with our hearts 300 smiles richer and our faces beaming with happiness.
300+
PEOPLE IMPACTED
132
HOURS INVESTED
8
VOLUNTEERS ENGAGED
50
DONORS FROM 4 CITIES

Mission Do Garmi 2021 was a mission for people fueled by the support of volunteers, donors and well-wishers. We believe their efforts and contributions deserve a space of their own in our hearts and this blog as well.
We are grateful for everyone involved in making our very first cloth donation drive a success. Giving is receiving and we are already on the hunt for yet another way to give back to the community. Stay tuned for the updates.
We are always looking for more hands to help us realize our mission of doing good in this world. If you are interested in joining us in our future social impact activities, we’d love to hear from you. Write to us at wecare@penthara.com and we’ll be sure to reach out as soon as we can.
Power Automate is a service that helps you create automated workflows between your favorite apps and services to synchronize files, get notifications, collect data, and more.
What can you expect from Power Automate?
In this blog, we are going to create an Adaptive Card containing the information of events occurring in the next 60 days and post it in the MS Teams channel. These events will be stored in the SharePoint calendar (Classic SharePoint calendar list, not the modern one).
We will use the “Scheduled cloud flow” template for this flow. It will run at a particular schedule and fetch upcoming events in the next 60 days and post them in a particular MS Teams channel.
To start with, we need a SharePoint calendar list with events listed in it. To do that we will follow the following steps to create a calendar on the SharePoint site. We will be leveraging the legacy calendar app available on the SharePoint site itself. If you want, you can use your calendar with columns in it.
1. We will navigate to our SharePoint site and click on the “+ New” option in the ribbon bar. In the dropdown menu, we will click on “App”.

2. We will search “calendar” in the search bar and then click on the “search” button.

3. The result will show only one option named “Calendar” select it.

4. A dialogue box will open, asking the name of the calendar. We will give a name and click on “Create”.

5. Now, it will bring us back to the “Site Content” page and we can see our new calendar listed here.

6. We will open the calendar by clicking on it and we will see a default view of the calendar as follows:

7. To see the list view of the calendar, click on “Calendar” and then from the dropdown of “Modify View” select “All Events”.

8. The list view will look like the following. Now to add an event we will click on “+ new event”.

9. Fill in all the details about the event and click on the “Save” button.

10. After clicking on “Save” button, we will be redirected to our calendar events page, and we can see our event listed there.

Similarly, we can add more events.
Now we are ready with our events list, we will focus on creating the flow.
Before starting the flow. Following is the adaptive card that will be posted in the MS Teams channel.

To learn more about Adaptive Cards click here.
Steps to create the flow are as follows:
1. We will create a new flow by clicking on the “+ New flow” and then from dropdown click on “Scheduled cloud flow”.

2. A dialogue box will open asking the name of the flow and when it should trigger.
In our case we have given the name as “Events Reminder Flow” and this will trigger every 2nd week on Monday. Click on “Create” to create the flow.

3. Our flow is created with the trigger “Recurrence” click on it to expand and then click on “Show advanced options” to see all the options.
We can select time zone and the exact time when this flow should trigger. Here we have given the time as 1655 hours.

4. Get items (with filter query). Here we will filter and fetch events that are occurring in next 60 days only. In the filter query we have used two expressions. First expression results in today’s date in string format and the second expression results in date after 60 days in string format from today. The expressions are as follows:
string(convertFromUtc(utcNow(),'India Standard Time','yyyy-MM-ddTHH:mm:ssZ'))
The above expression will give todays date in “IST” and string format.
string(convertFromUtc(addDays(utcNow(),60),'India Standard Time','yyyy-MM-ddTHH:mm:ssZ'))
The above expression will give date after 60 days from today in “IST” and string format.
We have ordered our events in ascending order by Event’s date.
Filter query is as follows:
EventDate ge '@{string(convertFromUtc(utcNow(),'India Standard Time','yyyy-MM-ddTHH:mm:ssZ'))}' and EventDate le '@{string(convertFromUtc(addDays(utcNow(),60),'India Standard Time','yyyy-MM-ddTHH:mm:ssZ'))}'

Initialize variables Birthdays Date, Birthdays Day and Birthdays Title (Array). We will be using these variables to store birthday events. The reason they are in array format is because we need to append more events (if exists) then compile them all and convert it to string (JSON format), so that it can be used in Adaptive Card.

6. In the same way we will create other variables (Array) that will contain information about Work Anniversary and Holidays events.

7. Initialize 3 more variables that will contain the final string (JSON format) of each event type and will be used in Adaptive Card later.
We require these variables, because we do not know whether there will be a Work Anniversary or Holiday or Birthday in next 60 day. So, we use Condition to check whether there are any events or not and then set these variables with either “No Events” or the data available from the SharePoint calendar list.

8. In this step we will use Apply to each to append all the events data i.e., Date, Day and Title in the arrays variable that we defined above. The loop will be applied on “Value”. Can be selected from dynamic content. This “value” is the type of event in our SharePoint calendar.


9. Inside the loop we will use Switch to check what kind of event it is (Birthday or Work Anniversary or Holiday). Switch will be applied on Category/Value. This can be found in dynamic content.


10. We will be having 3 options in switch as follows:

11. In the Birthday option we append the 3 variables that we created before Birthday Date, Birthday Day and Birthday Title. This is written in JSON format which is required in Adaptive Cards.
Value used in “Equals” is category name. Switch will check what is the outcome of “value” in each iteration and then it will go into the designated branch. Branch is selected by giving value in “Equals” input field of the choice action. We will give the type of event in “Equals” field.

We have added two expressions for formatting date and day which is visible on adaptive card.
Copy paste the entire Value from the Append connectors for each.
Expression used in Birthday Date is :
formatDateTime(items('All_Events')?['EventDate'],'dd-MMM-yyyy')
Expression used in Birthday Day is:
formatDateTime(items('All_Events')?['EventDate'],'ddd')
Value in “Append Birthday Date” action is as follows:
{
"type": "TextBlock",
"text": "@{formatDateTime(items('All_Events')?['EventDate'],'dd-MMM-yyyy')}"
}
Value in “Append Birthday Day” action is as follows:
{
"type": "TextBlock",
"text": "@{formatDateTime(items('All_Events')?['EventDate'],'ddd')}"
}
Value in “Append Birthday Title” action is as follows:
{
"type": "TextBlock",
"text": "@{items('All_Events')?['Title']}"
}
12. Similarly, we will add the other two event types in the switch as shown below:

Value in “Append Holiday Date” action is as follows:
{
"type": "TextBlock",
"text": "@{formatDateTime(items('All_Events')?['EventDate'],'dd-MMM-yyyy')}"
}
Value in “Append Holiday Day” action is as follows:
{
"type": "TextBlock",
"text": "@{formatDateTime(items('All_Events')?['EventDate'],'ddd')}"
}
Value in “Append Holiday Title” action is as follows:
{
"type": "TextBlock",
"text": "@{items('All_Events')?['Title']}"
}
Value in “Append to Work Anniversary Date” action is as follows:
{
"type": "TextBlock",
"text": "@{formatDateTime(items('All_Events')?['EventDate'],'dd-MMM-yyyy')}"
}
Value in “Append to Work Anniversary Day” action is as follows:
{
"type": "TextBlock",
"text": "@{formatDateTime(items('All_Events')?['EventDate'],'ddd')}"
}
Value in “Append to Work Anniversary Title” action is as follows:
{
"type": "TextBlock",
"text": "@{items('All_Events')?['Title']}"
}
13. In this step, we have used condition to check whether our Birthday Date(Array) variable is empty or not. If it is empty, it means there are no Birthday events in next 60 days. So we need to show “No Events” text in the Birthday section of Adaptive Card. The expression used to check whether its empty or not is:
empty(variables('Birthdays Date'))
If the Birthday Date array is empty, then we will set the variable Birthday String to the following JSON code.
Note: Do not miss any commas (,) because we are writing this code in JSON format and commas are very important in JSON. If you miss any comma or put any extra then flow will fail with an error. We have put “,” in starting because, this piece of code is going in between the JSON code. That means there is some more code above this piece of code, so to maintain the JSON formatting we have to give “,” in starting.
,
{
"type": "TextBlock",
"wrap": true,
"text": "No Events"
},

14. If our Birthday Date array is not empty. Then we will use compose action to create our Birthday String.

Here we have used 3 expressions, these are used to join all the array items and separating them by “,” comma.
Expression goes like this:
join(variables('Birthdays Date'),',')
This expression is for Birthday Date array, in similar ways we have applied it in other two places for Birthday Day and Birthday Title.
The complete code for this section is shown as below:
,
{
"type": "ColumnSet",
"columns": [
{
"type": "Column",
"width": "auto",
"items": [
@{join(variables('Birthdays Date'),',')}
]
},
{
"type": "Column",
"width": "auto",
"items": [
@{join(variables('Birthdays Day'),',')}
]
},
{
"type": "Column",
"width": "auto",
"items": [
@{join(variables('Birthdays Title'),',')}
]
}
]
},
15. In the next step we will set our Birthday String variable as the output of the compose action we did above.

16. Follow the above steps and create another condition that will check Holiday Date.
Condition to check if, Holiday Date is empty or not
empty(variables('Holiday Date'))

If its empty set the variable same as Holiday String.

Code snippet is as follows:
,
{
"type": "TextBlock",
"wrap": true,
"text": "No Events"
},
17. If it is not empty then, use the compose action and this time change the variables in expressions to Holiday Date, Holiday Day and Holiday Title. And set the Holiday String variable the same way we did for Birthday String. Here is the code snippet to be used in compose action for Holiday String.

Complete code of this section is as follows:
,
{
"type": "ColumnSet",
"columns": [
{
"type": "Column",
"width": "auto",
"items": [
@{join(variables('Holiday Date'),',')}
]
},
{
"type": "Column",
"width": "auto",
"items": [
@{join(variables('Holiday Day'),',')}
]
},
{
"type": "Column",
"width": "auto",
"items": [
@{join(variables('Holiday Title'),',')}
]
}
]
},
18. In the next step we will set our Holiday String variable as the output of the compose action we did above.

19. We will add another condition for Work Anniversary Event. The condition to check whether Work Anniversary Date array is empty or not will be the same as in Birthday or Holiday Date array.

20. Work Anniversary in our last event type and in Adaptive Card it is shown at the last. So, in this one the comma (,) that was there at the last of the compose code and in the No Events code snippet will not be there. Below is the code snippet if the Work Anniversary Date array is empty:

,
{
"type": "TextBlock",
"wrap": true,
"text": "No Events"
}
Here, we can see that there is no comma at the end because this is our last event type to be displayed in adaptive card.
21. If the Work Anniversary Date array is not empty, then the compose code snippet looks like this:
We have used the same expressions to join the array items.

,
{
"type": "ColumnSet",
"columns": [
{
"type": "Column",
"width": "auto",
"items": [
@{join(variables('Work Anniversary Date'),',')}
]
},
{
"type": "Column",
"width": "auto",
"items": [
@{join(variables('Work Anniversary Day'),',')}
]
},
{
"type": "Column",
"width": "auto",
"items": [
@{join(variables('Work Anniversary Title'),',')}
]
}
]
}
22. Set the Work Anniversary String variable to output of compose action above.

23. We will use 3 more compose connectors to store the URL to the images that are visible on Adaptive Card.

We can use variables as well to store the URL.
24. Finally, we will post the adaptive card in MS Teams Channel. We will use the following connector.


25. The code of the body of the Adaptive Card is as follows:
{
"type": "AdaptiveCard",
"$schema": "http://adaptivecards.io/schemas/adaptive-card.json",
"version": "1.2",
"body": [
{
"type": "Container",
"style": "emphasis",
"items": [
{
"type": "TextBlock",
"wrap": true,
"weight": "Bolder",
"size": "ExtraLarge",
"horizontalAlignment": "Center",
"text": "Upcoming Events",
"id": "UpcmingEventsId"
},
{
"type": "ColumnSet",
"columns": [
{
"type": "Column",
"width": "auto",
"items": [
{
"type": "Image",
"url":"@{outputs('Holiday_Icon_URL')}",
"width": "40px"
}
]
},
{
"type": "Column",
"width": "stretch",
"items": [
{
"type": "TextBlock",
"text": "Holidays",
"wrap": true,
"weight": "Bolder",
"color": "Good",
"id": "HolidaysTxt",
"size": "ExtraLarge",
"spacing": "ExtraLarge"
}
]
}
],
"spacing": "Large"
}@{variables('Holiday String')}
{
"type": "ColumnSet",
"columns": [
{
"type": "Column",
"width": "auto",
"items": [
{
"type": "Image",
"url":"@{outputs('Birthday_Icon_URL')}" ,
"width": "40px"
}
]
},
{
"type": "Column",
"width": "stretch",
"items": [
{
"type": "TextBlock",
"text": "Birthdays",
"wrap": true,
"color": "Attention",
"weight": "Bolder",
"spacing": "ExtraLarge",
"size": "ExtraLarge"
}
]
}
],
"spacing": "Large"
}@{variables('Birthday String')}
{
"type": "ColumnSet",
"columns": [
{
"type": "Column",
"width": "auto",
"items": [
{
"type": "Image",
"url":"@{outputs('Work_Anniversary_URL')}",
"width": "40px"
}
]
},
{
"type": "Column",
"width": "stretch",
"items": [
{
"type": "TextBlock",
"text": "Work Anniversaries",
"weight": "Bolder",
"color": "Accent",
"wrap": true,
"size": "ExtraLarge",
"spacing": "ExtraLarge"
}
]
}
],
"spacing": "Large"
}@{variables('Work Anniversary String')}
]
}
]
}
We have successfully posted an adaptive card with the events of the next 60 days to the selected Channel in MS Teams. We can post this Adaptive Card to a specific user as well. We can change the recurrence time according to our needs. We can change the design of the adaptive card in the Adaptive Card designer.

Written By- Ankur Jarial
(Microsoft 365 Developer)
Written By- Ankur Jarial
(Software Developer Trainee)

Peer Reviewed By- Jasjit Chopra
(CEO)
Peer Reviewed By- Jasjit Chopra
(CEO)

Graphics Designed By- Sanika Sanaye
(Creative Design Director)
Graphics Designed By- Sanika Sanaye
(Creative Graphic Designer Trainee)
Celebrating employee birthdays on office premises never gets old. It shows that an organization value employee’s milestones and achievements too. It also helps in creating happiness and motivation and what can be a more effective way than to have a wonderful birthday celebration on their special day?
Secretly, we all expect to get recognition at work during our birthdays. It is our special day, and we want to get more attention than usual and when it comes to celebrating employee birthdays at work, we often fall short of unique and budget-friendly party ideas.
Let us look at some Inexpensive and unique birthday celebration ideas that will make employee’s birthdays memorable.

Office desk space is a crucial part of an employee’s working environment. They spend a lot of time working on their desk, how about decorating an employee’s desk without them knowing it?
This is one of the easiest and inexpensive ways to make an employee’s day special. One can use rainbow-colored balloons, some origami decorations, chocolates, and a big banner with “Happy Birthday” written on it. Place them on the table before the employee login for the day.

Birthdays are a great time to show how much employee means to the organization and to the team he/she is working for. Instead of using digital birthday cards, colleagues can write a few sentences about the employees and what they like most about working with that person. The HR team can combine all thoughtful notes in a card and present that as a birthday present to the employee.
It does not take much to put a smile on an employee’s face on his or her birthday; just a sentence or two in an employee’s birthday card can make all the difference!

Some employees may be interested in celebrating their special day with their families or friends. Or an employee might just need a day off to relax & revive. Whatever the case, offering a personal day off on this once-a-year event is something employees will surely appreciate.In case they do not want to take an off, consider one day off as a birthday present that they can redeem on any day of the year as per their need.
Another way of celebrating an employee’s birthday is to hold a surprise meeting for an employee.
One can make it unexpected, so it seems like a regular team meeting. Let everyone join well in advance before the birthday boy/girl, so that when the employee (Birthday boy/girl) enters the meeting room, they will be having a huge smile on their face instantly. Make sure you switch your birthday celebration strategy every now and then so they will not automatically expect a “meeting” like this on their special day.

Sending personalized video from the team can be very special for anyone, ask everyone to film 15-20 seconds video on their personal phone or camera to keep it a secret.

One can make it unexpected, so it seems like a regular team meeting. Let everyone join well in advance before the birthday boy/girl, so that when the employee (Birthday boy/girl) enters the meeting room, they will be having a huge smile on their face instantly. Make sure you switch your birthday celebration strategy every now and then so they will not automatically expect a “meeting” like this on their special day.

Cakes play an important role in birthday occasions.Make sure you find out what employee likes in cake, whether it is chocolate chip, fruit, or red velvet cake. One can also send cakes and sweets to employee’s homes if they are working remotely.

If we can’t celebrate employee’s birthdays in the office, there are many alternate ways to make them feel special. Gather all team members together and wish birthday boy/girl online with the help of group chat software.This activity can also help in team bonding and give some space to talk on a personal level, which eventually makes the birthday boy/girl feel special in the spotlight given by the team.
Select some personalized gifts for an employee that will be memorable and useful at the same time.From Desk Stationery, Custom water bottles or even Personalized pen. One can also DIY gifts to make it more personalized, such as:


Eating together is a simple way to build stronger team bonds, and being able to celebrate your employee at the same time is the cherry on top.Make sure you know about their favorite cuisine or snacks. Have them order in the office or you can also plan to go out with the team as per their availability.

A gift card or voucher makes sure that an employee can have exactly what they want, it can be tailored to an employee’s Wishlist or interest.A week before their birthday, ask them to make a few choices from a gift card list, such as gift cards from Starbucks, Groupon, nearbuy, Myntra etc. the employee will appreciate the gesture. Just make sure it is something they are interested in first before you buy gift card for them. An easy way to do that is by talking to your employees directly.

Written By- Nidhi Pandey
(Chief Happiness Officer)
Written By- Nidhi Pandey
(Chief Happiness Officer)

Peer Reviewed By- Jasjit Chopra
(CEO)
Peer Reviewed By- Jasjit Chopra
(CEO)

Graphics Designed By- Sanika Sanaye
(Creative Design Director)
Graphics Designed By- Sanika Sanaye
(Creative Graphic Designer Trainee)
While writing actions we can follow two different approaches. Depending on the scenario any of the following approaches can be chosen.
In this, all the actions should be written in a series like shown below.

Each action is triggered only when the previous one is completed. It is useful in cases, where the coming action depends on the outcome of the previous action. The image below illustrates the flow of actions.

In this, all actions are wrapped in a function name concurrent as shown below:

As the name concurrent itself explains, all the actions will run concurrently. This function can be used where any of the functions are not interdependent. The common place to use concurrent function is at onStart() action of an App. It can reduce the load time drastically if we are working with large data sets. The image below illustrates the flow of actions.

Keynote: - Do not use Concurrent function if actions are interdependent.
The comparison shown below is calculated on data with more than 5000 entries in total.
In the above image Sequential and concurrent are two buttons which calculate the request time of a particular query. Below the buttons, the calculated time is shown. By studying the difference, we can imagine how the Performance of the App can be drastically changed just by a single concurrent function if applied correctly.
Before proceeding, we should be aware of the fact that more than 500 controls on a single screen can cause performance degradation. So, make sure that you do not create 500 different controls like gallery control, text input, label, etc on a single screen. Refer to the documentation here for more details.
For optimization of the App, controls should be minimized wherever possible. In the below example we will be replacing 5 button controls with one gallery control and one button control, that will repeat within the gallery.

The 5 buttons control shown above are normal buttons that we usually create. Those 5 button controls can be replaced with one gallery control and 1 button control. When we are creating 5 individual buttons then the number of controls is 5. But when we replace 5 button controls with 1 gallery control and 1 button control, it reduces the number of controls from 5 to 2. This trick is effective in reducing the number of controls over a single screen.
In the gallery control shown above we have added a collection of buttons in its Items property as shown below:
Dynamic data can also be added in items according to the scenario. This trick can be used whenever we want to restrict controls in our app. Restricting the number of controls in the app can optimize the app’s performance.
A Component is an excellent example when it comes to reusability. We can make a custom component and use it in our App according to the need. Below is an example of a custom component used as a header.
Here we have a simple example of a component. In this, we are using a label control (lblheader) and an image control (img). Components can be very useful where the same control is being used repeatedly. Our example component above has 2 controls, but when we add it to the screen it will be treated as a single control as shown below:

As we can see in the above image, the component is treated as a single control (Header_Component). But we created it with two different controls which are image control and label control as explained above. When any change is being made in a component, it reflects the changes everywhere we are using the component. This can save time if the component is being used several times in the app. Learn more about components here.
DelayOutput is a property of the text input field. Default it is set to false. Normally if we are making any search request in the gallery or query in the data set it is made for each letter we type. But suppose, we have a large data set, and we make a normal query through the input field. The query will be made for each letter we type which can lead to performance degradation.
We can use the DelayOutput property by going into the advanced section of input field and setting it to true, which is set to false by default. Now a query will only be made once pause while typing. This trick can make the App look more responsive and lag free.
We should be keeping an eye on the dependency also. If not, it can lead to performance degradation. Let us study the example below.

In above example, colour for red label is defined in the same screen it exists.

But for the purple label, color is inherited from a button (SquentialBtn) present in a different screen as shown in the above image.
Everything looks fine until we know the following fact, Power Apps renders all the controls and data of the screen currently in use. When we are inheriting color from other screen Power Apps will load all the controls in that screen also, which can lead to unnecessary performance degradation within the App. Also, one other very common scenario is that where form control in one screen is attached to a gallery control in a different screen. Try to avoid such scenarios if possible.
Best Practices: - We can declare global variables at the start of the app and use them anywhere in the App. With this trick only controls under screen getting used will be rendered, hence increasing the performance of the App. Below is the example for declaring a global variable.

In the above image, we can see that a variable (ThemeColor) is made. It is declared in the OnStart property of the app. That means everything declared here will be processed at the start of the app. If anything is getting used in multiple screens, then best practice is that it should be initialized as a variable in the onStart of the app and then use it anywhere in the app without any issue of control dependency.
This trick is helpful where we are going to use a gallery and having data connectors in it. Suppose the data we are rendering in a gallery control is coming from a SharePoint list. Instead of connecting the SharePoint list directly in the Items property of the gallery control, we should first load the data from the list in a collection. We can immensely improve the performance of the Power App using this method.
Collection can be made at OnStart of the App or OnVisible property of the screen. If we initialize the collection at onStart of the app then the data will only be refreshed at the beginning of the app start. On the other hand, if collection is initialized in the OnVisible property of the screen then it will be refreshed every time the screen gets toggled.
Collection can be made simply by writing the code shown below:

In this, Client is the name given to the collection and ‘Client Lookup’ is the list present in SharePoint. Now you can use a collection called Client in your gallery control.
Note: If other people are making changes to the SharePoint list while another user is working in your gallery control, they will not see the changes unless you provide a mechanism to refresh your collection in some form or fashion. One option that can be applied is by giving a refresh icon somewhere on the screen that will clear collect the collection again from the SharePoint list.
The filter function is not delegable and will not return accurate results if our SharePoint list contains data over a particular delegation limit. Refer to the documentation here for more details about delegation.
Limitations/Disadvantages of using the First filter:

Considering the disadvantages, one must be careful while using First Filter. All these disadvantages lead to the use of an alternate method, which is Lookup.
In the image below, LookUp is applied to a collection name ClientColl and getting data starting with letter A. By using LookUp we can overcome limitations faced in First Filter option.

Consider a scenario where we are fetching data from Info collection which has three columns ID, Title and Modified. We can fetch the data individually for each column or reduce our lines of code as follows. In the three images below, you can see we are fetching data individually for each column.
ID

Title

Modified

By studying three of the above images, it is observed that most of the formula is repeating itself. There is nothing wrong with this too, but a line of code written can be reduced drastically if we are using a lot of data from the same list or collection. Below is an example of how we can implement improvements.
By setting the repeating formula as variable (InfoShort), we can now use this variable in our formula. Below is the implementation. First, we set our variable InfoShort as shown below:

Then we utilise this variable for setting the text property of label as shown below.

When we load a big amount of data from any source, a lag or latency can be seen. The latency can leave the end user in frustration and can cause a bad experience. By using a spinner, this issue can be tackled. Steps are listed below on how a spinner can be implemented.
Note: If you are using the concurrent function, the variable IsLoading should be set outside of it.

2.We have used a label with which we have cover the whole screen as shown below.

3.Give some background colour to the label so that it looks a bit transparent. This will give a kind of blurry effect to the spinner.
4.Set visible property of the label to IsLoading as shown below.

Doing this, label will only be visible when it is set to true (defined in 1st step).
5.Now insert an image in the middle of the screen and set the spinner of your choice. Set visible property of image to IsLoading, same as step 4.
Spinner will be seen when data is being loaded in the app.

Spinner must be used in every possible action where there can be a time delay for a user to interact. You can refer to this free site called loading.io which provides a bunch of free spinners to get you going. Adding a spinner to an app will provide a better experience for the end user.

Written By- Tanish Bawa
(Software Developer Trainee)
Written By- Tanish Bawa
(Software Developer Intern)

Peer Reviewed By- Jasjit Chopra
(CEO)
Peer Reviewed By- Jasjit Chopra
(CEO)

Graphics Designed By- Sanika Sanaye
(Creative Design Director)
Graphics Designed By- Sanika Sanaye
(Creative Graphic Designer Trainee)
This article will help you configure mail routing during the hybrid migration process from your on-premises mail server to Exchange Online (Microsoft 365). This will ensure zero interruption for your mail flows when some of your user mailboxes will be On-premises while the others have been migrated to Exchange Online.
Today, we will cover a scenario where your organization has Exchange Server 2016 On-premises and are planning to migrate to Exchange Online (Microsoft 365) via the hybrid migration, without any 3rd party tools or services.
This involves the process of running the exchange hybrid configuration wizard.
For this scenario, centralized routing is disabled (centralized routing is recommended only for compliance requirements).
| Username | Mailbox Type | Mailbox Size (GB) | Migration Date | Successful (Y/N) |
|---|---|---|---|---|
|
John Doe |
User |
4.52 |
12th May 2021 |
Y |
|
Bill Gates |
User |
66.5 |
14th May 2021 |
Cell |









We will create a transport rule to route mails from Microsoft 365 to your On-premises for all users whose mailbox is still in an On-premises environment.










Written By- Aneesh Kumar
(Microsoft 365 Solution Architect)
Written By- Aneesh Kumar
(Microsoft 365 Solution Architect)

Peer Reviewed By- Jasjit Chopra
(CEO)
Peer Reviewed By- Jasjit Chopra
(CEO)

Graphics Designed By- Sanika Sanaye
(Creative Design Director)
Graphics Designed By- Sanika Sanaye
(Creative Graphic Designer Trainee)
As designers, we love finding solutions to problems and creating work that has an impact. However, to convince others, especially the clients, we must communicate our idea well. This is what I will be talking about in this post. Whether we are pitching to a client or showcasing our work online, we communicate our reasoning behind a solution through presentations. So, we might as well learn how to make one that will have the most impact on the audience.
Understanding which sections to include in our presentations and why to include them is necessary if we want to get our point across to others. So, we will begin by first understanding what sections you should include and what value they bring to your presentation.
It is very important to know the “why” behind a particular project. Whether it is to help a client solve a business problem or contributing to a cause you believe in, the purpose behind a project is what fuels the motivation to create it. Including it in your presentation gives a back story for the audience to relate to your proposed solution.
For example, this was the purpose behind a meditation app project I created for my graphic design specialization course from Coursera.

Another important factor is to set clear objectives and key results for the project. Often, when you are working with a client, you might be given a creative brief with all these included. Other times, you might have to set your deadlines, objectives, and key results. Having these in your presentation allows your audience to understand what you were trying to achieve. When you justify your creative decisions concerning the deadline and objectives, you get clarity on the thinking you implemented behind those decisions. This also makes it easier for others to give you constructive feedback.
For example, my capstone project was divided over 6 weeks and, each week, we had to complete a part of the project and submit it for review. There would be a brief to guide us through the assignments which helped us to get a clear idea of what is expected and what is to be delivered. The objectives in the brief were helpful for us in gauging if we had completed the assignment and for others as a framework to review our assignment.
Once you have decided the purpose behind your project, you sort of have an idea about the overall theme of the project. This is the time to take inspiration and research more about the topic. For my project, my theme was developing meditation as a habit. So, I went ahead and read more about the history of meditation, the tools that are out there now such as Calm or Headspace, and the ways to make a habit stick. I used the Calm app as a reference for developing the UI of my project.
In the course, we were asked to come up with three words to describe the feel of our brand. This was yet another research task where I went and researched the words most associated with meditation. Apart from that, I also tried to google words and synonyms for what I wanted the audience to feel about the brand.
Once we have our research with us, we can go on to ideation to come up with ideas for the project. There are many ideation techniques out there, but we will focus on the mind map for this blog. In a mind map, we start with the theme of the project or the name of the project and map out branches of all the terms associated with it. With each level of the mind map, we go further and further away from the core theme of the project. It allows us to look at every aspect of the background of the project as an individual element instead of one unit. This can lead to some innovative ideas which we may have otherwise overlooked.
This is the mind map I used to come up with the name as well as the entire branding idea of my capstone project.

Apart from this, you can also create a moodboard from the references you have collected in your research to draw inspiration and ideas from. These are the moodboards I made using my research for the project.


The goal of the ideation stage is to come up with three words that you can use to define the aesthetics and feel of the project. These are the words on which you will base your design decisions to achieve the result. These words will also help the audience to understand the criteria you used to filter out all non-serving design elements and see whether you did a good job of it.
So, for my project, I wanted my brand to feel – Immersive, Inspiring and Curative.
Once the ideation stage is done, we roll our sleeves up and get creating. Depending on the project you can have different deliverables such as logo, illustration, user interfaces, packaging and so on. After you have worked out all the different variations of your deliverables, you might make iterations of the one you have finalized upon. When it comes to presentation, it is neither feasible nor advisable to make your audience go through all of them. So, here comes the question - What are the three best options that you are willing to show your client? This question gets the ball rolling for you to make some tough decisions and eliminate all the iterations that do not make the mark. The mark being the design objectives you have decided upon in the earlier stages.
This stage is basically to showcase how well you have executed your objectives and what the design looks like. You can always go a step further and put the design on mockups to help your audience visualize the designs in the physical world.
Here are the deliverables I made for my capstone project –
1. Logo

Note: When presenting logo do include the sizes for all the various platforms it will be used in like mobile apps, websites, print, etc.
2. Mockups
This is the mockup for a business card. It helps to understand how the logo might look on the card.

Since the theme of my app is about sounds generated from plant heartbeats, I have also made a mockup of a CD Album which could be the brand’s extended product.

Below is an advertisement banner mockup where we can see how the brand might communicate the experience of using the app through graphics.

3. User Interface
This is how the home page of the app looks like. Putting it on a mockup further clarifies the look and feel of the app.

Now that we have understood what parts we must include in our presentation, let us have a look at which ones to include for different purposes.
There are largely three categories where we use the presentation as a means of communication for showcasing our projects –
When pitching to a supervisor or a client, you must document the entire process and reasoning that helped you to reach the final result. This includes the design brief (which is somewhat like the purpose section), research as well as ideation. You also must include the creation part but only include the three iterations of the final variation. You do not want to confuse the client too much by showing them all the other choices. If you have made any mockups, include them in the presentation. This helps the client understand how the design will look in a physical space.
Here are a few examples of good creative process presentations–
http://www.helenbentley.com/lyft-rider-redesign
https://www.brehuang.com/uber-scooters
For online portfolio websites, it is advisable to focus on only the final resulting artwork. Often the process behind these designs can be quite lengthy and it is not a good experience to have to scroll through all that to get to the actual design. Also, the format of such websites is not suitable for showcasing the process as they focus more on graphics than text. You can display your final designs here with a brief introduction about the project, the color or typography that you have used and the mockups as well. If you want to point people towards the process behind the final design, you can include a link to a video or blog post where you can walk them through an in-depth explanation of your process and design choices.
For portfolio websites, you can showcase your creation section with brief snippets from the purpose and research sections.
You can check out my presentation of the capstone project I talked about over here
A platform like a blog is perfect for documenting the process that you underwent to get to the result. You can use this medium to post long-form content. Such a format can allow you to go into the details about all the sections we have discussed. Blogs are the perfect place for showcasing case studies as there is an emphasis on both texts as well as graphics.
Here are links to some awesome case studies:

Authored and Graphics Designed By- Sanika Sanaye
(Creative Design Director)
Authored and Graphics Designed By- Sanika Sanaye
(Creative Graphic Designer Trainee)

Peer Reviewed By- Jasjit Chopra
(CEO)
Peer Reviewed By- Jasjit Chopra
(CEO)
SharePoint APIs are used in various platforms to perform basic as well as complex actions.
Two places where these APIs are used vigorously are:
The challenge faced while developing these solutions is that, there is no easy and quick way to test or execute these API calls in a time saving manner.
There is another alternative to do the API calls from POSTMAN, but it requires you to register an app in AZURE APP DIRECTORY and then use client IDs and Client Secrets to generate the Bearer Access Token and then use it to authenticate your API calls.
But today we will discuss another simple way which is very quick to implement and saves a lot of time.
In this blog, we will leverage the existing authorization tokens that you have in your browser from visiting an existing SharePoint list. This will save us tremendous amount of time and effort and will not require any additional admin rights to use Postman calls.
First, we will be having a SharePoint List on which we are going to do all these API calls from Postman.
1. We will navigate to our SharePoint site and Click on “New” on Action bar.

2. Click on the “List” option in the dropdown menu.

3. A new “Create a list” window will open. We will create a “Blank list”.

4. We will provide the Title as “Postman_Test_List” for our new list and click on “Create”.

5. We can see, there is only one column “Title”. We will change the view of this list and show another column “ID” in this view.

6. To Change View, we will click on the “All Items” dropdown on Action bar.

7. From the dropdown menu we will select “Edit Current View”

8. Here we will select the column we want to show. We will check the “ID” column and change its “Position from Left” to 1.

After checking and changing position of “ID” your settings should look like this:

9. Now Click on “OK” button on the top right corner of the Page.

10. After Clicking on “OK”, we will see the “ID” column has been added to the left.

We are ready with our list called “Postman_Test_List” for further experimenting.
We will focus on getting the cookies that we need for our API calls. Follow the below steps:

2. Next select “More Tools” and then “Developer Tools”. Prefer using Microsoft Edge or Chrome browser for this activity.

3. We need to see network calls in order to get our cookie details. Click on the double right arrow chevron “>>” and then click on Network as shown below:

4. We need to filter Network calls to get the specific call.

5. We will type “AllItems” in Filter Input Field and then we will refresh the page to get the network calls. Note: This is the name of the view in the url as AllItems.aspx.

6. After refreshing the page, we will get 2 “AllItems” calls in our network tab. We will select the row by clicking on it once where Type column is “text/html”.

7. By default, we will be in the “Preview” tab. We need to go to the “Headers” tab by clicking on it as shown below:

8. To find cookies, we have to scroll down until we find “Set-Cookie”. We will now try to copy two cookies from here named “rtfa” and “FedAuth”. Copy the values in these cookies and paste it in your notepad for further use. Copy the part which is underlined in green. Do not copy the semi-colon at the last.

Note: It is better to copy these values in a notepad, so that if you enter these values in another API call you are not coming to the SharePoint list and doing the same process again and again.
Make sure you have postman installed for your next steps. You can download it from here.
After starting Postman, you will come on this screen and then click on “+” button on top left corner of the window to add a new API request.

We must enter the API request URL, and then in the headers part we must give some headers that will authenticate and validate our API request. We are clearly not going to use the bearer authorization token, instead we are going to use the cookies to authenticate our request.
![]()
To make the post Request API calls we need “__metadata” of the list. To get the “__metadata” we do a Get request from postman. Which is as below: -

In our scenario above we have used the following request URL:
https://jarial98.sharepoint.com/sites/Postman-Testing/_api/Web/Lists/getbytitle('Postman_Test_List')?$select=ListItemEntityTypeFullName
In your scenario make sure to change the [Sharepoint_Site_Collection_Url] and [List_Name] in your URL as shown below:
https://[Sharepoint_Site_Collection_Url]/ _api/Web/Lists/getbytitle(‘[List_Name ]’)?$select=ListItemEntityTypeFullName
2. We will now set our headers. First, we will configure “Content-Type”. Click on the “Key” field in the Headers and type “Content-Type”.

3. For our “Content-Type” key, we will configure the value as “application/json;odata=verbose” as shown below:

4. Similarly, setup other headers as shown below. Refer to the table and the screenshot below.
In the “Cookie” key we will paste the two cookies separately that we got from our previous steps.
| Key | Value |
| Content-Type | application/json;odata=verbose |
| Accept | application/json;odata=verbose |
| Cookie | rtFa=706JWnffEMlFLImzRXQTmhQ36RCFYBbO11SOVBx8GwMmNEExOUMwM0ItNjQ5OC00MDYyLTk1NTktMDVCNEJFNTdFQkRCH7k56pQDaJkI7E1Fl593HpziVREDbuyDKQRpCoVSLD9KJTNOHZ5h3YJWVDx69ZMl++i089zPgYfu2wNtuI7xL
TMo8P/rvCDAgRp/KCnCL+dXNCJgsJNhqI3/TZ5W472P1kc4jLrdZvYHZPXq8K+gO0rbZnZ/uaAF1SZEf3FMsVPc53ZbhkMH7An3TpDnMcPNJeTB7YLGVKR1uIYj64lGnPVGrEhIF oj2An8++8DtKEOOX+5bCf7WDH75ut6G8L9MvieDJajmBUnLrlaGrJdWWC/aBz/5D8J/T7RQwnPf+6XtztOdTfCRWXPlSv3pIufKzBCtg5LrSgKRsQplG3OHnkUAAAA= |
| Cookie | FedAuth=77u/PD94bWwgdmVyc2lvbj0iMS4wIiBlbmNvZGluZz0idXRmLTgiPz48U1A
+VjksMGguZnxtZW1iZXJzaGlwfDEwMDMyMDAwZjhmNjQ0NzRAbGl2ZS5jb20sMCM uZnxtZW1iZXJzaGlwfGFua3VyQGphcmlhbDk4Lm9ubWljcm9zb2Z0LmNvbSwxMzI2M jI4ODg1NzAwMDAwMDAsMTMyNTg4MzQ1MzMwMDAwMDAwLDEzMjYyNzkzNDE 1MTA3MTUxOCw0OS4zNi4xMzEuMjAyLDY3LDRhMTljMDNiLTY0OTgtNDA2Mi05NT U5LTA1YjRiZTU3ZWJkYiwsNzFjZGFjZjItZmY2Ni00NWFiLWJlOGQtYjExOWQ2NGNmYW RhLGYxN2M0NDdmLTlmMGMtNGQyNy05MDZiLTRkODYzNTllYzJmYSxmMTdjNDQ3 Zi05ZjBjLT RkMjctOTA2Yi00ZDg2MzU5ZWMyZmEsLDAsMTMyNjI0NDc4MTQ5ODIxNDc5LDEzM jYyNjIwNjE0OTgyMTQ3OSwsLGV5SjRiWE5mWTJNaU9pSmJYQ0pEVURGY0lsMGlMQ 0o0YlhOZmMzTnRJam9pTVNKOSwyNjUwNDY3NzQzOTk5OTk5OTk5LDEzMjYyMzYx NDE0MDAwMDAwMCxhMDQzZTEwNC0xMTk3LTQ4YmYtYWI2ZS05ZmEwZDhiZDN lZmMsLCwsLHE5SzRyalpxNlp2Z2VFRitudzZaNnpPUkYzUlkwQ2FqQXVLTkkyYmk5UG1 walVCQ2dGT0J3RTlZdzZmL0pTa1NZWm1ZUWh6aXdKMUFQN2FzLzVKbzRGVXpCWUN GS3orWlZWYzlERDVMeHI0Z1pNTXp1UXhsMWxTNFhEL0F4aWM4OFJ5K01rWmsweE kyQnF0TEUzSkx0cnQ3aVR4OW8rYVNzR3p1WVNJMzZUUlhIVEdvWjNWbU1xTktlcXB 0QlRvRmNFcHErbGs5cHYvUDFYSUFYMnIxTVR4N1diN1UwUERsczd3ZGpoZWUxN0Z BeExORGQrcXVzUStuOHU3ZHpsYW0rKzQ2WlY4OERWYnV3UFhIOGF4MW9hQ3Q5 M3NQOWl0aHNSV2wyQWZxeWN5N1p1VUZBd0dWeUdaQ3pWcm45c05MVzV6R GJhRFRGWWU0aFM3VEJ1eGZqZz09PC9TUD4= |

Let us understand what these headers are for.
Content-Type: This is the header which Tells the SharePoint that the request is coming with JSON data.
Accept: This header tells SharePoint that we need the result in JSON format and odata means we need maximum data to be returned from the result.
Cookie: - These will contain two cookies namely, “rtfa” and “FedAuth”.
5. Click on “Send” button on the right of the URL Field. We will get a response with status code of “200”. This is our “__metadata”. Copy the part which is underlined in green and paste it in notepad for further use.

There is one more key that we need to configure in Header. It is called X-RequestDigest.
This header authenticates all the requests that are made to SharePoint except Get requests. The value of X-RequestDigest expires soon, so we need to get the value again and again to do our API calls. It is a good option to save our request so that we can easily go there and get the updated X-RequestDigest values.
Please make sure to keep previous headers as configured in the above steps as is. Follow the next steps as below:
1. Open new Tab in Postman and type the following URL. Headers will be same as we had for “__metadata” request. Remember this is a POST request type.
After entering the relevant data click on “Send”.

In our scenario above we have used the following request URL:
https://jarial98.sharepoint.com/sites/Postman-Testing/_api/contextinfo
In your scenario make sure to change the [Sharepoint_Site_Collection_Url] in your URL as shown below:
https://[Sharepoint_Site_Collection_Url]/_api/contextinfo
2. We will get a response and will copy the “FormDigestValue”. This is our “X-RequestDigest” header. Copy the value which is underlined in green and save this in notepad.
Note: - Form Digest Value has an expiration time of 1800 seconds. So, we have to do this request again when this value is expired.

Now, we have all the headers we need to make API requests.
Now we will make our first API call to get the items from the SharePoint List. We will use the getbytitle API option available in the Lists API from SharePoint. For more details refer to the documentation here.

In our scenario above we have used the following request URL:
https://jarial98.sharepoint.com/sites/Postman-Testing/_api/Web/Lists/getbytitle('Postman_Test_List')/items
In your scenario make sure to change the [Sharepoint_Site_Collection_Url] and [List_Name] in your URL as shown below:
https://[ Sharepoint_Site_Collection_Url]/_api/Web/Lists/getbytitle(‘[List Name]’)/items
2. We will get response with Status of “200”. Which means our request was successful and the response will contain all the items from our “Postman_Test_List” list.

The URL endpoint from SharePoint REST API for creating an item is the same as it is for reading an item. The difference is in the nature of “request type” and other information that needs to be sent along as a POST request. Follow the below steps to create a single item in SharePoint list:

|
X-RequestDigest |
0x68636B840B370DEC00213AC2C1A66C14F97C6DACC22815FFD27A0D3804D70793B1EB6B911969BDD03387F81212EA631722E66FD9C8A219755B0C97655BE906D0,08 Apr 2021 14:21:18 -0000 |

The “X-RequestDigest” header is used here because this is a POST request, and we need to validate this request. Every other header is same as above calls i.e Reading Items.
In our scenario above we have used the following request URL:
https://jarial98.SharePoint.com/sites/Postman-Testing/_api/Web/Lists/getbytitle('Postman_Test_List')/items
In your scenario make sure to change the [Sharepoint_Site_Collection_Url] and [List_Name] in your URL as shown below:
https://[Sharepoint_Site_Collection_Url]/ _api/Web/Lists/getbytitle([List Name])/items
This is a POST request, so we need to send our Sharepoint list item data in the body of the request.
2. Just below the URL field, we are having various options. We will select “body” and then select “Raw” radio button.

3. After Clicking on “Raw” radio button, we will select on what format we want to send the data. Select “JSON” from the dropdown list.

4. Now we need to write the body of the Request. Which looks like this.

“__metadata”: This is the metadata of the List. We got this by following steps above to get “__metadata”. We will paste the “ListItemEntityTypeFullName” value that we pasted in Notepad earlier.
Title: This is the data that we will send in the “Title” column of our SharePoint list.
{
"__metadata":{
"type": "SP.Data.Postman_x005f_Test_x005f_ListListItem"
},
"Title":"Sample Title 2"
}
Let us hypothetically imagine that your SharePoint list had another single line of text column called “Country”. If we were to send “India” as our value, our body request should look like this:
{
"__metadata":{
"type": "SP.Data.Postman_x005f_Test_x005f_ListListItem"
},
"Title":"Sample Title 2",
“Country”:”India”
}
After entering the body, click on “Send” button.
5. We will get a response, with the Status number “201”.

6. To Confirm whether the item has created or not, we will go back and check our list.

We will update a particular item in our SharePoint list. To get that item, we need to get its ID. So, we will navigate back to our SharePoint List and grab the ID of the item to be updated. In our case we are going to update the item with “ID” 2.

Update request is identical to Create request. There are only two new Headers that will be included, and the body of the request will be same as create item’s body. This is a POST request.

There are two new headers, X-HTTP-Method and If-Match
X-HTTP-Method: This basically means what type of request it is. Why we are not using Patch and Delete is because in some networks at application layer these requests can be blocked but, POST and GET requests are rarely blocked. You can read more about X-Http-Requests from here.
If-Match: This basically matches the eTag value but here we are not giving the e-tag value we are giving “*”.
|
X-HTTP-Method |
MERGE |
|
If-Match |
* |
In our scenario above we have used the following request URL:
https://jarial98.sharepoint.com/sites/Postman-Testing/_api/Web/Lists/getbytitle('Postman_Test_List')/items(2)
In your scenario make sure to change the [Sharepoint_Site_Collection_Url], [List_Name] and [ID] in your URL as shown below:
https://[Sharepoint_Site_Collection_Url]/ _api/Web/Lists/getbytitle([List Name])/items(ID)
1. After entering all the data click on “Send” button.

We will get status of “204” because this was an update request, it did not send any data in response.
2. We will go to the SharePoint List to verify the updated item.

We will delete a particular item in our SharePoint list. To get that item, we need to get its ID. So, we will navigate back to our SharePoint List and grab the ID of the item to be deleted. In our case we are going to delete the item with “ID” 2.
All the headers will be same as update request’s Headers. Only the value of “X-HTTP-Method” will be changed to “Delete”.
1. We will create a new tab and enter the URL same as update request. All the headers will be same. After Entering all the values click on “Send”. As this is a “Delete” request we do not need to send body.

|
Key |
Value |
|
X-HTTP-Method |
DELETE |
In our scenario above we have used the following request URL:
https://jarial98.sharepoint.com/sites/Postman-Testing/_api/Web/Lists/getbytitle('Postman_Test_List')/items(2)
In your scenario make sure to change the [Sharepoint_Site_Collection_Url], [List_Name] and [ID] in your URL as shown below:
https://[Sharepoint_Site_Collection_Url]/ _api/Web/Lists/getbytitle([List Name])/items(ID)
2. After, clicking on “Send” button we will get response with status code of “200”, stating that our request was successful.

3. Now, we will check whether our API call deleted the specified item in SharePoint list.

Sample Item 2 is deleted, because the ID given in the URL was “2”.
Here we have accomplished the task of doing API requests to Sharepoint List using Postman. We got the cookies from our browser and used them to authenticate our API requests. We did not used Azure Application account setup here, which eliminated the requirement of user having admin level permissions in SharePoint list. This process can be used by developers where they need to test an API request in a time saving manner. You cannot automate any of these processes because cookies have an expiration time.

Written By- Ankur Jarial
(Microsoft 365 Developer)
Written By- Ankur Jarial
(Software Developer Trainee)

Peer Reviewed By- Jasjit Chopra
(CEO)
Peer Reviewed By- Jasjit Chopra
(CEO)

Graphics Designed By- Sanika Sanaye
(Creative Design Director)
Graphics Designed By- Sanika Sanaye
(Creative Graphic Designer Trainee)
Are you still living in the era where you think that solely paying incentives and bonuses will keep your employees happy at work? If yes, read this post further to understand the importance of happiness and what drives individuals beyond financial gains to keep them happy.
Employee happiness creates a positive atmosphere and this inevitably encourages them to improve their personal well-being. Highly engaged employees bring positive energy to the workplace as well as in his/her local community and social circle.
The link between employee happiness and productivity is not new, employee happiness counts for a lot. Being happy is not just feeling happy at the workplace, it is about feeling happy in what you do. It is obvious that how we feel at work affects other areas of our lives. If it makes us happy it can create a positive impact on our surroundings as well.

Happiness provides satisfaction in the workplace. When employees are happy it gives them a sense of satisfaction and belongingness. They also love doing their daily tasks and put their best effort into their work without it being a burden. As such there are numerous effects of being happy at work, we have listed some of them below:
Making employees happy is not rocket science. Study after study has shown that happy employees are a direct correlation with the success of an organization. Below are some examples which help an organization to generate happiness:
The importance of wellness programs should be focused on bringing positivity and a healthy lifestyle for all employees. With the help of the right education, motivation, skills/tools, and a bit of support, every organization can implement a meaningful wellness program. At Penthara Technologies we are providing a basic health insurance program along with preventive healthcare services from our healthcare partner ekincare. Some of the benefits include yearly health checkups, unlimited doctor consultation, and access to a one-on-one personalized stress therapy program. Our healthcare partner also enables us to implement preventive healthcare maintenance for all our employees. It also helps in providing a platform where we can run various challenges, such as pushup challenge, Healthy meal challenge, Steps challenge, and many more.

Mental Health at work matters, no matter where you are. When you are facing mental health issues, your overall health gets affected. People are often reluctant to discuss mental health problems, especially at work. Eliminating mental health issues such as depression and anxiety would increase employee happiness. Organizations can deal with mental health issues by building a culture that prioritizes psychological well-being, it will help employees who are struggling to feel safe, and it also encourages them to improve their mental health. One of the ways you can evaluate the mental health of your employees is by sending small surveys and getting their feedback on how they are feeling regularly. At Penthara Technologies, we have implemented a small application that collects various mood levels for every employee at the end of the week. We ask for a score from 1 to 5 for feelings such as happiness, sadness, gratitude, frustration etc. This way we maintain a log of these scores by week for all our employees and can calculate an overall happiness score for our company.
Employees who get fair treatment in their workplace trust their employers and enjoy their work with more dedication. When employees feel that they are treated fairly, the relationship becomes strong, trust increases, and they enjoy their work. At Penthara Technologies, we have spent a great amount of time and emphasized creating a highly inclusive culture and developed fair and flexible policies for our employee-centric approach.
Candid feedback is crucial for the entire organization to remain aligned with the organizational goals and improve relationships with the employees. Candid feedback helps in adjusting and improving current and future actions & behavior. This is one of the best ways to elevate employee morale and create a more positive and happier work environment. If employees feel free to share what they think about the organization, management, and other employees, they are more likely to be happy and engaged with an organization.
Being approachable is the foundation of building a good relationship with employees. We believe in the approachable culture at Penthara Technologies, where we break down barriers between employer and employee so that we can create an environment of trust. We do not have a culture of any hierarchy in our management.
Apart from salary and perks, the most important aspect of job satisfaction is to be valued at work. It helps in creating strong workplace culture. When employees are doing good in an organization, it is important to acknowledge their work impartially to make sure their efforts are celebrated appropriately. One can implement recognition programs that can help in implementing a culture that knows how to value their employees appropriately.

Work-Life Balance is beneficial for employees as well as for the organization. If there is a good balance between work and personal life, it leads to improved mental health. A healthy work-life balance is not only important for health and relationships, but it can also improve employee’s productivity, and ultimately performance. We expect our employees to be as productive as possible and give their best during the 8 hours that they commit every day to our company. Beyond those 8 hours, they should practice disconnecting completely from their work and enjoy time for other commitments.
It is of utmost importance to engage employees in an organization to achieve job satisfaction. This always helps in better communication and team building. Engaged employees are happier, both at work and in their personal lives. We conduct weekly fun activities so that we can have some time off from work and relax. This also helps in building better relationships and bonds among our employees.
For this article, we will leave you with some inspiring quotes related to happiness. We hope that every organization can think and implement measures for their employee’s happiness.
"There is only one happiness in this life, to love and be loved." — George Sand
"Happiness lies in the joy of achievement and the thrill of creative effort." — Franklin D. Roosevelt
"Be kind whenever possible. It is always possible." — The Dalai Lama
"Spread love everywhere you go. Let no one ever come to you without leaving happier." — Mother Theresa
"Resolve to keep happy, and your joy and you shall form an invincible host against difficulties." — Helen Keller

Written By- Nidhi Pandey
(Chief Happiness Officer)
Written By- Nidhi Pandey
(Chief Happiness Officer)

Peer Reviewed By- Jasjit Chopra
(CEO)
Peer Reviewed By- Jasjit Chopra
(CEO)

Graphics Designed By- Sanika Sanaye
(Creative Design Director)
Graphics Designed By- Sanika Sanaye
(Creative Graphic Designer Trainee)