Autor Thema: Frage zu einer Schleife  (Gelesen 2077 mal)

Offline Bruce Willis

  • Gold Platin u.s.w. member:)
  • *****
  • Beiträge: 1.002
  • Geschlecht: Männlich
  • Wer nicht wagt...
Frage zu einer Schleife
« am: 03.02.09 - 22:49:11 »
Hallo,

könnte man mit einer Formel-Schleife das Folgende tun?

Es gibt eine Maske mit 10 sichtbaren Text-Feldern für Kommentare der Benutzer.
Komment_1 ... Komment_10

Es gibt noch 10 versteckte Felder, wo der vorherige Inhalt der sichtbaren Felder gespeichert ist:
Komment_1_1 ... Komment_1_10

Beim Speichern des Dokuments werden alle Änderungen in die History geschrieben.
Zehnmal eigentlich dasselbe:

newEntry :=   Komment_1 ;
@If( Komment_1  != Komment_1_1 ; @Do (
@SetField("History"; @NewLine + newEntry +  History ) ;
@SetField("Komment_1_1" ; Komment_1  )
);  @Success );

....

newEntry :=   Komment_10 ;
@If( Komment_10  != Komment_1_10 ; @Do (
@SetField("History"; @NewLine + newEntry +  History ) ;
@SetField("Komment_1_10" ; Komment_10  )
);  @Success );

Für eine Idee wäre ich sehr dankbar.

Gruß
Leo
nobody is perfect but i'm pretty close 

Offline koehlerbv

  • Moderator
  • Gold Platin u.s.w. member:)
  • *****
  • Beiträge: 20.460
  • Geschlecht: Männlich
Re: Frage zu einer Schleife
« Antwort #1 am: 04.02.09 - 00:30:34 »
Willst Du den Stunt wirklich in Formelsprache machen? Nicht wirklich, oder? Nimm LotusScript.

Zehn Kommentarfelder (das ist starr!) und dazu zehn zur Historie und dann noch ein History Field itself - das klingt auch nicht nach der architektonischen Weisheit letzter Schluss. Aber für wirkliches Urteil weiss ich natürlich zu wenig über Deine Anwendung.

Schleifen kannst Du per Formeln bauen, auch ein @SetField kann damit bedient werden. Für Deine "Komment"-Items müsstest Du aber von hinten durch die Brust wieder das aktuelle Dokument auslesen - nö, das ist weder schön noch rationell.

Wie gesagt: Nimm LotusScript. Dann wird es ein übersichtlicher Wenigzeiler.

Bernhard

Offline Werner Götz

  • Aktives Mitglied
  • ***
  • Beiträge: 248
  • Geschlecht: Männlich
Re: Frage zu einer Schleife
« Antwort #2 am: 04.02.09 - 08:09:53 »
Ob nun das Ganze sinnvoll ist, kann ich nicht beurteilen, ich denke aber, die Formeln kann man mit einer Schleife ersetzen.
-Werner

@For( i := 1; i <= 10; i := i + 1;
  iText := @Text(i);
  newEntry :=  @GetField("Komment_" + iText);
  @If( newEntry  != @GetField("Komment_1_" + iText );
    @Do (
      @SetField("History"; @NewLine + newEntry +  History ) ;
      @SetField("Komment_1_" + iText ; newEntry  )
    );
    ""
  )
);

Offline Bruce Willis

  • Gold Platin u.s.w. member:)
  • *****
  • Beiträge: 1.002
  • Geschlecht: Männlich
  • Wer nicht wagt...
Re: Frage zu einer Schleife
« Antwort #3 am: 04.02.09 - 20:54:55 »
Hallo Bernhard,

Danke für Dein schnelles Feedback.

Zehn Kommentarfelder (das ist starr!) und dazu zehn zur Historie und dann noch ein History Field itself - das klingt auch nicht nach der architektonischen Weisheit letzter Schluss.
Wie würdest Du etwas ähnliches (egal was) FLEXIBEL realisieren?  :)


weiss ich natürlich zu wenig über Deine Anwendung.

Es geht um ein Formular (unter anderem eine Tabelle mit 10 Zeilen und mehreren Spalten). Eine der Spalten ist für Kommentare vorgesehen.
Die Formulare werden von mehreren Leuten bearbeitet.
Man möchte - unter anderem - wissen, wann, wer und was eingetragen, geändert oder gelöscht hat.

