Das Notes Forum

Domino 9 und frühere Versionen => Entwicklung => Thema gestartet von: Felix am 11.11.02 - 11:10:08

Titel: Felder löschen
Beitrag von: Felix am 11.11.02 - 11:10:08
Hallo zusammen,

habe ein kleines Problem beim löschen von Felder;

Verständnisfrage:
die Felder werden nur in dem jeweiligen Dok gelöscht ??
nicht in der Maske ?? Bei neuem Anlegen mit der Maske stehen
alle Felder zur Verfügung ?? ??

Formellösung:
beim speichern des Doks soll geprüft werden ob Feld1 einen
bestimmten Wert enthält falls ja sollen die Felder 2 bis 5
gelöscht werden ansonsten nichts tun.

Kann jemand helfen stehe momentan total auf dem Schlauch !!!!!!!

Gruss Felix
Titel: Re:Felder löschen
Beitrag von: Axel am 11.11.02 - 11:32:04
Hi,


Zitat
Verständnisfrage:
die Felder werden nur in dem jeweiligen Dok gelöscht ??
nicht in der Maske ?? Bei neuem Anlegen mit der Maske stehen
alle Felder zur Verfügung ?? ??

Die Felder werden nur im jeweiligen Dokument gelöscht und nicht in der Maske. Somit stehen Sie für alle neuen Dokumente zur Verfügung.


Zitat
Formellösung:
beim speichern des Doks soll geprüft werden ob Feld1 einen
bestimmten Wert enthält falls ja sollen die Felder 2 bis 5
gelöscht werden ansonsten nichts tun.


Versuch's mal so:

@If(Feld1 = "bestimmter Wert"; ""; @Return(""));
FIELD Feld2 := @DeleteField;
FIELD Feld3 := @DeleteField;
FIELD Feld4 := @DeleteField;
FIELD Feld5 := @DeleteField;

Axel



Titel: Re:Felder löschen
Beitrag von: Felix am 11.11.02 - 11:38:55
Wo füge ich die Formel am besten ein??
Im Querysave hat die Formel keine Wirkung.

Felix
Titel: Re:Felder löschen
Beitrag von: Axel am 11.11.02 - 11:45:39
Hi,

wenn die Formel beim Speichern ausgeführt werden soll, dann muß die Formel in das QuerySave-Event der entsprechenden Maske.

Axel
Titel: Re:Felder löschen
Beitrag von: Felix am 11.11.02 - 13:03:16
Hallo @all,

leider immer noch nicht den gewünschten Erfolg bei der Geschichte
Hat jemand eine Lösung parat ?

Felix
Titel: Re:Felder löschen
Beitrag von: Rob Green am 11.11.02 - 13:25:41
Felix,

das "Löschen" leerer Felder ist in jeder Hinsicht irgendwie ein falscher Ansatz. Ich weiß nicht, aus welcher DB technischen Ecke dieser Gedanke kommt (Du denkst hierbei sicherlich an leere Datenfelder zB in einer Oracle Db die natürlich Platz verbrauchen oder ganz simpel in Access, oder?).

Aber: Notes benötigt für nicht besetzte Datenfelder 0 Byte. Daher spielt das Lschen keine Rolle in diesem Bezug, wenn es um irgendwelche vermeintlichen Vorteile geht.

Wenn Du nun meinst, daß dem nicht so ist, weil Du im Lesemodus über Dokumenteneigenschaften die Felder dennoch einsehen kannst (wenn auch leer), dann täuscht Du Dich, da hierbei Notes lediglich die zugrundeliegende Form Just in Time zieht und dem User anzeigt. Feld für Feld, unabhängig ob gesetzt oder nicht. So zB Felder mit der Eigenschafte Displayed for View werden im Frontend zur Laufzeut gezogenund berechnet. Aber, datentechnisch verbrauchen sie nix.
Titel: Re:Felder löschen
Beitrag von: Axel am 11.11.02 - 13:26:40
Hi,

versuch's doch mal mit der Scriptlösung im QuerySave-Event:


Dim doc As NotesDocument

Set doc = source.Document

If doc.Feld1(0) = "bestimmter Wert" Then
  Call doc.RemoveItem("Feld2")
  Call doc.RemoveItem("Feld3")
  Call doc.RemoveItem("Feld4")
  Call doc.RemoveItem("Feld5")
End If

Das sollte aber jetzt funktionieren.

Axel



Titel: Re:Felder löschen
Beitrag von: Rob Green am 11.11.02 - 13:29:33
Alex, sind diese anderen Felder berechnet und abhängig von Feld 1 oder wie ist das ?
Titel: Re:Felder löschen
Beitrag von: Axel am 11.11.02 - 13:42:32
@Rob

