Das Notes Forum

Domino 9 und frühere Versionen => ND6: Entwicklung => Thema gestartet von: Thomas Schulte am 08.11.05 - 18:20:53

Titel: Schreibenden Zugriff einschränken auf bestimmte Felder ...
Beitrag von: Thomas Schulte am 08.11.05 - 18:20:53
Okay vielleicht kann mir ja mal jemand auf die Sprünge helfen.
Das hört sich ja erst einmal einfach an ist aber leider dann doch nicht so trivial.

Das Szenario sieht folgendermaßen aus. Abhängig von Parametern wie Statusfeldern, den Benutzernamen oder Rollen des Benutzers sollen nur bestimmte Felder zur Bearbeitung freigegeben werden. Das sind nicht immer dieselben Felder sondern die können auch unterschiedlich sein.

Ein Ansatz über Zugriffskontrollierte Abschnitte ist illusorisch denn ich kann nicht jedes einzelne Feld in einen solchen Abschnitt stecken.
Ein Eintrag über Leser und Autorenfelder ist zu Grob, denn er umfasst nur das gesamte Dokument und ist ohnehin schon integriert.

Das Problem bei dem ich gedanklich feststecke ist wirklich, wie kann ich auf Feldebene steuern was ein Benutzer a oder b in diesem speziellen Dokument jetzt ändern darf, ohne es hardcoded in der Maske zu hinterlegen.
Titel: Re: Schreibenden Zugriff einschränken auf bestimmte Felder ...
Beitrag von: koehlerbv am 08.11.05 - 18:25:34
Wie sicher soll das denn sein ? Wenn ein User prinzipiell Autorenrechte oder höher hat und ggf. nur bestimmte Felder nicht (editierbar) sieht, könnte er sich ja immer noch ein Agentileinchen schreiben ...

Sach ma an  :)

Bernhard
Titel: Re: Schreibenden Zugriff einschränken auf bestimmte Felder ...
Beitrag von: Thomas Schulte am 08.11.05 - 18:27:49
Ach ja, das Blocken über die Isprotected Eigenschaft des Items ist leider keine praktikable Lösung

Ich hab an so etwas ähnliches wie die History Klasse in !!Help!! gedacht, hab da aber das Problem das dann auch Änderungen an Feldern die berechnet sind nicht mehr abgespeichert werden. Die müssen aber geändert werden können.

