Pagerinkite sprendimo našumą, stabilumą ir patikimumą

Sprendimai naudojami objektams, pvz., programoms, lentelėms, srautams, žiniatinklio ištekliams ir papildiniams, platinti Power Platform . Šiame straipsnyje pristatoma sprendimų tikrintuvo funkcija – galingas įrankis, atliekantis išsamią statinę jūsų sprendimo objektų analizę pagal geriausios praktikos taisyklių rinkinį. Naudodami sprendimų tikrintuvą galite greitai nustatyti probleminius komponentų modelius ir gauti išsamias ataskaitas, kuriose paryškinamos problemos, paveikti komponentai ir pateikiami saitai į dokumentaciją, kaip išspręsti kiekvieną problemą. Tai užtikrina, kad jūsų sprendimai bus optimizuoti našumui, stabilumui ir patikimumui.

Sprendimų tikrintuvas: rezultatų pavyzdžiai ir išsami informacija

Sprendimų tikrintuvas tikrina nevaldomus sprendimus, kuriuos galima eksportuoti iš aplinkos.

Sprendimų tikrintuvą galite paleisti iš Power Apps (make.powerapps.com) arba naudodami "PowerShell".

Kaip sprendimų tikrintuvas padeda jums

Norėdami patenkinti sudėtingus verslo reikalavimus, kūrėjai dažnai gali pasiūlyti labai pažangius sprendimus, kurie pritaiko ir išplečia Power Platform. Dėl sudėtingo įgyvendinimo padidėja rizika susidurti su efektyvumo, stabilumo ir patikimumo problemomis, kurios gali turėti neigiamos įtakos vartotojo patirčiai. Tokių problemų nustatymas ir supratimas, kaip jas spręsti, gali būti sudėtingas ir daug laiko reikalaujantis procesas. Naudodami sprendimų tikrintuvo funkciją, per kelias sekundes galite patikrinti savo sprendimą, kuris naudoja geriausios praktikos taisyklių rinkinį, kad greitai nustatytų probleminius modelius. Kai tikrinimas bus baigtas, gausite išsamią ataskaitą Power Apps ir el. laišką, kuriame bus išvardytos nustatytos problemos, paveikti komponentai ir kodas bei saitai į dokumentus, kuriuose aprašoma, kaip išspręsti kiekvieną problemą.

Sprendimų tikrintuvas analizuoja šiuos sprendimų komponentus.

  • „Dataverse“ pasirinktinės darbo eigos veiklos
  • „Dataverse“ žiniatinklio ištekliai (HTML ir „JavaScript“)
  • „Dataverse“ konfigūracijos, pvz., SDK pranešimo veiksmai
  • Power Automate srautai (per srauto tikrintuvą)
  • Power Fx Išraiškos (naudojant programų tikrintuvą)

Pastaba.

  • Sprendimų tikrintuvas palaiko ECMAScript 2015 (ES6) globalius kintamuosius ir sintaksę iki ECMAScript 2018 (ES9). Kai aptinkamas „JavaScript kodas, naudojantis naujesnius nei ES6 globalius kintamuosius arba naujesnę nei ES9 sintaksę, pranešama apie nepalaikomos žiniatinklio ištekliaus sintaksės problemą.
  • Sprendimų tikrintuvo naudojimas negarantuoja, kad sprendimo importavimas bus sėkmingas. Statinės analizės tikrinimai, atlikti pagal sprendimą, nežino sukonfigūruotos paskirties aplinkos būsenos, o importavimo sėkmė gali priklausyti nuo kitų aplinkos sprendimų ar konfigūracijų.

Sprendimų tikrintuvo paleidimas

  1. Prisijunkite prie Power Apps.

  2. Kairiojoje srityje pasirinkite Sprendimai. Jei elemento nėra šoninio skydelio srityje, pasirinkite ... Daugiau ir pasirinkite norimą elementą.

  3. Šalia nevaldomojo sprendimo, kurį norite analizuoti, pasirinkite ..., nukreipkite žymiklį į Sprendimų tikrintuvas, tada pasirinkite Vykdyti.

    Paleiskite sprendimų tikrintuvo komandą.

  4. Sprendimų tikrintuvo komandų mygtuke yra įkėlimo indikatorius ir pastebėsite a Veikia...nurodykite sąrašo Sprendimas kontrolinį stulpelį Sprendimas .

