Frage zu Formula im Listenfeld

  • Hallo,



    ich bräuchte Starthilfe für Lotus Formula in einem Listenfeld.


    Aus einer DB-Ansicht möchte ich nur die Einträge ermitteln, deren Feld "Name" mit einem vorbestimmten Text beginnen.
    Es sollen aber nur die Einträge gezeigt werden, wo der Benutzername in einer weiteren Ansicht einer weiteren DB in einer Liste (ähnlich wie bei den Gruppen) vorkommt
    Die Schwierigkeit ist hier noch, dass ein Mapping stattfinden muss, da die Namen der beiden DB-Ansichten nicht übereinstimmen.


    Wie kann am Besten die Einträge finden, die mit einem bestimmten Text beginnen? Mit @DbLookup kann ich nicht nach "beginnt mit" suchen, oder?
    Und wie kann ich dann wieder bestimmte Einträge aus der Trefferliste entfernen?


    Lieben Dank,


    Peter

  • Ich bekomme es leider nicht hin.
    Mit

    Code
    _rules_key := "Sender";@DbLookup("":"NoCache"; _server:_rules_db; _rules_view; _rules_key; 3; [FailSilent]:[PartialMatch])


    bekomme ich ein leeres Ergebnis, mit

    Code
    _rules_key := "";


    erhalte ich nur 17 von 72 möglichen Ergebnissen.

  • Ist Sender das Feld in dem der Name drinsteht ? Dann darfst du keine Anführungszeichen verwenden.
    So suchst du nach allen Einträgen in der Ansicht, die mit dem Text Sender beginnen.


    Ansonsten müsstest du mal genau beschreiben wie die Ansichten aufgebaut sind und wie die Relationen aussehen

  • Ja, das ist die erste sortierbare Spalte.
    Wenn @DbLookup nicht die geeignete Funktion ist, um meine gewünschte Ergebnisliste zu erhalten, welche Alternative habe ich?
    Die Anzahl der zu durchsuchenden Einträge bleibt definitiv überschaubar (vielleicht mal etwas über hundert maximal).
    Wie sähe denn der Code aus, wenn ich jeden einzelnen Spalten-Eintrag der Ansicht in einer Schleife durchgehe, prüfe, ob er dem Kriterium (beginnt mit "Sender") entspricht und einer Ergebnisliste hinzufüge?

  • Mit

    Code
    @DbColumn("":"NoCache";_server:_rules_db;_rules_view;3)


    bekomme ich jetzt alle Einträge, allerdings noch ungefiltert.


    Kann ich jetzt noch irgendwie mit @While oder @Do durch das Ergebnis loopen und ev. mit @Subset die einzelnen Einträge prüfen?

  • Wichtig ist, dass die Spalte mit dem Suchbegriff, tatsächlich die erste sortierte Spalte ist.


    Da sie laut deinem Bild alternativ neu sortiert werden kann, gilt die Besonderheit aus der Hilfe:


    Zitat

    If the column can be re-sorted, results will depend upon the current sort order.


    Optimal wäre natürlich eine Ansicht, die für die Suche optimiert ist, d.h. nur die Informationen enthält, die du für die weitere Verarbeitung brauchst. In deinem Fall also Spalte 3, Sortiert (auf- oder absteigend).

  • Da sich die letzten Postings überschnitten haben poste ich ein Beispiel für die Verarbeitung der von dbColumn gelieferten Werteliste mal extra. Wenn die Anzahl der zu verarbeitenden Werte überschaubar ist, ist die Performance kein Problem.


  • Ich habe es gestern Abend noch selber hinbekommen. Auch wenn die Lösung bestimmt etwas umständlicher ist:
    (Ich wusste nicht, dass ich auf die einzelnen Elemente Array-artig zugreifen kann)


  • Ja, seit es Schleifen gibt, kann man sowas so machen... Nur so (aus nostalgischen Gründen) nebenbei, wie man das "früher" mit der Formelsprache gemacht hat:


    Alle Elemente, die mit _suchkey beginnen:

    Code
    _suchKey := "irgendwas";_rules_liste := @DbColumn("":"NoCache";_server:_rules_db;_rules_view;3);@If( @IsError( _rules_liste ) ; @Return( "" ) ; "" );@Trim( @Transform( _rules_liste; "_var" ; @If( @Begins( _var ; _suchKey ); _var; "" ) ) )


    oder "ganz früher" (vor @Transform, also vor Version 6):

    Code
    _suchKey := "irgendwas";
    _rules_liste := @DbColumn("":"NoCache";_server:_rules_db;_rules_view;3);
    @If( @IsError( _rules_liste ) ; @Return( "" ) ; "" );
    _suchKey + @Trim( @Right( "#" + _rules_liste; "#" + _suchKey ) )
  • Muss leider nochmal nerven ;)


    Warum gibt mir ein

    Code
    @DbLookup("":"NoCache"; _server:_rules_db; _job_view; ""; 6; [FailSilent]:[PartialMatch])


    genau meine erwarteten 23 Einträge zurück, aber mit der Option [ReturnDocumentUniqueID] nur noch genau 1?

    Code
    @DbLookup("":"NoCache"; _server:_rules_db; _job_view; ""; 6; [FailSilent]:[PartialMatch]:[ReturnDocumentUniqueID])


    Mit der ID möchte ich im Anschluss über @GetDocField ein paar Inhalte von Feldern ziehen.

  • Keine Ahnung, WARUM (steht auch nicht in der Hilfe), aber kann ich bestätigen... Der Parameter bewirkt, dass nur noch ein Wert zurückgegeben wird...
    Workaround: Mach Dir eine Spalte in Deine Lookup- Ansicht mit @Text( @DocumentUniqueID ) und liefere die zurück, das geht...


    EDIT: und hier ist das als Bug beschrieben, der Workaround ist der von mir genannte...


    EDIT: Google Suchstring: @dblookup returndocumentuniqueid, 2. Ergebnis

  • Das "Problem" ist wohl seit Version 6 bekannt. Warum wird nicht a) das Problem behoben oder b) die Dokumentation geändert.
    Ist doch echt ärgerlich, wenn man sich durch die Notes-Hilfe arbeitet und nicht auf das vertrauen kann, was dort steht.
    Dann also die Ansicht anpassen und ein eigenes Feld mit der UNID erstellen. :cursing:

  • Offensichtlich ärgern sich alle nur still, und niemand macht PMRs zu diesem SPR auf... Damit ist die Gewichtung bei IBM sehr niedrig -> Wird nicht gefixt. Ausserdem würde man mit einem Fix ja die Programme kaputt machen, die sich in der Zwischenzeit darauf verlassen, dass da immer nur eine UNID zurückkommt...