@Bernhard, damit könnte ich in diesem Fall leben. Das kriegst du sowieso nie sicher hin. Zumindest solange nicht bis IBM das Sicherheitsmodell auf Feldebene implementiert.
Titel: Re: Schreibenden Zugriff einschränken auf bestimmte Felder ...
Beitrag von: koehlerbv am 08.11.05 - 19:05:44
Du hast aber doch bei geringem Sicherheitsanspruch noch die Möglichkeit, Felder wahlweise als "Berechnet zur Anzeige" oder "Editierbar" über Hide-whens ein- bzw. auszublenden. Und wenn es wirklich sicher sein soll, speicherst Du das Dokument nicht (weil die Leute keine Autoren (mehr) sind, sondern mailst die Änderungen an die DB, die diese dann verarbeitet.
Möglichkeiten gibt es jedenfalls etliche, auch wenn es natürlich immer Aufwand bedeutet.

Bernhard
Titel: Re: Schreibenden Zugriff einschränken auf bestimmte Felder ...
Beitrag von: Thomas Schulte am 08.11.05 - 21:02:51
Stimmt aber weist du was das heist 18 verschiedene Forms auf diese Art abzusichern? Mit den Hide Whens, und dann noch jedes einzelne Hidewhen von einer anderen Bedingung abhängig machen. Das ist der Alptraum von jedem einzelnen Programmierer.

Es muss einen anderen Weg geben.
Titel: Re: Schreibenden Zugriff einschränken auf bestimmte Felder ...
Beitrag von: koehlerbv am 08.11.05 - 22:36:41
Irgendwo musst Du die Bedingungen pro Feld aber immer aufmalen - wie auch immer. Bei er einfachsten Variante (getrennte Felder für Ein- und Ausgabe) kannst Du die Bedingungen ja auch zentral formulieren, im Hide-when hast Du dann nur noch eine einzige Abfrage zu stehen.
Aber auch bei aufwändigeren Mechanismen: Irgendwo müssen Deine "wenn - dann's stehen. Oder missverstehen wir uns gerade ?

Bernhard
Titel: Re: Schreibenden Zugriff einschränken auf bestimmte Felder ...
Beitrag von: Thomas Schulte am 08.11.05 - 23:23:04
Da hast du recht Bernhard aber ich will einen Weg finden das eben nicht in die Maske reinzuprogrammieren sondern es möglichst simpel über ein Konfigurationsdokument abzudecken.

Vom Ansatz her habe ich zwei grundlegende Probleme.
1. erlaube ich dem Benutzer zu egal was zu ändern und sag ihm vor dem Speichern, So junge du bist aber ein böser Bube, das erlaube ich dir jetzt nicht.
2. Block ich von vorne herein alles ab was nicht in der Liste ist. (Hmm das könnte ich über den entering Event der Felder triggern, so nach dem Motto you are not allowed to change this field Changes will not be saved.) Damit wären die berechneten Felder außen vor denn die kann der Benutzer ja sowieso nicht anspringen. Jedes Feld das er nicht ändern darf meckert ihn an. Und wenn er es trotzdem ändert werden die Änderungen beim speichern über die Klasse wieder rückgängig gemacht. Das schöne ist das könnte im Web auch funktionieren.

Den Gedanken verfolgt ich jetzt mal ein wenig und schau was dabei rauskommt.
Titel: Re: Schreibenden Zugriff einschränken auf bestimmte Felder ...
Beitrag von: TMC am 09.11.05 - 00:11:04
Hmm, einerseits jedes Feld voll konfigurierbar, andererseits so wenig Programmieraufwand wie nur möglich.
Ein 3rd Party Framework dafür ist mir dafür nicht bekannt. Ich denke Du musst tatsächlich die hier erwähnten Ansätze (Hide-When etc.) in Erwägung ziehen.

Was es ja auch noch gibt ist die Feld-Property "must have at least editor access", wird aber wohl für eine völlig frei konfigurierbare Maske einen auch nicht wirklich weiterbringen.

Ein Problem solch völlig freier Konfiguration ist ja auch immer:
Derjenige, der solch eine App konfiguriert ist erstmal völlig überfordert. 100 Einstellmöglichkeiten für jedes Feld, er weiß gar nicht was er braucht und was nicht.
Ich würde das irgendwie gliedern, und z.B. nur eine Hand voll "Szenarien" vorgeben. Szenario 1: Felder A, C, D, F editierbar, Szenario 2: Felder A, C, D, G und H editierbar, etc.
Jedes Szenario wird genau im Konfig-Dok beschrieben.
Du als Entwickler brauchst dann nur die Hand voll Szenarien abdecken.
Titel: Re: Schreibenden Zugriff einschränken auf bestimmte Felder ...
Beitrag von: Axel am 09.11.05 - 08:35:15
Hi,

ich stand gerade dieser Tage vor der gleichen Problematik. Konnte es gerade noch abwehren, aber ich bin mir nicht sicher, dass es nicht doch nochmal hochkocht.

Meine Überlegung war dann die folgende: Wenn es möglich ist die betreffenden Felder layouttechnisch zusammenzufassen, dann müsste es doch möglich sein, das über Teilmasken abzufackeln. So ganz bis zum Ende habe ich das allerdings noch nicht durchgedacht.


Axel


Titel: Re: Schreibenden Zugriff einschränken auf bestimmte Felder ...
Beitrag von: cgorni am 09.11.05 - 09:44:54
Hi,

ich habe leider auch keine neue Idee. Ich habe es bisher ebenfalls mit Hide-When-Formeln implementiert.

ABER: ein kleiner Tipp um die Verwaltung der Formeln nicht zur Hölle werden zu lassen. Nehmen wir mal an ein Feld "Adresse" soll nur bearbeitet werden, wenn der Status "Offen" ist und die Rolle "[EDV]" vergeben ist.

- Erstellen eines verborgenen Feldes "HW_Adresse" (Hide-When Adresse)
- Feld ist "Computed for Display" und Typ ist Zahl
- Formel des Feldes: !(Status = "Offen" & @IsMember("[EDV]"; @UserRoles))

Die Formeln sollten einheitlich formuliert sein. Hier ein Beispiel: "wann ist das Feld sichtbar?" und das dann komplette negieren über "!"

D.h. das Ergebnis des Feldes ist 1 oder 0 bzw. true oder false. In der Hide-When-Formel von "Adresse" kannst du jetzt einfach "HW_Adresse" schreiben. Die Verwaltung der Formeln ist damit in andere Felder ausgelagert. Das hat den Vorteil, das alles an einer Stelle steht und sprechende Namen besitzt.
Arbeit ist es natürlich trotzdem.

My 2 cents.
Titel: Re: Schreibenden Zugriff einschränken auf bestimmte Felder ...
Beitrag von: Lossa am 09.11.05 - 09:54:31
Hi,

wenn es möglich ist den Stil der Felder von Notes auf Betriebssystem zu ändern, dann kannst du den Input Enabled Event benutzen steht dort "0" drin, dann ist das Feld grau und nicht editierbar.
Der Vorteil ist:
1. Du hast nicht die doppelte Anzahl an Feldern
2. Du brauchst dich nicht mit hide-when zu ärgern
3. Es funktioniert ohne Änderung im Web
Titel: Re: Schreibenden Zugriff einschränken auf bestimmte Felder ...
Beitrag von: Axel am 09.11.05 - 10:23:35
Hi,

wenn es möglich ist den Stil der Felder von Notes auf Betriebssystem zu ändern, dann kannst du den Input Enabled Event benutzen steht dort "0" drin, dann ist das Feld grau und nicht editierbar.
Der Vorteil ist:
1. Du hast nicht die doppelte Anzahl an Feldern
2. Du brauchst dich nicht mit hide-when zu ärgern
3. Es funktioniert ohne Änderung im Web


Yoo, da verlagere ich das Problem aber nur. Der Aufwand bleibt der gleiche. Ich sehe darin keine echte Alternative, die mir echte Vorteile bringt.

Vorteil 1 lasse ich gelten. Bei 2. ärgere ich mich nicht mehr mit Hide-Whens rum, aber dafür mit den Formeln  im Input Enabled - Event. Zu 3. kann ich keine definitive Aussage machen, da mir die Web-Erfahrung fehlt, aber ich denke Hide-Whens funktionieren auch im Web.

Axel
Titel: Re: Schreibenden Zugriff einschränken auf bestimmte Felder ...
Beitrag von: Lossa am 09.11.05 - 10:36:16
Hallo,

habe auch nicht gesagt das es einfacher ist, aber wenn du schon pkt 1 zustimmst, dann ist es vieleicht trotzdem einfacher, da du ja bei hide-when formeln aufgrund der Anzahl der Felder vielmehr brauchst.
Anonsten würde ich in einem Profildokument die gesperrten Felder für den User auflisten. Dann als erstes Feld in der Maske ein berrechnet zur Anzeige Feld nehmen, das holt alle gesperrten Feldname aus dem Profil und alle Felder haben im Input Event die Abfrage:
@IsNotMember(@ThisName;Sperrfelder) daraus ergbit sich automatisch True wenn nicht drin damit bearbeitbar, false ist drin damit gesperrt.
Das ganze ist mittels Copy-Paste einfach auf alle Felder übertragbar.
Titel: Re: Schreibenden Zugriff einschränken auf bestimmte Felder ...
Beitrag von: Axel am 09.11.05 - 10:48:14
Hi,

so könnte die Sache durchaus etwas einfacher werden. Vor allem, dass mit dem Profildokument ist gar keine so schlechte Idee.

Aber, wie bei Thomas auch, wäre bei mir die Bearbeitbarkeit der einzelnen Felder von bestimmten Stati des Dokumentes abhängig. Also z.B. Feld1 darf bearbeitet werden, wenn das Dokument den Status Offen hat, Feld 1 und 2 dürfen nur im Status "In Bearbeitung" editiert werden usw. Und bei sowas wird's dann wieder aufwändig, weil ich dann fast jeden Event einzeln anpacken muss.

Axel
Titel: Re: Schreibenden Zugriff einschränken auf bestimmte Felder ...
Beitrag von: Thomas Schulte am 09.11.05 - 13:59:15
Ok so könnte es funktionieren.

Ich hab ein Feld das Berechnet zur Anzeige ist. In diesem Feld stehen entweder werte drin oder nicht. Stehen keine Werte drin sind alle Felder ansprechbar die nicht anderweitig geschützt sind. Wenn Werte drinstehen (Feldnamen) dann sind diese Feldnamen diejenigen die für den Benutzer aktuell zur Verfügung stehen. Wenn jetzt ein Feld angesprochen wird, dann wird im OnFocus Event überprüft ob dieses Feld in derListe steht steht es in der liste ist alles in Ordnung. Steht es nicht in der Liste dann wird der Benutzer auf das erste Feld in der Liste umgeleitet. Das Ganze mit "gemeinsamen Java Script" und dann sollte das sowohl im Notes Client als auch im Web funktionieren.

So jetzt brauch ich nur noch eine Routine die
Den Inhalt des Feldes in dem die Werte stehen ausliest, vergleicht ob sein Name in diesem Eintrag vorhanden ist und wenn der eigene Name da nicht enthalten ist und Werte in der Liste stehen den Focus auf das Feld setzt das dem ersten Element der Liste entspricht oder noch besser dem Benutzer eine Auswahl der Felder anbietet die er bearbeiten darf und erst nach dieser Auswahl den Focus entsprechend setzt.

Hat da jemand schon mal was in die Richtung geschrieben. Ihr wisst schon klauen ist besser als selber schreiben  :)
Titel: Re: Schreibenden Zugriff einschränken auf bestimmte Felder ...
Beitrag von: mrtachles am 09.11.05 - 17:43:26
Hi,

