Autor Thema: Per Formel in aktueller Ansicht gleiche Felder prüfen !!  (Gelesen 3984 mal)

Offline hero7475

  • Frischling
  • *
  • Beiträge: 29
  • Geschlecht: Männlich
  • Dieses Forum ist meine letzte Rettung !?!
Guten Abend allerseits :-)

Ich habe folgendes Problem :

Ich möchte, bevor ein (neues oder altes) Dok gespeichert wird prüfen, ob in der jeweiligen Ansicht bereits ein Dok gibt die denselben Wert im selbem Feld hat!!!
Habe damit leichte Probleme, da der alte Wert des Doks dabei nicht berücksicht werden darf!!
Mir LS hatte ich das Problem schon im Griff, dauernt je nach Dokumenten allerdings viel zu lange !!

Kann mir da mal jemand einen sinnvollen und vor allem sehr schnellen Weg weisen ?

Ich wäre euch sehr dankbar

Offline koehlerbv

  • Moderator
  • Gold Platin u.s.w. member:)
  • *****
  • Beiträge: 20.460
  • Geschlecht: Männlich
Re:Per Formel in aktueller Ansicht gleiche Felder prüfen !!
« Antwort #1 am: 02.12.03 - 21:31:27 »
Warum denn die vielen Ausrufezeichen ? Tut das denn wirklich nooot ?
Poste doch mal Deinen LS-Code, dann schauen wir mal, was da so lange dauert.

Bernhard

Offline hero7475

  • Frischling
  • *
  • Beiträge: 29
  • Geschlecht: Männlich
  • Dieses Forum ist meine letzte Rettung !?!
Re:Per Formel in aktueller Ansicht gleiche Felder prüfen !!
« Antwort #2 am: 02.12.03 - 21:33:46 »
Sorry für die vielen !!! !!

Hab ich mir so angewöhnt..

Das LS hab ich längst entsorgt, da ich mit
der Lösung sämtliche Leitungen flachgelegt hätte.


Offline TMC

  • Freund des Hauses!
  • Gold Platin u.s.w. member:)
  • *****
  • Beiträge: 3.660
  • Geschlecht: Männlich
  • meden agan
Re:Per Formel in aktueller Ansicht gleiche Felder prüfen !!
« Antwort #3 am: 02.12.03 - 21:50:34 »
Hi,

ich hatte das mal so gelöst:
_Qu := @DbColumn("":"NoCache"; @DbName; "(lookup_Qu)");

REM "Prüfen, ob Qu bereits existiert, wenn ja: 1 zurückgeben";
_Check := @IsMember( Titel ; _Qu);

@If(
   _Check = 1;
   @Failure("Existiert bereits!!!!!!!!");
   @Success
)


Ob das jetzt superperformant ist bezweifle ich, um wieviele Doks handelt es sich denn?

TMC

P.S. Die Fehlermeldung habe ich den Ausrufezeichen der Frage angepasst  ;D
Matthias

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


Offline koehlerbv

  • Moderator
  • Gold Platin u.s.w. member:)
  • *****
  • Beiträge: 20.460
  • Geschlecht: Männlich
Re:Per Formel in aktueller Ansicht gleiche Felder prüfen !!
« Antwort #4 am: 02.12.03 - 21:52:39 »
Hm, das mit den Ausrufezeichen solltest Du Dir fix wieder abgewöhnen. "!" heisst "brüllen" ...

Das Prüfen, ob ein Dokument an Hand eines bestimmten Feldes schon vorhanden ist, ist doch ganz simpel:
- Entsprechende Ansicht erstellen
- Mit LS NotesView.GetAllDocumentsByKey (key, true)
  oder
- mit @dbLookup
Anzahl der gefundenen Docs ermitteln. Wenn Doc ein neues Dokument ist, dann muss die Trefferzahl = 0 sein, sonst darf sie 1 sein - wenn die DocumentUniqueID unterschiedlich ist.

Gib' mal nähere Info, wo Dein Performance-Problem liegt. Dein "entsorgter LS-Code" könnte da hilfreich sein ...

Bye,
Bernhard

Offline koehlerbv

  • Moderator
  • Gold Platin u.s.w. member:)
  • *****
  • Beiträge: 20.460
  • Geschlecht: Männlich
