Domino 9 und frühere Versionen > ND6: Entwicklung

@DBLookup Frage bei Rückgabe mehrerer Dokumente

(1/2) > >>

Jenson:
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:
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

Jenson:
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);


--- Ende Code ---


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

TMC:

--- Zitat von: Jenson am 20.08.04 - 09:09:32 ---Den Scriptblock zu posten wird nicht viel bringen, da das Script mittlerweile mehrere DIN-A4 Seiten füllt.
--- Ende Zitat ---

 :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.

animate:
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);

--- Ende Code ---

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

Navigation

[0] Themen-Index

[#] Nächste Seite

Zur normalen Ansicht wechseln