ich habe sowas schon in einem "Framework" fertig. Du konfigurierst, welche Felder nicht geändert werden sollen, ich merk mir die beim Öffnen im Edit-Mode um schreib ggf. zurück, falls der Anwender was geändert hat.

Gruss
Thomas
Titel: Re: Schreibenden Zugriff einschränken auf bestimmte Felder ...
Beitrag von: Thomas Schulte am 09.11.05 - 21:56:15
Funktioniert das im Web und in Notes gleichermaßen?

Wenn ja wäre es interessant das live zu sehen. Es ist ein Ansatz den ich auch schon verfolgt habe, der aber bei mir im Web einiges an Tücken hat.
Titel: Re: Schreibenden Zugriff einschränken auf bestimmte Felder ...
Beitrag von: mrtachles am 09.11.05 - 23:34:40
Im Web packe ich das in den WQO und WQS - Agent, also WebQueryOpen und -Save. Diesen Agenten muss man dann in die Web-Maske packen..

Hab ich jetzt noch nicht selbst ausprobiert .. sollte aber nach meinen Erfahrungen mit WQO und WQS auch dort funktionieren.

Gruss
Thomas
Titel: Re: Schreibenden Zugriff einschränken auf bestimmte Felder ...
Beitrag von: Thomas Schulte am 10.11.05 - 09:51:52
Okay für Notes läuft das jetzt halbwegs so wie ich mir das vorstelle.
Ein Feld berechnet zur Anzeige mit den Felder die Accessible sind, ein wenig gemeinsamer JavaScript Code im JS-Header der Maske und genau eine Zeile in jedem Feld das überprüft werden soll.
Eines der Problem die ich jetzt noch habe ist das mir der Code im Browser eine Fehlermeldung rausschmeist, von wegen das Feld das verwendet wird um die Feldnamen zu halten hat keine Properties.
Fehler: f.isRestrainedFields.value has no properties. Warum in aller Herren Länder Namen funktioniert das in Notes und im Web nicht?
Ein anderer, das onFocus beim ersten öffnen des Dokumentes nicht richtig zu funktionieren scheint und das wenn man einen TabRückwärts macht er sich auf das erste Feld in der maske positionieren lässt und man da manchmal etwas eingeben kann. Komische Sache das? Bei den Leuten die nur die Maus hin und her Schubsen Funktioniert das nämlich. Scheinbar wird beim OnFocus erst dann getriggert wenn irgendeine Aktion in dem Feld stattfindet.

