Hello Everyone.
I have managed to extract the attachment of a Teams message in JSON, which partly looks like this:
For the above key and value, how can I make it so I can interact with them? E.g. create a condition 'if "Monitor status" contains DOWN then do something?
Many thanks for any help.
Solved! Go to Solution.
Hopefully this gets what you're looking for. Note that I've just got a manual trigger and storing the JSON directly in the Compose for this example.
See full flow below. I'll go into each of the actions.
Compose contains the JSON data you sent through. You would already have this as part of the trigger attachment content.
XML is a Compose that converts the JSON data to XML so we can apply XPath expressions. Note that I've also added a root element to ensure it's valid XML. The expression used is:
xml(json(concat('{"root": ', outputs('Compose'), '}')))
//Your expression would likely look like the following:
xml(json(concat('{"root": ', triggerBody()?['attachments'][0]['content'], '}')))
Condition checks to see if any items within any of the facts arrays have a name containing 'Monitor status' and a value containing 'DOWN'. If at least one item is returned, then the Condition will return true and would run your Reply in channel with a message in the Yes branch. The expression for the condition is:
length(xpath(outputs('XML'), '//sections/facts[contains(name, "Monitor status") and contains(value, "DOWN")]'))
----------------------------------------------------------------------
If I've answered your question, please mark the post as Solved.
If you like my response, please consider giving it a Thumbs Up.
@ianwuk That's some crazy (horrible) JSON you've got there 🙂
See full flow below. I'll go into each of the actions.
Compose contains your JSON data.
XML is a Compose that converts your Table data to XML. The expression also removes the style rows as they cause issues in the XML due to not having closing tags. The expression is below:
xml(concat('<table>', slice(outputs('Compose')?['text'], indexOf(outputs('Compose')?['text'], '<tbody>'))))
Select Codes retrieves an array of the Stock Codes. It uses the following expressions:
//From
split(last(xpath(outputs('XML'), '//tbody/tr/td/text()')), ' ')
//Map
trim(item())
Select Numbers retrieves all the numbers (will end up with an array of arrays in this instance). It uses the following expressions:
//From
xpath(outputs('XML'), '//tbody/tr/td/pre/code/text()')
//Map
split(trim(item()), decodeUriComponent('%0A'))
Initialize variable total creates an integer variable called total that stores the total number of rows from the JSON. The expression used is:
length(body('Select_Codes'))
Initialize variable index creates an integer variable called index initially set to 0. This will be uses when we loop over each of the rows in our Do Until loop.
Initialize variable rows creates an array variable called rows. It's initially set to an empty array and will eventually contain all our objects (rows of data).
Do until will continue to loop until index is equal to total. Each time through the loop index will be increased by 1. We use the value of index to retrieve the values from our arrays at that index to build up our objects. We then add the object to the rows array. Note that I've also changed the limits so Count is 1000 which will allow for the loop to run 1000 times (needs to be at least the same or more than the number of rows we have).
Append to array variable rows will build up each object using the current index. The object will then be appended to the rows array. Below are the expressions used for each property:
//stock_code
body('Select_Codes')[variables('index')]
//total_sku_have_stock
int(trim(body('Select_Numbers')[0][variables('index')]))
//total_sku_enable
int(trim(body('Select_Numbers')[1][variables('index')]))
//enable_lower_than_stock_percentage
float(trim(body('Select_Numbers')[2][variables('index')]))
The full object expression is below (can just copy/paste this directly into the action).
{
"stock_code": @{body('Select_Codes')[variables('index')]},
"total_sku_have_stock": @{int(trim(body('Select_Numbers')[0][variables('index')]))},
"total_sku_enable": @{int(trim(body('Select_Numbers')[1][variables('index')]))},
"enable_lower_than_stock_percentage": @{float(trim(body('Select_Numbers')[2][variables('index')]))}
}
Increment variable index increases the index variable by 1 each time through the loop so we can get the next set of data.
After the loop has completed, the variable rows should contain all of our rows/data. We then have Create HTML table using the output from the rows variable. This should give us our HTML table with the correct data format.
Below is what the HTML table would look like.
XML Stock is a Compose that converts our rows to XML which will be used in the Condition.
xml(json(concat('{"root": { value:', variables('rows'), '}}')))
Condition uses the following expression to check if any enable_lower_than_stock_percentage column >= 25. If true, then it will go into the Yes branch to run whatever you want to do.
length(xpath(outputs('XML_Stock'), '//root/value[enable_lower_than_stock_percentage >= 25]'))
----------------------------------------------------------------------
If I've answered your question, please mark the post as Solved.
If you like my response, please consider giving it a Thumbs Up.
Hey @ianwuk
Have you tried using "Parse JSON" action? For details see - https://zeitgeistcode.com/power-automate-parse-json/
If this reply has answered your question or solved your issue, please mark this question as answered. Answered questions helps users in the future who may have the same issue or question quickly find a resolution via search. If you liked my response, please consider giving it a thumbs up. THANKS!
P.S. take a look at my blog here and like & subscribe to my YouTube Channel thanks.
Thank you for replying @CFernandes
Yes, I did a parse json and now I have this - is it correct?
The fact I want is:
"name": "Monitor status ",
"value": "<p>DOWN</p>"
Many thanks!
@ianwuk Are you able to show your full JSON output from your Teams message? We should be able to achieve what you want without having to use a loop (Apply to each).
Hey @ianwuk - Many loops makes it confusing\tricky.. Can you please paste the JSON payload as mentioned by @grantjenkins
@grantjenkins I can't show it all as it contains PII, but how would I go about, theoretically, doing this without a loop?
My flow works like this:
When a new channel message is added.
COMPOSE - triggerBody()?['attachments'][0]['content']
INITIALISE VARIABLE - Name: Facts, Type: String, Value: Output of COMPOSE.
PARSE JSON using schema of Output of COMPOSE.
APPLY TO EACH - SECTIONS (from the JSON).
APPLY TO EACH - FACTS
CONDITIONS: NAME = x AND VALUE = y (from FACTS)
ACTION - Reply in channel with a message
Not sure if that helps? But thanks very much!
Would you be able to show the full JSON, but just change the values to something to remove the PII. It looks from your flow that you have an array called sections and within that an array of facts, but not sure without seeing it. Can definitely do it without a loop.
@CFernandes @grantjenkins
Okay, here is the JSON is full.
{
"summary": "Site24x7 Alert",
"themeColor": "C63728",
"sections": [
{
"facts": [
{
"name": "Display Name",
"value": "<p>Zylker Monitor</p>"
},
{
"name": "Monitor Type",
"value": "<p>URL</p>"
},
{
"name": "Site monitored",
"value": "<p><a href=\"http://zylker.com\">http://zylker.com</a></p>"
},
{
"name": "Monitor status ",
"value": "<p>DOWN</p>"
},
{
"name": "Down since",
"value": "<p>10 Jan 2023 01:56:07 ICT</p>"
},
{
"name": "Downtime in UNIX Format",
"value": "<p>1673333772500</p>"
},
{
"name": "Customer Name",
"value": "<p>mspCustomer</p>"
},
{
"name": "Monitor Group Name",
"value": "<p>Zylker Web Group</p>"
},
{
"name": "Reason",
"value": "<p>Service Unavailable</p>"
},
{
"name": "Alarm Details",
"value": "<p><a href=\"https://www.site24x7.com/app/client#/alarms/412304000000025001/Summary\">https://www.site24x7.com/app/client#/alarms/412304000000025001/Summary</a></p>"
}
],
"activityTitle": "<p>Zylker Monitor is Down</p>",
"activitySubtitle": "<p>Website</p>",
"activityImage": "https://www.site24x7.com/app/static/images?name=site24x7-down-icon.png",
"markdown": true,
"startGroup": false
}
],
"potentialAction": [
{
"inputs": [
{
"isMultiSelect": false,
"choices": [
{
"display": "P",
"value": "18"
},
{
"display": "O",
"value": "17"
},
{
"display": "N",
"value": "16"
},
{
"display": "M",
"value": "15"
},
{
"display": "L",
"value": "14"
},
{
"display": "K",
"value": "13"
},
{
"display": "K",
"value": "12"
},
{
"display": "J",
"value": "11"
},
{
"display": "I",
"value": "10"
},
{
"display": "H",
"value": "9"
},
{
"display": "G",
"value": "8"
},
{
"display": "G",
"value": "7"
},
{
"display": "F",
"value": "6"
},
{
"display": "E",
"value": "5"
},
{
"display": "D",
"value": "4"
},
{
"display": "C",
"value": "3"
},
{
"display": "B",
"value": "2"
},
{
"display": "A",
"value": "1"
}
],
"@type": "MultichoiceInput",
"id": "technicianList",
"title": "Choose Technician",
"isRequired": true
}
],
"actions": [
{
"hideCardOnInvoke": false,
"target": "https://gadgets.zoho.com/office365/teamsconnector/action?zservice=Site24x7&requestFrom=US&method=pos...",
"body": "{\\\"monitor_id\\\":412304000000025001,\\\"technician_zuid\\\":\\\"{{technicianList.value}}\\\",\\\"thirdparty_service_id\\\":412304000031544017,\\\"msp_userid\\\":412304000000025001}",
"@type": "HttpPOST",
"@id": "1e448ad1-28c7-4944-9b00-07ea6098541a",
"name": "Ok",
"isPrimaryAction": false
}
],
"@type": "ActionCard",
"@id": "557340da-8834-4913-8089-40ec57365f70",
"name": "Assign Technician",
"isPrimaryAction": false
},
{
"actions": [
{
"hideCardOnInvoke": false,
"target": "https://gadgets.zoho.com/office365/teamsconnector/action?zservice=Site24x7&requestFrom=US&method=pos...",
"body": "{\\\"monitor_id\\\":412304000000025001,\\\"thirdparty_service_id\\\":412304000031544017,\\\"msp_userid\\\":412304000000025001}",
"@type": "HttpPOST",
"@id": "83c5e7ba-0d18-4eb9-a51a-c827cb633f30",
"name": "Confirm Mark as Maintenance",
"isPrimaryAction": false
}
],
"@type": "ActionCard",
"@id": "72921f76-e7fe-4cea-8ca3-73958c49680b",
"name": "Mark as Maintenance",
"isPrimaryAction": false
},
{
"targets": [
{
"os": "default",
"uri": "https://www.site24x7.com/login.html?serviceurl=%2Fapp%2Fclient&ncredirecturl=%2Fhome%2Fmonitors%2F41..."
}
],
"@type": "OpenUri",
"@id": "fb57eb17-01bb-4d3b-b307-3563ce569d81",
"name": "View Online Reports",
"isPrimaryAction": false
}
]
}
Hopefully this gets what you're looking for. Note that I've just got a manual trigger and storing the JSON directly in the Compose for this example.
See full flow below. I'll go into each of the actions.
Compose contains the JSON data you sent through. You would already have this as part of the trigger attachment content.
XML is a Compose that converts the JSON data to XML so we can apply XPath expressions. Note that I've also added a root element to ensure it's valid XML. The expression used is:
xml(json(concat('{"root": ', outputs('Compose'), '}')))
//Your expression would likely look like the following:
xml(json(concat('{"root": ', triggerBody()?['attachments'][0]['content'], '}')))
Condition checks to see if any items within any of the facts arrays have a name containing 'Monitor status' and a value containing 'DOWN'. If at least one item is returned, then the Condition will return true and would run your Reply in channel with a message in the Yes branch. The expression for the condition is:
length(xpath(outputs('XML'), '//sections/facts[contains(name, "Monitor status") and contains(value, "DOWN")]'))
----------------------------------------------------------------------
If I've answered your question, please mark the post as Solved.
If you like my response, please consider giving it a Thumbs Up.
Wow! Thank you so much for the help and the detailed explanation @grantjenkins.
Can I bother you with a follow up question please?
I have another webhook that sends data to a Teams channel, and then I want to do something with it, based on a condition.
Again, Teams just sees it as an attachment, but it is really a table.
Power Automate grabs it like this from the Teams message attachment content data:
Like this (below is how the first line should look)?
stock_code total_sku_have_stock total_sku_enable enable_lower_than_stock_percentage
TOPS_AG_054 16582 13263 20.02
I then want to set a condition where if any value in the enable_lower_than_stock_percentage column >= 25.00 then do something.
Any help would really be appreciated.
Thanks so much!
@ianwuk That's some crazy (horrible) JSON you've got there 🙂
See full flow below. I'll go into each of the actions.
Compose contains your JSON data.
XML is a Compose that converts your Table data to XML. The expression also removes the style rows as they cause issues in the XML due to not having closing tags. The expression is below:
xml(concat('<table>', slice(outputs('Compose')?['text'], indexOf(outputs('Compose')?['text'], '<tbody>'))))
Select Codes retrieves an array of the Stock Codes. It uses the following expressions:
//From
split(last(xpath(outputs('XML'), '//tbody/tr/td/text()')), ' ')
//Map
trim(item())
Select Numbers retrieves all the numbers (will end up with an array of arrays in this instance). It uses the following expressions:
//From
xpath(outputs('XML'), '//tbody/tr/td/pre/code/text()')
//Map
split(trim(item()), decodeUriComponent('%0A'))
Initialize variable total creates an integer variable called total that stores the total number of rows from the JSON. The expression used is:
length(body('Select_Codes'))
Initialize variable index creates an integer variable called index initially set to 0. This will be uses when we loop over each of the rows in our Do Until loop.
Initialize variable rows creates an array variable called rows. It's initially set to an empty array and will eventually contain all our objects (rows of data).
Do until will continue to loop until index is equal to total. Each time through the loop index will be increased by 1. We use the value of index to retrieve the values from our arrays at that index to build up our objects. We then add the object to the rows array. Note that I've also changed the limits so Count is 1000 which will allow for the loop to run 1000 times (needs to be at least the same or more than the number of rows we have).
Append to array variable rows will build up each object using the current index. The object will then be appended to the rows array. Below are the expressions used for each property:
//stock_code
body('Select_Codes')[variables('index')]
//total_sku_have_stock
int(trim(body('Select_Numbers')[0][variables('index')]))
//total_sku_enable
int(trim(body('Select_Numbers')[1][variables('index')]))
//enable_lower_than_stock_percentage
float(trim(body('Select_Numbers')[2][variables('index')]))
The full object expression is below (can just copy/paste this directly into the action).
{
"stock_code": @{body('Select_Codes')[variables('index')]},
"total_sku_have_stock": @{int(trim(body('Select_Numbers')[0][variables('index')]))},
"total_sku_enable": @{int(trim(body('Select_Numbers')[1][variables('index')]))},
"enable_lower_than_stock_percentage": @{float(trim(body('Select_Numbers')[2][variables('index')]))}
}
Increment variable index increases the index variable by 1 each time through the loop so we can get the next set of data.
After the loop has completed, the variable rows should contain all of our rows/data. We then have Create HTML table using the output from the rows variable. This should give us our HTML table with the correct data format.
Below is what the HTML table would look like.
XML Stock is a Compose that converts our rows to XML which will be used in the Condition.
xml(json(concat('{"root": { value:', variables('rows'), '}}')))
Condition uses the following expression to check if any enable_lower_than_stock_percentage column >= 25. If true, then it will go into the Yes branch to run whatever you want to do.
length(xpath(outputs('XML_Stock'), '//root/value[enable_lower_than_stock_percentage >= 25]'))
----------------------------------------------------------------------
If I've answered your question, please mark the post as Solved.
If you like my response, please consider giving it a Thumbs Up.
@grantjenkins This is amazing! I'm sorry for the late reply. I'll go through it and give it a try.
How can I learn more about Power Automate to be able to do stuff like this myself? What would you recommend?
Thanks again, I really appreciate it!
I am trying to make it so that the JSON step uses the attachment details from the Teams message and is not hardcoded.
I have changed the start of my flow to be this:
I assume I then need to add a parse JSON with the schema from the above output? This is an Apply to Each for each message attachments item.
And after that is the start of your flow steps with XML, but it refers to Parse_JSON above? -
xml(concat('<table>', slice(outputs('Parse_JSON')?['text'], indexOf(outputs('Parse_JSON')?['text'], '<tbody>'))))
Is that correct? I'm a bit confused.
Thanks so much!
@grantjenkins I'm sorry to bother you, but I cannot seem to get this flow to work.
It fails on the Select_Codes step, with the following message:
Unable to process template language expressions in action 'Select_Codes' inputs at line '0' and column '0': 'The template language function 'split' expects its first parameter to be of type string.
Here is how my flow looks up to that point:
1 - I get the Teams message details.
2 - I use a Compose to get the attachment data - body('Get_message_details')?['attachments'][0]?['content']
3 - This gives me output like this, which looks correct:
{
"text": "<table>\r\n<col style=\"width:14.61%\"><col style=\"width:24.72%\"><col style=\"width:20.22%\"><col style=\"width:40.45%\">\r\n<tbody>\r\n<tr>\r\n<td>stock_code</td>\r\n<td>total_sku_have_stock</td>\r\n<td>total_sku_enable</td>\r\n<td>enable_lower_than_stock_percentage</td>\r\n</tr>\r\n<tr>\r\n<td>TOPS_AG_054 TOPS_AG_008 TOPS_AG_419 TOPS_AG_047 TOPS_AG_711 TOPS_AG_581 TOPS_AG_020 TOPS_AG_056 TOPS_AG_031 TOPS_AG_157 TOPS_AG_432</td>\r\n<td>\r\n<pre><code> 16768\n 18422\n 14121\n 14982\n 17595\n 18243\n 13139\n 15894\n 11880\n 7546\n 14900\n</code></pre>\r\n</td>\r\n<td>\r\n<pre><code> 13324\n 14641\n 11593\n 12317\n 14532\n 15103\n 10913\n 13312\n 9993\n 6666\n 13440\n</code></pre>\r\n</td>\r\n<td>\r\n<pre><code> 20.54\n 20.52\n 17.90\n 17.79\n 17.41\n 17.21\n 16.94\n 16.25\n 15.88\n 11.66\n 9.80\n</code></pre>\r\n</td>\r\n</tr>\r\n</tbody>\r\n</table>"
}
4 - Your XML step runs - xml(json(concat('{"root": ', outputs('Compose'), '}')))
But the input that the XML step gets from Compose is this:
<root><text><table>
<col style="width:14.61%"><col style="width:24.72%"><col style="width:20.22%"><col style="width:40.45%">
<tbody>
<tr>
<td>stock_code</td>
<td>total_sku_have_stock</td>
<td>total_sku_enable</td>
<td>enable_lower_than_stock_percentage</td>
</tr>
<tr>
<td>TOPS_AG_054 TOPS_AG_008 TOPS_AG_419 TOPS_AG_047 TOPS_AG_711 TOPS_AG_581 TOPS_AG_020 TOPS_AG_056 TOPS_AG_031 TOPS_AG_157 TOPS_AG_432</td>
<td>
<pre><code> 16768
18422
14121
14982
17595
18243
13139
15894
11880
7546
14900
</code></pre>
</td>
<td>
<pre><code> 13324
14641
11593
12317
14532
15103
10913
13312
9993
6666
13440
</code></pre>
</td>
<td>
<pre><code> 20.54
20.52
17.90
17.79
17.41
17.21
16.94
16.25
15.88
11.66
9.80
</code></pre>
</td>
</tr>
</tbody>
</table></text></root>
And the output it gives is also the same.
5 - Then your Select Codes step runs and fails - split(last(xpath(outputs('XML'), '//tbody/tr/td/text()')), ' ') & trim(item()).
Any help would be much appreciated - thank you so much!
@ianwuk In Step 4 you should be using the following expression to convert to XML.
xml(concat('<table>', slice(outputs('Compose')?['text'], indexOf(outputs('Compose')?['text'], '<tbody>'))))
We don't convert to JSON first as it's already in XML format. We just need to convert to XML so that Power Automate knows to treat is as XML.
@grantjenkins Thank you very much for replying.
I get a new error now, not sure what is happening now.
Here is my flow, up until the point it fails:
Compose -
XML (Compose) -
For your Compose can you use the following expression:
body('Get_message_details')?['attachments'][0]?['content']?['text']
Then for your XML:
xml(concat('<table>', slice(outputs('Compose'), indexOf(outputs('Compose'), '<tbody>'))))
Thank you for always replying @grantjenkins
I updated both the Compose and XML steps, it now seems to fail at the updated Compose step and never gets to the updated XML step, with this error:
Unable to process template language expressions in action 'Compose' inputs at line '0' and column '0': 'The template language expression 'body('Get_message_details')?['attachments'][0]?['content']?['text']' cannot be evaluated because property 'text' cannot be selected. Property selection is not supported on values of type 'String'.
Here is the updated flow.
Sorry for being such a pain, and thanks very much for all your help.
Hii,
Can I know how to extract/fetch specific values from one json object and replace those values in another objects value.
Example: I'm fetching an id value from an object (ids can be multiple) and want to replace those id's in another objects id.
I'm doing this using Power Automate workflow . Please help me out with solution.
Are you attending the Microsoft Power Platform Conference 2023 in Las Vegas? If so, we invite you to join us for the MPPC's Got Power Talent Show! Our talent show is more than a show—it's a grand celebration of connection, inspiration, and shared journeys. Through stories, skills, and collective experiences, we come together to uplift, inspire, and revel in the magic of our community's diverse talents. This year, our talent event promises to be an unforgettable experience, echoing louder and brighter than anything you've seen before. We're casting a wider net with three captivating categories: Demo Technical Solutions: Show us your Power Platform innovations, be it apps, flows, chatbots, websites or dashboards... Storytelling: Share tales of your journey with Power Platform. Hidden Talents: Unveil your creative side—be it dancing, singing, rapping, poetry, or comedy. Let your talent shine! Got That Special Spark? A Story That Demands to Be Heard? Your moment is now! Sign up to Showcase Your Brilliance: https://aka.ms/MPPCGotPowerSignUp Deadline for submissions: Thursday, Sept 28th How It Works: Submit this form to sign up: https://aka.ms/MPPCGotPowerSignUp We'll contact you if you're selected. Get ready to be onstage! The Spotlight is Yours: Each participant has 3-5 minutes to shine, with insightful commentary from our panel of judges. We’re not just giving you a stage; we’re handing you the platform to make your mark. Be the Story We Tell: Your talents and narratives will not just entertain but inspire, serving as the bedrock for our community’s future stories and successes. Celebration, Surprises, and Connections: As the curtain falls, the excitement continues! Await surprise awards and seize the chance to mingle with industry experts, Microsoft Power Platform leaders, and community luminaries. It's not just a show; it's an opportunity to forge connections and celebrate shared successes. Event Details: Date and Time: Wed Oct 4th, 6:30-9:00PM Location: MPPC23 at the MGM Grand, Las Vegas, NV, USA
The Reading Dynamics 365 and Power Platform User Group is a community-driven initiative that started in September 2022. It has quickly earned recognition for its enthusiastic leadership and resilience in the face of challenges. With a focus on promoting learning and networking among professionals in the Dynamics 365 and Power Platform ecosystem, the group has grown steadily and gained a reputation for its commitment to its members! The group, which had its inaugural event in January 2023 at the Microsoft UK Headquarters in Reading, has since organized three successful gatherings, including a recent social lunch. They maintain a regular schedule of four events per year, each attended by an average of 20-25 enthusiastic participants who enjoy engaging talks and, of course, pizza. The Reading User Group's presence is primarily spread through LinkedIn and Meetup, with the support of the wider community. This thriving community is managed by a dedicated team consisting of Fraser Dear, Tim Leung, and Andrew Bibby, who serves as the main point of contact for the UK Dynamics 365 and Power Platform User Groups. Andrew Bibby, an active figure in the Dynamics 365 and Power Platform community, nominated this group due to his admiration for the Reading UK User Group's efforts. He emphasized their remarkable enthusiasm and success in running the group, noting that they navigated challenges such as finding venues with resilience and smiles on their faces. Despite being a relatively new group with 20-30 members, they have managed to achieve high attendance at their meetings. The group's journey began when Fraser Dear moved to the Reading area and realized the absence of a user group catering to professionals in the Dynamics 365 and Power Platform space. He reached out to Andrew, who provided valuable guidance and support, allowing the Reading User Group to officially join the UK Dynamics 365 and Power Platform User Groups community. One of the group's notable achievements was overcoming the challenge of finding a suitable venue. Initially, their "home" was the Microsoft UK HQ in Reading. However, due to office closures, they had to seek a new location with limited time. Fortunately, a connection with Stephanie Stacey from Microsoft led them to Reading College and its Institute of Technology. The college generously offered them event space and support, forging a mutually beneficial partnership where the group promotes the Institute and encourages its members to support the next generation of IT professionals. With the dedication of its leadership team, the Reading Dynamics 365 and Power Platform User Group is poised to continue growing and thriving! Their story exemplifies the power of community-driven initiatives and the positive impact they can have on professional development and networking in the tech industry. As they move forward with their upcoming events and collaborations with Reading College, the group is likely to remain a valuable resource for professionals in the Reading area and beyond.
As the sun sets on the #SummerofSolutions Challenge, it's time to reflect and celebrate! The journey we embarked upon together was not just about providing answers – it was about fostering a sense of community, encouraging collaboration, and unlocking the true potential of the Power Platform tools. From the initial announcement to the final week's push, the Summer of Solutions Challenge has been a whirlwind of engagement and growth. It was a call to action for every member of our Power Platform community, urging them to contribute their expertise, engage in discussions, and elevate collective knowledge across the community as part of the low-code revolution. Reflecting on the Impact As the challenge ends, it's essential to reflect on the impact it’s had across our Power Platform communities: Community Resilience: The challenge demonstrated the resilience of our community. Despite geographical distances and diverse backgrounds, we came together to contribute, learn, and collaborate. This resilience is the cornerstone of our collective strength.Diverse Expertise: The solutions shared during the challenge underscore the incredible expertise within our community. From intricate technical insights to creative problem-solving, our members showcased their diverse skill sets, enhancing our community's depth.Shared Learning: Solutions spurred shared learning. They provided opportunities for members to grasp new concepts, expand their horizons, and uncover the Power Platform tools' untapped potential. This learning ripple effect will continue to shape our growth. Empowerment: Solutions empowered community members. They validated their knowledge, boosted their confidence, and highlighted their contributions. Each solution shared was a step towards personal and communal empowerment. We are proud and thankful as we conclude the Summer of Solutions Challenge. The challenge showed the potential of teamwork, the benefit of knowledge-sharing, and the resilience of our Power Platform community. The solutions offered by each member are more than just answers; they are the expression of our shared commitment to innovation, growth, and progress! Drum roll, Please... And now, without further ado, it's time to announce the winners who have risen above the rest in the Summer of Solutions Challenge! These are the top community users and Super Users who have not only earned recognition but have become beacons of inspiration for us all. Power Apps Community: Community User Winner: @SpongYe Super User Winner: Pending Acceptance Power Automate Community: Community User Winner: @trice602 Super User Winner: @Expiscornovus Power Virtual Agents Community: Community User Winner: Pending AcceptanceSuper User: Pending Acceptance Power Pages Community: Community User Winner: @OOlashyn Super User Winner: @ChristianAbata We are also pleased to announced two additional tickets that we are awarding to the Overall Top Solution providers in the following communities: Power Apps: @LaurensM Power Automate: @ManishSolanki Thank you for making this challenge a resounding success. Your participation has reaffirmed the strength of our community and the boundless potential that lies within each of us. Let's keep the spirit of collaboration alive as we continue on this incredible journey in Power Platform together.Winners, we will see you in Vegas! Every other amazing solutions superstar, we will see you in the Community!Congratulations, everyone!
Ayonija Shatakshi, a seasoned senior consultant at Improving, Ohio, is a passionate advocate for M365, SharePoint, Power Platform, and Azure, recognizing how they synergize to deliver top-notch solutions. Recently, we asked Ayonija to share her journey as a user group leader, shedding light on her motivations and the benefits she's reaped from her community involvement. Ayonija embarked on her role as a user group leader in December 2022, driven by a desire to explore how the community leveraged various Power Platform components. When she couldn't find a suitable local group, she decided to create one herself! Speaking about the impact of the community on her professional and personal growth, Ayonija says, "It's fascinating to witness how everyone navigates the world of Power Platform, dealing with license constraints and keeping up with new features. There's so much to learn from their experiences.: Her favorite aspect of being a user group leader is the opportunity to network and engage in face-to-face discussions with fellow enthusiasts, fostering deeper connections within the community. Offering advice to budding user group leaders, Ayonija emphasized the importance of communication and consistency, two pillars that sustain any successful community initiative. When asked why she encourages others to become user group leaders, Ayonija said, "Being part of a user group is one of the best ways to connect with experienced professionals in the same field and glean knowledge from them. If there isn't a local group, consider starting one; you'll soon find like-minded individuals." Her highlight from the past year as a user group leader was witnessing consistent growth within the group, a testament to the thriving community she has nurtured. Advocating for user group participation, Ayonija stated, "It's the fastest route to learning from the community, gaining insights, and staying updated on industry trends." Check out her group: Cleveland Power Platform User Group
Hear from Corporate Vice President for Microsoft Business Applications & Platform, Charles Lamanna, as he looks ahead to the second annual Microsoft Power Platform Conference from October 3rd-5th 2023 at the MGM Grand in Las Vegas.Have you got your tickets yet? Register today at www.powerplatformconf.com
We wanted to take the time to celebrate and welcome the new user groups that have joined our community. Along with that take a look at the event that might be happening near you or virtually. Please welcome: Biz Apps Community User Group - Power Platform Community (microsoft.com) This user group is dedicated for all community members of all skill levels to learn how to get the most out of their community experience. East Michigan Power Platform User Group - Power Platform Community (microsoft.com) This is hopefully the beginning of a community, covering eastern Michigan, built around the Power Platform. Biz Apps Community User Group This user group is dedicated for all community members of all skill levels to learn how to get the most out of their community experience. Events to checkout: In-Person: September 2023 Hybrid Philadelphia Dynamics 365 & Power Platform User Group MeetDynamics 365 and Power Platform Physical Meetup Hyderabad Power Platform User Group Meetup - Sept 2023 (In-Person)Manchester September 2023 In Person Meeting Virtual: Everything Dataverse, Do you know that Dataverse is more than just a Database!POWER PLATFORM MONTHLY DIGEST- SEPTEMBERBaltic Summit 2023PL-900 Power Platform Fundamentals TrainingHR and L&D transformation through Power PlatformDynamics 365 Marketing Experience User Groups - Use Cases and NetworkingPower Platform and Dual Write from Dynamics 365 F&O PerspectiveANZ D365 FinOps Team September 2023 meetup
User | Count |
---|---|
67 | |
37 | |
34 | |
28 | |
24 |
User | Count |
---|---|
86 | |
83 | |
56 | |
53 | |
52 |