Das Notes Forum

Domino 9 und frühere Versionen => ND6: Entwicklung => Thema gestartet von: robertpp am 08.02.06 - 15:33:45

Titel: Wert | 1; Wert2 | 2 @Replace
Beitrag von: robertpp am 08.02.06 - 15:33:45
Hallo,

Wie kann ich aus einem Status-Feld aus dem Profiledoc das so aussieht:

Division approved | 0
IT approved | 1
Cerf Finished | 7
Cerf Denied | 8

in einer Ansicht wo in der Spalte der Status derzeit nur als Zahl angezeigt wird den Text anzeigen?

Ich hab es derzeit mit einer @If Abfrage gemacht:
@If(Status = "0"; "Division approved";Status = "1"; "IT approved";"Cerf Finished";Status = "8";"Cerf Denied";"New Cerf")

Das Problem ist wenn ich den Status im Profildoc ändere dann muss ich in der Spalte das auch immer ändern. Es sollte doch irgendwie mit:
 @Replace und @For(n := 1;
n <= @Elements(Status);
n := n + 1;....

gehen.

danke Robert
Titel: Re: Wert | 1; Wert2 | 2 @Replace
Beitrag von: ascabg am 08.02.06 - 15:40:49
Hi,

Wo kommen die Werte des Statusfeldes im Profile-Dokument denn her?

(Dialogliste, wie wird die Dialogliste mit den Daten gefuellt?)

Andreas
Titel: Re: Wert | 1; Wert2 | 2 @Replace
Beitrag von: umi am 08.02.06 - 15:50:05
1. Profile und Ansicht ist schon mal schlecht :-)

Als Lösung könntest Du z.B. beim Speichern des Dokuments beide Werte ablegen. In deiner Auswahl wird die Zahl gespeichert und in einem Text Feld der passende Text.
Nachteil dieser Lösung, sobald ein Wert der Liste geändert wird, müssen Alle Werte in den bereits gespeicherten Dokumenten korrigiert werden.

oder Du machst die Umrechnung statisch in deiner Ansichtenspalte. Nachteil sobald ein Wert geändert hat, muss die Ansicht angepasst werden.

Eine Volldynamische Lösung könnte evtl. mit der NotesViewColumn.Formula zu einem gewissen Grade sogar automatisiert werden. :-)
Titel: Re: Wert | 1; Wert2 | 2 @Replace
Beitrag von: robertpp am 08.02.06 - 16:20:08
@ascabg

Deine Frage verstehe ich nicht ganz!
Im Profile-doc wird das Status-Feld einfach per text gefüllt wie man es in meinem ersten Post sehen kann. Das Status-Feld ist ein Multivalue Feld mit Display seperate values with "New Line" und when enter a "New Line".

Und dann wird im normalen doc einfach der Wert aus dem Profiledoc geholt.

@umi

D.h so wie ich es hab ist es fast schon perfekt oder sagen wir es anderes geht es garnicht wirklich besser?
Das mit dem seperaten Speichern von Text und Zahl will ich vermeiden.
Und das Umrechnen in der Ansichtsspalte hab ich ja eh schon mit der @if.

Sonst noch eine Idee?

danke robert
Titel: Re: Wert | 1; Wert2 | 2 @Replace
Beitrag von: Tode am 08.02.06 - 16:47:20
die Aussage von UMI ist zu 100% korrekt.
Es gibt keine anderen Möglichkeiten als die aufgezählten:

1. den Wert vor dem "|" zusätzlich in einem weiteren Feld speichern und dieses anzeigen in der Ansicht

2. den Wert "statisch" in der Ansicht umsetzen (@GetProfileField etc. funktioniert nicht in Ansichten)

Leider gibt es hier KEINE schöne Lösung sondern nur Würgarounds.

Tode
Titel: Re: Wert | 1; Wert2 | 2 @Replace
Beitrag von: robertpp am 08.02.06 - 20:32:48
Danke für die Antworten dann werde ich meine Lösung lassen und in der Ansicht weiterhin die Lösung mit der @if Abfrage und statischer Zuordung der Zahlen zum Status machen.

danke robert
Titel: Re: Wert | 1; Wert2 | 2 @Replace
Beitrag von: flaite am 08.02.06 - 22:57:40
Ich würd einfach ein Ansicht auf Dokumente mit 2 Feldern machen.
Im ersten steht der Bezeichner. Im Zweiten die Nummer.
Division approved | 0
IT approved | 1
Cerf Finished | 7
Cerf Denied | 8
Titel: Re: Wert | 1; Wert2 | 2 @Replace
Beitrag von: ascabg am 09.02.06 - 08:43:35
Hi,

Ich habe den Sachverhalt so verstanden.

MaskeA => Profildokument => FeldA = Feld mit allen moeglichen Stati (Mehrfachwerte)
Angaben im FeldA => wie oben angegeben Wert | Alias

MaskeB => "normales" Dokument => Feld "Status", in dem einer der Werte aus "FeldA" enthalten ist (Dialogliste, Optionsfeld ?)

In einer Ansicht werden Dokumente, basierend auf MaskeB angezeigt.

In einer Spalte dieser Ansicht wird der Wert aus dem Feld Status angezeigt. Hierbei handelt es sich aber um den Aliasnamen.
Nun soll der in der Spalte angezeigt Wert nicht der Aliasname, sonder der eingentliche Text sein und dieses so flexibel, dass die Werte in der Ansicht sich auch sofort aendern, wenn sie sich im FeldA (Profildokument) aendern.

VIELLEICHT GIBT ES JA DOCH MOEGLICHKEITEN

Ich habe bei mir einen aehnlichen Fall und das Problem geloest.
(ohne weitere Felder), jedoch stehen die Werte NICHT in einem Profile

Andreas
Titel: Re: Wert | 1; Wert2 | 2 @Replace
Beitrag von: Untitled am 12.04.06 - 10:20:30
Ich würd einfach ein Ansicht auf Dokumente mit 2 Feldern machen.
Im ersten steht der Bezeichner. Im Zweiten die Nummer.

Und wie krieg ich, wenn ich aus einer Liste ein Element (also eigentlich nur einen Alias) auswähle, am Besten in das zweite Feld den Bezeichner (vor dem Alias) rein?  :o

Ich werkel jetzt da schon den ganzen Morgen an einer Formel, krieg das aber nicht hin  >:(

Grüsse
Moritz
Titel: Re: Wert | 1; Wert2 | 2 @Replace
Beitrag von: Glombi am 12.04.06 - 10:22:33
Im Querysave mit

doc.FeldXYZ = Source.FieldGetText( "NameSchlüsselwortfeld" )


Andreas
Titel: Re: Wert | 1; Wert2 | 2 @Replace
Beitrag von: Untitled am 12.04.06 - 10:28:41
Ich würde das lieber per Formel lösen, damit die Änderungen auch mit einem RefreshDocs funktionieren würde. Ist das zu kompliziert damit?
Titel: Re: Wert | 1; Wert2 | 2 @Replace
Beitrag von: Glombi am 12.04.06 - 10:31:08
Du kannst das natürlich auch ins Postrecalc schreiben....


und in Formelsprache sollte es mit @GetField("NameFeld") gehen
(sofern die Designer Hilfe korrekt ist und es das Pendant zu FieldGettext ist)
Titel: Re: Wert | 1; Wert2 | 2 @Replace
Beitrag von: Untitled am 12.04.06 - 10:38:43
Ach, sorry. Das Problem ist natürlich, in dem Feld steht ne ganze Liste:

Wert1 | 1
Wert2 | 2
Wert3 | 3

Ich weiss jetzt, ich brauch den text zu Alias "2". Mit @GetField erhalte ich ja nur das erste Element der Liste. Ich muss aber nun irgendwie direkt an "Wert2" kommen.

Sorry, hab nicht richtig mitgedacht.  ::)
Titel: Re: Wert | 1; Wert2 | 2 @Replace
Beitrag von: Glombi am 12.04.06 - 10:43:26
Zitat
Mit @GetField erhalte ich ja nur das erste Element der Liste. Ich muss aber nun irgendwie direkt an "Wert2" kommen.

Das stimmt nicht. Du bekommst alle gewählten Werte.
Titel: Re: Wert | 1; Wert2 | 2 @Replace
Beitrag von: Untitled am 12.04.06 - 10:49:10
Aus der Designer-Hilfe:

Zitat
If the field specified in fieldName is marked to Allow multiple values, this function returns the first value only.

(Bei @GetProfileField dasselbe, habs eben getestet)

Aber das spielt eigentlich keine Rolle. Ich kann die Liste ja mit einem @Implode wieder zusammenfügen und dann erhalte ich einen String.

Die Frage ist, wie bekomme ich aus "Addresses|1;E-Mail|2;Invoices|3" den String "E-Mail" heraus, wenn ich nur "2" als Alias habe.
Titel: Re: Wert | 1; Wert2 | 2 @Replace
Beitrag von: Glombi am 12.04.06 - 10:57:12
@getField funktioniert eh nicht, es werden die Aliaswerte geliefert und nicht die Schlüsselwörter. D.h. die Hilfe erzählt mal wieder Quatsch. Auch werden ALLE Aliaswerte geliefert und nicht nur der erste.

Generell zum Thema - ich mach es so:
Ein Feld mit den Mehrfachwerten "Schlüssel 1|1":"Schlüssel 2|2" ...

Das Feld dann als Auswahlformel im Schlüsselwortfeld eintragen. Dann kannst Du mit Script und einer kleinen Schleife die Bezeichner ermitteln.

Andreas
Titel: Re: Wert | 1; Wert2 | 2 @Replace
Beitrag von: diali am 12.04.06 - 10:58:06
"Addresses|1;E-Mail|2;Invoices|3"

- mit Explode wieder auseinander nehmen
- mit @Word den Teil nach dem | in eine Liste extrahieren
- Position ermitteln
- Wert mit dieser Position aus der Listeermitteln und
- mit Word den ersten Teil (vor |) abschneiden
Titel: Re: Wert | 1; Wert2 | 2 @Replace
Beitrag von: Untitled am 12.04.06 - 11:42:49
@GetProfileField gibt korrekt alle Elemente zurück, mit Alias und Text als Liste. Die @Prompt hatte lediglich den ersten Eintrag abgeschnitten. *schäm*  : :-X

@GetField habe ich jetzt nicht getestet.

Ich habe nun die Tipps von diali befolgt, um zum Ergebnis zu kommen. Hier präsentiere ich euch stolz meine Formel  ;D:

Code
REM "Diese Funktion gibt den Text vor einem Alias zurück";
REM "---------------------------------------------------";

REM "Nach welchem Alias soll gesucht werden?";
_alias := CategoriesNo;

REM "Die Liste der zu durchsuchenden Elemente";
_list := @GetProfileField("Profile";"txtKategorien");

_position := @Member(_alias;@Word(_list;"|";2));
@Word(@GetMembers(_list;_position);"|";1)

Vielen Dank euch beiden für die rasche und gute Unterstützung!!

Grüsse
Moritz