C# - Ű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 Web-alkalmazásunkba beépíthetünk, a kívánt információkat némi kliensoldali beállítással automatikusan begyűjthetjük, megkímélve látogatóinkat az időtrabló gépeléstől.
Mellékelt példa megnyitása előtt szükséges egy ProfAssisTest nevű virtuális könyvtár létrehozása, mely a példa könyvtárára mutat. Ehhez nyissa meg a mellékelt mappa Tulajdonság ablakát és itt a Webmegosztás lapon engedélyezze a mappa megosztását olvasási és parancsfájlok futtatási jogával.
A mellékelt példa használata előtt meg kell győződnünk arról, hogy rendelkezünk felhasználói profilinformációkkal, és ezek rendelkezésre állnak. Ellenkező esetben el kell olvasnia a cikk Profile Assistant használata című bekezdését.
Á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íti 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 projectjé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 létrehoztak a nyelv készítői egy új objektumot userProfile néven, melynek megfelelő metódusai csak olvasási joggal hozzáférhetnek 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 regisztrációs és demográfiai adatok megosztását az ezeket az információkat kérő szerverrel, elkerülve a gépelését az egyébként állandóan ismételt adatoknak. 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 dialog-ablak tájékoztatja az információkérésről, feltüntetve a kért adatokat, valamint felkínálva a lehetőségét az elutasításnak. Vizsgáljuk meg, hogyan kerülhetnek adataink a publikus 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 Explorer Tools/Internet Options menüpontjában található beállító ablakot, majd ki kell választani a Content fület. A Personal information szegmensben található „My Profile” feliratú gomb lenyomásával érhetjük el, hogy beállíthassunk egy profilt, amit később publikus 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. 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:
<script type="text/Jscript" language="jscript">
  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.Form1.Lastname.value = profile.getAttribute("vCard.LastName");
  document.Form1.Firstname.value = profile.getAttribute("vCard.FirstName");
  document.Form1.Company.value = profile.getAttribute("vCard.Company");
  document.Form1.Department.value = profile.getAttribute("Vcard.Department");
  document.Form1.Phone.value = profile.getAttribute("vCard.Business.Phone");
  document.Form1.Email.value = profile.getAttribute("vCard.Email");
  profile.clearRequest();
</script>
Ezzel a néhány sorral a felhasználónak kényelmet biztosító, és időtakarékos megoldást állíthatunk munkába.