AtNotes Übersicht Willkommen Gast. Bitte einloggen oder registrieren.
22.01.22 - 18:45:39
Übersicht Hilfe Regeln Glossar Suche Einloggen Registrieren
News:
Schnellsuche:
+  Das Notes Forum
|-+  Lotus Notes / Domino Sonstiges
| |-+  Projekt Bereich
| | |-+  Help-Desk Applikation !!Help!! (Moderatoren: eknori, Thomas Schulte)
| | | |-+  Help Application demo at Lotusphere
« vorheriges nächstes »
Seiten: 1 2 3 [4] 5 6 ... 9 Nach unten Drucken
Autor Thema: Help Application demo at Lotusphere  (Gelesen 149161 mal)
eknori
@Notes Preisträger
Moderator
Gold Platin u.s.w. member:)
*****
Offline Offline

Geschlecht: Männlich
Beiträge: 11580


« Antworten #60 am: 30.12.05 - 10:02:22 »

supporter und user sind zwei unterschiedliche Personen.





Gespeichert
flaite
Gold Platin u.s.w. member:)
*****
Offline Offline

Beiträge: 2966


WWW
« Antworten #61 am: 30.12.05 - 12:00:58 »

Hi,

beim Junit Testen ist mir folgendes aufgefallen:
Wenn man der Funktion .GETALLTICKETSBYSUPPORTER(suporter) einen Supporter übergibt, den es nicht gibt, dann wird in TICKETCOLLECTION.TICKET[] kein leeres Array zurückgeschickt, sondern ein Array mit einem Element, das leer ist. Meiner Ansicht nach liegt das an der Serverseite. Guck mir das noch mal an.

Ansonsten funktioniert der Business Layer für diese Funktion. Sieht gut aus.
Ein very-Alpha-prototype-Swing Client könnte heute abend oder morgen früh fertig sein.


Gruß Axel
« Letzte Änderung: 30.12.05 - 12:08:33 von kennwort » Gespeichert

Ich stimm nicht mit allen überein, aber mit vielen und sowieso unterhaltsam -> https://www.youtube.com/channel/UCr9qCdqXLm2SU0BIs6d_68Q

---

Aquí no se respeta ni la ley de la selva.
(Hier respektiert man nicht einmal das Gesetz des Dschungels)

Nicanor Parra, San Fabian, Región del Bio Bio, República de Chile
eknori
@Notes Preisträger
Moderator
Gold Platin u.s.w. member:)
*****
Offline Offline

Geschlecht: Männlich
Beiträge: 11580


« Antworten #62 am: 30.12.05 - 12:09:16 »

Liegt wohl hier dran

If Trim(strSupporter) = "" Then
         Set GetAllTicketsBySupporter = New TicketCollection
         GetAllTicketsBySupporter.TicketCount = 0
         GetAllTicketsBySupporter.ErrorCode = GET_TICKET_ERR_MANDANTORY
         Exit Function ' nothing else to do, get outa here !
Else   


Da wird die TicketCollection initialisiert und somit auch das Tickets().

Ich denke, man muss Tickets() lediglich auf NOTHING setzen ...
Probiere ich gleich zuhause aus ( in 2 Stunden ist Feierabend  Grin )

Sorry, falsche Stelle im Code
« Letzte Änderung: 30.12.05 - 12:18:34 von eknori » Gespeichert
flaite
Gold Platin u.s.w. member:)
*****
Offline Offline

Beiträge: 2966


WWW
« Antworten #63 am: 30.12.05 - 12:23:54 »

Noch ein bischen genörgel bzgl. der Testdaten  Grin
Die TicketNumber der Tickets eines Users mit sehr vielen Tickets ist für die einzelnen Dokumente nicht eindeutig.
Und da ich in dem Clientcode vorsorglich ein bischen Intelligenz eingebaut habe, hat mich das jetzt erstmal ein wenig verwirrt.
Er schreibt die Tickets in eine Java-Map (wie Liste in LotusScript) mit der TicketNumber als Key. Wenn er den Key schon in der Map findet, wird das alte Ticket auf der Client Seite überschrieben und kein neues erzeugt. Das passiert relativ häufig innerhalb einer TicketCollection was in der realen Welt nicht so sein sollte, da die TicketNumber vermutlich eindeutig ist.

Code:
Ticket ticketBO = null;
// check ob in der Map ein Ticket mit dieser TICKETNUMBER schon da ist. Wenn ja überschreiben, sonst neu erzeugen.
if ((ticketBO = mTickets.get(ticketWs.getTICKETNUMBER())) != null) {
System.out.println("old.ticket"); // ja ich bau da gleich log4j ein :-)
ticketBO.setStatus(ticketWs.getSTATUS());
ticketBO.setUser(ticketWs.getUSER());
ticketBO.setProblem(ticketWs.getPROBLEM());
} else {
ticketBO = Ticket.getInstance(ticketWs.getTICKETNUMBER(),
ticketWs.getSTATUS(), ticketWs.getUSER(), ticketWs
.getPROBLEM());
mTickets.put(ticketBO.getTicketNumber(), ticketBO);
}
Gespeichert

Ich stimm nicht mit allen überein, aber mit vielen und sowieso unterhaltsam -> https://www.youtube.com/channel/UCr9qCdqXLm2SU0BIs6d_68Q

---

Aquí no se respeta ni la ley de la selva.
(Hier respektiert man nicht einmal das Gesetz des Dschungels)

Nicanor Parra, San Fabian, Región del Bio Bio, República de Chile
eknori
@Notes Preisträger
Moderator
Gold Platin u.s.w. member:)
*****
Offline Offline

Geschlecht: Männlich
Beiträge: 11580


« Antworten #64 am: 30.12.05 - 12:27:12 »

Zitat
Die TicketNumber der Tickets eines Users mit sehr vielen Tickets ist für die einzelnen Dokumente nicht eindeutig.

Wenn du das auf die 2.700 Tickets beziehst, hast du Recht. Die habe ich gestern flugs duch Kopieren erzeugt; und da bleibt natürlich die ursprüngliche Nummer bestehen  Grin
Gespeichert
eknori
@Notes Preisträger
Moderator
Gold Platin u.s.w. member:)
*****
Offline Offline

Geschlecht: Männlich
Beiträge: 11580


« Antworten #65 am: 30.12.05 - 12:42:20 »

Noch mal kurz zum Umfang:

Als Services hatte ich mir die Folgenden vorgestellt