Ach ja hier ist eine Test Datenbank dazu. Da fehlt jetzt nur noch die Möglichkeit das der Benutzer wenn er beim Klick abgewiesen wird auswählen kann welches Feld er denn gerne anzeigen will und das Ding muss noch im Web lauffähig sein.
Die Form mit der ihr weitertesten könnt ist die ...V3
Titel: Re: Schreibenden Zugriff einschränken auf bestimmte Felder ...
Beitrag von: flaite am 10.11.05 - 10:16:49
Für neuere Browser könnte man vermutlich auch javaScript dynamisch in $$HtmlHead per Formelsprache generieren und das readonly property von html-fields ausnutzen.
http://www.cs.tut.fi/~jkorpela/forms/readonly.html
Titel: Re: Schreibenden Zugriff einschränken auf bestimmte Felder ...
Beitrag von: Thomas Schulte am 10.11.05 - 11:32:27
Ja könnte man nur dann muss man wieder zwei gleisig in der Entwicklung fahren. Will ich aber nicht.

zu den Fehlern. Also einen hab ich jetzt noch eingegrenzt. Wenn man das erste Feld einer Maske auf nicht ansprechbar setzt und das zweite Feld auf ansprechbar dann kann man mit einem doppelten Backtab das erste Feld trotzdem zum bearbeiten öffnen. sind die erste nbeiden Felder geblockt funktioniert das richtig, genauso wenn man das erste Feld offen hat und das zweite blockt. Irgendwo hat Notes da ein Problem. Wobei das System grundsätzlich auf das springen mit der Tab nicht so richtig zu reagieren scheint.
Titel: Re: Schreibenden Zugriff einschränken auf bestimmte Felder ...
Beitrag von: Thomas Schulte am 11.11.05 - 12:56:47
Also es funktioniert jetzt schon mal grundsätzlich.
Ich kann tatsächlich den Zugriff auf Feldebene einschränken, indem ich nur eintrage welche Felder der Benutzer denn bearbeiten darf. Und das Ganze sowohl im Web als auch in Notes mit ein und demselben Code.

