Das Notes Forum

Domino 9 und frühere Versionen => ND6: Entwicklung => Thema gestartet von: machineslave am 24.11.05 - 17:21:10

Titel: Dynamische Dialoglisten im Web, ohne Seite neu zu laden
Beitrag von: machineslave am 24.11.05 - 17:21:10
Hallo,

ich habe folgendes Problem:

Gegeben ist ein Web-Formular, in welches der User seine Daten in seinem Personendokument im Adressbuch pflegen/ändern kann.
Dort gibt es untereinander abhängige Auswahllisten für (Abhängigkeit in Reihenfolge:)

1. Firma
2. Kostenstellengruppe
3. Kostenstelle
4. (berechnetes Textfeld) Kostenstellen-Nummer


Als Vorgabewert soll natürlich das ausgewählt sein, was auch im Adressbuch eingetragen ist.
Das Problem ist allerdings, dass das Feld "Kostenstellengruppe" nicht im N&A gespeichert ist und über diverse Lookups erst geladen werden muss.
Beim erstmaligen Laden der Form wird zwar die richtige Firma vorselektiert, aber die anderen Auswahllisten sind leer. Erst, wenn ich einmal die Auswahl im Feld Firma ändere (und wieder zurück), werden die richtigen Werte geladen.
Desweiteren habe ich das Problem, dass nach Auswahl eines anderen Wertes für den User nicht direkt ersichtlich ist, dass die Form neu geladen wird (change choices on document refresh ...)
Dadurch heisst es dann natürlich: "Geht nicht".

Nun meine eigentliche Frage:

Was mir vorschwebt ist, die kompletten Auswahllisten direkt zu Anfang zu laden und dann beim onChange-Event der jeweiligen Auswahllisten die anderen Listen dynamisch neu zu befüllen.
Hat das schonmal jemand gemacht, bzw. hat jemand eine Idee, wie ich da am sinnvollsten rangehe (mit JavaScript)?

(Auf keinen Fall möchte ich die Sache mit dem neuladen des Dokumentes beibehalten)

Danke und Gruß

Stefan


Titel: Re: Dynamische Dialoglisten im Web, ohne Seite neu zu laden
Beitrag von: datenbanken24 am 25.11.05 - 00:28:39
Das geht, ist aber mit etwas Aufwand verbunden.

(Beispiel-Link am Ende...)


1)
Beim Öffnen der Maske ziehst Du Dir alle möglichen "Werte-Paare" zusammen,
z.B. über DbLookups oder WQO

Alternativ (so machen wir es), liegen die Möglichkeiten schon irgendwo zusammengepackt vor. z.B in einem Konfigurationsdokument.

Du hast dann eine Liste in der Art:

Oberkategorie_1=Unterkategorie_1_1~Unterkategorie_1_2~Unterkategorie_1_3~... :
Oberkategorie_2=Unterkategorie_2_1~Unterkategorie_2_2~Unterkategorie_2_3~...

z.B:

"Dänemark=Bornholm~Djursland~Falster~Färöer~Fünen~Jütland~Langeland":
"Deutschland=Allgäu~Bodensee~Eifel~Franken~Hamburg" :
...

2)
Aus den jeweiligen Oberkategorien füllst Du Deine 1. Dialogliste.
In diesem Fall wären das die Länder.

@Word( _ValueList; "="; 1);

Dieses Feld heißt im Beispiel "Line_1_Keyword"


3.)
Über eine Pass Thru HTML - computed value schreibst Du über @Formeln dynamisch ein Javascript-Array in Deine Webseite, welches genau die Unterkategorien enthält, beginnend bei [1].


arrModels[1] = "Bornholm;Djursland;Falster;Färöer;Fünen;Jütland;Langeland";
arrModels[2] = "Allgäu;Bodensee;Eifel;Franken;Hamburg" ;


Hier eine Beispiel-@Formel, die Dir aus Deiner Wertepaare-Liste das Javascript-Array schreibt:


_SecondCategory := @Word( _ValueList; "="; 2);

_Elem := @Elements( _SecondCategory);
_n := 0;

@NewLine +
"<script language=JavaScript>" + @NewLine + @NewLine +

"var arrModels = new Array(); " + @NewLine +

@Implode(
@Transform( _SecondCategory; "x"; @Do(
_n := _n + 1;
("arrModels[" + @Text(_n)  + "]   = \"" + @ReplaceSubstring( x ; " ~" : "~ " : "~"; ";") +

"\";"))
); @NewLine) +

@NewLine +
"</script>" + @NewLine



4.)
Du baust ein Feld in die Maske
In diesem Beispiel ""Line_1_Depand"
Text, editable, Default vaue: Line_1_Depand,
vollständig hidden in Notes und im Web


5.)
Du baust ein Feld in die Maske
In diesem Beispiel "Line_2_Keyword"
Text, editable,
vollständig sichtbar in Notes und im Web,
ABER mit dem HTML-Tag "type=hidden"


6.
Man benötigt weiterhin eine computed value, Pass thru HTML:

"<select name=\"Line_1_Depand\" class=\"searchfield\">" + @NewLine +
"<option value=\"all\">alle</option>" + @NewLine +
"<option value=\"\"></option>" + @NewLine +
"</select>"


7.
Die Maske darf NICHT die Eigenschaft haben: "generate HTML for all fields"


8.)

onchange="ChooseMake":

Im onChange Event des 1. Dialogs (= Line_1_Keyword)
(geht übrigens genau so gut mit Checkboxen und Radiobuttons)
rufst Du diese nette JS-Funktion auf:


function ChooseMake(boolHeadContained)
{
   var arrModelList;
   var objModelSelection;
   var objMakeSelection;
   var intOffSetForAll;
   var i;
   if (document.forms[0].Line_1_Depand == null) {
   return;
    }
   objModelSelection = document.forms[0].Line_1_Depand;
   objMakeSelection = document.forms[0].Line_1_Keyword;
   objModelSelection.selectedIndex = 0;
   objModelSelection.options.length = 1;

   if (boolHeadContained)
      intOffsetForAll = 1;
   else
      intOffsetForAll = 0;
       
   if (objMakeSelection.selectedIndex >= intOffsetForAll){
      arrModelList = (arrModels[objMakeSelection.selectedIndex + 1 -

intOffsetForAll]).split(';');
           for (i = 0; i < arrModelList.length; i++){
             objModelSelection.options.length = i+2;
             objModelSelection.options[i+1].value = arrModelList
             objModelSelection.options[i+1].text = arrModelList
           }
   }
   
   if( document.forms[0].Line_2_Keyword.value != "" ) {   
   objModelSelection.value = document.forms[0].Line_2_Keyword.value
   }
} // ChooseMake


9.)
Diese Funktion gehört dementsprechend dann in den JSHeader der Maske.


Das war's dann.


Kein ganz leichter Spaß, aber es funktioniert gut.
Das Ergebnis exakt dieser Methode siehst Du z.B unter:

http://www.privatevillas.de/fewo.htm

Und wenn Du nach dieser Aktion dringend Urlaub brauchst,
bist Du dort auch gleich richtig...


Viel Erfolg,
Gruß,
Uwe
Titel: Re: Dynamische Dialoglisten im Web, ohne Seite neu zu laden
Beitrag von: machineslave am 25.11.05 - 12:51:03
Hallo Uwe,

danke erstmal für die ausführliche Hilfe. Das ist ja schon ein ganz schöner Brocken.
Ich hab's mir mal auf Deiner Seite angeschaut, ist sehr gut gemacht.
Allerdings muss ich wohl noch einiges an Gehirnschmalz reinstecken, da bei mir die 3. Kategorie ebenfalls in Abhängigkeit von der 2. dynamisch ist. (Bei Dir ist ja die 3. Kat. "Objektart" immer gleich).
Ich werd mal versuchen, ob ich das mit mehrdimensionalen Arrays (und da eine Mischung zwischen "normalen" und assoziativen) hinbekomme.

Gruß

Stefan
Titel: Re: Dynamische Dialoglisten im Web, ohne Seite neu zu laden
Beitrag von: datenbanken24 am 08.04.06 - 02:35:11
Mittlerweile ist so etwas ein Parade-Beispiel für AJAX.
Ich würde also fast empfehlen, das "Schmalz" auf die oben gepostete Lösung zu sparen und es lieber gleich  mit dieser neueren Technik zu versuchen.

Die Anforderung schreit gerade zu nach AJAX - wer posted das erste Domino-Beispiel hierfür im atnotes-Forum... ?

Gruß,
Uwe
Titel: Re: Dynamische Dialoglisten im Web, ohne Seite neu zu laden
Beitrag von: Glombi am 08.04.06 - 07:58:35
Ajax, Das hört sich interessant an.

Hier mal als Einstieg folgendes - Ajax and Domino

http://ajaxpatterns.org/Lotus_Notes_Ajax_Frameworks

Ich denke, wir sollten da einen eigenen Thread machen.

Andreas
Titel: Re: Dynamische Dialoglisten im Web, ohne Seite neu zu laden
Beitrag von: flaite am 08.04.06 - 09:08:29
Ich teste gerade die Nützlichkeit der neuen JavaScript/Ajax-Tools von Myeclipse und lese das Buch bei Manning von (u.a. Eric Pascarello, SEHR GUT) sowie Ajax Patterns and Best Practices vom Schweizer Webdesigner Christian Gross. .
Sieht alles soweit sinnvoll aus.
Codestore hat einige interessante Artikel zu Ajax mit Domino und Ruby on Rails:
http://www.codestore.net/store.nsf/srch?SearchView&Query=Ajax&SearchFuzzy=TRUE&start=1&Count=10&SearchType=srch
Ansonsten natürlich Ajaxian.com

Ein bischen architektonischer Hintergrund:
http://drunkandretired.com/podcast/
- Episode 37

Gut ist auch der englische Wiki-Eintrag: http://en.wikipedia.org/wiki/Ajax_%28programming%29
sowie das Interview mit dem Ajax Erfinder Jesse James Garret (2. der Podcasts von Ajaxian).

Axel
Titel: Re: Dynamische Dialoglisten im Web, ohne Seite neu zu laden
Beitrag von: datenbanken24 am 13.10.06 - 01:11:26
Zitat
Mittlerweile ist so etwas ein Parade-Beispiel für AJAX.
Ich würde also fast empfehlen, das "Schmalz" auf die oben gepostete Lösung zu sparen und es lieber gleich  mit dieser neueren Technik zu versuchen.

Die Anforderung schreit gerade zu nach AJAX - wer posted das erste Domino-Beispiel hierfür im atnotes-Forum... ?

Gruß,
Uwe

Wir haben nun so eine dreistufige, abhängige Dialogliste im Web
in AJAX realisiert. Und ich würde nie wieder auch nur dran denken, dass mit was anderem als AJAX zu machen.
AJAX und Domino - dass passt einfach genial.

Wenn noch Interesse besteht, kann ich hierzu (dreistufige, abhängige Dialogliste im Web) mal was posten.
Titel: Re: Dynamische Dialoglisten im Web, ohne Seite neu zu laden
Beitrag von: Thomas Schulte am 13.10.06 - 06:42:24
Ja mach doch mal, bitte.