- CreateTicket
- GetAllNewTickets
- GetAllTicketsBy Supporter
- GetTicketDetails
- GetTicketToDos ( oder dies schon mit im GetTicketDetails mit behandeln )
- GetToDoDetails
- AssignTicket ( das würde auch das reassign mit einschließen )
- CloseTicket

Damit müßte man doch schon ein bisschen was zeigen können.

auf ein CreateToDo und alle damit verbundenen Funktionen würde ich gerne verzichten. Lieber ein paar wenige Funktionen, die auch funktionieren, als eine riesige Menge an stuff, der nur halbherzig funktioniert.

Gespeichert
flaite
Gold Platin u.s.w. member:)
*****
Offline Offline

Beiträge: 2966


WWW
« Antworten #66 am: 30.12.05 - 15:30:38 »

Was ich ein bischen vermisse sind update Funktionen. updateTicket. GetTicketTodos gehört für mich zu GetTicketDetails.
Was mich noch ein bischen gewundert hat, war dass Status als String zurückgegeben wird aber ein Integer oder Short ist. Zumindest bräuchte ich da die Mappings dieser Zahlen zu den Namen der Stati.
Ein Punkt ist natürlich security. Vielleicht muß das für die demo nicht fertig sein. Ich weiss momentan nicht wie Lotus sich das denkt. Es gibt im Redbook Apdev 7 aber auch ein Kapitel, das dies beschreibt. Vielleicht geht ssl mit Client Auth.
Eine andere Möglichkeit ist:
Eine javabasierte pki - Infrastruktur aufbauen (nicht so schwierig). 
Die clients verschlüsseln das mit ihrem privaten Schlüssel und das dann mit dem öffentlichen Schlüssel des Servers. Der Server entschlüsselt den (kurzen) Usernamen mit erst seinem privaten Schlüssel und dann mit dem öffentlichen Schlüssel des Users. Natürlich muß für jeden User, der den Webservice nutzt ein pki-Schlüsselpaar generiert werden und der öffentliche Schlüssel des Users im Server gehalten werden. Halte das aber für machbar. Vielleicht gibts auch weniger bastelintensive Lösungen.

Es gibt auf globalen Webservices Specification Level ziemlich fortgeschrittene Initiativen, um Security (Authentification, Autorisierung, digitale Signatur, ACL) für Webservices verfügbar zu machen. Vielleicht können wir dafür etwas in zukünftigen Domino Versionen erwarten.
Das Apdev 7 Redbook macht folgenden Hinweis:
Zitat
At this time, there are no broadly-adopted specifications for Web services security. As a result
developers can either build up services that do not use these capabilities or can develop
ad-hoc solutions that may lead to interoperability problems.
Dies wäre so was wie ich oben gesagt habe. Das ist sicher machbar, aber vielleicht nicht interoperabel mit nicht-Java Clients und ausserdem bringt es Performanz-, Programmierungs- und Administrations-Overhead mit sich.
« Letzte Änderung: 30.12.05 - 16:06:20 von kennwort » Gespeichert

Ich stimm nicht mit allen überein, aber mit vielen und sowieso unterhaltsam -> https://www.youtube.com/channel/UCr9qCdqXLm2SU0BIs6d_68Q

---

Aquí no se respeta ni la ley de la selva.
(Hier respektiert man nicht einmal das Gesetz des Dschungels)

Nicanor Parra, San Fabian, Región del Bio Bio, República de Chile
eknori
@Notes Preisträger
Moderator
Gold Platin u.s.w. member:)
*****
Offline Offline

Geschlecht: Männlich
Beiträge: 11580


« Antworten #67 am: 30.12.05 - 16:24:33 »

Zitat
GetTicketTodos gehört für mich zu GetTicketDetails.

gut, das sehe ich auch so und werde das entsprechend einbauen.

Zitat
Zumindest bräuchte ich da die Mappings dieser Zahlen zu den Namen der Stati.

Sollst du bekommen; oder soll ich dann gleich im Klartext ausgeben ?

Zitat
Ein Punkt ist natürlich security. Vielleicht muß das für die demo nicht fertig sein.

Richtig; denke da können wir dann weitermachen, wenn die Demo steht.
Gespeichert
flaite
Gold Platin u.s.w. member:)
*****
Offline Offline

Beiträge: 2966


WWW
« Antworten #68 am: 30.12.05 - 16:43:38 »

Zitat
Zumindest bräuchte ich da die Mappings dieser Zahlen zu den Namen der Stati.

Sollst du bekommen; oder soll ich dann gleich im Klartext ausgeben ?
Klartext ist besser, weil so garantiert ist, dass auf Seiten der Datenbank und im Webservice die gleichen Bezeichner verwendet werden. Ist doch so, oder?
Falsch. Am besten beides. Es muß sichergestellt sein, dass auch bei fremdländischen Versionen der Bezeichner runtergegeben wird. Die Nummer braucht der Consumer für die Sortierung der Stati.
Die Nummer aber besser als Integer.
« Letzte Änderung: 30.12.05 - 16:46:19 von kennwort » Gespeichert

Ich stimm nicht mit allen überein, aber mit vielen und sowieso unterhaltsam -> https://www.youtube.com/channel/UCr9qCdqXLm2SU0BIs6d_68Q

---

Aquí no se respeta ni la ley de la selva.
(Hier respektiert man nicht einmal das Gesetz des Dschungels)

Nicanor Parra, San Fabian, Región del Bio Bio, República de Chile
Thomas Schulte
@Notes Preisträger
Moderator
Gold Platin u.s.w. member:)
*****
Offline Offline

Geschlecht: Männlich
Beiträge: 4388


Ich glaub mich tritt ein Pferd


« Antworten #69 am: 30.12.05 - 16:47:10 »

Nein nicht ganz, Axel. Das Prinzip von Help ist das es mehrsprachig ist. Das bedeutet für den Status eben auch, das er nur in verschlüsselter Form vorliegt und zur Laufzeit umgesetzt wird.

Das sollte man hier auch nicht aus den Augen verlieren. Ich denke auch bei den Webservices nicht. Vielleicht müssen wir tatsächlich (irgendwann, nicht gleich) einen Layer mitgeben, der in der definierten Sprache die jeweiligen Bezeichnungen für die Übergebenen Felder (so denn welche vorhanden sind) mitgibt.
Gespeichert

Thomas Schulte

Collaborative Project Portfolio and Project Management Software

"Aber wo wir jetzt einmal soweit gekommen sind, möchte ich noch nicht aufgeben. Versteh mich recht, aufgeben liegt mir irgendwie nicht."