Es wird, beim Speichern der Wert des Feldes Feld1 geprüft. Ist er, wie im Beispiel "bestimmter Wert", so werden die Felder Feld2, Feld3, Feld4 und Feld5 aus dem Dokument entfernt.


Das ist was Felix haben wollte. Allerdings in Script, da ja die Formellösung nach seinen Angaben nicht funktioniert hat. Warum auch immer, das kann ich im Moment nicht nachvollziehen.

Zitat
Formellösung:
beim speichern des Doks soll geprüft werden ob Feld1 einen
bestimmten Wert enthält falls ja sollen die Felder 2 bis 5
gelöscht werden ansonsten nichts tun.
Titel: Re:Felder löschen
Beitrag von: Felix am 11.11.02 - 13:49:11
Andere Formulierung,

der User hat die möglichkeit über die Dialogliste einen
Wert auszuwählen.
Leider geht der User von hinten nach vorne vor und wählt
somit Werte in die Felder die auch im Feld übernommen werden.

Bei Auswahl des Feld1 werden die anderen Felder
ausgeblendet aber die Werte bleiben stehen.

So, ich möchte bei Auswahl von Feld1 bei bestimmtem Wert die
anderen Felder löschen da diese nicht leer sind.

Leider funzt bis jetzt keine Lösung.

Felix
Titel: Re:Felder löschen
Beitrag von: Axel am 11.11.02 - 14:05:45
Hi,

so ganz ist die Sache noch nicht klar. Heisst das im Klartext, dass es in deiner Maske 5 Felder (Feld1 - Feld5) gibt, in der der User Werte über Dialoglisten auswählt. Diese Werte sollen in ein einzelnes Feld übernommen werden und zwar in der Art, dass bei einem bestimmten Wert in Feld1, nur Feld1 übernommen wird, sonst die Werte aus Feld 2 - 5. Ist das so richtig? Soll das Ganze erst beim Speichern geschehen? Ist dieses einzelene Feld berechnet?


Axel

Titel: Re:Felder löschen
Beitrag von: Felix am 11.11.02 - 14:36:52
Hallo Axel,

nicht ganz so komplex.

Der user hat die Möglichkeit über 5 Felder
die einer Hierarchie folgen von oben nach
unten Daten einzugeben. Je nach Eingabe
erscheinen die Felder oder bleiben ausgeblendet.

Dem User fällt aber nach dem fünften Feld
dann plötzlich ein er will die oberst Kategorie
ändern und tut dies auch. Die unteren Felder
werden ausgeblendet aber die Werte bleiben
stehen.
Ich möchte nun die Felder löschen sobald
der User auf speichern geht, da diese ja
eh ausgeblendet sind.

Ich dachte an eine Formel die den Wert des
ersten Feldes abfragt und prüft sollte der
Wert PinNews heissen und das zweite Feld
Ungleich leer sein dann lösche die Felder.

Felix
Titel: Re:Felder löschen
Beitrag von: Felix am 11.11.02 - 14:53:27
Hi,

versuch's doch mal mit der Scriptlösung im QuerySave-Event:


Dim doc As NotesDocument

Set doc = source.Document

If doc.Feld1(0) = "bestimmter Wert" Then
  Call doc.RemoveItem("Feld2")
  Call doc.RemoveItem("Feld3")
  Call doc.RemoveItem("Feld4")
  Call doc.RemoveItem("Feld5")
End If

Das sollte aber jetzt funktionieren.

Axel


Habe gerade versucht mit:

If doc.Feld1(0) = "bestimmter Wert" + doc.feld2(0) <> "" Then
  Call doc.RemoveItem("Feld2")
  Call doc.RemoveItem("Feld3")
  Call doc.RemoveItem("Feld4")
  Call doc.RemoveItem("Feld5")
End If


leider geht nicht, dass bestehende "falsche" Doks
dann richtig ohne die nicht benötigten Felder
erneut gespeichert werden.

Felix
Titel: Re:Felder löschen
Beitrag von: Axel am 11.11.02 - 15:05:09
Hi,

dein Code sieht doch richtig aus. Ausserdem schreibst du:

... dann richtig ohne die nicht benötigten Felder erneut gespeichert werden.

Zitat
leider geht nicht, dass bestehende "falsche" Doks
dann richtig ohne die nicht benötigten Felder
erneut gespeichert werden.

Ich verstehe das so, dass das Dokument dann ohne die nicht benötigten Felder gespeichert wird.

Wo liegt denn genau das Problem.