Sprendimų tikrintuvo būsena

Pastaba.

  • Sprendimų tikrintuvo atliekama analizė gali užtrukti kelias minutes.
  • Kai tikrinimas bus baigtas, gausite pranešimą el. paštu ir pranešimą svetainės pranešimų srityje Power Apps .
  1. Peržiūrėkite ataskaitą , kai patikrinimas bus baigtas.

Tikrinimo atšaukimas

Pateikus sprendimų patikrą savo aplinkoje, tikrinimą galima atšaukti būsenos srityje, esančioje viršutinėje dešiniojoje sprendimų puslapio srityje .

Kai atšauksite tikrinimą, sprendimo tikrinimo vykdymas bus sustabdytas, o sprendimo tikrinimo būsena grįš į prieš tai buvusią būseną.

Sprendimų tikrintuvo būsenos

Kai įdiegiate sprendimų tikrintuvą savo aplinkoje, sprendimų tikrinimo stulpelis tampa pasiekiamas sąraše Sprendimai . Šiame stulpelyje pateikiamos analizuojamo sprendimo analizės būsenos.

Būsena Aprašas
Nebuvo vykdomas Sprendimas nebuvo analizuotas.
Vykdoma Sprendimas analizuojamas.
Nepavyko užbaigti. Buvo prašoma sprendimo analizės, bet analizės nepavyko užbaigti.
Rezultatai pagal datą ir laiką Sprendimo analizė baigta ir rezultatus galima atsisiųsti.
Nepavyko užbaigti. Rezultatas pagal datą ir laiką Paskutinės analizės užklausos įvykdyti nepavyko. Paskutinius sėkmingus rezultatus galima atsisiųsti.
Patikrino „Microsoft“ Tai yra „Microsoft“ valdomasis sprendimas. Sprendimų analizė neleidžiama šiems sprendimams.
Patikrino „Publisher“ Tai ne "Microsoft" valdomas sprendimas. Šiuo metu sprendimų analizės negalima naudoti šiems sprendimams.

Sprendimų tikrintuvo ataskaitos peržiūra

Kai sprendimo patikra baigta, portale galite peržiūrėti analizės ataskaitą arba atsisiųsti ataskaitą iš savo žiniatinklio naršyklės. Portale galite rūšiuoti rezultatus pagal problemą, vietą arba svarbą ir peržiūrėti išsamią informaciją apie jūsų sprendime aptiktas problemas.

  1. Kairiojoje srityje pasirinkite Sprendimai. Jei elemento nėra šoninio skydelio srityje, pasirinkite ... Daugiau ir pasirinkite norimą elementą.

  2. Šalia nevaldomojo sprendimo, kuriame norite peržiūrėti sprendimų tikrintuvo ataskaitą, pasirinkite ..., nukreipkite pelės žymiklį į Sprendimų tikrintuvas, tada pasirinkite Peržiūrėti rezultatus.

  3. Pasirinkite problemą, kad peržiūrėtumėte išsamią informaciją ir nurodymus, kaip ją išspręsti.

    Sprendimų tikrintuvas: rezultatų ir išsamios informacijos pavyzdys

Sprendimo tikrinimo rezultatus taip pat galima atsisiųsti. Sprendimų tikrintuvo suglaudintas failas atsisiunčiamas į aplanką, nurodytą jūsų žiniatinklio naršyklėje. Atsisiuntimo ataskaita yra "Excel" formato ir joje yra keletas vizualizacijų ir stulpelių, padedančių nustatyti kiekvienos jūsų sprendime aptiktos problemos poveikį, tipą ir vietą. Taip pat pateikiama nuoroda į instrukcijas kaip išspręsti problemą.

  1. Kairiojoje srityje pasirinkite Sprendimai. Jei elemento nėra šoninio skydelio srityje, pasirinkite ... Daugiau ir pasirinkite norimą elementą.
  2. Šalia nevaldomojo sprendimo, iš kurio norite atsisiųsti sprendimų tikrintuvo ataskaitą, pasirinkite ..., nukreipkite pelės žymiklį į Sprendimų tikrintuvas, tada pasirinkite Atsisiųsti rezultatus.
  3. Sprendimų tikrintuvo suglaudintas failas atsisiunčiamas į aplanką, nurodytą jūsų žiniatinklio naršyklėje.