J.R.R.Tolkien Herr der Ringe, Der Schicksalsberg

OpenNTF Project: !!HELP!! !!SYSTEM!!  !!DRIVER!!

Skype: thomasschulte-kulmbach
eknori
@Notes Preisträger
Moderator
Gold Platin u.s.w. member:)
*****
Offline Offline

Geschlecht: Männlich
Beiträge: 11580


« Antworten #70 am: 30.12.05 - 16:55:18 »

So, hier mal das Grundgerüst:

%REM
#####################################################
 INCLUDES
#####################################################
%END REM   
%INCLUDE "lsxsd.lss"

%REM
#####################################################
 CONSTANTS
#####################################################
%END REM   
Private Const CREATE_TICKET_FORM = "BugReport"
Private Const CREATE_TICKET_INITIAL_STATUS = "0"
Private Const CREATE_TICKET_VIA_WEBSERVICE = 1

Private Const CREATE_TICKET_ERR_NOERROR = 0
Private Const CREATE_TICKET_ERR_MISC_ERROR = 1
Private Const CREATE_TICKET_ERR_MANDANTORY = 2

Private Const ASSIGN_TICKET_ERR_NOERROR = 0
Private Const ASSIGN_TICKET_ERR_MISC_ERROR = 1
Private Const ASSIGN_TICKET_ERR_MANDANTORY = 2

Private Const CLOSE_TICKET_ERR_NOERROR = 0
Private Const CLOSE_TICKET_ERR_MISC_ERROR = 1
Private Const CLOSE_TICKET_ERR_MANDANTORY = 2

Private Const MISC_ERROR = 1
Private Const NOERROR = 0
Private Const MANDANTORY = 2

Const DEFAULT_RETURN_VALUE ="-"

%REM
#####################################################
 VARIABLES
#####################################################
%END REM   
Private s As NotesSession
Private db As NotesDatabase
Private doc As NotesDocument
Private success As Variant
Private SearchFormula As String
Private strPersonName As String
Private nn As NotesName
Private dc As NotesDocumentCollection
Private count As Integer
Private i As Integer
Private TicketValues As Ticket

Class TicketCollection
   Public Tickets() As Ticket
   Public TicketCount As Integer
   Public ErrorCode As Integer
End Class

Class Ticket
   Public User As String
   Public TicketNumber As String
   Public Problem As String
   Public Status As String
End Class

Class TicketDetails
   Public User As String
   Public TicketNumber As String
   Public Problem As String
   Public Status As String
   '... eine Ahnung was sonst noch
   Public AssociatedTodo As ToDoCollection
End Class

Class ToDoCollection
   Public ToDos() As ToDo
   Public ToDoCount As Integer
End Class

Class ToDo
   Public ToDoNumber As String
   Public Problem As String
   Public Status As String
End Class

%REM
#####################################################
 WEBSERVICES 0.01  (c) 2005,2006, Ulrich Krause, Thomas Schulte, Axel Janssen
 
----------------------------------------------------------------------------------------------------------
# Public functions and subs:
----------------------------------------------------------------------------------------------------------
 Public Sub New
 Public Function GetNewTickets ( ) As TicketCollection
 Public Function GetTicketDetails ( TicketNumber as String  ) As TicketDetails
 Public Function GetAllTicketsBySupporter ( strSupporter As String ) As TicketCollection
 Public Function CreateTicket ( strUser As String, strProblem As String ) As Integer
 Public Function AssignTicket (strTicket As String, strAssignTo As String) As Integer
 Public Function CloseTicket ( strTicket As String ) As Integer

----------------------------------------------------------------------------------------------------------
# Private functions and subs:
----------------------------------------------------------------------------------------------------------
 Private Function CommonNameString (strName As String) As String
 Private Function getItemValue ( strItem As String ) As String

#####################################################
%END REM      
Class wsTicket
   
%REM
#####################################################
 Public Sub New
#####################################################
%END REM      
   Public Sub New
      ' initialize some stuff
      Set s = New NotesSession()
      Set db = s.currentDatabase
   End Sub
   
%REM
#####################################################
 Public Function GetNewTickets ( ) As TicketCollection
#####################################################
%END REM      
   Public Function GetNewTickets ( ) As TicketCollection
      
      On Error Goto ERRHANDLE   
      
      SearchFormula =_
      |@UpperCase(Form) ="BUGREPORT" & Status ="0"|
      
EXITPOINT:
      Exit Function
ERRHANDLE:
      xProc = Getthreadinfo(LSI_THREAD_PROC)
      xError = xProc  & ": " &Trim$(Str$(Err)) & " on line " & Cstr(Erl) & ": " & Error$
      If UseOpenLog Then
         Call LogError
      Elseif LogScriptErrors Then
         Call ThrowException ( xProc, xError  )
      End If
      Print xError   'In all cases
      If ResumeMethodNext Then
         Resume Next   
      Else
         Resume EXITPOINT
      End If         
   End Function
   
%REM
#####################################################
 Public Function GetTicketDetails ( TicketNumber as String  ) As TicketDetails
#####################################################
%END REM      
   Public Function GetTicketDetails ( TicketNumber as String  ) As TicketDetails
      
      On Error Goto ERRHANDLE   
      
EXITPOINT:
      Exit Function
ERRHANDLE:
      xProc = Getthreadinfo(LSI_THREAD_PROC)
      xError = xProc  & ": " &Trim$(Str$(Err)) & " on line " & Cstr(Erl) & ": " & Error$
      If UseOpenLog Then
         Call LogError
      Elseif LogScriptErrors Then
         Call ThrowException ( xProc, xError  )
      End If
      Print xError   'In all cases
      If ResumeMethodNext Then
         Resume Next   
      Else
         Resume EXITPOINT
      End If            
   End Function
   
   
%REM
#####################################################
 Public Function GetAllTicketsBySupporter ( strSupporter As String ) As TicketCollection
