How to choose the best Antivirus Software for your business

30-day challenges every graphic designer must try out

Helping Old Clothes Find New Owners this Winter: A Social Initiative by Penthara

Be Good, Do Good

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.

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”.

Manifesting the Mission

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 -

The Home Stretch

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

Hall of Gratitude

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.

Get In Touch

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.

Creating reminder Adaptive cards in Microsoft Teams for upcoming events from a SharePoint calendar list

Overview

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.

Pre-Requisites

Creating a List of events on the SharePoint site

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.

Steps to create and add events in the calendar list on the SharePoint site

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.

Steps to create 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')}

            ]

        }

    ]

}

Conclusion

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)

Jasjit

Peer Reviewed By-  Jasjit Chopra

(CEO)

Peer Reviewed By-  Jasjit Chopra

(CEO)

Sanika

Graphics Designed By- Sanika Sanaye

(Creative Design Director)

Graphics Designed By- Sanika Sanaye

(Creative Graphic Designer Trainee)

10 Inexpensive Ways to Celebrate Employee’s Birthday

Introduction

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.

1. Surprise Desk Decoration

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.

2. Thoughtful notes from the whole team

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!

3. Gift one day off

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. 

4. Hold a Surprise meeting

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. 

5. A custom video from the Team

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. 

6. Cake Break

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.

7. Video call celebration for remote employees

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.

8. Personalized gifts

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:

9. Favorite treat

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. 

10. A Gift Card

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.

NidhiPandey

Written By-  Nidhi Pandey

(Chief Happiness Officer)

Written By-  Nidhi Pandey

(Chief Happiness Officer)

Jasjit

Peer Reviewed By-  Jasjit Chopra

(CEO)

Peer Reviewed By-  Jasjit Chopra

(CEO)

Sanika

Graphics Designed By- Sanika Sanaye

(Creative Design Director)

Graphics Designed By- Sanika Sanaye

(Creative Graphic Designer Trainee)

Invaluable tips for enhancing Power Apps (Canvas) performance

Appropriate use of sequential and concurrent approach

While writing actions we can follow two different approaches. Depending on the scenario any of the following approaches can be chosen.

1. Sequential Approach

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.

2.Concurrent Approach

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.

Performance difference between both Approaches

 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.

Controls Optimization and Dependency

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.

Minimizing controls

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.

Reusability

 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.

Use of Delay output property in input field.

 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.

Control Dependency

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.

Data Connection Queries

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.

Formula Optimization

First Filter VS Lookup

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.

Repeating formulas

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.

Visual and experience Optimization

Use of Spinner

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.

  1. As shown in the below image, set a variable to true at the start of the app. In my case variable name is IsLoading. Then after making all the queries, set IsLoading to false. By doing this we will give a visual representation of spinner loading while our data load operations are being performed.

          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.

Tanish

Written By-  Tanish Bawa

(Software Developer Trainee)

Written By-  Tanish Bawa

(Software Developer Intern)

Jasjit

Peer Reviewed By-  Jasjit Chopra

(CEO)

Peer Reviewed By-  Jasjit Chopra

(CEO)

Sanika

Graphics Designed By- Sanika Sanaye

(Creative Design Director)

Graphics Designed By- Sanika Sanaye

(Creative Graphic Designer Trainee)

Configuring mail routing for hybrid migration scenarios in Microsoft 365

Objective

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.

Scenario

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).

Prerequisites

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

Configuration Steps

Create a Send Connector

  1. To begin with, we need to create a Send connector in the exchange admin center that will be used to route emails from M365 to your On-premises server. (Note: The Hybrid Configuration wizard will create the connectors for you by default. In case you want to make changes to the connector for TLS etc., you can either create a new connector or edit the existing one.)

Create a Transport Rule

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.

Update the MX record to point to M365

  1. Follow the below link to generate and update the MX Record for your tenant.
  2. Add an MX record for email (Outlook, Exchange Online)

Conclusion

AneeshKumar

Written By-  Aneesh Kumar

(Microsoft 365 Solution Architect)

Written By-  Aneesh Kumar

(Microsoft 365 Solution Architect)

Jasjit

Peer Reviewed By-  Jasjit Chopra

(CEO)

Peer Reviewed By-  Jasjit Chopra

(CEO)

Sanika

Graphics Designed By- Sanika Sanaye

(Creative Design Director)

Graphics Designed By- Sanika Sanaye

(Creative Graphic Designer Trainee)

A newbie’s guide to presenting your design work

Introduction

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.

Purpose

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.

Research

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.

Ideation

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.

Creation

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.

Presentation

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 –

Pitching to a Supervisor or Client

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

Online Portfolio Website

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

Blogs

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:

  1. http://dbirman.com/grin
  2. https://blog.tubikstudio.com/case-study-appshack-logo-design-for-digital-agency/
  3. https://watracz.com/project/triniso

Sanika

Authored and Graphics Designed By- Sanika Sanaye

(Creative Design Director)

Authored and Graphics Designed By- Sanika Sanaye

(Creative Graphic Designer Trainee)

Jasjit

Peer Reviewed By-  Jasjit Chopra

(CEO)

Peer Reviewed By-  Jasjit Chopra

(CEO)

Quickly work with SharePoint API calls with Postman

Overview

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.

Pre-Requisites

Preparing SharePoint for Postman

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.

Steps to create SharePoint list and change view:

          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.

Getting Relevant Headers to Use in Postman

Steps To get Cookies for API call

We will focus on getting the cookies that we need for our API calls. Follow the below steps:

  1. While you are on your SharePoint list, open the developer tools. Click on the three dots “” (also known as ellipses).

 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.

Getting “__metadata” for API call’s body

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: -

  1.  In the new tab of postman, we will give the Url in URL field to get the “__metadata” of the list.

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.

Getting X-RequestDigest

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.

Few Examples of CRUD operations on SharePoint List

Reading Items from SharePoint List

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.

  1. Open new tab in Postman and type the below URL in the URL Field. There are no new Headers that we will use. After Entering all the values as shown below click on “Send”.

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.

Create A new item in SharePoint 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:

  1. We will open a new tab in Postman and write the URL and configure relevant headers to do a create item API request.

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.

Update an Item in SharePoint 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.

Delete an Item from SharePoint List

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”.

Conclusion

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)

Jasjit

Peer Reviewed By-  Jasjit Chopra

(CEO)

Peer Reviewed By-  Jasjit Chopra

(CEO)

Sanika

Graphics Designed By- Sanika Sanaye

(Creative Design Director)

Graphics Designed By- Sanika Sanaye

(Creative Graphic Designer Trainee)

The Importance of Happiness at work

Introduction

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 Importance of employee happiness

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.

Effects of being happy at work

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:

What generates happiness

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:

Providing Wellness Programs and Challenges

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

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.

Inclusive and Fair Policy

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

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.

Approachable Culture

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.

Being Valued  

 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

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.

Employee engagement

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.

Summary

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

NidhiPandey

Written By-  Nidhi Pandey

(Chief Happiness Officer)

Written By-  Nidhi Pandey

(Chief Happiness Officer)

Jasjit

Peer Reviewed By-  Jasjit Chopra

(CEO)

Peer Reviewed By-  Jasjit Chopra

(CEO)

Sanika

Graphics Designed By- Sanika Sanaye

(Creative Design Director)

Graphics Designed By- Sanika Sanaye

(Creative Graphic Designer Trainee)