Jetzt kommt nur noch ein klitzkleines Problem. Ich will das der Benutzer die möglichen Felder angezeigt bekommt und das er dann das Feld in das er springen will auswählen kann. Das Ganze nach Möglichkeit so, das er nicht die echten Feldnamen angezeigt bekommt sondern Klartext und dann über ein Wertepaar das entsprechende Feld gefunden und benutzt wird.

Java Script anyone?
Titel: Re: Schreibenden Zugriff einschränken auf bestimmte Felder ...
Beitrag von: flaite am 11.11.05 - 17:06:39
Ja könnte man nur dann muss man wieder zwei gleisig in der Entwicklung fahren. Will ich aber nicht.

wäre aber wesentlich responsiver.
Kein zusätzlicher Roundtrip über den Agenten-Manager.
Der user hat direkt einen visuellen Überblick darüber, welche Felder er gar nicht bearbeiten soll.


Mit deinem Klartext ist mir nicht klar, Thomas.
Im onLoad Event machst du ein feldname.focus() auf das erste Feld, das er editieren kann.
Ausserdem finde ich wie gesagt meinen Vorschlag mit dem Ausblenden der Felder, die er nicht editieren soll, so gut, dass ich es vermutlich mal am we mit n7 ausprobieren werde. Hab aber lange nichts mehr mit Notes im Web gemacht.
Titel: Re: Schreibenden Zugriff einschränken auf bestimmte Felder ...
Beitrag von: Thomas Schulte am 11.11.05 - 22:32:35
Ja könnte man nur dann muss man wieder zwei gleisig in der Entwicklung fahren. Will ich aber nicht.