#####################################################
%END REM      
   Public Function GetAllTicketsBySupporter ( strSupporter As String ) As TicketCollection
      
      On Error Goto ERRHANDLE      
      
      If Trim(strSupporter) = "" Then
         Set GetAllTicketsBySupporter = New TicketCollection
         GetAllTicketsBySupporter.TicketCount = 0
         GetAllTicketsBySupporter.ErrorCode = MANDANTORY
         Exit Function ' nothing else to do, get outa here !
      Else      
         
         SearchFormula =_
         |@UpperCase(Form) ="BUGREPORT" & @UpperCase(@Name([CN];supporter)) ="|_
         & Ucase(CommonNameString (strSupporter )) & |"|
         
         Dim dateTime As New NotesDateTime(_
         Cstr(Datenumber(2000, 5, 1)))
         Dim dc As NotesDocumentCollection
         Set dc = db.Search( SearchFormula, dateTime,0)
         
         count = dc.count
         If count = 0 Then Goto ERRHANDLE
         Set GetAllTicketsBySupporter = New TicketCollection
         GetAllTicketsBySupporter.TicketCount = count
         GetAllTicketsBySupporter.ErrorCode = NOERROR
         
         If (count = 0) Then
            Redim GetAllTicketsBySupporter.Tickets(count)
         Else
            Redim GetAllTicketsBySupporter.Tickets(count - 1)
         End If
         
         i = 0
         Set doc = dc.GetFirstDocument
         Do Until (doc Is Nothing)
            
            Set TicketValues = New Ticket
            TicketValues.User = CommonNameString(getItemValue ("user"))
            TicketValues.TicketNumber = getItemValue ("ReqNumber")
            TicketValues.Problem = getItemValue ("problem")
            TicketValues.Status = getItemValue ("status")
            
            Set GetAllTicketsBySupporter.Tickets(i) = TicketValues
            i = i +1
            Set doc = dc.GetNextDocument(doc)
            
         Loop
         
%REM            
         For i = 1 To dc.Count
            Set doc = dc.GetNthDocument ( i )
            
            Set TicketValues = New Ticket
            TicketValues.User = CommonNameString(getItemValue ("user"))
            TicketValues.TicketNumber = getItemValue ("ReqNumber")
            TicketValues.Problem = getItemValue ("problem")
            TicketValues.Status = getItemValue ("status")
            
            Set GetAllTicketsBySupporter.Tickets ( i  -1 ) = TicketValues
         Next
%END REM      
         
      End If    
      
EXITPOINT:
      Exit Function
ERRHANDLE:
      xProc = Getthreadinfo(LSI_THREAD_PROC)
      xError = xProc  & ": " &Trim$(Str$(Err)) & " on line " & Cstr(Erl) & ": " & Error$
      If UseOpenLog Then
         Call LogError
      Elseif LogScriptErrors Then
         Call ThrowException ( xProc, xError  )
      End If
      Print xError   'In all cases
      If ResumeMethodNext Then
         Resume Next   
      Else
         Set GetAllTicketsBySupporter = New TicketCollection
         GetAllTicketsBySupporter.TicketCount = count
         GetAllTicketsBySupporter.ErrorCode = MISC_ERROR
         Resume EXITPOINT
      End If      
      
   End Function
   
%REM
#####################################################
 Public Function CreateTicket ( strUser As String, strProblem As String ) As Integer
#####################################################
%END REM   
   Public Function CreateTicket ( strUser As String, strProblem As String ) As Integer
      
      CreateTicket = CREATE_TICKET_ERR_NOERROR
      
      
      On Error Goto ERRHANDLE
      If Trim(strUser) = "" Or Trim(strProblem) = "" Then
         CreateTicket = CREATE_TICKET_ERR_MANDANTORY ' mandantory fields
         Exit Function ' nothing else to do, get outa here !
      Else
         Dim doc As NotesDocument
         Dim dateTime As New NotesDateTime( "" )
         Call dateTime.SetNow
         
         Set doc = db.CreateDocument
         doc.Form = CREATE_TICKET_FORM
         doc.User = strUser      
         doc.Problem = strProblem
         doc.Status = CREATE_TICKET_INITIAL_STATUS ' new Ticket, unassigned
         doc.Webservice = CREATE_TICKET_VIA_WEBSERVICE
         doc.DateCreated = Cstr(dateTime.DateOnly)
         doc.TimeCreated = Cstr(dateTime.TimeOnly)
         success = doc.ComputeWithForm( False, False )
         Call doc.Save (True,True)
      End If
      
EXITPOINT:
      Exit Function
ERRHANDLE:
      xProc = Getthreadinfo(LSI_THREAD_PROC)
      xError = xProc  & ": " &Trim$(Str$(Err)) & " on line " & Cstr(Erl) & ": " & Error$
      If UseOpenLog Then
         Call LogError
      Elseif LogScriptErrors Then
         Call ThrowException ( xProc, xError  )
      End If
      Print xError   'In all cases
      If ResumeMethodNext Then
         Resume Next   
      Else
         CreateTicket = CREATE_TICKET_ERR_MISC_ERROR
         Resume EXITPOINT
      End If   
   End Function
   
   
%REM
#####################################################
 Public Function AssignTicket (strTicket As String, strAssignTo As String) As Integer
#####################################################
%END REM   
   Public Function AssignTicket (strTicket As String, strAssignTo As String) As Integer
      
      On Error Goto ERRHANDLE      
      AssignTicket = ASSIGN_TICKET_ERR_NOERROR
      
      If Trim(strTicket) = "" Or Trim(strAssignTo) = "" Then
         AssignTicket = ASSIGN_TICKET_ERR_MANDANTORY  'mandantory fields
         Exit Function ' nothing else to do, get outa here !
      Else      
      ' Your Code goes here   
      End If
      
EXITPOINT:
      Exit Function
ERRHANDLE:
      xProc = Getthreadinfo(LSI_THREAD_PROC)
      xError = xProc  & ": " &Trim$(Str$(Err)) & " on line " & Cstr(Erl) & ": " & Error$
      If UseOpenLog Then
         Call LogError
      Elseif LogScriptErrors Then
         Call ThrowException ( xProc, xError  )
      End If
      Print xError   'In all cases
      If ResumeMethodNext Then
         Resume Next   
      Else
         AssignTicket = ASSIGN_TICKET_ERR_MISC_ERROR
         Resume EXITPOINT
      End If
   End Function
   
%REM
#####################################################
 Public Function CloseTicket ( strTicket As String ) As Integer
#####################################################
%END REM   
   Public Function CloseTicket ( strTicket As String ) As Integer
      
      On Error Goto ERRHANDLE      
      CloseTicket = CLOSE_TICKET_ERR_NOERROR
      
      If Trim(strTicket) = "" Then
         CloseTicket = CLOSE_TICKET_ERR_MANDANTORY 'mandantory fields
         Exit Function ' nothing else to do, get outa here !
      Else      
      ' Your Code goes here   
      End If    
      
EXITPOINT:
      Exit Function