Gruß
Leo
« Letzte Änderung: 04.02.09 - 21:01:42 von Bruce Willis »
nobody is perfect but i'm pretty close 

Offline Bruce Willis

  • Gold Platin u.s.w. member:)
  • *****
  • Beiträge: 1.002
  • Geschlecht: Männlich
  • Wer nicht wagt...
Re: Frage zu einer Schleife
« Antwort #4 am: 04.02.09 - 20:59:50 »
Ob nun das Ganze sinnvoll ist, kann ich nicht beurteilen, ich denke aber, die Formeln kann man mit einer Schleife ersetzen...


Hallo Werner,

VIELEN DANK       :knuddel:

für Deine schnelle Antwort und tolle Lösung !!!

Gruß
Leo

--------

WannWer := @Text(@Now;"D0T1") + " - " + @Name( [CN] ; @UserName ) ;

@For( i := 1; i <= 10; i := i + 1;
  iText := @Text(i);
  newEntry :=  WannWer +  ", zum " + iText + ".Kommentar: " + @GetField("Komment_" + iText);
  newValue := @GetField("Komment_" + iText);
  oldValue := @GetField("Komment_1_" + iText);
  @If( newValue  != oldValue ;
    @Do (
      @SetField("History"; @NewLine + newEntry +  History ) ;
      @SetField("Komment_1_" + iText ; newValue  )
    );
    ""
  )
);
« Letzte Änderung: 04.02.09 - 21:05:59 von Bruce Willis »
nobody is perfect but i'm pretty close 

Offline koehlerbv

  • Moderator
  • Gold Platin u.s.w. member:)
  • *****
  • Beiträge: 20.460
  • Geschlecht: Männlich
Re: Frage zu einer Schleife
« Antwort #5 am: 04.02.09 - 22:35:51 »
Wie würdest Du etwas ähnliches (egal was) FLEXIBEL realisieren?  :)

Egal was? Anbei ein Code Snippet, welches n * 3 Felder einer Maske im Frontend durchgeht und zwar keine History schreibt, aber leere Felder zwischen Feld n(x1) bis n(x3) und n+1(x1) und n+1(x3) entfernt. Das Prinzip ist aber genau identisch:

Zitat
   For iCounter = 1 To (iMaxLines - 1)
      If uidocCurrent.FieldGetText ("SkillBez" & Cstr (iCounter)) = "" Then
         'Copy each following line to the line before:
         For iCounter2 = iCounter To (MaxLine - 1)
            Call uidocCurrent.FieldSetText ("SkillBez" & Cstr (iCounter2), uidocCurrent.FieldGetText ("SkillBez" & Cstr (iCounter2 + 1)))
            Call uidocCurrent.FieldSetText ("SkillNote" & Cstr (iCounter2), uidocCurrent.FieldGetText ("SkillNote" & Cstr (iCounter2 + 1)))
            Call uidocCurrent.FieldSetText ("SkillBem" & Cstr (iCounter2), uidocCurrent.FieldGetText ("SkillBem" & Cstr (iCounter2 + 1)))
         Next
         'Delete the last line:
         Call uidocCurrent.FieldSetText ("SkillBez" & Cstr (MaxLine), "")
         Call uidocCurrent.FieldSetText ("SkillNote" & Cstr (MaxLine), "")
         Call uidocCurrent.FieldSetText ("SkillBem" & Cstr (MaxLine), "")
         
         '... and check this line again - maybe, the next line was empty, too:
         iLoops = iLoops + 1
         If iLoops < iMaxLines Then
            iCounter = iCounter - 1
         End If
      End If
   Next

Ich habe das vor ca. acht oder neun Jahren geschrieben und würde heute auch den "inneren Teil" durch eine Schleife ersetzen, aber ich denke, so kannst Du noch besser das Prinzip erkennen.
Also: Genau 20 Zeilen, um (in diesem Fall) 150 Felder im Frontend aufzuräumen (wobei das bei 5000 Feldern immer noch diese 20 Zeilen wären).

HTH,
Bernhard

 

Impressum Atnotes.de  -  Powered by Syslords Solutions  -  Datenschutz