wäre aber wesentlich responsiver.
Kein zusätzlicher Roundtrip über den Agenten-Manager.
Der user hat direkt einen visuellen Überblick darüber, welche Felder er gar nicht bearbeiten soll.


Mit deinem Klartext ist mir nicht klar, Thomas.
Im onLoad Event machst du ein feldname.focus() auf das erste Feld, das er editieren kann.
Ausserdem finde ich wie gesagt meinen Vorschlag mit dem Ausblenden der Felder, die er nicht editieren soll, so gut, dass ich es vermutlich mal am we mit n7 ausprobieren werde. Hab aber lange nichts mehr mit Notes im Web gemacht.
Ähh wieso responsiver Axel? Bei der Lösung die ich jetzt habe ist nix mit Roundtrip. Das passiert alles direkt. Entweder im Client oder im Brauser.
Und mit Klartext meine ich, das die Feldnamen ja in der Regel etwas kryptischer sind. Dem Benutzer will ich das aber nicht zumuten. Außerdem woher will er wissen auf welches Feld er denn klicken kann um da hinzuspringen. So geb ich ihm eine Auswahlliste er wählt das Feld aus und Zack ist er da. Rudimentär kann man das mit Prompt(....) ja lösen aber es muss da doch noch ein Möglichkeit geben so eine Art Dialogbox in Form einer Liste anzuzeigen.
Titel: Re: Schreibenden Zugriff einschränken auf bestimmte Felder ...
Beitrag von: flaite am 12.11.05 - 00:31:39
mit responsiver meine ich, dass ein WebQueryOpen Zeit kostet (auf dem Server).
Vielleicht habe ich auch andere Vorstellungen als du was du vor hast, was bei natursprachlichen Beschreibungen naturgemäss vorkommt.
Mit traditionellen PopUps muss man im Web imho heute ein bischen vorsichtig sein, wg. den ganzen Popup-Blockern.
Der User kann doch mit der Maus zu einem Feld springen?
Deshalb verstehe ich das nicht ganz.
Ich werde jedenfalls - unabhängig von diesem Thread - einmal versuchen, eine diese_Felder_sind_disabled Liste in JavaScript in Notes zu implementieren.
Ich glaub, das ist relativ einfach.


Titel: Re: Schreibenden Zugriff einschränken auf bestimmte Felder ...
Beitrag von: Thomas Schulte am 12.11.05 - 10:56:22
Noch mal damit das klar wird, es geht nicht darum das in einer reinen Web Anwendung zu realisieren, sondern darum das es im Notes Client und im Web gleichermaßen läuft. Und wenn du den Thread richtig gelsen hättest dann würdest du feststellen das bei mir weder ein WQO noch ein WQS Agent verwendet wird.
 
Und mir ist das bei meiner Lösung, die jetzt funktioniert vollkommen wurscht ob du auf das Feld mit dem Cursor oder mit der Maus klickt. Das was du als Popups bezeichnest sind zumindest im Moment auch keine solchen sondern der Prompt Befehl von Java Script und den blockieren zumindest die in die Browser eingebauten Blocker nicht.
Und da es keine externe sondern eine Interne Lösung ist kann ich durchaus auch mit bestimmten Verhaltensweisen leben.