ERRHANDLE:
      xProc = Getthreadinfo(LSI_THREAD_PROC)
      xError = xProc  & ": " &Trim$(Str$(Err)) & " on line " & Cstr(Erl) & ": " & Error$
      If UseOpenLog Then
         Call LogError
      Elseif LogScriptErrors Then
         Call ThrowException ( xProc, xError  )
      End If
      Print xError   'In all cases
      If ResumeMethodNext Then
         Resume Next   
      Else
         CloseTicket = CLOSE_TICKET_ERR_MISC_ERROR
         Resume EXITPOINT   
      End If
   End Function
   
%REM
#####################################################
 Private Function CommonNameString (strName As String) As String
#####################################################
%END REM   
   Private Function CommonNameString (strName As String) As String
      Set nn = New NotesName( strName )
      strPersonName = nn.Common
      CommonNameString = strPersonName
   End Function
   
%REM
#####################################################
 Private Function getItemValue ( strItem As String ) As String
#####################################################
%END REM      
   Private Function getItemValue ( strItem As String ) As String
      If doc.HasItem(strItem) Then
         getItemValue = doc.GetItemValue( strItem )(0)
      Else
         getItemValue = DEFAULT_RETURN_VALUE
      End If
   End Function
   
End Class
« Letzte Änderung: 30.12.05 - 17:02:33 von eknori » Gespeichert
eknori
@Notes Preisträger
Moderator
Gold Platin u.s.w. member:)
*****
Offline Offline

Geschlecht: Männlich
Beiträge: 11580


« Antworten #71 am: 30.12.05 - 17:18:50 »

Axel:

Wenn ein Supporter angegeben wird, der keine Tickets hat ( also nicht in der DB existiert ) springe ich aus der function mit exit function raus.

entsprechend wir das hier als response geliefert; kann man damit was anfangen, sprich im Frontend entsprechend behandeln  ??

- <soapenv:Envelope xmlns:soapenv="http://schemas.xmlsoap.org/soap/envelope/" xmlns:soapenc="http://schemas.xmlsoap.org/soap/encoding/" xmlns:xsd="http://www.w3.org/2001/XMLSchema" xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance">
- <soapenv:Body>
  <ns1:GETALLTICKETSBYSUPPORTERResponse xmlns:ns1="urn:DefaultNamespace" soapenv:encodingStyle="http://schemas.xmlsoap.org/soap/encoding/" />
  </soapenv:Body>
  </soapenv:Envelope>
Gespeichert
eknori
@Notes Preisträger
Moderator
Gold Platin u.s.w. member:)
*****
Offline Offline

Geschlecht: Männlich
Beiträge: 11580


« Antworten #72 am: 30.12.05 - 17:59:16 »

Habe das Gerüst noch einmal geändert:

Es gibt jetzt eine neue Public Function GetTicketsByStatus ( status As String ) As TicketCollection
Das bietet ein wenig mehr Flexibilität.

Dadurch reduziert sich der Code zur Ermittlung der neuen Tickets auf

%REM
#####################################################
 Public Function GetNewTickets ( ) As TicketCollection
#####################################################
%END REM      
   Public Function GetNewTickets ( ) As TicketCollection
      
      Set GetNewTickets = GetTicketsByStatus ("0")
      
   End Function


In der gleichen weise lassen sich dann leicht Functions für Closed Tickets etc bauen.

Auch bisher noch nicht verwendete Stati lassen sich clientseitig über die neue Funktion bedienen; daher public und nicht private...

%REM
#####################################################
 INCLUDES
#####################################################
%END REM   
%INCLUDE "lsxsd.lss"

%REM
#####################################################
 CONSTANTS
#####################################################
%END REM   
Private Const CREATE_TICKET_FORM = "BugReport"
Private Const CREATE_TICKET_INITIAL_STATUS = "0"
Private Const CREATE_TICKET_VIA_WEBSERVICE = 1

Private Const CREATE_TICKET_ERR_NOERROR = 0
Private Const CREATE_TICKET_ERR_MISC_ERROR = 1
Private Const CREATE_TICKET_ERR_MANDANTORY = 2

Private Const ASSIGN_TICKET_ERR_NOERROR = 0
Private Const ASSIGN_TICKET_ERR_MISC_ERROR = 1
Private Const ASSIGN_TICKET_ERR_MANDANTORY = 2

Private Const CLOSE_TICKET_ERR_NOERROR = 0
Private Const CLOSE_TICKET_ERR_MISC_ERROR = 1
Private Const CLOSE_TICKET_ERR_MANDANTORY = 2

Private Const MISC_ERROR = 1
Private Const NOERROR = 0
Private Const MANDANTORY = 2

Const DEFAULT_RETURN_VALUE ="-"

%REM
#####################################################
 VARIABLES
#####################################################
%END REM   
Private s As NotesSession
Private db As NotesDatabase
Private doc As NotesDocument
Private success As Variant
Private SearchFormula As String
Private strPersonName As String
Private nn As NotesName
Private dc As NotesDocumentCollection
Private count As Integer
Private i As Integer
Private TicketValues As Ticket

Class TicketCollection
   Public Tickets() As Ticket
   Public TicketCount As Integer
   Public ErrorCode As Integer
End Class

Class Ticket
   Public User As String
   Public TicketNumber As String
   Public Problem As String
   Public Status As String
End Class

Class TicketDetails
   Public User As String
   Public TicketNumber As String
   Public Problem As String
   Public Status As String
   '... eine Ahnung was sonst noch
   Public AssociatedTodo As ToDoCollection
End Class

Class ToDoCollection
   Public ToDos() As ToDo
   Public ToDoCount As Integer
End Class

Class ToDo
   Public ToDoNumber As String
   Public Problem As String
   Public Status As String
End Class

%REM
#####################################################
 WEBSERVICES 0.01  (c) 2005,2006, Ulrich Krause, Thomas Schulte, Axel Janssen
 
----------------------------------------------------------------------------------------------------------
# Public functions and subs:
----------------------------------------------------------------------------------------------------------
 Public Sub New
 Public Function GetNewTickets ( ) As TicketCollection
 Public Function GetTicketDetails ( TicketNumber as String ) As TicketDetails
 Public Function GetAllTicketsBySupporter ( strSupporter As String ) As TicketCollection
 Public Function CreateTicket ( strUser As String, strProblem As String ) As Integer
 Public Function AssignTicket (strTicket As String, strAssignTo As String) As Integer
 Public Function CloseTicket ( strTicket As String ) As Integer

