Das Notes Forum

Domino 9 und frühere Versionen => Entwicklung => Thema gestartet von: TMC am 16.11.03 - 18:40:16

Titel: @DBLookup und ComputeWithForm
Beitrag von: TMC am 16.11.03 - 18:40:16
Hi,

Zwickmühle:
Ein Server-Agent (also Backend) läuft nicht mit den ui-Funktionalitäten, um hier Dokumente zu aktualisieren gibt es nur ComputeWithForm.
ComputeWithForm greift allerdings nicht bei @DBColumn, @DBLookup etc.

Als sog. 'Lösung' wird im www immer wieder vorgeschlagen, die @DBLookups halt im Script zu integrieren.
Dies möchte ich hier aber nicht.

Jetzt habe ich mir überlegt, parallel einen Agenten laufen zu lassen, der @Command([ToolsRefreshSelectedDocs]) macht.

Problem:
Damit wird jedes Dokument für die Replizierung wieder aktiviert, obwohl aber oft keine Änderungen stattfinden (wenn DBLookup-Feld gleich bleibt).

Daher wollte ich jetzt im Maskenkopf ein Hidden Field einsetzen, dass die DBLookup-Felder ausliest. Dann im Maskenfuß im Feld "Replication" eine Formel a la
Code
_Checker := ReplicationCheck;
_AllFields := (... Liste von Feldern ...)
@If(_Checker != _AllFields;
   "Yes";
   "No"
)

Dann aber klappt es nur wenn der Agent @Command([ToolsRefreshSelectedDocs])  läuft, geht man manuell ins Dokument, wird immer "No" angezeigt.

Daher habe ich übers Postopen-Event zusätzlich schon getestet um die aktuellen Feldinhalte in ein weiteres Feld zu schreiben für Vergleich, ohne Erfolg.

Was will ich überhaupt:
 - Dokumente sollen regelmäßig aktualisiert werden aufgrund enthaltener @DBLookup-Felder
 - es soll nur repliziert werden wenn sich tatsächlich was geändert hat (getriggert über Feld "Replication" = "Yes" )

Ich bezweifle nun stark meinen Ansatz hier. Hat vielleicht jem. eine andere Idee?

TMC
Titel: Re:@DBLookup und ComputeWithForm
Beitrag von: eknori (retired) am 16.11.03 - 18:44:49
<Dialekt lang = "Kannaksch">
ey, alder, habbisch krass code, guckst du !
</Dialekt>

Function DBLookup (strClass As String, strNoCache As String, strServer As String, strDatabase As String, strView As String, strKey As String, strReturn As String) As Variant
   
   quotes = Chr(34)
   strFormula = "@DbLookup(" & quotes & strClass & quotes & ":" & quotes & strNoCache & quotes & ";" & quotes & strServer & quotes & ":" & quotes & strDatabase & quotes & ";" & quotes & strView & quotes & ";" & quotes & strKey & quotes & ";" & strReturn & ")"
   
   DbLookup = Evaluate( strFormula )
   
End Function

damit kannst du ein DBLookup in LS machen

Titel: Re:@DBLookup und ComputeWithForm
Beitrag von: TMC am 16.11.03 - 18:52:31
<Dialekt lang = "Kannaksch">
hey Du vollkrasser Coder!!! thanks !!!
</Dialekt>
(auch wenn sich bedanken uncool ist :-))

Klappt Deine Funktion auch bei sowas?
Code
_5 := @Left(No; 5);
_4 := @Left(No; 4);
_3 := @Left(No; 3);
_2 := @Left(No; 2);
_1 := @Left(No; 1);


_TempLookup5 := @DbLookup( "Notes" : "NoCache" ; ""  : ""  ; "(LookupZIP)"  ; _5  ; 2 );
_TempLookup4 := @DbLookup( "Notes" : "NoCache" ; ""  : ""  ; "(LookupZIP)"  ; _4  ; 2 );
_TempLookup3 := @DbLookup( "Notes" : "NoCache" ; ""  : ""  ; "(LookupZIP)"  ; _3  ; 2 );
_TempLookup2 := @DbLookup( "Notes" : "NoCache" ; ""  : ""  ; "(LookupZIP)"  ; _2  ; 2 );
_TempLookup1 := @DbLookup( "Notes" : "NoCache" ; ""  : ""  ; "(LookupZIP)"  ; _1  ; 2 );

@If(
   !@IsError(_TempLookup5);
   _TempLookup5;
   !@IsError(_TempLookup4);
   _TempLookup4;
   !@IsError(_TempLookup3);
   _TempLookup3;
   !@IsError(_TempLookup2);
   _TempLookup2;
   !@IsError(_TempLookup1);
   _TempLookup1;
   ""
)