Čia pateikiama kiekvieno ataskaitos stulpelio santrauka.

Ataskaitos stulpelis Aprašas Taikoma komponentui
Problema Problemos, nustatytos sprendime, pavadinimas. Visi
Kategorija Nustatytos problemos skirstymas į kategorijas, pvz., našumas, priežiūra, naudojimas, palaikomumas, dizainas, sauga, pritaikymas neįgaliesiems arba pasirengimas naujinti. Visi
Svarba Nurodo galimą nustatytos problemos poveikį. Galimi poveikio tipai yra kritinis, didelis, vidutinis, žemas ir informacinis. Visi
Rekomendacijos Nuoroda į straipsnį, kuriame išsamiai aprašyta problema, poveikis ir rekomenduojamas veiksmas. Visi
Komponentas Sprendimo komponentas, kuriame nustatyta problema. Visi
Location Komponento, kuriame yra nustatyta problema, vieta ir (arba) šaltinio failas, pvz., sąranka arba „JavaScript“ failo pavadinimas. Visi
Eilutės nr. Problemos eilutės numerio nuoroda paveiktame žiniatinklio šaltinio komponente. Žiniatinklio ištekliai
Modulis Modulio, kurio sąrankoje nustatyta problema, pavadinimas. Pasirinktinė darbo eigos veikla
Tipas Problemos, nustatytos sąrankoje, tipas. Pasirinktinė darbo eigos veikla
Narys Problemos, nustatytos sąrankoje, narys. Pasirinktinė darbo eigos veikla
Pranešimas Kodo pranešimas arba konfigūracija, kuri sukėlė problemą. Visi
Komentarai Išsamioje informacijoje apie problemą taip pat pateikti aukšto lygio sprendimo žingsniai. Visi

Sprendimų tikrintuvo taisyklių vykdymas vietoje

Savo programavimo aplinkoje galite vykdyti sprendimų tikrintuvo taisykles, kad kuriant sprendimų išteklius problemos būtų aptiktos daug anksčiau. Šiuo metu tai palaikoma žiniatinklio ištekliuose ("JavaScript" ir "TypeScript"). Norėdami gauti daugiau informacijos, eikite į NPM paketą @microsoft/eslint-plugin-power-apps.

Paleiskite sprendimų tikrintuvą naudodami "PowerShell".

Yra "PowerShell" modulis, kurį galite naudoti norėdami tiesiogiai bendrauti su paslauga. „Microsoft.PowerApps.Checker.PowerShell“ modulį galima naudoti „Power Apps“ aplinkų nevaldomiesiems sprendimams analizuoti arba paslaugai automatizuoti ir integruoti į kūrimo bei išleidimo srautus. Daugiau informacijos: Microsoft.PowerApps. Checker.PowerShell apžvalga

Geriausios praktikos taisyklės, kurias naudojo sprendimų tikrintuvas

Šioje lentelėje pateikiamas komponento tipas, taisyklės aprašas, svarba ir kategorija. Kritiniai pažeidimai blokuojami arba įspėjami, kai sukonfigūruojami sprendimų tikrintuvo vykdymas valdomose aplinkose. Daugiau informacijos: Sprendimų tikrintuvo naudojimas valdymo aplinkose