----------------------------------------------------------------------------------------------------------
# Private functions and subs:
----------------------------------------------------------------------------------------------------------
 Private Function CommonNameString (strName As String) As String
 Private Function getItemValue ( strItem As String ) As String
 Private Function GetTickets ( status As String ) As TicketCollection

#####################################################
%END REM      
Class wsTicket
   
%REM
#####################################################
 Public Sub New
#####################################################
%END REM      
   Public Sub New
      ' initialize some stuff
      Set s = New NotesSession()
      Set db = s.currentDatabase
   End Sub
   
%REM
#####################################################
 Public Function GetNewTickets ( ) As TicketCollection
#####################################################
%END REM      
   Public Function GetNewTickets ( ) As TicketCollection
      
      Set GetNewTickets = GetTicketsByStatus ("0")
      
   End Function
   
%REM
#####################################################
 Public Function GetClosedTickets ( ) As TicketCollection
#####################################################
%END REM      
   Public Function GetClosedTickets ( ) As TicketCollection
      
      Set GetClosedTickets = GetTicketsByStatus ("99")
      
   End Function   
   
%REM
#####################################################
 Public Function GetOpenTickets ( ) As TicketCollection
#####################################################
%END REM      
   Public Function GetOpenTickets ( ) As TicketCollection
      
      Set GetOpenTickets = GetTicketsByStatus ("1")
      
   End Function   
   
%REM
#####################################################
 Public Function GetResubmittedTickets ( ) As TicketCollection
#####################################################
%END REM      
   Public Function GetResubmittedTickets ( ) As TicketCollection
      
      Set GetResubmittedTickets = GetTicketsByStatus ("98")
      
   End Function      
   
   
%REM
#####################################################
 Public Function GetTicketDetails ( TicketNumber as String  ) As TicketDetails
#####################################################
%END REM      
   Public Function GetTicketDetails ( TicketNumber As String ) As TicketDetails
      
      On Error Goto ERRHANDLE   
      
EXITPOINT:
      Exit Function
ERRHANDLE:
      xProc = Getthreadinfo(LSI_THREAD_PROC)
      xError = xProc  & ": " &Trim$(Str$(Err)) & " on line " & Cstr(Erl) & ": " & Error$
      If UseOpenLog Then
         Call LogError
      Elseif LogScriptErrors Then
         Call ThrowException ( xProc, xError  )
      End If
      Print xError   'In all cases
      If ResumeMethodNext Then
         Resume Next   
      Else
         Resume EXITPOINT
      End If            
   End Function
   
   
%REM
#####################################################
 Public Function GetAllTicketsBySupporter ( strSupporter As String ) As TicketCollection
#####################################################
%END REM      
   Public Function GetAllTicketsBySupporter ( strSupporter As String ) As TicketCollection
      
      On Error Goto ERRHANDLE      
      
      If Trim(strSupporter) = "" Then
         Set GetAllTicketsBySupporter = New TicketCollection
         GetAllTicketsBySupporter.TicketCount = 0
         GetAllTicketsBySupporter.ErrorCode = MANDANTORY
         Exit Function ' nothing else to do, get outa here !
      Else      
         
         SearchFormula =_
         |@UpperCase(Form) ="BUGREPORT" & @UpperCase(@Name([CN];supporter)) ="|_
         & Ucase(CommonNameString (strSupporter )) & |"|
         
         Dim dateTime As New NotesDateTime(_
         Cstr(Datenumber(2000, 5, 1)))
         Dim dc As NotesDocumentCollection
         Set dc = db.Search( SearchFormula, dateTime,0)
         
         count = dc.count
         If count = 0 Then Exit Function
         Set GetAllTicketsBySupporter = New TicketCollection
         GetAllTicketsBySupporter.TicketCount = count
         GetAllTicketsBySupporter.ErrorCode = NOERROR
         
         If (count = 0) Then
            Redim GetAllTicketsBySupporter.Tickets(count)
         Else
            Redim GetAllTicketsBySupporter.Tickets(count - 1)
         End If
         
         i = 0
         Set doc = dc.GetFirstDocument
         Do Until (doc Is Nothing)
            
            Set TicketValues = New Ticket
            TicketValues.User = CommonNameString(getItemValue ("user"))
            TicketValues.TicketNumber = getItemValue ("ReqNumber")
            TicketValues.Problem = getItemValue ("problem")
            TicketValues.Status = getItemValue ("status")
            
            Set GetAllTicketsBySupporter.Tickets(i) = TicketValues
            i = i +1
            Set doc = dc.GetNextDocument(doc)
            
         Loop
         
%REM            
         For i = 1 To dc.Count
            Set doc = dc.GetNthDocument ( i )
            
            Set TicketValues = New Ticket
            TicketValues.User = CommonNameString(getItemValue ("user"))
            TicketValues.TicketNumber = getItemValue ("ReqNumber")
            TicketValues.Problem = getItemValue ("problem")
            TicketValues.Status = getItemValue ("status")
            
            Set GetAllTicketsBySupporter.Tickets ( i  -1 ) = TicketValues
         Next
%END REM      
         
      End If    
      
EXITPOINT:
      Exit Function
ERRHANDLE:
      xProc = Getthreadinfo(LSI_THREAD_PROC)
      xError = xProc  & ": " &Trim$(Str$(Err)) & " on line " & Cstr(Erl) & ": " & Error$
      If UseOpenLog Then
         Call LogError
      Elseif LogScriptErrors Then
         Call ThrowException ( xProc, xError  )
      End If
      Print xError   'In all cases
      If ResumeMethodNext Then
         Resume Next   
      Else
         Set GetAllTicketsBySupporter = New TicketCollection
         GetAllTicketsBySupporter.TicketCount = count
         GetAllTicketsBySupporter.ErrorCode = MISC_ERROR
         Resume EXITPOINT
      End If      
      
   End Function
   
%REM
#####################################################
 Public Function CreateTicket ( strUser As String, strProblem As String ) As Integer
