Das Notes Forum
Domino 9 und frühere Versionen => Administration & Userprobleme => Thema gestartet von: Bellerophon am 23.01.04 - 19:58:44
-
*greetz* @ ALL!
Habe mal wieder ein kleines Problem für Euch, aber ein großes für mich, da ich nicht der Entwickler in Lotus Notes bin. Sitze nun schon seit zwei Stunden inkl. Lotus Notes Designer Hilfe und "Try&Error"-Taktik an folgendem Problem:
Ich habe ein Datumsfeld, eine Optionsschaltfläche und ein Kombinationsfeld in einer Maske. (neben weiteren 167 Feldern)
Wenn eine oder auch beide gefüllt werden, soll das ein drittes oder gar ein drittes UND viertes Feld gleichzeitig oder beim abspeichern mit abändern!
Dies habe ich mit vielerlei Formeln probiert, weil ich in Script nicht so Firm bin, und bin nun an dieser hängen geblieben, weil sie gerade mal das macht was ich ungefär haben will:
FIELD fldKategorie:=fldKategorie;
@If(Dat_Bera_IV_BewerbAbgAM!="";@SetField("fldKategorie";"Nach Abgabe der Bewerbung");Dat_Bera_IV_BewerbAbgAM)
So, in das Feld "fldKategorie" trägt er nun das ein was ich haben will, aber im Feld "Dat_Bera_IV_BewerbAbgAM" nimmt er den Eintrag raus, und im Feld "Diaolog_Bera_ArtGespr" steht noch garnichts drin, weil ich nicht weiß wie ich es noch ansprechen kann!! ;-((
Ich möchte aber haben, dass wenn ein Datum in diesem Feld (Dat_Bera_IV_BewerbAbgAM) steht, der "Kartenstatus" (fldKategorie) auf "Nach Abgabe der Bewerbung" gesetzt wird, und in ein weiteres Feld (Diaolog_Bera_ArtGespr) aus einer "Beratung" eine "Bewerbung" wird!
Hoffe man hat einen Lösungsansatz?
By the Way:
Ich bin kein "Scriptschnorrer" oder Ähnliches, da ich das nun schon öfter hier gelesen habe, das viele sich ausgenutzt fühlen oder so! Wenn man das hier von denen meint die ein Problem haben, dann ignoriert den Threat einfach..................nur warum gibt es denn ein Forum?
So nun genug davon...........hoffe auf Hilfe!
-
Hi,
ich konzentriere mich jetzt mal auf die Formel, Deinen restlichen Text hab ich nur überflogen :-)
FIELD fldKategorie:=fldKategorie;
@If(Dat_Bera_IV_BewerbAbgAM!="";
@SetField("fldKategorie";"Nach Abgabe der Bewerbung");
Dat_Bera_IV_BewerbAbgAM
)
Hier wirst Du wohl, wenn die If - Bedingung nicht erfüllt ist, auf einen Fehler stossen.
Die Formelsprache kann ja nicht wissen, was Du mit der Zeile "Dat_Bera_IV_BewerbAbgAM" meinst.
Willst Du dass das Feld so bleibt wie es ist, wenn die If-Bedingung nicht erfüllt?
Dann setze einfach ein "" ein statt dem "Dat_Bera_IV_BewerbAbgAM".
Wo läuft denn die Formel, im Querysave-Event?
Matthias
-
Hi!
Danke! ;-)
Die Formel soll beim Eintrag im Feld laufen, oder ím Queryclose / -save, das ist egal. Im Querysave habe ich folgenden Script schon stehen:
Sub Querysave(Source As Notesuidocument, Continue As Variant)
Dim Session As New notessession
Dim workspace As New notesuiworkspace
Dim uidoc As notesuidocument
Dim db As notesdatabase
Dim doc As notesdocument
Dim doc_save As notesdocument
Dim view As notesview
Dim item As NotesItem
Dim dc As NotesDocumentCollection
Dim Str_Suchdoc As String
Dim Str_Suchuidoc As String
Dim SaveFlag As String
Set uidoc=workspace.currentdocument
Set doc_Save= uidoc.Document
Set db=Session.currentdatabase
' ------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------
' Fehler PK
If Len(uidoc.fieldgettext("Text_PK")) <> 14 Then
Messagebox "Die PK muß wie folgt geschlüsselt sein:" & Chr(13) & "010166-A-12345" & Chr(13) & "oder" & Chr(13) & "010166-A-XXXXX" , MB_OK + MB_ICONINFORMATION , "Falsche PK !"
lastName = uidoc.FieldGetText("fldNachname")
GebDatTag = uidoc.FieldGetText("fldGebDatTag")
GebDatMon = uidoc.FieldGetText("fldGebDatMon")
GebDatJahr = uidoc.FieldGetText("fldGebDatJahr")
PK = GebDatTag+ GebDatMon+Right$ ( GebDatJahr , 2)+ "-"+Left$ ( lastName , 1)+"-"+"XXXXX"
Call uidoc.FieldSetText("Text_PK", PK)
uidoc.gotofield("Text_PK")
continue = False
Exit Sub
End If
' ------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------
' Fehler EMail
If Len(uidoc.fieldgettext("fldEMail")) > 0 Then
If positionOfChar& = Instr(1, uidoc.fieldgettext("fldEMail"), "@") = True Then
Messagebox "Die E-Mail-Adresse beinhaltet kein ' @ ' !" , MB_OK + MB_ICONINFORMATION , "Falsche E-Mail-Adresse !"
uidoc.gotofield("fldEMail")
continue = False
' Exit Sub
End If
End If
' ------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------
' Fehler PLZ
If Len (uidoc.FieldGetText("fldPLZ")) <> 5 Then
Messagebox "Die PLZ darf nur 5-stellig sein !" , MB_OK + MB_ICONINFORMATION , "Falsche PLZ !"
uidoc.gotofield("fldPLZ")
continue = False
' Exit Sub
End If
' ------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------
End Sub
Das mit dem einfach ein "" einsetzen habe ich auch Probiert, aber das ignoriert er einfach, da kennt der nix! ;-)
-
Sollte so in der Art gehen:
If uidoc.FieldGetText("Dat_Bera_IV_BewerbAbgAM") = "" Then
uidoc.FieldSetText("fldKategorie", "Nach Abgabe der Bewerbung")
Endif
-
Hui, wie schnell!
Teste es gerade mal aus!
Melde mich dann wieder, sitze nämlich immer noch an der Scheiße im Büro....;-( *grins*
-
Hi TMC!
Nö, macht er nicht, kann im Querysave das ganze noch nicht mal speichern. Sagt mir folgendes:
"Illegale Use of Parantheses"
-
In welcher Zeile hängt der Debugger?
Sind die gewählten Felder alle Textfelder oder Datum ?
Matthias
-
Hi,
um was für Felder handelt es sich bei "fldKategorie" und "Diaolog_Bera_ArtGespr"?
Bei berechneten Feldern kannst du das doch mit einer einfachen If-Formel machen, oder habe ich das falsch verstanden?
>>Ich möchte aber haben, dass wenn ein Datum in diesem Feld (Dat_Bera_IV_BewerbAbgAM) steht, der "Kartenstatus" (fldKategorie) auf "Nach Abgabe der Bewerbung" gesetzt wird, und in ein weiteres Feld (Diaolog_Bera_ArtGespr) aus einer "Beratung" eine "Bewerbung" wird!<<
Bsp:
@If(Dat_bera_IV..... != ""; "Nach Abgabe...."; "")
Gruß
cococo69
-
Noch was:
Baue in den Options des Scripts ein "Option Declare" ein, ist eigentlich immer Pflicht.
Und gib an, wo genau Du meinen Scriptbestandteil platziert hast.
-
@cococo69, er will ja das ganze im bestehenden Querysave - Event machen, was auch Sinn macht, und das ist bereits Script und nicht Formelsprache.
Matthias
-
Hi TMC!
In den Options steht ; Option Declare ;-)
Das Script habe ich vor dem End Sub zum Schluß eingebaut!
-
Hier geht es ja Schlag auf Schlag!
@cococo69---> Siehe oben! Wollte ich Dir auch gerade schreiben.......*grins*
Thanx
-
@TMC
>>Wenn eine oder auch beide gefüllt werden, soll das ein drittes oder gar ein drittes UND viertes Feld gleichzeitig oder beim abspeichern mit abändern!<<
Das verstehe ich anders!?
-
Und in welcher Zeile hängt der Debugger?
-
@coco
Er gibt uns ja die Option vor: gleichzeitig, ODER aber beim Speichern.
Ich plädiere daher für den Querysave Event aus Performancegründen.
Sonst läuft es ja auch auf ein Script hinaus, wenn man da was im Exiting - Event der Feldes einbaut, denn da geht keine Formelsprache.
@Bell:
Sind das alles Textfelder die Du verwendest?
-
Ups, das hab ich jetzt überlesen.
Sorry, coco.
Handelt es sich um berechnete Felder, dann geht das natürlich auch mit Formelsprache!
Bell sollte mal die Randdaten posten
- welche Feldart (berechnet / bearbeitbar)
- Feldtyp (Text / Richtext? / Datum
- in welcher Zeile hängt der Debugger
etc.
Matthias
-
@TMC:
Ich habe ein Datumsfeld (Dat_Bera_IV_BewerbAbgAM), eine Optionsschaltfläche (Dialog_Bera_IV_BewerbWeiterAN) und ein Kombinationsfeld (Diaolog_Bera_ArtGespr + fldKategorie) in einer Maske. (neben weiteren 167 Feldern)
Der Script debugger hängt sich bei mir immer auf und bringt den Rechner mit "LookUpHandle" zum Absturz! *;-(*
Sorry, würde Dir ja gerne mehr info geben!
-
sind die berechnet oder bearbeitbar?
-
@ALL:
Sind alles bearbeitbare Felder!
-
OK
Sollte dann auch funktionieren das Script von mir:
If uidoc.FieldGetText("Dat_Bera_IV_BewerbAbgAM") = "" Then
uidoc.FieldSetText("fldKategorie", "Nach Abgabe der Bewerbung")
Endif
Auch der Typ sollte egal sein:
String. The value you want to give to the field. If the fieldName$ is not of type text, this value is converted from text to the appropriate data type when you save the document.
Der Debugger wäre da imho schon sehr hilfreich.
Ist die DB vertraulich? Ansonsten kann ich Dir anbieten, dass Du die mir mal schnell zumailst: atnotes@gmx.de
Dann schau ich mir das an.
Matthias
-
wenn ich das nicht falsch verstehe, dann sollte das ganz einfach über Formeln gehen:
bei den Feldern, die du abhängig von anderen Feldern ausfüllen willst, kannst du die Formel jeweils in die InputTranslation (Eingabeübersetzung, glaube ich) schreiben.
Also in die InputTranslation des Felds aus deinem Beispiel:
@If(Dat_Bera_IV_BewerbAbgAM!="";"Nach Abgabe der Bewerbung";fldKategorie)
und das halt für jedes Feld, das du abhängig von einem oder mehreren anderen befüllen willst.
z.B. in dein anderes Feld Diaolog_Bera_ArtGespr
@If(Bedingung1;"Bewerbung";Diaolog_Bera_ArtGespr)
InputTranslation passiert ganz kurz vor dem Speichern.
-
@TMC:
Leider ist die mit 65.000 Datensätzen a 170 Feldern mit persönlichen Angaben SEHR Vertraulich! ;-(
Wäre auch etwas zu groß zum versenden........naja, macht nix!
Ich bin nun seit 06.00 Uhr an dieser und anderer Probleme dran, mein Kopf ist nun hin und wech!
Werde mir wohl das Laptop schnappen und zu Hause weiter "üben" *lol*
Muss es bis Dienstag geschafft haben........
Danke für Eure Mühe! Bis später.....
Werde das Ergebnis (wenn ich denn eines finde) posten!
Sorry wegen dem Debugger.....
-
@Thomas Völkl:
Damit schreibt er mir in das Datumsfeld den Text:
"Nach Abgabe der Bewerbung" rein......
-
@TMC!
Thanx finde ich Klasse das Du mir das anbietest.......trotzdem geht es leider nicht.......!
-
@Thomas: Afaik zieht da die Input Translation leider nicht mit: Mehrere Felder auswerten etc.
Kann mich jetzt aber auch täuschen, aber ich hatte so was schon mal und musste auf Querysave ausweichen.
@Bell:
Du kannst mir auch nur die DB schicken ohne Doks, die interessieren mich eh nicht :-)
Ansonsten: schmeisse mal alles unnötige aus der Maske raus zum testen:
Deine 117 Felder, das Querysave bereinigst Du, so dass nur mein Scriptbeispiel ausgeführt wird.
Und dann nach jeder Zeile eine Msgbox, dann siehst Du wo es hängt.
Matthias
-
du musst die Formel in die InputTranslation von dem Feld schreiben, in das du "Nach Abgabe der Bewerbung" schreiben willst, nicht in das Datumsfeld.
-
@Thomas: Afaik zieht da die Input Translation leider nicht mit: Mehrere Felder auswerten etc.
Kann mich jetzt aber auch täuschen, aber ich hatte so was schon mal und musste auf Querysave ausweichen.
ich bin mir sehr sicher, dass das klappt.
Wenn du in Feld X einen Wert eintragen möchtest, der von Feld Y und Z abhängt, dann kannst du das in der InputTranslation von Feld X schreiben:
@If (Y = "" & Z = ""; 0; Y+Z)
-
*greetz*@ALL!
Das scheint ja zu klappen!
War wohl Blind!
Teste es nun noch mit den anderne Felden und dann ´denke ich das es klappen wird! War immer auf das Eingebene Feld beschränkt!
Thanx!
Poste das ergebnis am Montag.......vieleeeeeeeeeeeeeen Daaaaaaaaaaaaaaaaaaaaaank!
-
der Illegal use of parentheses Fehler kommt übrigens weil in der Zeile
uidoc.FieldSetText("fldKategorie", "Nach Abgabe der Bewerbung")
das Call am Anfang fehlt und die Parameter in Klammern stehen.
ohne Call geht das (Parameter in Klammern setzen) nur, wenn du genau einen Parameter hast und den byValue übergibst oder du lässt dir einen Wert von der Funktion zurückgeben, wenn sie das kann
Alternativ zum Hinzufügen des Call-Schlüsselworts könntest du die Klammern um die Parameter weglassen - meine persönliche Meinung dazu ist, dass du das besser nicht machst. Ich finde, sowas macht den Code unübersichtlicher.
-
Thomas, danke für die Bestätigung.
hmmm, jetzt bin ich leicht verwirrt. Ist auch schon länger her die Problematik, aber ich bin mir sicher ich kam damals auf einen Fehler.
So hatte ich das damals dann in Script umgesetzt:
szChecker = doc.Quantity(0) + doc.Quality(0) + doc.A(0)
If szChecker = "" Then
Messagebox "You must enter at least one finding!" & Chr(10) & Chr(10) & "The document has not been saved ....." , 16, db.title
Continue = False
Exit Sub
Else
End If
In Formelsprache kam ich da nicht weiter im Feld-Event.
Die Felder sind Checkboxen, wenn nicht mindestens 1 Checkbox angehakt ist, dann soll Fehlermeldung kommen.
Na ja, wie auch immer, schön jedenfalls dass es geht. Trotzdem wurmt es mich, dass mein 2zeiler Script nicht geht.
Matthias
-
Volltreffer, Thomas mit dem Call.
Das kommt davon, wenn man hier Script nur reinschribt ohne zu testen :-)
Habe schon mehrmals die Hochkomma und Klammern gecheckt.....
Matthias
-
Thomas, danke für die Bestätigung.
hmmm, jetzt bin ich leicht verwirrt. Ist auch schon länger her die Problematik, aber ich bin mir sicher ich kam damals auf einen Fehler.
So hatte ich das damals dann in Script umgesetzt:
szChecker = doc.Quantity(0) + doc.Quality(0) + doc.A(0)
If szChecker = "" Then
Messagebox "You must enter at least one finding!" & Chr(10) & Chr(10) & "The document has not been saved ....." , 16, db.title
Continue = False
Exit Sub
Else
End If
In Formelsprache kam ich da nicht weiter im Feld-Event.
Die Felder sind Checkboxen, wenn nicht mindestens 1 Checkbox angehakt ist, dann soll Fehlermeldung kommen.
das was du da machst, ist die Eingabevalidierung.
Wenn du das mit Formeln realisierst, dann benutzt du dazu @Failure und @Success
Das funktioniert nicht, wenn du es in die InputTranslation schreibst
Aber in der InputValidation - und nur da! - funktioniert das - auch mit Prüfen mehrer Felder
im Feld X:
@If(X = "" & Y = "" & Z = ""; @Failure("Fehler");@Success)
Die Prüfung in der InputValidation ist aber manchmal unangenehm, z. B. dann, wenn du dein Frontend-Dokument "refreshst", um dem Benutzer irgendwelche neuen Erkenntnisse anzuzeigen. Denn dann wird validiert, obwohl man das eigentlich gar nicht möchte. Außerdem kann man Titel und Symbol der Msgbox nicht ändern
-
Logisch, danke für den Hint, ich hatte hier Input Validation mit Translation vertauscht.
Habe hier echt falsch kombiniert. Beim ersten Lesen des ersten Postings kam mir "hmm, eigentlich wäre ein Feld Event angebracht, aber da kam es ja mal bei mir zu Problemen. Also gleich im QuerySave machen".
Wie auch immer:
Bell kann sich es nun aussuchen: Entweder er erweitert sein Querysave per Script, oder aber er macht eine simple Input Translation.
Matthias
Irgendwie bestätigt mir aber auch dies wieder, dass man zentral wo ein Dok bräuchte "Known Bugs" oder so. Denn oftmals stosse ich auf Fehler die wirklich welche sind im Client, oft sind dies aber auch nur von mir verursachte. Werde dies im Rahmen des neu geplanten "Best Practices" Teils mal angehen...
-
*greetz* @ ALL!
Danke für Eure schnelle Hilfe. Habe Hier einige Anregungen bekommen. Von der "Eingabeumsetzung / -validierung" bin weg gegangen.
Ist nun alles im "Querysave" der Datenbank! Oben bereits beschriebenes Script wurde wie folgt ergänzt:
' Setze Intresse aus
If uidoc.fieldgettext("fldImportSKA") = "2" Then
Call uidoc.fieldsettext("Dialog_Bera_DatHerkunft" , "Datenspeicher SKA")
End If
' ------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------
' Setze Status
If uidoc.fieldgettext("Dat_Bera_II_BewerbUnterlab") +uidoc.fieldgettext("Dat_Bera_II_perPost") <> "" Then
Call uidoc.fieldsettext("fldKategorie" , "Bewerbung abgegeben")
End If
If uidoc.fieldgettext("Dat_Bera_IV_BewerbAbgAM") +uidoc.fieldgettext("Dialog_Bera_IV_BewerbWeiterAN") <> "" Then
Call uidoc.fieldsettext("fldKategorie" , "Abgabe der Bewerbung an ZNwG/OPZ")
End If
If uidoc.fieldgettext("Dialog_Bera_V_EingBewbei") <> "" Then
Call uidoc.fieldsettext("fldKategorie" , "Eingang der Bewerbung bei ZNwG/OPZ")
End If
If uidoc.fieldgettext("Dialog_VorlVerwPla") <> "" Then
Call uidoc.fieldsettext("fldKategorie" , "Vorläufige Einplanung")
End If
If uidoc.fieldgettext("Dat_Bera_V_Einpl_zum") <> "" Then
Call uidoc.fieldsettext("fldKategorie" , "Eingestellt")
End If
If uidoc.fieldgettext("Dat_Bera_V_RücknBewer") + uidoc.fieldgettext("Dialog_AblehnungGrund")<> "" Then
Call uidoc.fieldsettext("fldKategorie" , "Abgelehnt")
End If
If uidoc.fieldgettext("Opt_Bera_V_Abgeschl") = "Ja" Then
Call uidoc.fieldsettext("fldKategorie" , "Abgeschlossen")
End If
' ------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------
' Kontollabfrage Weitergabe
If uidoc.FieldGetText("Dat_Bera_IV_BewerbAbgAM") <> "" Then
If uidoc.fieldgettext("Dialog_Bera_IV_BewerbWeiterAN") = "" Then
Messagebox "Sie müssen angeben, an wen die Unterlagen abgegeben wurden !" , MB_OK + MB_ICONINFORMATION , "Eingabe vergessen !"
uidoc.gotofield("Dialog_Bera_IV_BewerbWeiterAN")
continue = False
Exit Sub
End If
End If
If uidoc.FieldGetText("Dialog_Bera_IV_BewerbWeiterAN") <> "" Then
If uidoc.fieldgettext("Dat_Bera_IV_BewerbAbgAM") = "" Then
Messagebox "Sie müssen angeben, wann die Unterlagen abgegeben wurden !" , MB_OK + MB_ICONINFORMATION , "Eingabe vergessen !"
uidoc.gotofield("Dat_Bera_IV_BewerbAbgAM")
continue = False
Exit Sub
End If
End If
End Sub
Das klappt auch ganz gut! ;-) Vielen dank nochmal..........