Sprendimo komponentas Taisyklės pavadinimas Taisyklės aprašas Svarba Kategorija
Priedas arba darbo eigos veikla meta-remove-dup-reg Venkite dubliuotų Dataverse priedų registravimų. Kritinė Našumas
Priedas arba darbo eigos veikla meta-avoid-reg-no-attribute Įtraukite filtravimo atributų su Dataverse priedų registracijomis. Vidutinį Našumas
Priedas arba darbo eigos veikla meta-avoid-reg-retrieve Būkite atsargūs su Dataverse priedais, užregistruotais „Retrieve“ ir „RetrieveMultiple“ pranešimams. Vidutinį Našumas
Priedas arba darbo eigos veikla meta-pašalinti-neaktyvus Pašalinkite neaktyviąsias Dataverse konfigūracijas. Žemą Prižiūrimumas
Priedas arba darbo eigos veikla meta-avoid-crm4-event Nenaudokite „Microsoft Dynamics CRM“ 4.0 priedų registravimo etapo. Vidutinį Pasirengimas naujinti versiją
Priedas arba darbo eigos veikla meta-avoid-retrievemultiple-annotation Neregistruokite priedo komentaro pranešime RetrieveMultiple. Aukštas Naudojimas
Modeliu pagrįsta programa meta-licencija-pardavimas-subjektas-operacijos Sprendime yra objektų su apribotais SDK pranešimais ir operacijomis, kurioms reikalinga galiojanti "Dynamics 365" licencija. Žemą Licencijavimas
Modeliu pagrįsta programa meta-license-fieldservice-customcontrols Sprendime yra pasirinktinių valdiklių, kuriems reikalinga galiojanti Dynamics 365 Field Service licencija. Žemą Licencijavimas
Modeliu pagrįsta programa meta-licencija-fieldservice-entity-operations Sprendime yra objektų su apribotais SDK pranešimais ir operacijomis, kurioms reikalinga galiojanti Dynamics 365 Field Service licencija. Žemą Licencijavimas
Žiniatinklio ištekliai naudoti-async Sąveikaukite su HTTP ir HTTPS ištekliais asinchroniškai. Kritinė Našumas
Žiniatinklio ištekliai vengimo modalumai Stenkitės nenaudoti modelių dialogų. Aukštas Palaikomumas
Žiniatinklio ištekliai vengti-dom-forma Aukštas Palaikomumas
Žiniatinklio ištekliai išvengti-dom-form-event Aukštas Palaikomumas
Žiniatinklio ištekliai avoid-crm2011-service-odata Nenaudokite „Microsoft Dynamics CRM“ 2011 OData 2.0 galinio punkto. Kritinė Pasirengimas naujinti versiją
Žiniatinklio ištekliai avoid-crm2011-service-muilas Nenaudokite „Microsoft Dynamics CRM“ 2011 SOAP paslaugų. Kritinė Pasirengimas naujinti versiją
Žiniatinklio ištekliai "Avoid-loadtheme" Nenaudokite loadTheme "Fluent v8" API. Žemą Palaikomumas
Žiniatinklio ištekliai vengti-naršyklės-specifikos-api Nenaudokite senų „Internet Explorer“ API arba naršyklės priedų. Kritinė Pasirengimas naujinti versiją
Žiniatinklio ištekliai vengti-nepub-api Aukštas Palaikomumas
Žiniatinklio ištekliai išvengti lango viršaus Aukštas Palaikomumas
Žiniatinklio ištekliai Vengti-2011-API Nenaudokite netinkamo „Microsoft Dynamics CRM“ 2011 objekto modelio. Vietoj to vadovaukitės Dataverse žiniatinklio API dokumentacija. Aukštas Pasirengimas naujinti versiją
Žiniatinklio ištekliai naudojimo santykinis-uri Nenaudokite absoliučiųjų „Dataverse“ galinių punktų URL. Vidutinį Prižiūrimumas
Žiniatinklio ištekliai use-cached-webresource Vidutinį Našumas
Žiniatinklio ištekliai naudojimas-klientas-kontekstas Naudokite kliento kontekstus. Vidutinį Pasirengimas naujinti versiją
Žiniatinklio ištekliai naudojimas-navigacija-api Naudokite naršymo API parametrus. Vidutinį Pasirengimas naujinti versiją
Žiniatinklio ištekliai naudojimas neprisijungus Vidutinį Pasirengimas naujinti versiją
Žiniatinklio ištekliai nedaryk tėvų prielaidos Aukštas Dizainas
Žiniatinklio ištekliai use-org-nustatymas Naudokite organizacijos parametrus. Vidutinį Pasirengimas naujinti versiją
Žiniatinklio ištekliai naudojimas-visuotinis kontekstas Vidutinį Pasirengimas naujinti versiją
Žiniatinklio ištekliai use-grid-api Naudokite tinklelio API. Vidutinį Pasirengimas naujinti versiją
Žiniatinklio ištekliai use-utility-dialogs Vidutinį Naudojimas
Žiniatinklio ištekliai avoid-isActivityType Keiskite Xrm.Utility.isActivityType metodą su nauju Xrm.Utility.gettableMetadata ir nenaudokite juostos taisyklių. Vidutinį Pasirengimas naujinti versiją
Žiniatinklio ištekliai meta-venkite-sidabrinė šviesa „Silverlight“ žiniatinklio naudoti negalima. Vidutinį Pasirengimas naujinti versiją
Žiniatinklio ištekliai pašalinti derinimo scenarijų Venkite įtraukti derinimo scenarijų į nekūrimo aplinkas. Vidutinį Naudojimas
Žiniatinklio ištekliai naudojimo apribojimo režimas Jei įmanoma, naudokite griežtąjį režimą. Vidutinį Naudojimas
Žiniatinklio ištekliai naudojimo griežtos lygybės veiklos vykdytojai Naudokite griežtus lygybės operatorius. Vidutinį Naudojimas
Žiniatinklio ištekliai vengti-vertinti Nenaudokite eval funkcijos ar jos funkcinių atitikmenų. Kritinė Sauga
Žiniatinklio ištekliai išvengti Nenaudokite operatoriaus "su". Aukštas Našumas
Žiniatinklio ištekliai įspėjimas apie pašalinimą Nenaudokite įspėjimo funkcijas ar jos funkcijų ekvivalentų. Vidutinį Naudojimas
Žiniatinklio ištekliai pašalinti konsolę Venkite naudoti metodų konsolėje. Vidutinį Naudojimas
Žiniatinklio ištekliai vengti-ui-refreshribbon Stenkitės nenaudoti refreshRibbon įkėlimo formoje ir įjungti taisyklę. Kritinė Našumas
Žiniatinklio ištekliai use-getsecurityroleprivilegesinfo Venkite userSettings.securityRolePrivileges. Verčiau naudokite userSettings.getSecurityRolePrivilegesInfo. Aukštas Našumas
Žiniatinklio ištekliai use-appsidepane-api Naudokite Xrm.App.sidePanes.createPane vietoj Xrm.Panels.loadPanel. Vidutinį Pasirengimas naujinti versiją
Žiniatinklio ištekliai web-sdl-no-cookies HTTP slapukai yra senas kliento saugojimo mechanizmas, kuriam būdinga rizika ir apribojimai. Vietoj to naudokite žiniatinklio saugyklą, IndexedDB ar kitus šiuolaikinius metodus. Vidutinį Sauga
Žiniatinklio ištekliai web-sdl-no-document-domain Rašymo į document.domain ypatybę reikia peržiūrėti, kad būtų išvengta tos pačios kilmės patikrinimų. Griežtai draudžiama naudoti aukščiausio lygio domenus, pvz., azurewebsites.net. Vidutinį Sauga
Žiniatinklio ištekliai web-sdl-no-document-write Skambučiai į document.write arba document.writeln manipuliuoja DOM tiesiogiai be jokios sanitarijos ir jų reikėtų vengti. Vietoj to naudokite document.createElement() ar panašius metodus. Vidutinį Sauga
Žiniatinklio ištekliai web-sdl-no-html-metodas Tiesioginiai skambučiai į metodą html() dažnai (pvz., "jQuery" sistemoje) manipuliuoja DOM be jokios sanitarijos ir turėtų būti vengiami. Vietoj to naudokite document.createElement() ar panašius metodus. Vidutinį Sauga
Žiniatinklio ištekliai web-sdl-no-inner-html Vidinių HTML arba išorinių HTML savybių priskyrimai manipuliuoja DOM tiesiogiai be jokio dezinfekavimo ir turėtų būti vengiami. Vietoj to naudokite document.createElement() ar panašius metodus. Vidutinį Sauga
Žiniatinklio ištekliai web-sdl-no-insecure-url Nesaugius protokolus, tokius kaip HTTP ar FTP, reikėtų pakeisti šifruotais analogiškais protokolais (HTTPS, FTPS), kad galimai slapti duomenys nebūtų siunčiami nepatikimais tinklais kaip paprastasis tekstas. Vidutinį Sauga
Žiniatinklio ištekliai web-sdl-no-msapp-exec-nesaugus Iškvietimai į MSApp.execUnsafeLocalFunction() apeina scenarijaus įdėjimo patvirtinimą, todėl jų reikėtų vengti. Vidutinį Sauga
Žiniatinklio ištekliai web-sdl-no-postmessage-star-origin Kai siunčiate duomenis į kitus langus naudodami „postMessage“, visada pateikite konkrečią paskirties kilmę, o ne *. Taip išvengsite duomenų nutekėjimo už patikimos ribos. Vidutinį Sauga
Žiniatinklio ištekliai web-sdl-no-winjs-html-nesaugus Skambučiai į WinJS.Utilities.setInnerHTMLUnsafe() ir panašūs metodai neatlieka jokio įvesties tikrinimo ir jų reikėtų vengti. Vietoj to naudokite WinJS.Utilities.setInnerHTML(). Vidutinį Sauga
Drobės programa app-formula-issues-high Norėdami gauti papildomos informacijos, eikite į Power Apps formulės nuorodą . Kritinė Dizainas
Drobės programa app-formula-issues-medium Vadovaukitės „Power Apps“ forrmulės nuorodmis dėl papildomos informacijos. Vidutinį Dizainas
Drobės programa app-formula-issues-low Vadovaukitės „Power Apps“ forrmulės nuorodmis dėl papildomos informacijos. Žemą Dizainas
Drobės programa app-use-delayoutput-text-input Naudokite pavėlintą įkėlimą kai kuriuose scenarijuose norėdami pagerinti veikimą. Vidutinį Našumas
Drobės programa programos sumažinimo ekrano valdikliai Apribokite programos valdiklių skaičių pagerintam veikimui. Vidutinį Našumas
Drobės programa app-include-accessible-label Naudokite atskiras žymas norėdami pagerinti programos prieinamumą. Vidutinį Pritaikymas neįgaliesiems
Drobės programa app-include-alternative-input Užtikrinkite, kad visi interaktyvūs elementai yra prieinami alternatyvioms įvestims. Vidutinį Pritaikymas neįgaliesiems
Drobės programa programėlių-venk-automatinis paleidimas Venkite automatinio paleidimo naudojimo grotuvuose programoje. Vidutinį Pritaikymas neįgaliesiems
Darbalaukio srautas DesktopFlow-Venvenkite-nesaugus slaptažodis Slaptažodžiai sraute tvarkomi nesaugiai. Aukštas Sauga
Darbalaukio srautas desktopflow-avoid-subflow-recursion Tarp papildomų srautų aptikti rekursiniai iškvietimai, galimai sukeliantys neribotą ciklą. Vidutinį Dizainas
Darbalaukio srautas "DesktopFlow-avoid-Infinite-Loop" Sraute aptikta begalinė kilpa, dėl kurios jis gali būti vykdomas neribotą laiką. Vidutinį Dizainas
Darbalaukio srautas desktopflow-avoid-incomplete-if-branch Aptiktas nebaigtas „If“ veiksmas, trūksta turinio arba jame yra tik veiksmai šakoje „Else“. Žemą Dizainas
Darbalaukio srautas Desktopflow-avoid-excessive-nested-ifs Įdėtosios If sąlygos viršija penkis lygius. Žemą Prižiūrimumas
Darbalaukio srautas desktopflow-avoid-empty-on-error-block Veiksmas „Klaida bloke“ yra tuščias ir klaidos neapdorojamos. Žemą Dizainas
Darbalaukio srautas desktopflow-limit-argumentų skaičius Bendras įvesties / išvesties kintamųjų skaičius viršija 25 kintamųjų limitą. Žemą Prižiūrimumas
Darbalaukio srautas desktopflow-input-argument-default-value Įvesties / išvesties kintamieji nenaudoja numatytųjų reikšmių. Žemą Prižiūrimumas
Darbalaukio srautas desktopflow-limit-kintamasis-vardas-ilgis Kintamojo pavadinimas viršija 25 simbolių limitą. Žemą Prižiūrimumas
Darbalaukio srautas DesktopFlow-Venkite-per daug laukti-veiksmai Aptiktas netinkamas laukimo veiksmų naudojimas, kai daugiau nei 10 laukimo veiksmų gali sukelti kliūtis. Žemą Našumas
Darbalaukio srautas DesktopFlow-Venkite-didžiulis-laukimas-trukmė Aptiktas didžiulis laukimo laikas, viršijantis užprogramuotų laukimo veiksmų 600 sekundžių limitą. Žemą Našumas

Taip pat žr.

Geriausia praktika ir gairės, skirtos Dataverse
Geriausia modeliu pagrįstų programų praktika ir rekomendacijos
Dažniausios sprendimų tikrintuvo problemos ir sprendimai