Re:Per Formel in aktueller Ansicht gleiche Felder prüfen !!
« Antwort #5 am: 02.12.03 - 21:55:05 »
@TMC:
Du hast bei Deinem Verfahren zwei Probleme:
- die 64k-Grenze von @dbColumn
- nur neue Dokumente können so geprüft werden. Bestehende Docs können dann nicht mehr bearbeitet und gespeichert werden.

HTH,
Bernhard


!!!!!!!!!!!!  ;D

Offline TMC

  • Freund des Hauses!
  • Gold Platin u.s.w. member:)
  • *****
  • Beiträge: 3.660
  • Geschlecht: Männlich
  • meden agan
Re:Per Formel in aktueller Ansicht gleiche Felder prüfen !!
« Antwort #6 am: 02.12.03 - 22:00:16 »
@Bernhard: stimmt.
War damals auch mehr ein Schnellschuß und nur für neue Doks gedacht, der da passte (64k sollten nie erreicht werden - aber wer weiß das schon für die Zukunft....).

TMC
Matthias

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


Offline hero7475

  • Frischling
  • *
  • Beiträge: 29
  • Geschlecht: Männlich
  • Dieses Forum ist meine letzte Rettung !?!
Re:Per Formel in aktueller Ansicht gleiche Felder prüfen !!
« Antwort #7 am: 02.12.03 - 22:10:45 »
OK

Ich habe ein Maske erstellt, in der ich eine große Tabelle eingebaut hab.
Die Überschriften (horiz./vertikal) sind variable die aus einer Spalte entommen werden.
Die anderen Werte der Tabelle berechnen sich aus den eigentlichen Datensätzen verglichen mit den Überschriften.
d.h. : Für jedes Feld in der Tabelle habe ich ein "searchformula mit DocCollection" genutzt um je nach vert./horiz. Überschrift die Werte aus den Datensätzen zu zählen.

Ich würde gern genauers posten,
aber leider ist mein Script und meine gesamtes LoNo-Werk
auf einem anderen Rechner (auf Arbeit),
und ich komme von da aus nicht ins Netz!!!


Nicht sehr verständlich oder ?
Ich weiß nicht wie ich es so beschreiben soll

Offline koehlerbv

  • Moderator
  • Gold Platin u.s.w. member:)
  • *****
  • Beiträge: 20.460
  • Geschlecht: Männlich
Re:Per Formel in aktueller Ansicht gleiche Felder prüfen !!
« Antwort #8 am: 02.12.03 - 22:34:33 »
Nun sieht das Problem aber auf einmal ganz anders aus als im ersten Posting ;-(
NotesDatabase.Search ist - besonders multipel eingesetzt in einer Aktion - natürlich nicht besonders performant. Wenn denn WIRKLICH erforderlich, sollte dies durch ein FTSearch ersetzt werden.

Schreib' doch bitte mal Deine Frage verständlicher auf: Willst Du Dokumente auf Basis bereits bestehender Dokumente mit Werten füllen, oder wirklich "nur" prüfen, ob es denn solch ein Dokument bereits gibt ?

Saubere Fragen bewirken in diesem Forum mit sehr grosser Sicherheit auch saubere Antworten. Für Kaffeesatzleserei bleibt uns in unserer Freizeit (!) nicht genügend Raum.

Wenn wir denn genaues wissen, helfen wir gerne weiter hier AtNotes ;-)

Bernhard

Offline hero7475

  • Frischling
  • *
  • Beiträge: 29
  • Geschlecht: Männlich
  • Dieses Forum ist meine letzte Rettung !?!
Re:Per Formel in aktueller Ansicht gleiche Felder prüfen !!
« Antwort #9 am: 02.12.03 - 22:53:54 »
SORRY für meine doch sehr schwache Fragestellung.

Es ist eigentlich beides in einem.

Das Dok das erstellt wird berechnet diese ganze Tabelle.

Nun sollen ein paar Felder vom Nutzer eingegeben werden, die in einer bestimmten Ansicht nur einmal vorkommen dürfen.

Da es sich in der Ansicht um min. 2000 Datensätze handel soll,
bekomme ich große Probleme mit der Search Funktion.

Ich habe mit keywords(dblookup;dblookup) sämtliche Felder mit Formel ausrechnen lassen. (hatte das vorher auch mit Script)

Und möchte nun in der Ansicht prüfen, ob ein eingegebener Wert
schon mal vorkommt.
Mit dbcolumn und unsichtbaren Felder (die den vorherigen Wert speichern) ist das auch machbar, aber ich bekomme
nicht immer das richtige Ergebnis.
Liegt vielleicht daran, daß ich momentan 3 Felder habe die in der Eingabevalidierungsformel abgefragt werden.
Ich habe die selbe Formel in allen 3 Feldern

Merker := @if(WertvomFeld=gespeicherterWert;1;0); 'alter oder neuer Wert
 ( @if(@elements(@keywords(@dbcolumn(...);WertvomFeld))+Merker>0;@failure("Doppelter Eintrag");@success;



Ich werd mal versuchen ein bisschen was auf Diskette zu speichern,
um effectiver posten zu können

Offline koehlerbv

  • Moderator
  • Gold Platin u.s.w. member:)
  • *****
  • Beiträge: 20.460
  • Geschlecht: Männlich
Re:Per Formel in aktueller Ansicht gleiche Felder prüfen !!
« Antwort #10 am: 02.12.03 - 23:24:26 »
He, das kriegen wir zusammen schon hin !
Versuch' mal einfach, ohne irgendwelche Schnörkel Deine Randbedingungen aufzumalen, und dann schauen wir mal, wie wir das performant hinbekommen. Wichtig wäre mir hier vor allem - auch wenn ich Deine Randbedingungen noch nicht kenne - folgendes: Sind Deine zu überprüfenden Feldwerte - unabhängig vom Feld, in dem sie gespeichert werden - eineindeutig ? Will heissen: Kann in Feld 1 nix stehen, was auch in Feld 2 oder 3 stehen könnte ? Das würde die Sache vereinfachen.

Schau'n wir mal. Ich werde aber vermutlich erst morgen "auf nacht" wieder Zeit haben.

So long,
Bernhard

Offline hero7475

  • Frischling
  • *
  • Beiträge: 29
  • Geschlecht: Männlich
  • Dieses Forum ist meine letzte Rettung !?!
Re:Per Formel in aktueller Ansicht gleiche Felder prüfen !!
« Antwort #11 am: 03.12.03 - 06:45:57 »
Also,

In Feld1 und Feld2 soll ein string (text) stehen der nicht gleich sein darf. In Feld3 soll eine Zahl eingetragen werden.
z.B. Feld1 (Bankname /Abkürzung)
Feld2 (Bankname / Langbezeichnung)
Feld3 (Bankleitzahl)


Ich habe eine Ansicht für die horiz. Überschriften und eine für die Vert. aus denen jeweils eine Spalte für die Überschriften da ist. Ich nenne Sie einfach mal Nachname (horiz.) und Vorname (vertikal).

Aus den Datensätzen werden dann alle zusammengezählt die z.B. Horst (Vorname) Werner (Nachname) heißen und in das Feld Vorname1/Nachname1 eingetragen.


Mehr kommt heute Abend

Offline hero7475

  • Frischling
  • *
  • Beiträge: 29
  • Geschlecht: Männlich
  • Dieses Forum ist meine letzte Rettung !?!
Re:Per Formel in aktueller Ansicht gleiche Felder prüfen !!
« Antwort #12 am: 04.12.03 - 22:07:30 »
Guten Abend alle zusammen

Nach dem ich mein Problem noch mal durchdacht habe, bin ich der Lösung schon näher gekommen.

Habe vorerst nur ein Problem mit @keywords.
Der Befehl bringt mir Probleme wenn im Feld ein Sonderzeichen oder ein Leerzeichen benutzt wird.

Aber seht selbst, ich hab mal meine umständliche Maske in Text zusammengefasst (mit meinem alten,langsamen LS)

Offline koehlerbv

  • Moderator
  • Gold Platin u.s.w. member:)
  • *****
  • Beiträge: 20.460
  • Geschlecht: Männlich
Re:Per Formel in aktueller Ansicht gleiche Felder prüfen !!
« Antwort #13 am: 05.12.03 - 17:49:33 »
Hallo, hero,

das mit @Keywords ist aber auch eine ganz böse Falle ! Da hat Iris wirklich geschlampt - @Keywords funktionierte wohl das letzte Mal wie erwartet in R3 (lt. KnowledgeBase).

Folgender Workaround ist möglich:
Die Sonderzeichen - siehe DesignerHelp - müssen erstmal 'raus aus den zu vergleichenden Listen. Ich habe das hier mal beispielhaft gemacht für das Leerzeichen - Du musst für Deine Bedürfnisse sicherlich das @ReplaceSubstring noch erweitern - vor und nach @Keywords, aber das sollte ja einfach machbar sein durch den Aufbau entsprechender Austauschlisten:

f1 := @ReplaceSubstring (Feld1; " "; "~");
f2 := @ReplaceSubstring (Feld2; " "; "~");

result := @Keywords (f1; f2);

@ReplaceSubstring (result; "~"; " ")

Wenn also in Feld1 "A 1" : "B 1" : "C 1" steht und in
Feld2 "D 1" : "A 1" : "C 1",
dann bekommst Du am Ende der Formelei brav
"A 1" : "C 1" zurück.

Für den "Rest" Deiner Anfrage sehe ich keine Chance, dass das hier im Forum so einfach für lau beantwortet werden könnte. Der Ansatz ist offensichtlich an mehreren Stellen grundsätzlich falsch, so dass ein Lösungsvorschlag schon typische Consulting-Leistungen erfordern würde oder die Lieferung einer fertigen Lösung. Vielleicht würde es noch gehen, wenn Du das in kleine Einzelanfragen herabbrichst, die wir zwischen dem Brotverdienen "nebenbei" beantworten können.

Ich hoffe aber, dass Dir wenigstens die @Keywords-Sache weiterhilft.

Bernhard

Offline hero7475

  • Frischling
  • *
  • Beiträge: 29
  • Geschlecht: Männlich
  • Dieses Forum ist meine letzte Rettung !?!
Re:Per Formel in aktueller Ansicht gleiche Felder prüfen !!
« Antwort #14 am: 05.12.03 - 21:04:49 »
Hallo Bernhard

Besten Dank für den Tip.

Werde ich wohl noch nutzen

Habe die Maske jetzt völlig neu angelegt.

Ich hoffe damit kann ich einige Probleme umgehen.

Noch mal vielen Dank


Offline koehlerbv

  • Moderator
  • Gold Platin u.s.w. member:)
  • *****
  • Beiträge: 20.460
  • Geschlecht: Männlich
Re:Per Formel in aktueller Ansicht gleiche Felder prüfen !!
« Antwort #15 am: 06.12.03 - 14:34:28 »
Hallo, Held,
das war gern geschehen mit dem @Keywords-Workaround - genau dafür ist das Forum ja auch da ;-)
Nachdem ich da selbst was nachgestellt habe, hat mich eine Lösung natürlich auch selber sehr gereizt.
Nachtrag dazu: Der Kbase-Artikel hierzu hat die Nummer "1090571" ;-)

Was Deine allgemeinen - von mir als "forumsuntauglich" bezeichneten Probleme angeht, folgende "Allgemeinplätze":

- NotesDatabase.Search ist nicht besonders performant - vorsichtig ausgedrückt. Schau mal nach NotesView.GetAllDocumentsByKey - das könnte - wie gesagt, das überschreitet dann kostenlose Hilfe - für Dich sehr hilfreich sein.
- Du verwendest @dbLookup für die Belegung Deiner hidden fields. Sieht irgendwie tricky aus, scheint aber durch @dbColumn performanter ablösbar zu sein. Bei der von Dir avisierten Anzahl Dokumente wirst Du aber so oder so an die 64k-Grenze zu stossen.
- Unterscheide immer zwischen Editieren und Lesen bei der Verwendung von @dbColumn / @dbLookup. Beim Lesen ist der Performance-Einbruch völlig unnötig - greif' auf gespeicherte Werte zurück.
- Schau mal, ob Dir @PickList weiter helfen kann.

Und sei Dir sicher, dass wir alle mal so angefangen haben ;-)

Weiterhin: Der erneute Tipp - breche Deine Fragen in kleine Portionen für's Forum herunter - und schreib' trotzdem alle Rand- und Rahmenbedingungen auf. DFann wird Dir hier bestimmt schnell geholfen.

Ein schönes Wochenende wünscht
Bernhard (der hier am Alpenrand auf Schneeregen blickt - aber Wetter ist ja nicht alles ;-)

 

Impressum Atnotes.de  -  Powered by Syslords Solutions  -  Datenschutz