Autor Thema: @DBLookup Frage bei Rückgabe mehrerer Dokumente  (Gelesen 1943 mal)

Offline Jenson

  • Senior Mitglied
  • ****
  • Beiträge: 291
  • Geschlecht: Männlich
  • Geht nicht gibts nicht!
    • is Industrial Services AG
@DBLookup Frage bei Rückgabe mehrerer Dokumente
« am: 20.08.04 - 08:59:21 »
Guten Morgen,

wenn eine DBLookup-Anweisung in einem Script mehrere Ergebnisse liefert, dann wird teilweise der Anweisungsblock um die DBLookup-Anweisung so ofrt ausgeführt wie es ergebnisdokumente gibt.

Kann man das irgendwie umgehen?

Kann man die Ergebnisse nicht irgendwie in einer Schleife verarbeiten? Wenn ich das versuche, dann wird die ganze Schleife so oft wiederholt wie es Ergebnisdokumente gibt.


Jenson

Glombi

  • Gast
Re:@DBLookup Frage bei Rückgabe mehrerer Dokumente
« Antwort #1 am: 20.08.04 - 09:00:58 »
Poste doch mal den entsprechenden Code.

@DbLookup in Script, also mit Evaluate. Du kannst dann bspw. mit Forall darüber iterieren.

Was willst Du eigentlich erreichen?

Andreas

Offline Jenson

  • Senior Mitglied
  • ****
  • Beiträge: 291
  • Geschlecht: Männlich
  • Geht nicht gibts nicht!
    • is Industrial Services AG
Re:@DBLookup Frage bei Rückgabe mehrerer Dokumente
« Antwort #2 am: 20.08.04 - 09:09:32 »
Ich habe eine Schleife die Dokumente für 31 Tage ermitelt. Wenn immer nur ein Dokument für einen Tag da ist, dann funktioniert mein restlicher Code einwandfrei.

Wenn nun für einen Tag mehrere Dokumente existieren, dann wird der Scriptblock in dem ich die Dokumente verarbeitet leider so oft wiederholt wie es Ergebnisdokumente gibt. Ich will aber eigentlich alle Dokumente aneinanderreihen.

Den Scriptblock zu posten wird nicht viel bringen, da das Script mittlerweile mehrere DIN-A4 Seiten füllt. Aber ich Poste mal den Teil, um den es gerade geht:

Code

_WorkingDaysNo := 31;
n := 1;
_HoursADay := "";
@While(n <= _WorkingDaysNo;
_Line := "";
         _TextDate := @Text(n) + "." + @Text(MONTH) + "." + @Text(YEAR);
         _RealDate := @Date (YEAR; MONTH; n);      
         _KeyTimeEntry    := _KeyTimeSheet + "-" + _TextDate;
         _DayDBResult     :=  @DBLookup("":"NoCache";"":"xxxxxxxx.nsf";"CMSCollector_TimeEntry";_KeyTimeEntry;2);
         @If((@Weekday(_RealDate) = 1) | (@Weekday(_RealDate) = 7); _Hours := "&nbsp;";  _Hours := "0");
         _Category := "";
         @if(@Elements(_DayDBResult) > 0; 
            @Do(
                 DayCount := 1;
                 @While(DayCount <= @Elements(_DayDBResult);
                      @if(@Elements(_DayDBResult) > 1;
                           @Do(
                                _Hours := "0";
                                _HoursInt := "";

                               n2 := 1;
                               _FlatList := @Implode(_DayDBResult; "#");
                               @While(n2 <= @Elements(_DayDBResult);
                                       _WorkList := @Explode(_FlatList; "#");
                                       _Line := "";
                                       _HoursInt :=_HoursInt + @Text(@Word(_WorkList[n2]; "|"; 4));
                                       _Order := @Text(@Word(_WorkList[n2]; "|"; 5));
                                       _Mem := @Member(_Order; _OrderNoList);


                                      @if(_Mem = 0; _Mem := 1;"");
                                      n3 := 1;
                                      @While(n3 < _Mem;
                                            _Line := _Line + "0|";
                                      n3 := n3 + 1);
                                      _Line := _Line + _HoursInt + "|";
                                      n3 := _mem+1;
                                      @While(n3 <= _OrderNoCount;
                                            _Line := _Line + "0|";
                                      n3 := n3 + 1);
                                      _MEMBER := _MEMBER + "<BR>" +_Line + "--" + _TextDate;




                               n2 := n2 + 1);
                               _Hours := @Text(_HoursInt)
                            ); @Do(
                               _Hours := @Text(@Word(_DayDBResult; "|"; 4));
                               _Order := @Text(@Word(_DayDBResult; "|"; 5));
                               _Mem := @Member(_Order; _OrderNoList);
@if(_Mem = 0; _Mem := 1;"");
n3 := 1;
@While(n3 < _Mem;
      _Line := _Line + "0|";
n3 := n3 + 1);
_Line := _Line + _Hours + "|";
n3 := _mem+1;
@While(n3 <= _OrderNoCount;
      _Line := _Line + "0|";
n3 := n3 + 1);
_MEMBER := _MEMBER + "<BR>" + @Text(_Line) + "--" + _TextDate
                            ));
                       _Category := @Word(_DayDBResult; "|"; 1);
                       _StartTime := @Word(_DayDBResult; "|"; 2);
                       _EndTime:= @Word(_DayDBResult; "|"; 3);
                  DayCount := DayCount + 1)
            ); 
            "");
           
           _OrderNoList := @Explode(_OrderNo; "|");
           _OrderNoList := @Sort(@Unique(_OrderNoList));
           _Categorys     := _Categorys + _Category + "|"; 
           _HoursADay   := _HoursADay + _Hours + "|";

n := n + 1);

