Delphi - Űrlapok automatikus kitöltése

forráskód letöltése
Talán sokan ismerik azt a helyzetet, mikor egy egyébként is hosszadalmas rendelési procedúra végén egy végtelen űrlap jelenik meg, melyben nevünkön kívül még számtalan egyéb információt is megkérdeznek, próbára téve türelmünket. A végére azon kezdünk gondolkodni, hogy valóban szükségünk van-e az adott dologra. Cikkünkben feltárunk egy megoldást, melyet kevés kódolás árán beépíthetünk webes alkalmazásunkba, a kívánt információkat némi kliens-oldali beállítással automatikusan begyűjthetjük, megkímélve látogatóinkat az időrabló gépeléstől.
A mellékelt példa megnyitása előtt szükséges egy Sample nevű virtuális könyvtár létrehozása, mely a példa könyvtárára mutat. Ehhez futtassa le a mellékelt CreateVD.js parancsállományt. A mellékelt példa használata előtt gondoskodnunk kell arról, hogy rendelkezzünk felhasználói profilinformációkkal, és ezek rendelkezésre is álljanak. Erről bővebben a cikk Profile Assistant használata című bekezdésében olvashat.
Általános ismertetés
A bevezetőben említett probléma orvoslásához két dolog szükséges: az első egy Profile Assistant nevű eszköz, a másik pedig egy kliens-oldali JScript-kód. A Microsoft az Internet Explorer 4-es verziója óta a termékbe építteti a felhasználói profilokat menedzselő, a levelezéshez használt címlistával szorosan összefüggő Profile Assistant nevű lehetőséget, melynek megfelelő beállításával a Web-szerverek képesek hatékonyan és gyorsan begyűjteni a szükséges információkat a felhasználótól, mindezt úgy téve, hogy minden adatküldés előtt vár egy jóváhagyást a felhasználótól.
A World Wide Web Consortium (W3C) a Platform for Privacy Preferences (P3) néven indult project-jében tűzte ki célul, hogy maximalizálja a hálózatos adatforgalom biztonságát. E célkitűzés szellemében született meg a Profile Assistant kezdeményezés, melynek első implementációja az Internet Explorer 4-es verziója óta elérhető. Az új architektúra definiálta, hogy milyen felhasználói profilinformációkat lehet a felhasználó számítógépe és a szerverek között kicserélni, amely alapján a felhasználó bizonyos jogosultságokat kaphat. A szabályokat úgy alkották, hogy a mechanizmusnak figyelembe kell venni a felhasználó biztonsági megszorításait. Ez annyit jelent, hogy az általa nem publikusnak minősített információk semmiképpen nem juthatnak a szerverhez, minden adatcseréhez a felhasználó beleegyezése szükséges.
A cél elérése érdekében a nyelv készítői létrehoztak egy új objektumot userProfile néven, melynek megfelelő metódusai csak olvasási joggal férhetnek hozzá a felhasználó által nyilvánosnak minősített adatokhoz, tekintetbe véve a biztonsági irányelveket.
Profile Assistant használata
Az alapvető célja a Profile Assistant bevezetésének, hogy megkönnyítse a felhasználók számára a regisztrációs és demográfiai adatok megosztását az ezeket az információkat kérő szerverrel, elkerülve az egyébként állandóan ismételt adatok gépelését. Az adatok biztonságosan tárolódnak (titkosítva) a felhasználó számítógépén, a szerverek pedig olvasásra kérik ezeket az adatokat.
A felhasználót minden esetben egy dialógusablak tájékoztatja az információkérésről, feltüntetve a kért adatokat, valamint felkínálva az elutasítás lehetőségét. Vizsgáljuk meg, hogyan kerülhetnek adataink a nyilvános adattárba:

A felhasználó személyes adatait beteheti egy biztonságos profil-tároló gyűjteménybe az Internet Explorer beállító ablakának felhasználásával. Ehhez a következőket kell tenni:
  • Meg kell nyitni az Eszközök Internetbeállítások menüpontjában található beállító ablakot, majd ki kell választani a Tartalom fület. A Személyes adatok szegmensben található Saját profil feliratú gomb lenyomásával érhetjük el, hogy beállíthassunk egy profilt, amit később nyilvános információgyűjteményként felkínálhatunk.
  • Amennyiben nem rendelkezünk beállított profillal, létre kell hoznunk egyet, vagy ki kell választanunk valamelyiket a felsorolt listából, erről a felbukkanó panel megfelelő instrukciókkal szolgál.

A funkció implementációja
A kód megírása előtt meg kell ismernünk a userProfile objektumot, mely a következőképpen hívható:
window.navigator.userProfile
Az objektum metódusai segítségével az olvasásra felkínált adatokat előbb egy listába teszik, majd az oldal (űrlap) betöltése után innen olvassák ki, hogy mely adat, milyen mezőben legyen elhelyezve.
A felhasználó mindezek előtt egy figyelmeztető ablakot kap, melyben rendelkezhet a script kód lefutásáról, vagyis az információk küldéséről.
Az objektum metódusai olyan karakterláncok, melyek tartalmazzák, hogy a profil mely adatai kerüljenek olvasásra, így dönti el, hogy az űrlap mely mezőjébe kell ezeket betölteni. Erre a vCard objektum mezőneveit alkalmazza, mint ahogy az űrlapon is ezek a nevek lesznek a beviteli mezők VCARD_NAME attribútumában feltüntetve.
Alkalmazásunkban egy űrlapot reprezentáló beviteli mező-lista jelenik meg a WebForm1.aspx lap betöltődése után. A lapon hat darab információ bevitele szükséges, ehhez a felhasználói profilban ezeket az információkat kell elhelyezni. A művelet során a következő lépések történnek:
  • Az oldal kéri az információkat, mivel erre a JScript kód fel van készítve.
  • A Profile Assistant engedélyezi az adatok kiolvasását.
  • Átvitel előtt a felhasználó még egy kontrollal élhet az adatcserével kapcsolatban.
Ehhez az alábbi kódra van szükség:
  • Létre kell hozni a szövegmezőket, a VCARD_NAME attribútummal mindegyikben megadni, hogy milyen információ kerüljön bele.
  • A userProfile objektum segítségével el kell végezni az automatikus beolvasást és kitöltést. Létrehozunk egy userProfile objektumot, hogy könnyen használhassuk:
  var profile = navigator.userProfile;
Kiürítjük a listát:
  profile.clearRequest();
Hozzáadjuk az egyes elemeket a kért adatok listájához:
  profile.addReadRequest("vCard.LastName");
  profile.addReadRequest("vCard.FirstName");
  profile.addReadRequest("vCard.Company");
  profile.addReadRequest("vCard.Department");
  profile.addReadRequest("vCard.Business.Phone");
  profile.addReadRequest("vCard.Email");
Egy oldalnevet rendelünk a webhely címéhez (opcionális):
  profile.doReadRequest(1,"SoftwareOnline");
A kiolvasott értékekkel feltöltjük a listát, majd töröljük a benne lévő elemeket.
  document.all["text1"].value = profile.getAttribute("vCard.LastName");
  document.all["text2"].value = profile.getAttribute("vCard.FirstName");
  document.all["text3"].value = profile.getAttribute("vCard.Company");
  document.all["text4"].value = profile.getAttribute("Vcard.Department");
  document.all["text5"].value = profile.getAttribute("vCard.Business.Phone");
  document.all["text6"].value = profile.getAttribute("vCard.Email");
  profile.clearRequest();
Ezzel a néhány sorral a felhasználónak kényelmet biztosító és időtakarékos megoldást állíthatunk munkába.
A mellékelt példaprojektben a program indulása után töltjük be a Main.htm HTML lapot, melynek mezőiben megjelennek a profilinformációk abban az esetben, ha rendelkezünk egy kitöltött adatlappal.