Was ich jetzt höchstens noch gerne hätte wäre eine Möglichkeit mit reinrassigem Java Script eine Auswahlbox aus den Schirm zu zaubern, die das ausgewählte Teil dann als Text zurückgibt.
Titel: Re: Schreibenden Zugriff einschränken auf bestimmte Felder ...
Beitrag von: flaite am 12.11.05 - 11:22:31
Ich glaub der klassische Weg ist darüber:
http://de.selfhtml.org/javascript/objekte/window.htm#open
Du kannst irgendwie aus dem PopUpFenster in das aufrufende html Dokument zurückschreiben. Weiss momentan nicht wie. Hab sehr lange nicht mehr mit JavaScript gearbeitet. Mach das jetzt wieder ein bischen, weil ich mit Ajax herumspiele.
Es geht vielleicht auch über dhtml-webDom. Damit kannst du Elemente (z.B. eine Auswahlbox) in einer Seite ein- und ausblenden.
Ich versuch das mal.

Gruß Axel
Titel: Re: Schreibenden Zugriff einschränken auf bestimmte Felder ...
Beitrag von: flaite am 12.11.05 - 13:00:17
Wie wärs damit? (getestet mit IE6 und Mozilla).
In Domino müsste man im html Tab von den jeweiligen Elementen die jeweilige ID eintragen.

Alles was in <script language="javaScript"> steht muss in den html-header.
Die tags div öffnend und div-schliessend als passThru html und vom Notes-Client verbergen.
Ein bischen problematischer wirds, wenn die Radio-Buttons dynamisch generiert werden sollen. Geht aber auch. Mit computedText.

Code
<html>
<head>
<script language="javaScript">


	function loadDocument() {
		document.getElementById('auswahl').style.visibility = "hidden";
	}

	function showMySelection() {
		document.getElementById('auswahl').style.visibility = "visible";
	}

	function commitMySelection() {
		theForm = document.forms[0];

		theForm.ergebnis.value=getSelectedRadioValue(theForm.auswahl);
		this.value=getSelectedRadioValue(theForm.auswahl);
		document.getElementById('auswahl').style.visibility = "hidden";

	}

// von http://www.breakingpar.com/bkp/home.nsf/0/CA99375CC06FB52687256AFB0013E5E9
	function getSelectedRadioValue(buttonGroup) {
	   // returns the value of the selected radio button or "" if no button is selected
	   var i = getSelectedRadio(buttonGroup);
	   if (i == -1) {
	      return "";
	   } else {
	      if (buttonGroup[i]) { // Make sure the button group is an array (not just one button)
	         return buttonGroup[i].value;
	      } else { // The button group is just the one button, and it is checked
	         return buttonGroup.value;
	      }
	   }
} // Ends the "getSelectedRadioValue" function


// http://www.breakingpar.com/bkp/home.nsf/0/CA99375CC06FB52687256AFB0013E5E9
function getSelectedRadio(buttonGroup) {
   // returns the array number of the selected radio button or -1 if no button is selected
   if (buttonGroup[0]) { // if the button group is an array (one button is not an array)
      for (var i=0; i<buttonGroup.length; i++) {
         if (buttonGroup[i].checked) {
            return i
         }
      }
   } else {
      if (buttonGroup.checked) { return 0; } // if the one button is checked, return zero
   }
   // if we get to this point, no radio button is selected
   return -1;
} // Ends the "getSelectedRadio" function

</script>
</head>

<body onLoad="loadDocument()">
<form>
	<input id="ergebnis" name="ergebnis" type="text" value="" onFocus="alert('no foolin'); blur();">
	<input name="showSelection" value="showSelection" type="button" onClick="showMySelection()">
	<div id="auswahl">
	<input name="auswahl" type="radio" value="grün" onClick="commitMySelection();">rot</input>
	<input name="auswahl" type="radio" value="gelb" onClick="commitMySelection();">gelb</input>
	<input name="auswahl" type="radio" value="blau" onClick="commitMySelection();">blau</input>
	</div>