Der function nach sollte es.

Wäre die beste Alternative.

Danke,
TMC
Titel: Re:@DBLookup und ComputeWithForm
Beitrag von: eknori (retired) am 16.11.03 - 18:55:59
check mal aus, man

<ernsthaft>
sollte funktionieren
</ernsthaft>
Titel: Re:@DBLookup und ComputeWithForm
Beitrag von: TMC am 16.11.03 - 18:58:12
 8)
Titel: Re:@DBLookup und ComputeWithForm
Beitrag von: eknori (retired) am 16.11.03 - 19:03:49
heißt das  8) jetzt "cool" oder "krras cool" ??
Titel: Re:@DBLookup und ComputeWithForm
Beitrag von: TMC am 16.11.03 - 19:22:17
krrass cool
Umsetzung soll aber der Prakkdikand machen

@MailSend("Chef von TMC";"";"";"hilf mir mal voll krass und besorg uns eine  prakkdikandin die DB-Loogaps draufff had";"";"";[IncludeDocLink])

 8)
TMC
Titel: Re:@DBLookup und ComputeWithForm
Beitrag von: eknori (retired) am 16.11.03 - 19:29:54
Zitat
krrass cool
Umsetzung soll aber der Prakkdikand machen

@MailSend("Chef von TMC";"";"";"hilf mir mal voll krass und besorg uns eine  prakkdikandin die DB-Loogaps draufff had";"";"";[IncludeDocLink])

das war jetzt kein well-formed posting

besser

<Dialekt lang= 'kannaksch'>krrass cool</dialekt>
Umsetzung soll aber der <Dialekt lang= 'whatever'>Prakkdikand</Dialekt > machen
<Dialekt lang= 'code' option = 'multilang'>
@MailSend("Chef von TMC";"";"";"hilf mir mal voll krass und besorg uns eine  prakkdikandin die DB-Loogaps draufff had";"";"";[IncludeDocLink])
</dialekt>

 ;D
Titel: Re:@DBLookup und ComputeWithForm
Beitrag von: Semeaphoros am 16.11.03 - 19:41:43
Ohne Ulrichs Korrekturen gibt's nen Syntax Error   ;D
Titel: Re:@DBLookup und ComputeWithForm
Beitrag von: eknori (retired) am 16.11.03 - 19:57:25
aber <dialekt class="default">krass</dialekt>voll

man kann auch CLS ( cascading language sheets ) verwenden
Titel: Re:@DBLookup und ComputeWithForm
Beitrag von: koehlerbv am 16.11.03 - 21:22:08
@TMC: Ich werde irgendwie das Gefühl nicht los, dass es Dir vorrangig um eine Praktikantin geht ;-)

Kannst Du das Ganze nicht gleich über LS lösen ? @dbLookup könnte ja auch dazu führen, daß Du ein Array ("eine Liste") zurück geliefert bekommst. Kannst Du ausschliessen, dass
_TempLookup3 := @DbLookup( "Notes" : "NoCache" ; ""  : ""  ; "(LookupZIP)"  ; _3  ; 2 );
nur ein Ergebnis zurückliefert ?
"No" sei 83313 (Siegsdorf)
In der Ansicht finden sich
83334 (Inzell) und
83324 (Ruhpolding)
_5 liefert nun nix zurück, _4 auch nicht, aber _3 gleich zwei Ergebnisse (nur so als Beispiel, ich kenne ja Deine genauen Rahmenbedingungen nicht).

Eine vernünftiges NotesView.GetAllDocumentByKey mit anschliessendem parsing der Collection bietet Dir doch erheblich mehr Möglichkeiten - inclusive Deiner eigenen Entscheidung, ob Du nun speicherst (Replikation !) oder eben nicht.

HTH - und sag' mal an,
Bernhard

PS: Sollte (!) mein Vorschlag für Dich zielführender sein, würde ich Dich bitten, die Praktikantin dann asap von Nieder ... nach Ober ... zu versetzen ;-)
Titel: Re:@DBLookup und ComputeWithForm
Beitrag von: TMC am 17.11.03 - 22:44:04
@Bernhard:

Zur DBLookup-Rückgabe:
In der Ansicht finden sich nur folgende Werte:
833...
834..
835..
(..)
84..

Folgendes gibt es nicht:
833..
8331..
Wenn im Dokument "Inzell" also der DBLookup läuft, wird "833" zurückgegeben, genau so wie in Siegsdorf oder Ruhpolding.

Aber ich werde mir das nochmal genau überlegen, wie ich das ganze realisiere.

Meine Praktikantin kriegste daher vorerst noch nicht  ;D
Aber danach versetzen wir sie zu Euch nach Oberbayern  ;)

TMC