Autor Thema: Problem mit Zahl-Feld, Double, Print bzw. For-Schleife  (Gelesen 2149 mal)

Offline Sascha Seipp

  • Aktives Mitglied
  • ***
  • Beiträge: 139
  • Geschlecht: Männlich
Moin allerseits!

Ich hab folgendes Problem:
Ich will eine (Hilfs-)Maske benutzen mit den Feldern 'StartSN' und 'Anzahl', beide vom Typ Zahl. Nun soll per LotusScript eine Schleife durchlaufen werden, die <Anzahl> neue Dokumente erstellt, in denen das Feld 'SN' mit der StartSN beginnt und dann entsprechend hochgezählt wird.
Dabei stolpere ich dauernd über einen Type Mismatch.
Das geht soweit, daß ich das Feld StartSN im NotesDocument actbedoc nicht per
  Print actbedoc.StartSN
ausgeben kann (Type Mismatch).

  Print Typename(actbedoc.StartSN)
liefert 'DOUBLE()', was Print doch eigentlich konvertieren bzw. ausgeben können sollte? CInt() hat auch nix gebracht, und
  For newSN = StartSN To StartSN + Anzahl
ging entsprechend völlig schief.

Hab ich nen Denkfehler, oder mach ich irgendwas völlig falsch?  ???
Ich kann dem Frontend ja schlecht beibringen, daß die Zahlenfelder nur Integers enthalten sollen, oder?

Ciao
Sascha

Offline flaite

  • Gold Platin u.s.w. member:)
  • *****
  • Beiträge: 2.966
    • mein del.icio.us
Re: Problem mit Zahl-Feld, Double, Print bzw. For-Schleife
« Antwort #1 am: 14.04.07 - 10:54:52 »
LotusScript ist strongly typed.
Zitat
print actbedoc.StartSN
ist ein Array. Du kannst das machen: print actbedoc.StartSN(0). Durch diese "Kurzschreibweise" wird der Inhalt des ersten Elements des Arrays des Feldes automatisch in String konvertiert. print benötigt als Argument String.

Double() heisst: Ein Array von Doubles. Das ist was anderes als ein Double.

Um den Typen des Feldes zu behalten und gleichzeitig den ersten Eintrag des Feldes zu bekommen, geht so was:
Code
Dim startSN as Double
startSN = actbedoc.getItemValue("StartSN")(0)
In realen Anwendungen würde ich aber da noch ein bischen Type-checking zwischenschieben. Zumindest hast du schon mal erkannt, dass es sowas wie TypeName überhaupt gibt. Letztlich kannst du dir bezüglich des Datentyps eines Feldes in einem Notesdokument nicht sicher sein.
Um double als Integer zu nutzen, musst du es afaik in integer um-casten.
Code
Cint (startSN)
« Letzte Änderung: 14.04.07 - 10:57:11 von Axel Janssen »
Ich stimm nicht mit allen überein, aber mit vielen und sowieso unterhaltsam -> https://www.youtube.com/channel/UCr9qCdqXLm2SU0BIs6d_68Q

---

Aquí no se respeta ni la ley de la selva.
(Hier respektiert man nicht einmal das Gesetz des Dschungels)

Nicanor Parra, San Fabian, Región del Bio Bio, República de Chile

Offline Sascha Seipp

  • Aktives Mitglied
  • ***
  • Beiträge: 139
  • Geschlecht: Männlich
Re: Problem mit Zahl-Feld, Double, Print bzw. For-Schleife
« Antwort #2 am: 14.04.07 - 14:24:24 »
Hallo Axel!

