Das Notes Forum
Domino 9 und frühere Versionen => ND6: Entwicklung => Thema gestartet von: je am 09.04.05 - 20:07:15
-
Hallo!
Ich habe ein Problem bei der Umwandlung von einem Feld.
Ein Feld (ModifiedAt) will ich in eine Datumsliste umwandeln. Vorher war es eine Textliste. Das habe ich auch einfach so im Designer umgestellt.
Danach taucht dann folgendes Problem auf:
Ich habe 2 Screenshots gemacht (siehe Anhänge). Auf dem einen werden die Eigenschaften dieses Feldes in der Profilansicht gezeigt (links). Das andere zeigt die gleichen Eigenschaften in einer View. Wie man sieht ist es einmal ein Time/Date-Feld und einemal ein Text-Feld.
Wißt ihr, wie man das Problem beheben kann?
Mit besten Dank
Jens
-
Hast Du das Dokument neu gespeichert? Wie es aussieht eher nicht.
Die View zeigt den Ist-Zustand an.
Andreas
-
Hallo Jens,
wenn Du Dokumente erstellt hast mit einem Feld, das die Eigenschaft "Text" hatte, dann bleibt dieses Feld immer "Text", auch wenn Du dies in der Maske änderst.
Notes trennt scharf zwischen Daten und Design. Du kannst Dir zum Beispiel jedes Dokument mit eienr x-beliebigen Maske anschauen. Du bist allerdings auch dafür zuständig, dass die Maske mit den Eigenschaften und Items des Dokuments zurecht kommt.
Du müsstest Dir jetzt für Deine "alten" Dokumente einen Agent schreiben, der die Textliste in eine Datumsliste umwandelt. Die neue Maske an sich hilft Dir da leider nicht weiter.
Sag' an, wenn Du genauere Infos brauchst.
Bernhard
-
Auf jeden Fall erstmal vielen Dank für die schnelle Antworten :)
Ich habe jetzt versucht einen Agenten zu schreiben, der im ersten Schritt auf einer Testdatenbank das alte Feld (Textliste) entfernt und dafür ein neues Feld (Datumsliste) einfügt.
Der eigentliche Code sieht bei mir so aus:
doc.RemoveItem("ModifiedAt")
Call doc.Save(True,False,False)
Set item = New NotesItem(doc,"ModifiedAt",Now(),1024)
Call item.CopyItemToDocument(doc,"ModifiedAt")
Call doc.Save(True,False,False)
Es klappt jedoch nicht :(
Könnt ihr mir einen Tipp geben, wie ich weiterkomme?
-
Probier mal:
Temp := ModifiedAt;
@SetField("ModifiedAt";@TextToTime(Temp))
Gruss
Boris
-
Hi,
bin etwas aus der Übung, aber soweit ich noch weiß bewirkt auch ein
@Command( [ToolsRefreshSelectedDocs] )
damit Änderungen an Feld-Eigenschaften in der Maske auf die Dokumente übertragen werden. Das macht im Prinzip:
- Strg + E
- F9
- Strg + S
über alle selektierten Dokumente.
Michael
-
Dein Agent (Formelsprache) muss so aussehen:
FIELD ModifiedAt := @Now
oder in Script
'... set von doc ...
doc.ModifiedAt = Now
call doc.Save( true, true, true )
Andreas
-
FIELD ModifiedAt := @Now
oder in Script
'... set von doc ...
doc.ModifiedAt = Now
call doc.Save( true, true, true )
Genau das meine ich!
Wer produktiv arbeitet, benutzt die @Formel-Spache.
Die LS-Anbeter (wie G... & Co) schreiben anstatt von einer Zeile gleich drei! :P ;D
-
Diesmal ist es leider völlig falsch, was Du schreibst, Leo. Aber auch Glombi und Michael haben keine richtigen Codes geliefert.
On Formelsprache müsste man einen Agent schreiben, der alle bestehenden Felder mit der in Frage kommenden Maske in DT-Felder umwandelt:
SELECT Form = "XY";
FIELD BETREFFENDES_TEXTFELD := @Text (@TextToTime (BETREFFENDES_TEXTFELD))
Das @Text vorab soll sicherstellen, das auch bereits korrekte Feldinhalte nicht verhackwurstet werden oder zu einer Fehlermeldung führen.
In LS wäre das eleganter und nachvollziebarer zu lösen:
Agent läuft durch alle betreffenden Docs. Ist das das Doc instantiiert, dann
If Isdate (doc.BETREFFENDES_TEXTFELD (0)) then
doc.BETREFFENDES_TEXTFELD = CDat (doc.BETREFFENDES_TEXTFELD (0))
Auch damit werden evtl. "falsche" Feldinhalte ignoriert.
Jens, lass uns wissen, wenn wir weiter helfen können.
Bernhard
PS: Leo - die Formelsprache ist genial. Wer diese missachtet oder denkt, er ist nur wegen LS besser, liegt völlig falsch. Tode ist auch so ein "Priester der @functions" wie ich. Aber wenn es ans Eingemachte geht, ist es Schluss mit @functions ...
Meine Erfahrung: Wer gut in @functions ist, ist dann auch in LS ein Winner, weil er weiss, was im Hintergrund eigentlich passiert. Wer nur @funcktions verwendet, ist ein Looser - ebenso wie der LS-Fetischist.
-
Wer nur @funcktions verwendet, ist ein Looser - ebenso wie der LS-Fetischist.
Hallo Bernhard,
1. vielen Dank für Deine Erklärungen!
2. ich hoffe, Du nimmst meine Kommentare nicht zu ernst... :)
3. übrigens, hier ist noch einer:
Du wolltest doch nicht in Deinem o.g. Satz @fuck-tions schreiben, oder? ;)
Gruß
Leo
-
Du wolltest doch nicht in Deinem o.g. Satz @fuck-tions schreiben, oder? ;)
Bestimmt nicht, Leo. Leider sind da noch mehr Schreibfehler hineingekommen - ich muss an einem meiner beiden PCs endlich mal die Tastatur austauschen - ich komme mit dem Dell-Teil nicht klar. Und eine mir gelegene Siemens-Tastatur liegt schon lange griffbereit. Die Failheit in den Kleinigkeiten ...
Bernhard
-
Vielen Dank für die vielen Antworten.
Ich habe das Problem mit @Command( [ToolsRefreshSelectedDocs] ) bzw. @Command( [ToolsRefreshAllDocs] ) behoben.
Hätte nicht gedacht, dass es so einfach geht :)
So musste ich mir zumindest nicht die Mühe machen und noch einen Agenten schreiben ;)
-
Wie wohl ein doc.ComputeWithForm(false,false) reagiert hätte?
Das muss ich mal bei Gelegenheit ausprobieren.
Nein, nein Leo - ich bin kein Formelhasser ;D
Andreas