#####################################################
%END REM   
   Public Function CreateTicket ( strUser As String, strProblem As String ) As Integer
      
      CreateTicket = CREATE_TICKET_ERR_NOERROR
      
      
      On Error Goto ERRHANDLE
      If Trim(strUser) = "" Or Trim(strProblem) = "" Then
         CreateTicket = CREATE_TICKET_ERR_MANDANTORY ' mandantory fields
         Exit Function ' nothing else to do, get outa here !
      Else
         Dim doc As NotesDocument
         Dim dateTime As New NotesDateTime( "" )
         Call dateTime.SetNow
         
         Set doc = db.CreateDocument
         doc.Form = CREATE_TICKET_FORM
         doc.User = strUser      
         doc.Problem = strProblem
         doc.Status = CREATE_TICKET_INITIAL_STATUS ' new Ticket, unassigned
         doc.Webservice = CREATE_TICKET_VIA_WEBSERVICE
         doc.DateCreated = Cstr(dateTime.DateOnly)
         doc.TimeCreated = Cstr(dateTime.TimeOnly)
         success = doc.ComputeWithForm( False, False )
         Call doc.Save (True,True)
      End If
      
EXITPOINT:
      Exit Function
ERRHANDLE:
      xProc = Getthreadinfo(LSI_THREAD_PROC)
      xError = xProc  & ": " &Trim$(Str$(Err)) & " on line " & Cstr(Erl) & ": " & Error$
      If UseOpenLog Then
         Call LogError
      Elseif LogScriptErrors Then
         Call ThrowException ( xProc, xError  )
      End If
      Print xError   'In all cases
      If ResumeMethodNext Then
         Resume Next   
      Else
         CreateTicket = CREATE_TICKET_ERR_MISC_ERROR
         Resume EXITPOINT
      End If   
   End Function
   
   
%REM
#####################################################
 Public Function AssignTicket (strTicket As String, strAssignTo As String) As Integer
#####################################################
%END REM   
   Public Function AssignTicket (strTicket As String, strAssignTo As String) As Integer
      
      On Error Goto ERRHANDLE      
      AssignTicket = ASSIGN_TICKET_ERR_NOERROR
      
      If Trim(strTicket) = "" Or Trim(strAssignTo) = "" Then
         AssignTicket = ASSIGN_TICKET_ERR_MANDANTORY  'mandantory fields
         Exit Function ' nothing else to do, get outa here !
      Else      
      ' Your Code goes here   
      End If
      
EXITPOINT:
      Exit Function
ERRHANDLE:
      xProc = Getthreadinfo(LSI_THREAD_PROC)
      xError = xProc  & ": " &Trim$(Str$(Err)) & " on line " & Cstr(Erl) & ": " & Error$
      If UseOpenLog Then
         Call LogError
      Elseif LogScriptErrors Then
         Call ThrowException ( xProc, xError  )
      End If
      Print xError   'In all cases
      If ResumeMethodNext Then
         Resume Next   
      Else
         AssignTicket = ASSIGN_TICKET_ERR_MISC_ERROR
         Resume EXITPOINT
      End If
   End Function
   
%REM
#####################################################
 Public Function CloseTicket ( strTicket As String ) As Integer
#####################################################
%END REM   
   Public Function CloseTicket ( strTicket As String ) As Integer
      
      On Error Goto ERRHANDLE      
      CloseTicket = CLOSE_TICKET_ERR_NOERROR
      
      If Trim(strTicket) = "" Then
         CloseTicket = CLOSE_TICKET_ERR_MANDANTORY 'mandantory fields
         Exit Function ' nothing else to do, get outa here !
      Else      
      ' Your Code goes here   
      End If    
      
EXITPOINT:
      Exit Function
ERRHANDLE:
      xProc = Getthreadinfo(LSI_THREAD_PROC)
      xError = xProc  & ": " &Trim$(Str$(Err)) & " on line " & Cstr(Erl) & ": " & Error$
      If UseOpenLog Then
         Call LogError
      Elseif LogScriptErrors Then
         Call ThrowException ( xProc, xError  )
      End If
      Print xError   'In all cases
      If ResumeMethodNext Then
         Resume Next   
      Else
         CloseTicket = CLOSE_TICKET_ERR_MISC_ERROR
         Resume EXITPOINT   
      End If
   End Function
   
%REM
#####################################################
 Public Function GetTicketsByStatus ( status As String ) As TicketCollection
#####################################################
%END REM      
   Public Function GetTicketsByStatus ( status As String ) As TicketCollection
      
      On Error Goto ERRHANDLE   
      
      SearchFormula =_
      |@UpperCase(Form) ="BUGREPORT" & Status = "| & status & |"|
      
      Dim dateTime As New NotesDateTime(_
      Cstr(Datenumber(2000, 5, 1)))
      Dim dc As NotesDocumentCollection
      Set dc = db.Search( SearchFormula, dateTime,0)
      
      count = dc.count
      If count = 0 Then Exit Function
      
      Set GetTicketsByStatus = New TicketCollection
      GetTicketsByStatus.TicketCount = count
      GetTicketsByStatus.ErrorCode = NOERROR
      
      Redim GetTicketsByStatus.Tickets(count - 1)
      
      i = 0
      Set doc = dc.GetFirstDocument
      Do Until (doc Is Nothing)
         
         Set TicketValues = New Ticket
         TicketValues.User = CommonNameString(getItemValue ("user"))
         TicketValues.TicketNumber = getItemValue ("ReqNumber")
         TicketValues.Problem = getItemValue ("problem")
         TicketValues.Status = getItemValue ("status")
         
         Set GetTicketsByStatus.Tickets(i) = TicketValues
         i = i +1
         Set doc = dc.GetNextDocument(doc)
         
      Loop
      
EXITPOINT:
      Exit Function
ERRHANDLE:
      xProc = Getthreadinfo(LSI_THREAD_PROC)
      xError = xProc  & ": " &Trim$(Str$(Err)) & " on line " & Cstr(Erl) & ": " & Error$
      If UseOpenLog Then
         Call LogError
      Elseif LogScriptErrors Then
         Call ThrowException ( xProc, xError  )
      End If
      Print xError   'In all cases
      If ResumeMethodNext Then
         Resume Next   
      Else
         Resume EXITPOINT
      End If         
   End Function   
   
%REM
#####################################################
 Private Function CommonNameString (strName As String) As String
#####################################################
%END REM   
   Private Function CommonNameString (strName As String) As String
      Set nn = New NotesName( strName )
      strPersonName = nn.Common
      CommonNameString = strPersonName
   End Function
   
%REM
#####################################################
 Private Function getItemValue ( strItem As String ) As String
#####################################################
%END REM      
   Private Function getItemValue ( strItem As String ) As String
      If doc.HasItem(strItem) Then
         getItemValue = doc.GetItemValue( strItem )(0)
      Else
         getItemValue = DEFAULT_RETURN_VALUE
      End If
   End Function
   
End Class