</form>
</body>
</html>
Titel: Re: Schreibenden Zugriff einschränken auf bestimmte Felder ...
Beitrag von: flaite am 12.11.05 - 15:28:41
hier noch klassischere Lösung mit popup:
2 Dateien:
opener:
Code
<html>
<head>
<script language="javaScript">


function closeChild() {
	if (window.childPopUp && window.childPopUp.open && !window.childPopUp.closed){
    	window.childPopUp.opener = null;
    	window.childPopUp.close();
    }
    }

function openPopUp() {

	childPopUp = window.open("popUp.html", "Fenster1", "width=310,height=400,left=200,top=100");
}

</script>
</head>

<body onUnload="closeChild()">
<form>
	<input id="ergebnis" name="ergebnis" type="text" value="" onFocus="alert('no foolin'); blur()">
	<input name="showSelection" value="showSelection" type="button" onClick="openPopUp()">

</form>

Text dadrunter.
</body>
</html>

popUp:
Code
<html>
<head>
<script language="javaScript">
	function commitMySelection() {

		if (window.opener && !window.opener.closed) {
			parentForm = window.opener.document.forms[0]
			window.opener.document.bgColor = "beige";


			thisForm = document.forms[0];

			parentForm.ergebnis.value=getSelectedRadioValue(thisForm.auswahl);
			window.close();
		} else {
			alert("window opener ist geschlossen!!!");
		}

	}



// von http://www.breakingpar.com/bkp/home.nsf/0/CA99375CC06FB52687256AFB0013E5E9
	function getSelectedRadioValue(buttonGroup) {
	   // returns the value of the selected radio button or "" if no button is selected
	   var i = getSelectedRadio(buttonGroup);
	   if (i == -1) {
	      return "";
	   } else {
	      if (buttonGroup[i]) { // Make sure the button group is an array (not just one button)
	         return buttonGroup[i].value;
	      } else { // The button group is just the one button, and it is checked
	         return buttonGroup.value;
	      }
	   }
} // Ends the "getSelectedRadioValue" function


// http://www.breakingpar.com/bkp/home.nsf/0/CA99375CC06FB52687256AFB0013E5E9
function getSelectedRadio(buttonGroup) {
   // returns the array number of the selected radio button or -1 if no button is selected
   if (buttonGroup[0]) { // if the button group is an array (one button is not an array)
      for (var i=0; i<buttonGroup.length; i++) {
         if (buttonGroup[i].checked) {
            return i
         }
      }
   } else {
      if (buttonGroup.checked) { return 0; } // if the one button is checked, return zero
   }
   // if we get to this point, no radio button is selected
   return -1;
} // Ends the "getSelectedRadio" function

</script>
</head>
<body>

	<form>
	<div id="auswahl">
	<input name="auswahl" type="radio" value="grün" onClick="commitMySelection();">rot</input>
	<input name="auswahl" type="radio" value="gelb" onClick="commitMySelection();">gelb</input>
	<input name="auswahl" type="radio" value="blau" onClick="commitMySelection();">blau</input>
	</div>
	</form>

</body>
</html>

Das komplexeste ist eigentlich die Verbindung zwischen beiden zu halten.
Checke onUnload Event im opener sowie if Abfrage in commit-Funktion von popUp.
Ich glaub das ist so sauber.

In notes würde ich popUp.html als treat content as html page implementieren und einfach den html code da rein pasten. Bei dynamischen Checkboxen mit computedText arbeiten.

Gruß Axel

Titel: Re: Schreibenden Zugriff einschränken auf bestimmte Felder ...
Beitrag von: flaite am 15.11.05 - 05:42:34
als attachment:
visibleStuff für Bsp. 1
classicPopupSelection für Bsp. 2
Titel: Re: Schreibenden Zugriff einschränken auf bestimmte Felder ...
Beitrag von: Thomas Schulte am 15.11.05 - 07:24:57
Danke, ich probier das aus und melde mich wiederwenn es, an was ich nicht zweifle, funktioniet hat.