Arghl! Diese (unvermuteteten) Arrays machen mich noch wahnsinnig!
Aber es is auch nicht weiter verwunderlich - ich wurschtele grade als Quereinsteiger munter drauf los mit einem eher allgemein gehaltenen Buch und der Notes Designer-Hilfe. (Aber immerhin mit Vorkenntnissen aus anderen Programmiersprachen). Weil ich das ganze im Moment eher freiwillig als mit "offiziellem Chef-Auftrag" mache. Wenn mein erster Entwurf für gut befunden wird und da mehr draus wird, hole ich mir auch noch ein bißchen bessere Doku - bis dahin nerve ich nochmal hier und da im Forum, wenn ich auf Anhieb nix Passendes finde... :-)

Jedenfalls danke für die Erleuchtung!

Ich finde es ein wenig doof, daß ich mit der (FrontEnd-)Definition eines Feldes so wenig bestimmen kann, was nachher für ein Datentyp bei rauskommt. Wenn ich im Designer sage, es sollen keine Mehrfachwerte erlaubt werden, sollte doch klar sein, daß das kein Array ist, oder?
Aber das ist wohl der Preis für die Flexibilität...

Was deinen letzten Hinweis betrifft:
Das müßte dann
Code
Cint(StartSN(0))
heißen, oder wandelt Cint auch das ganze Array um, sodaß ich dann wieder mit
Code
int_StartSN = Cint(StartSN)
int_StartSN(0)
an den Wert komme?
Werd ich gleich mal probieren...

Ciao
Sascha

Offline koehlerbv

  • Moderator
  • Gold Platin u.s.w. member:)
  • *****
  • Beiträge: 20.460
  • Geschlecht: Männlich
Re: Problem mit Zahl-Feld, Double, Print bzw. For-Schleife
« Antwort #3 am: 14.04.07 - 14:30:39 »
Du musst zwischen Front- und Backend unterscheiden: Erstes bestimmt Anzeige und Eingabe, letzteres sind die "wahren Werte".
Und: Ausser Rich Text sind Items (Backend) IMMER Arrays.

Konvertierungs-Functions wie Cint, Cdat etc. arbeiten immer nur mit skalaren Werten. Dafür kannst Du eine Zahl aus einem Item auch direkt einer Integer-Variable zuweisen.

Weiters: Wenn in einer Maske "Mehrfachwerte erlauben" bestimmt ist, betrifft das wieder nur die Frage "Eingabe" und hat nichts mit dem Backend zu tun. Dort kannst Du deshalb immer noch Arrays einwerfen. Andererseits kannst Du Dir ein Dokument auch mit fünf unterschiedlichen Masken darstellen lassen ...

Bernhard

Offline Sascha Seipp

  • Aktives Mitglied
  • ***
  • Beiträge: 139
  • Geschlecht: Männlich
Re: Problem mit Zahl-Feld, Double, Print bzw. For-Schleife
« Antwort #4 am: 14.04.07 - 14:57:46 »
Moin Bernhard!

Nur nochmal zur Vergewisserung der Unterschiede, bezogen auf ein Folgeproblem: Wenn ich im FrontEnd für ein Feld einen berechneten Vorgabewert habe, kann ich die Neuberechnung mit
Code
uidoc.Refresh
erzwingen.

Da das Backend aber keine Vorgabewert kennt, gibt's da sowas auch nicht, ergo kann ich auch nicht auf die im FE definierten Vorgabewert-Formeln zurückgreifen (ohne ins FE zu wechseln), richtig?

Ciao
Sascha

Offline koehlerbv

  • Moderator
  • Gold Platin u.s.w. member:)
  • *****
  • Beiträge: 20.460
  • Geschlecht: Männlich
Re: Problem mit Zahl-Feld, Double, Print bzw. For-Schleife
« Antwort #5 am: 14.04.07 - 15:00:26 »
Richtig. Gewisse Operationen aus dem Frontend können zwar mit NotesDocument.ComputeWithForm gemacht werden, aber eben nicht alle. Ich setzte des de facto überhaupt nicht ein.

Bernhard

 

Impressum Atnotes.de  -  Powered by Syslords Solutions  -  Datenschutz