_CatArray := _Categorys;
_HoursArray := _HoursADay;

FIELD _DEBUG := @text(_MEMBER);



Ich bekomme nun folgende Ausgabe für das Feld _DEBUG:

 
 
 

8|0|0|0|0|--12.8.2004
0|0|0|9|0|--13.8.2004
0|0|0|0|12.5|--16.8.2004
0|0|0|10|0|--17.8.2004
1.5|0|0|0|0|--18.8.2004
0|1.53|0|0|0|--18.8.2004
0|0|1.533|0|0|--18.8.2004
1.5|0|0|0|0|--18.8.2004
0|1.53|0|0|0|--18.8.2004
0|0|1.533|0|0|--18.8.2004
1.5|0|0|0|0|--18.8.2004
0|1.53|0|0|0|--18.8.2004
0|0|1.533|0|0|--18.8.2004
0|0|0|3|0|--19.8.2004
 

Die letzten 9 Zeilen entsprechen eigentlich nur 3 Dokumenten. Eines mit 1.5 Stunden, und zwei mit 3 Stunden. Das führt aufgrund des Wiederholen des Blockes um DBLookup zu dem fehlerhaften werten von 1.5, 1,53, 1,533




Hoffe es ist dennoch verständlich.


Jenson
« Letzte Änderung: 20.08.04 - 09:10:31 von Jenson »

Offline TMC

  • Freund des Hauses!
  • Gold Platin u.s.w. member:)
  • *****
  • Beiträge: 3.660
  • Geschlecht: Männlich
  • meden agan
Re:@DBLookup Frage bei Rückgabe mehrerer Dokumente
« Antwort #3 am: 20.08.04 - 18:23:27 »
Den Scriptblock zu posten wird nicht viel bringen, da das Script mittlerweile mehrere DIN-A4 Seiten füllt.

 :o  :o

Ohne mir das jetzt im Detail anzusehen und auch ohne zu wissen was Du hier machst, aber mehrere A4-Seiten Formelsprache:
Da stellt sich für mich die Frage, warum man das nicht mit LotusScript abbildet. Das LS dann sauber aufgeteilt und man hat Übersicht. Und man hat einen Debugger, ein Errorhandling etc. etc.
Matthias

A good programmer is someone who looks both ways before crossing a one-way street.


Offline animate

  • Freund des Hauses!
  • Gold Platin u.s.w. member:)
  • *****
  • Beiträge: 1.540
  • Uh, I'm just gonna go find a cash machine.
    • LA2
Re:@DBLookup Frage bei Rückgabe mehrerer Dokumente
« Antwort #4 am: 20.08.04 - 18:44:45 »
hier hast du doch eine Schleife, die so oft durchlaufen wird, wie es Ergebnisse gibt.
Oder seh ich das falsch.

Code
@While(n2 <= @Elements(_DayDBResult);
                                      _WorkList := @Explode(_FlatList; "#");
                                      _Line := "";
                                      _HoursInt :=_HoursInt + @Text(@Word(_WorkList[n2]; "|"; 4));
                                      _Order := @Text(@Word(_WorkList[n2]; "|"; 5));
                                      _Mem := @Member(_Order; _OrderNoList);


                                      @if(_Mem = 0; _Mem := 1;"");
                                      n3 := 1;
                                      @While(n3 < _Mem;
                                            _Line := _Line + "0|";
                                      n3 := n3 + 1);
                                      _Line := _Line + _HoursInt + "|";
                                      n3 := _mem+1;
                                      @While(n3 <= _OrderNoCount;
                                            _Line := _Line + "0|";
                                      n3 := n3 + 1);
                                      _MEMBER := _MEMBER + "<BR>" +_Line + "--" + _TextDate;




                              n2 := n2 + 1);

btw: bei der Code-Kommentierung gilt nicht der Slogan "weniger ist mehr" ;-)
Thomas

Fortunately, I'm adhering to a pretty strict, uh, drug, uh, regimen to keep my mind, you know, uh, limber.

Offline animate

  • Freund des Hauses!
  • Gold Platin u.s.w. member:)
  • *****
  • Beiträge: 1.540
  • Uh, I'm just gonna go find a cash machine.
    • LA2
Re:@DBLookup Frage bei Rückgabe mehrerer Dokumente
« Antwort #5 am: 20.08.04 - 18:49:34 »
und hier ist noch eine

Code
@While(DayCount <= @Elements(_DayDBResult);
                      @if(@Elements(_DayDBResult) > 1;

.....

_MEMBER := _MEMBER + "<BR>" + @Text(_Line) + "--" + _TextDate
                            ));
                      _Category := @Word(_DayDBResult; "|"; 1);
                      _StartTime := @Word(_DayDBResult; "|"; 2);
                      _EndTime:= @Word(_DayDBResult; "|"; 3);
                  DayCount := DayCount + 1)


Vermutlich liegts an einer der beiden, dass da was öfter auftaucht, als du möchtest...
Thomas

Fortunately, I'm adhering to a pretty strict, uh, drug, uh, regimen to keep my mind, you know, uh, limber.

Offline Jenson

  • Senior Mitglied
  • ****
  • Beiträge: 291
  • Geschlecht: Männlich
  • Geht nicht gibts nicht!
    • is Industrial Services AG
Re:@DBLookup Frage bei Rückgabe mehrerer Dokumente
« Antwort #6 am: 21.08.04 - 10:39:37 »
Ich darf hier innerhalb einer CMS Datenbank Programmieren. Das ist eine Content Management Datenbank für Webseiten. Leider kann man hier nur @Formeln verwenden, sonst wäre ich schon längst auf LotusScript umgestiegen.

Jenson

 

Impressum Atnotes.de  -  Powered by Syslords Solutions  -  Datenschutz