Axel

Titel: Re:Felder löschen
Beitrag von: Felix am 11.11.02 - 15:17:20
Ja Axel,

so sollte es sein; ist aber nicht so.

Die Felder sind immer noch vorhanden.

Und bei bereits falsch gespeicherten Doks
hat das Script keine Wirkung.

Felix
Titel: Re:Felder löschen
Beitrag von: Axel am 11.11.02 - 15:39:53
Hi,

versuch's mal mit der Lösung:

Dim doc As NotesDocument

Set doc = source.Document

If doc.Feld1(0) = "PinNews" And doc.Feld(0) <> "" Then
  doc.Feld2 = ""
  doc.Feld3 = ""
  doc.Feld4 = ""
  doc.Feld5 = ""
End If

Das hab ich getestewt und es hat funktioniert. Die Felder sind zwar im Dokument noch vorhanden, aber leer. Das sollte aber nicht stören.

Axel

Titel: Re:Felder löschen
Beitrag von: Felix am 13.11.02 - 07:45:57
Hi Axel,

danke dir das hat geklappt.
Das löschen des Inhalts reicht eigentlich aus.

Da es aber 5 Felder sind sollte ich die 5 Felder in die
If Verknüpfung einbringen oder gibt es da noch eine andere Lösung??

Soweit habe ich dieses genannt Script im Querysave im
Einsatz.

Felix
Titel: Re:Felder löschen
Beitrag von: Axel am 13.11.02 - 08:08:30
Hi,

du musst die IF - Abfrage entsprechend erweitern. Eine andere Möglichkeit ist mir nicht bekannt.


Axel
Titel: Re:Felder löschen
Beitrag von: Felix am 13.11.02 - 09:03:34
OK Axel,

DANKE

Felix
Titel: Re:Felder löschen
Beitrag von: Don Pasquale am 13.11.02 - 09:26:16
Was ich jetzt nicht verstanden habe, Felix, meintest Du
die Felder löschen oder einfach nur leeren ?

Ciao
Don Pasquale
Titel: Re:Felder löschen
Beitrag von: Felix am 13.11.02 - 09:29:30
Hallo Don Pasquale,

wollte die Felder eigentlich löschen, das ging aber nicht  :'(
daher werden die Felder jetzt

einfach nur geleert. ;D


Felix
Titel: Re:Felder löschen
Beitrag von: ata am 13.11.02 - 09:35:05
@Felix,

... trotz daß du eine Lösung für dich gefunden hast, es würde mich schon interessieren, warum du die Felder nicht löschen kannst.
Der gepostete Code müßte eigentlich funktionieren...

ata
Titel: Re:Felder löschen
Beitrag von: Axel am 13.11.02 - 09:57:10
@ata

Ich habe es selbst getestet. Im QuerySave-Event habe ich versucht mit RemoveItem die Felder zu löschen. Es hat nicht funktioniert. Ich vermute es hängt daran, das RemoveItem eine Backend-Funktion ist.

Eine derartige Frontend-Funktion gibt es nicht.


Axel




Titel: Re:Felder löschen
Beitrag von: Felix am 13.11.02 - 10:12:29
@ata,

ich denke die Felder löschen wäre die elegantere
Variante, aber wenn es nicht funzt; der Not gehorchend !!  ;)
reicht auch das löschen !!

Felix
Titel: Re:Felder löschen
Beitrag von: ata am 13.11.02 - 12:28:31
@Axel...

... also jetzt muß ich das mal checken, denn im Querysave sind Backend-Methoden verwendbar, das würde dann ja schon sehr einschneidene Konsequenzen bei der Programmierung bedeuten...

... ich melde mich...

ata
Titel: Re:Felder löschen
Beitrag von: ata am 14.11.02 - 08:01:41
... ich bin platt, es ist nicht möglich im Querysave des Dokumentes Felder zu löschen...

Hier mein Versuchscode (mit schwäbischen Kommentaren...)
Code
Sub Querysave(Source As Notesuidocument, Continue As Variant)
' # Mit Grundkurs in schwäbisch...
   Dim doc As NotesDocument
   Set doc = Source.Document
   
   If doc.HasItem("Anrede") Then
      Print "Hod a Feld Ôhred..."
      doc.RemoveItem("Anrede")
      Call doc.Save( True , True )
      If doc.HasItem("Anrede") Then
         Print "Hods no..."
      Else
         Print "Hods nemme!"
      End If
   End If
End Sub

Die Statusmeldungen werden korrekt erkannt, wenn man das Dokument wieder öffnet, ist das Feld und dessen Inhalt weiterhin vorhanden...

ata