Damit sieht das Gerüst im Web Services Explorer nun so aus
« Letzte Änderung: 30.12.05 - 18:09:55 von eknori » Gespeichert
eknori
@Notes Preisträger
Moderator
Gold Platin u.s.w. member:)
*****
Offline Offline

Geschlecht: Männlich
Beiträge: 11580


« Antworten #73 am: 30.12.05 - 19:22:22 »

Habe noch eine weitere Funktion GetAllTicketsByUser hinzugefügt.

Wer will und kann, darf die verfügbaren Services gerne einmal unter

http://eknori.dyndns.org/helpdesk.nsf/wsTicket?WSDL

ausprobieren.

Erstellt einfach mal ein paar Tickets und füllt die DB mit Leben ...
Gespeichert
eknori
@Notes Preisträger
Moderator
Gold Platin u.s.w. member:)
*****
Offline Offline

Geschlecht: Männlich
Beiträge: 11580


« Antworten #74 am: 30.12.05 - 19:29:37 »

kam gerade von RIM rein
Zitat
Ulrich, thanks for the update.   I will test early next week and get back to you. 

Happy New Years. 

Cheers,
Jon
Gespeichert
flaite
Gold Platin u.s.w. member:)
*****
Offline Offline

Beiträge: 2966


WWW
« Antworten #75 am: 30.12.05 - 20:07:34 »

Nein nicht ganz, Axel. Das Prinzip von Help ist das es mehrsprachig ist. Das bedeutet für den Status eben auch, das er nur in verschlüsselter Form vorliegt und zur Laufzeit umgesetzt wird.
Die Gui des Webservices wird natürlich auch internationalisiert sein. Fehlermeldungen, Bezeichner in Guis, etc. werden spätestens aber der Beta in einer properties Datei definiert werden können.

Das sollte man hier auch nicht aus den Augen verlieren. Ich denke auch bei den Webservices nicht. Vielleicht müssen wir tatsächlich (irgendwann, nicht gleich) einen Layer mitgeben, der in der definierten Sprache die jeweiligen Bezeichnungen für die Übergebenen Felder (so denn welche vorhanden sind) mitgibt.
Ich würd sagen, wir machen dafür eine eigene Funktion in der WSDL Datei, die eine Map (LotusScript = List) runterliefert. Muß aber nicht sofort sein. Vielleicht bleibt auch Status das einzige internationalisierte Feld, das vom Webservice benutzt wird. Jedoch hat das schon mehrere Werte.
Gespeichert

Ich stimm nicht mit allen überein, aber mit vielen und sowieso unterhaltsam -> https://www.youtube.com/channel/UCr9qCdqXLm2SU0BIs6d_68Q

---

Aquí no se respeta ni la ley de la selva.
(Hier respektiert man nicht einmal das Gesetz des Dschungels)

Nicanor Parra, San Fabian, Región del Bio Bio, República de Chile
eknori
@Notes Preisträger
Moderator
Gold Platin u.s.w. member:)
*****
Offline Offline

Geschlecht: Männlich
Beiträge: 11580


« Antworten #76 am: 30.12.05 - 20:19:22 »

Zitat
Vielleicht bleibt auch Status das einzige internationalisierte Feld, das vom Webservice benutzt wird.

Bisher ist es das; das ist bisher auch das einzige non-content element, was übergeben wird.
Alles andere ist natürlich data-content in der jeweiligen Landessprache ...

Ich kann dir aber auch gerne den Inhalt der SprachDocs via WSDL zur Verfügung stellen.

ähh, haben wir eigentilch irgendwo ein mapping Status = StatusAsFullText  ?.





Gespeichert
eknori
@Notes Preisträger
Moderator
Gold Platin u.s.w. member:)
*****
Offline Offline

Geschlecht: Männlich
Beiträge: 11580


« Antworten #77 am: 30.12.05 - 20:29:42 »

mir fällt gerade auf, daß bei den functions ClosedTickets, ResubmittedTickets und OpenTickets immer derjenige Goofy fehlt, der die Aktion Close, Resubmit ausgelöst hat, bzw. wer das Ticket denn nun in Bearbeitung hat...

Auch das wird gelöst werden ...
Gespeichert
flaite
Gold Platin u.s.w. member:)
*****
Offline Offline

Beiträge: 2966


WWW
« Antworten #78 am: 30.12.05 - 20:41:27 »

Habe das Gerüst noch einmal geändert:

Es gibt jetzt eine neue Public Function GetTicketsByStatus ( status As String ) As TicketCollection
Das bietet ein wenig mehr Flexibilität.

Hi.

Der strittige Punkt...
Werd darauf nochmal zurückkommen, wenn ein Grundgerüst des Clients steht. Vielleicht verstehe ich das auch ein bischen falsch. Wir werden sehen. Jetzt eine Diskussion zu starten wäre der falsche Zeitpunkt.
Mit den leeren Tickets probiere ich in nächster Zeit aus. Das sieht für mich ein bischen gefährlich aus. Ich probiers im Laufe dieses Abends aus. Hab anderes gemacht in den letzten Stunden.


Gruß Axel
Gespeichert

Ich stimm nicht mit allen überein, aber mit vielen und sowieso unterhaltsam -> https://www.youtube.com/channel/UCr9qCdqXLm2SU0BIs6d_68Q

---

Aquí no se respeta ni la ley de la selva.
(Hier respektiert man nicht einmal das Gesetz des Dschungels)

Nicanor Parra, San Fabian, Región del Bio Bio, República de Chile
eknori
@Notes Preisträger
Moderator
Gold Platin u.s.w. member:)
*****
Offline Offline

Geschlecht: Männlich
Beiträge: 11580


« Antworten #79 am: 30.12.05 - 21:20:15 »

Zitat
Der strittige Punkt...

Ich habe es eingebaut, weil ich noch nicht konkret weiß, was die Brombeeren wollen.
Axel, ich denke momentan an das Projekt und nicht unbedingt so strukturiert, wie du es tust.
Die Funktion ist da; ob sie genutzt wird ... Huh Rausschmeißen kann man immer was.
Gespeichert
Seiten: 1 2 3 [4] 5 6 ... 9 Nach oben Drucken 
« vorheriges nächstes »
Gehe zu:  


Einloggen mit Benutzername, Passwort und Sitzungslänge

Powered by MySQL Powered by PHP Powered by SMF 1.1.21 | SMF © 2006, Simple Machines Prüfe XHTML 1.0 Prüfe CSS
Impressum Atnotes.de - Powered by Syslords Solutions - Datenschutz | Partner: