Lotus Notes / Domino Sonstiges > Help-Desk Applikation !!Help!!

Trouble Ticket System gesucht...

<< < (78/119) > >>

Thomas Schulte:

--- Zitat von: eknori am 16.02.05 - 20:42:55 ---[Was Thomas als "ASubject" 8) bezeichnet, sollte er am Besten mal selber erklären ;D

--- Ende Zitat ---
in der Kurzen oder in der Langen Form?

Erst mal in der kurzen Form, wenn jemand Interesse an den Technischen Details hat kann er sich ja melden.
Das Feld ASubjekt ist ein verstecktes Feld in einer Form, das als Berechnetes Feld Werte aus anderen Feldern dieser Form aufnehmen kann. Das Feld ist Mulitvalue und dient als eine Art Summary Feld.
Die Verwendung eines solchen Feldes in jeder Form hat den Vorteil, das man z.B. bei Ansichten keine Maskenabhängige Codierung verwenden muss, sondern einfach dieses Feld einbinden kann und sich damit eine Menge Pflegeaufwand spart.

In der Regel werden diese Felder in die Forms hardcoded reingeschrieben, das heist das jedesmal wenn der Inhalt geändert wird ein Programmierer da drüberschauen muss, was im Zusammenhang mit den UDF (UserDefinedField) Teilmasken dafür sorgt das jeder Release Wechsel erneuten Anpassungsaufwand zur Folge hat.

Nun wir haben das im !!!Help!!! jetzt so gelöst, das die Zusammensetzung des Feldes, die Anzahl der Zeilen und die maximale Länge der Zeilen bevor sie Abgeschnitten wird über eine Regel definiert werden kann. Aufgrund dieser Regel wird dann das Feld berechnet.

Das Teil kann mit Text, Zahl und Datumsfeldern umgehen. Mit Mehrfachwerten und Richtext denke ich auch, das habe ich aber noch nicht ausprobiert.

eknori (retired):
jetzt wird es lustig:

Jemand hatte danach gefragt, ob man nicht alle Kategorien einer View zusammenklappen kann; hab ich mir gedacht, geht doch einfach ... Im Prinzip ja ...

Also habe ich flugs in die Views folgenede Formel reingepappt

key:="ViewCollapseAll";
@If(@DbLookup( "" : "NoCache" ; "":"" ; "($LUConfig)" ; key ; 2 )="YES";
@Command([ViewCollapseAll]);
"")

Das Ganze sollte natürlich wieder aus einem ConfigDoc einstellbar sein.
Das funktioniert auch  ...

ABär:

WEchsele ich nun die Sprache, bekomme ich einen RSOD.

Der ganze Vorgang ist reproduzierbar:

Im ConfigDoc von YES auf NO wechseln
( alle weiteren Aktionen in der gleichen Sprache funktionieren )
Sprache wechseln und ...  RSOD

Nach den Notes Neustart kann ich mit den bestehenden Einstellungen wunder bar arbeiten. Und auch munter die Sprachen hin und her wechseln. Mache ich wieder eine Änderung am beteiligten Config Doc und wechsele dann die Sprache ...  RSOD.

Der Sprachwechsel findet in einem Gliederungseintrag mit folgender Formel statt

REM { find users language };
_defaultLang := _defaultLang := @UpperCase(@DbLookup( "" : "NoCache" ; "":"" ; "($LUConfig)" ; "LANGUAGE" ; 2 ));
_view:="($LULANG)";
_foundlanguages := @Unique(@DbColumn("Notes" : "NoCache"; "" : ""; _view; 1));
_userlanguage :=@If(@ClientType="Web";
@UpperCase(@LanguagePreference([Region]))[1];
@If(@Environment("HDLang")="";@UpperCase(@LanguagePreference([Content]));@Environment("HDLang")));
_language:=@If(@IsMember(_userlanguage;_foundlanguages);_userlanguage;_defaultlang);

REM { find label };
_key:="outDlgLang";
_label := @Implode(@DbLookup( "" : "NoCache" ; "":"" ; "($LULANGTYPE)" ;_language + "~outline";"typestring");";");
_val:=@Right(_LABEL; _key + "= ");
REM { find all possible languages };
_LANGUAGE:="**": @Unique(@DbColumn("Notes" : "NoCache"; "" : ""; _view; 1));
REM {select a new language or delete the entry from notes.ini if "**" is selected};
_NEWLANG:=@Prompt([OkCancelCombo];
@Word(@Word(_val;";";1);"~";1);
@Word(@Word(_val;";";1);"~";2);
@Environment("HDLang"); _LANGUAGE);
REM { Set the environment variable };
@If(_NEWLANG = "**";@Environment("HDLang"; "");@Environment("HDLang"; @UpperCase(_NEWLANG)));
@SetTargetFrame("_top");
@PostedCommand([OpenFrameset];"FS-MAIN")

Wo ist der Fehler ?  ;D

Sorry, wollte auch  mal so eine Frage stellen  ;D

Spaß beiseite; Möglicherweise gibt es jemanden hier, der das erklären kann : "Logisch, kann man doch nicht so machen; muss ja crashen", oder es handelt sich um einen BUG.

eknori (retired):
hier noch mal ein bisschen Nachschlag zur Sprachsteuerung

Ich habe mr die Formeln noch einmal angeschaut ( mit DP - Come hell or high water im Kopfhörer geht das alles besser  ;D )

Um bei einem nicht vorhandenen Eintrag im Sprachendokument eine Error Message auszugeben, hatten wir ja schon Code eingebaut.

Den habe ich ein wenig überarbeitet; herausgekommen ist eine "Funktion"
In den Masken lesen wir alle relevanten Strings in ein oder mehrere Felder ein ( hier MESSAGES )

In einer Aktion wirden dann am Anfang erst einmal ein paar Variablen vorbesetzt:

_SourceField:=MESSAGES;
_ErrMsgHeader:="Language settings";
_ErrMsgText:="ERROR: " ;
_ErrNotFound:= " not found";

Jedes Sprachelement ist nach dem Schema key=String aufgebaut.
Die folgende Formel weist jetzt der Variablen _ConstErr einen Wert mit dem Key "msgTicketError" zu.

key := "msgTicketError";
_ConstErr:=
@If(@Trim(@Middle(_SourceField; key + "=" ;";"))="";
@Return(@Prompt([Ok];_ErrMsgHeader;_ErrMsgText + key + _ErrNotFound ));
@Trim(@Middle(_SourceField; key + "=" ;";")));

Wird der Eintrag nicht gefunden, wird eine Fehlermeldung ausgegeben, die sich aus den Werten der vorausgegangenen Variablen/Konstantendeklaration ergibt.
Diese Werte könnte man nun ihrerseits wieder aus dem Sprachdoc holen, aber irgendwo muß schluss sein ...

eknori (retired):
und da es immer was zu optimieren gibt, habe ich das "=" im Code noch schnell durch _seperator ersetzt ( _seperator:="="; )

dann sieht die "Function" so aus:

key := "msgTicketAssigned";
_val:=
@If(@Trim(@Middle(_SourceField; key + _seperator ;";"))="";
@Return(@Prompt([Ok];_ErrMsgHeader;_ErrMsgText + key + _ErrNotFound ));
@Trim(@Middle(_SourceField; key + _seperator ;";")));

Ach ja, und wenn man jetzt noch in Formelsprache folgendes machen könnte:

@define(Macro$):=

[ @If(@Trim(@Middle(_SourceField; key + _seperator ;";"))="";
@Return(@Prompt([Ok];_ErrMsgHeader;_ErrMsgText + key + _ErrNotFound ));
@Trim(@Middle(_SourceField; key + _seperator ;";"))) ];

bekäme man richtig feinen Formelcode

key := "msgTicketAssigned";
_val:= Macro$;

aber leider geht das ja nicht




eknori (retired):
das würde dann aus

_SourceField:=MESSAGES;
_seperator:="=";
_ErrMsgHeader:="Language settings";
_ErrMsgText:="ERROR: " ;
_ErrNotFound:= " not found";

key := "msgTicketError";
_ConstErr:=
@If(@Trim(@Middle(_SourceField; key + _seperator ;";"))="";
@Return(@Prompt([Ok];_ErrMsgHeader;_ErrMsgText + key + _ErrNotFound ));
@Trim(@Middle(_SourceField; key + _seperator ;";")));
key := "msgTicketNotAvailable";
_ConstNotFoundInConfig:=
@If(@Trim(@Middle(_SourceField; key + _seperator ;";"))="";
@Return(@Prompt([Ok];_ErrMsgHeader;_ErrMsgText + key + _ErrNotFound ));
@Trim(@Middle(_SourceField; key + _seperator ;";")));
key := "msgTicketWarning";
_ConstWarning:=
@If(@Trim(@Middle(_SourceField; key + _seperator ;";"))="";
@Return(@Prompt([Ok];_ErrMsgHeader;_ErrMsgText + key + _ErrNotFound ));
@Trim(@Middle(_SourceField; key + _seperator ;";")));
key := "msgTicketUserNull";
_ConstUser:=
@If(@Trim(@Middle(_SourceField; key + _seperator ;";"))="";
@Return(@Prompt([Ok];_ErrMsgHeader;_ErrMsgText + key + _ErrNotFound ));
@Trim(@Middle(_SourceField; key + _seperator ;";")));
key := "msgTicketProbNull";
_ConstProblem:=
@If(@Trim(@Middle(_SourceField; key + _seperator ;";"))="";
@Return(@Prompt([Ok];_ErrMsgHeader;_ErrMsgText + key + _ErrNotFound ));
@Trim(@Middle(_SourceField; key + _seperator ;";")));
key := "msgTicketProdNull";
_ConstProdukt:=
@If(@Trim(@Middle(_SourceField; key + _seperator ;";"))="";
@Return(@Prompt([Ok];_ErrMsgHeader;_ErrMsgText + key + _ErrNotFound ));
@Trim(@Middle(_SourceField; key + _seperator ;";")));
key := "msgTicketParam";
_ConstParameter:=
@If(@Trim(@Middle(_SourceField; key + _seperator ;";"))="";
@Return(@Prompt([Ok];_ErrMsgHeader;_ErrMsgText + key + _ErrNotFound ));
@Trim(@Middle(_SourceField; key + _seperator ;";")));


dies hier machen:

_SourceField:=MESSAGES;
_seperator:="=";
_ErrMsgHeader:="Language settings";
_ErrMsgText:="ERROR: " ;
_ErrNotFound:= " not found";

@define(Macro$):=

[ @If(@Trim(@Middle(_SourceField; key + _seperator ;";"))="";
@Return(@Prompt([Ok];_ErrMsgHeader;_ErrMsgText + key + _ErrNotFound ));
@Trim(@Middle(_SourceField; key + _seperator ;";"))) ];


key := "msgTicketError";
_ConstErr:= Macro$;
key := "msgTicketNotAvailable";
_ConstNotFoundInConfig:=Macro$;
key := "msgTicketWarning";
_ConstWarning:=Macro$;
key := "msgTicketUserNull";
_ConstUser:=Macro$;
key := "msgTicketProbNull";
_ConstProblem:=Macro$;
key := "msgTicketProdNull";
_ConstProdukt:=Macro$;
key := "msgTicketParam";
_ConstParameter:=Macro$;

Navigation

[0] Themen-Index

[#] Nächste Seite

[*] Vorherige Sete

Zur normalen Ansicht wechseln