4.4 Hvordan gemmes valgte kunder og medarbejdere

Når en bruger vælger en kunde eller en medarbejder, så skal det registreres i henholdsvis "RecentCustSearch" tabellen og "RecentEmpSearch" tabellen. Det er dog ikke lige meget hvordan dette foregår. Hvis det drejer sig om en ny kunde eller medarbejder, dvs. det er første gang brugeren vælger en af de to, så skal der indsættes en ny tuppel i den tabel det drejer sig om. Hvis brugeren istedet vælger en kunde eller medarbejder, som før har været valgt, så vil der allerede være en tuppel i en af de respektive tabeller, hvilket betyder at tuplen skal opdateres.

I det følgende er måden hvorpå de valgte kunder og medarbejdere gemmes på beskrevet. Det foregår i to klasser, en for kunder og en for medarbejdere. En metode i hver af disse klasser, står for denne funktionalitet, og det er dem der beskrives i det følgende. Ønskes yderligere dokumentation af disse klasser, se JavaDoc på vedlagte CD.

Kunder beskrives først og derefter medarbejdere.

4.4.1 Kunder (FoundCustomers)

Når en bruger vælger en kunde, så skal den valgte kunde indsættes (hvis valgt for første gang) eller opdateres (hvis valgt før) i "RecentCustSearch" tabellen. Dette foregår ved at kalde metoden "setSelectedCustDataAndSaveSelectedCustForThisUser" i entitets-objektet "FoundCustomers". Metoden tager tre argumenter: en reference til DBAccess, den valgte kundes ID og brugerens ID.

Måden hvorpå det bestemmes om brugeren har valgt kunden for første gang, eller om kunden har været valgt før, er ved at løbe "defaultCustID" array'et igennem. Hvis den valgte kundes ID findes heri betyder det at brugeren har haft valgt kunden før. Det er dog, som tidligere nævnt, kun de 10 seneste valgte kunder det drejer sig om. Nedenstående kode viser hvordan dette bestemmes.

int defaultCustIndex = 0;
boolean update = false;
for (int i=0;i<getNumberOfDefaultCust();i++) {
  if (defaultCustID[i] == custID) {
    defaultCustIndex = i;
    update = true;
  }
}

Hvis variablen "update" er false, betyder det at den valgte kunde ikke er at finde blandt de seneste valgte kunder, og derfor skal der indsættes en ny tuppel i tabellen. De data der skal indsættes findes ved at løbe "foundCustID" array'et igennem indtil man finder den valgte kunde (kundeID). Nu har man et indeks til den valgte kunde, og det bruges i den følgende INSERT statement. Efter at kunden er indsat i tabellen, skal kunden også indsættes i de arrays der indeholder de seneste valgte kunder (kun vist metodekaldet), hvis dette ikke gøres kan man risikere at en kunde kan blive indsat to gange. Nedenstående kode viser hvordan dette foregår.

String sql;
if (!update) {
  int foundCustIndex = 0;
  for (int i=0;i<getNumberOfFoundCust();i++) {
    if (foundCustID[i] == custID) foundCustIndex = i;
  }
  sql = "INSERT INTO RecentCustSearch values( "+
          "'"+ userID +"', "+
          ""+ custID +", "+
          "'"+ foundCustCDMID[foundCustIndex] +"', "+
          "'"+ foundCust[foundCustIndex] +"', "+
          "'"+ foundCustAddr1[foundCustIndex] +"', "+
          "'"+ foundCustTown[foundCustIndex] +"', "+
          "'"+ foundCustPhone[foundCustIndex] +"', "+
          "sysdate  )";

  addFoundCustToDefaultCustArrays(foundCustIndex);
}

Hvis variablen "update" er true, betyder det at den valgte kunde har været valgt før, og derfor skal tabellen opdateres. Nedenstående kode viser hvordan dette foregår.

else {
  sql = "UPDATE RecentCustSearch "+
        "SET timeStamp = sysdate "+
        "WHERE userID = '"+ userID +"' "+
          "AND searchedForID = "+ custID;
}

SQL-sætningen udføres ved at benytte DBAccess referencen.

dbAccess.setStatement(sql);

4.4.2 Medarbejdere (EmployeeData)

Når en bruger vælger en medarbejder, så skal den valgte medarbejder indsættes (hvis valgt for første gang) eller opdateres (hvis valgt før) i "RecentEmpSearch" tabellen. Dette foregår ved at kalde metoden "saveSelectedEmpForThisUser" i entitets-objektet "EmployeeData". Metoden tager fire argumenter: en reference til DBAccess, den valgte medarbejders ID, brugerens ID og en reference til "defaultEmpID" array'et fra entitets-objektet "FoundEmployees".

Måden hvorpå det bestemmes om brugeren har valgt medarbejderen for første gang, eller om medarbejderen har været valgt før, er ved at løbe "defaultEmpID" array'et igennem. Hvis den valgte medarbejders ID findes heri betyder det at brugeren har haft valgt medarbejderen før. Det er dog, som tidligere nævnt, kun de 10 seneste valgte medarbejdere det drejer sig om. Nedenstående kode viser hvordan dette bestemmes.

boolean update = false;
String sql;
for (int i=0;i<defaultEmpID.length;i++) {
  if (defaultEmpID[i] == empID) update = true;
}

Hvis variablen "update" er false, betyder det at den valgte medarbejder ikke er at finde blandt de seneste valgte medarbejdere, og derfor skal der indsættes en ny tuppel i tabellen. Nedenstående kode viser hvordan dette foregår.

if (!update) {
  sql = "INSERT INTO RecentEmpSearch values( "+
          "'"+ userID +"', "+
          ""+ empID +", "+
          "'"+ fullName +"', "+
          "sysdate  )";
}

Hvis variablen "update" er true, betyder det at den valgte medarbejder har været valgt før, og derfor skal tabellen opdateres. Nedenstående kode viser hvordan dette foregår.

else {
  sql = "UPDATE RecentEmpSearch "+
        "SET timeStamp = sysdate "+
        "WHERE userID = '"+ userID +"' "+
        "AND searchedForID = "+ empID;
}

SQL-sætningen udføres ved at benytte DBAccess referencen.

dbAccess.setStatement(sql);