Autor Thema: Picklist - Kategorien  (Gelesen 6971 mal)

Offline wuwu

  • Senior Mitglied
  • ****
  • Beiträge: 357
  • Geschlecht: Männlich
  • Ich liebe dieses Forum!
Picklist - Kategorien
« am: 13.09.05 - 15:46:46 »
Hallo,

habe eine Ansicht mit Haupt & Unterkategorien.
Der User kann per Button eine Picklist öffnen wo die Haupt und Unterkategorien in der ersten Splate angezeigt werden mit # getrennt, soweit kein Problem.

Jetzt meine Fragen:
1. Ich möchte das die Haupt & Unterkategorien nur jeweils einmal in der Ansicht stehen. Habe es versucht mit ViewShowOnlyCategories im Postopen, funktioniert aber nicht.
2. Der User sollte dann eine Kategorie auswählen können und dieser Wert sollte dann in einem Feld in der Maske übernommen werden.

Kann mir wer helfen?

Mfg Horst
Domino 7.01 - AS 400, Domino 7.01 - Win2003, Lotus Notes 8.01 Basic->PCs, NB, Terminal Server Farm.

Offline brixxton

  • Junior Mitglied
  • **
  • Beiträge: 86
Re: Picklist - Kategorien
« Antwort #1 am: 13.09.05 - 16:00:21 »
Hola,

versuch es mit Arrayunique(liste).

hier quellcode mit einem Prompt.
Zitat
   response = ws.Prompt (PROMPT_OKCANCELLIST, _
      "Haupt Kategorie", _
      "Bitte eine Haupt Kategorie auswählen.", _
      "", Arrayunique(liste))
MfG

brixxton

Offline brixxton

  • Junior Mitglied
  • **
  • Beiträge: 86
Re: Picklist - Kategorien
« Antwort #2 am: 13.09.05 - 16:04:04 »
Was ich vergessen habe zu fragen.

Mit was willst du das machen mit Script oder Formelsprache?
MfG

brixxton

Offline wuwu

  • Senior Mitglied
  • ****
  • Beiträge: 357
  • Geschlecht: Männlich
  • Ich liebe dieses Forum!
Re: Picklist - Kategorien
« Antwort #3 am: 13.09.05 - 16:11:40 »
mit Scriptsprache, aber momentan verstehe ich das ganze noch nicht!

Arrayunique ist mir bekannt, aber das bräuchte ich ja gar nicht wenn ich gleich eine Ansicht hätte in der jede Kategorie & Unterkategorie nur einmal angezeigt wird und ich sie auswählen könnte, oder geht das gar nicht?

Danke im vorhinein,

Horst
Domino 7.01 - AS 400, Domino 7.01 - Win2003, Lotus Notes 8.01 Basic->PCs, NB, Terminal Server Farm.

Offline Roalf

  • Junior Mitglied
  • **
  • Beiträge: 65
  • Geschlecht: Männlich
  • Ich bin ein speicherrenitentes Programm!
Re: Picklist - Kategorien
« Antwort #4 am: 13.09.05 - 16:23:06 »
Hallo,

du unterliegst hier einem Denkfehler. Eine Kategorie ist NICHT in einer Picklist anwählbar. Es müssen immer Dokumente selektiert sein, sonst liefert die Picklist nichts zurück.

Empfehlen würde sich hier eine Promptbox. Zuerst musst du natürlich die Liste der Kategorien holen (in At eine Zeile : @trim(@unique(@dbcolumn) . In script etwas aufwendiger.
Notes: Unbegreifliche Lösungen für unlösbare Probleme

Offline wuwu

  • Senior Mitglied
  • ****
  • Beiträge: 357
  • Geschlecht: Männlich
  • Ich liebe dieses Forum!
Re: Picklist - Kategorien
« Antwort #5 am: 13.09.05 - 17:04:26 »
hallo roalf,

würde es gerne über script realisieren, stehe momentan voll am Schlauch, ich weis gar nicht wo & wie ich anfangen sollte, kannst du mir da ein wenig auf die Sprünge helfen?

Mfg Horst
Domino 7.01 - AS 400, Domino 7.01 - Win2003, Lotus Notes 8.01 Basic->PCs, NB, Terminal Server Farm.

Offline brixxton

  • Junior Mitglied
  • **
  • Beiträge: 86
Re: Picklist - Kategorien
« Antwort #6 am: 13.09.05 - 17:10:35 »
Versuch diesen Quellcode anzupassen das es bei dir funktioniert.

Zitat
Sub Postopen2(Source As Notesuidocument)
   
   Dim se As New NotesSession
   Dim ws As New NotesUIWorkspace
   Dim db As NotesDatabase
   Dim viewOfen As NotesView
   Dim viewMaschGruppe As NotesView
   Dim viewFelderLookup As NotesView
   Dim doc As NotesDocument
   Dim docOfen As NotesDocument
   Dim docMaschGruppe As NotesDocument
   Dim docFelderLookup As NotesDocument
   Dim listeOfen As Variant
   Dim response As Variant
   
   
   If source.IsNewDoc Then
      
      Set db = se.CurrentDatabase
      Set viewOfen = db.GetView("vwHauptKatColumn")
      Set viewMaschGruppe = db.GetView("vwUnterKatLookup")
      Set viewFelderLookup = db.GetView("vwFelderLookup")
      Set doc = source.document
      
   'Set docOfen = viewOfen.
      
   'Redim listeOfen(0) As Variant
      
      listeOfen = DBColumn(db.Server, db.FilePath, viewOfen.Name, 1)
      
      response = ws.Prompt (PROMPT_OKCANCELLIST, _
      "Haupt Kategorie", _
      "Bitte eine Haupt Kategorie auswählen.", _
      "", Arrayunique(listeOfen))
      
      If Isempty(response) Then
         Call Source.Close(True)
         Exit Sub
      End If
      
      listeMaschGruppe = DBLookup(db.Server, db.FilePath, viewMaschGruppe.name, Cstr(response), 2)
      
      response2 = ws.Prompt (PROMPT_OKCANCELLIST, _
      "Unter Kategorie", _
      "Bitte eine Unter Kategorie auswählen.", _
      "", listeMaschGruppe)
      
      If Isempty(response2) Then
         Call Source.Close(True)
         Exit Sub
      End If
      
      Call source.Document.ReplaceItemValue("HauptKat",response)
      Call source.Document.ReplaceItemValue("UnterKat",response2)
      
      Set docFelderLookup = viewFelderLookup.GetDocumentByKey(Trim(response+response2))
      
      If Not docFelderLookup Is Nothing Then
         
         Call docFelderLookup.CopyAllItems( source.Document, True )
         doc.Form = "frmOpenPoint"
      End If
      Call Source.RefreshHideFormulas
      Call Source.Refresh
      
      
      Print Source.IsNewDoc
   'Set doc = Nothing
      Set docFelderLookup = Nothing
   'Set doc = Source.Document
      
      
      Dim unid As String
      
      unid = Source.Document.UniversalID
      
      
      Source.Document.SaveOptions = "0"
      Call Source.Close(True)
   'Set Source= Nothing
      
      Call ws.EditDocument(True, doc)
      
      Source.Document.SaveOptions = "1"
      
   End If
   
   Source.Document.SaveOptions = "1"
End Sub


Das hier in eine Script-Bibliothek einfügen:
Zitat
Function DBColumn(strServerName As String, strDatabase As String, strViewName As String, intColumnNumber As Integer) As Variant
   Dim NoCache As String
   Dim NotesMacro As String
   Dim Database As String
   Dim serverName As NotesName
   
   Set serverName = New NotesName(strServerName)
   
   NoCache = Chr(34) + Chr(34) + ":" + Chr(34) + "NoCache" + Chr(34)
   Database = Chr(34) + ReplaceSubstring(strDatabase,"\","\\") + Chr(34)
   
   NotesMacro = "@DbColumn(" + NoCache + ";" + Chr(34) + serverName.Abbreviated + Chr(34) + ":" + Database + ";" +_
   Chr(34) + strViewName + Chr(34) + ";" + Trim(Str(intColumnNumber)) + ")"
   
   DBColumn = Evaluate(NotesMacro)      
End Function
MfG

brixxton

Offline Roalf

  • Junior Mitglied
  • **
  • Beiträge: 65
  • Geschlecht: Männlich
  • Ich bin ein speicherrenitentes Programm!
Re: Picklist - Kategorien
« Antwort #7 am: 13.09.05 - 17:26:23 »
der Code sieht soweit ganz prima aus....

aber es fehlt noch das "FullTrim", sonst kann es sein, das du dir eine überflüssige Leerzeile einfängst (wenn es docs ohne Kategorieeintrag in der Ansicht gibt)

also statt
.
      response = ws.Prompt (PROMPT_OKCANCELLIST, _
      "Haupt Kategorie", _
      "Bitte eine Haupt Kategorie auswählen.", _
      "", Arrayunique(listeOfen)).
---

      response = ws.Prompt (PROMPT_OKCANCELLIST, _
      "Haupt Kategorie", _
      "Bitte eine Haupt Kategorie auswählen.", _
      "", Fulltrim(Arrayunique(listeOfen)))
Notes: Unbegreifliche Lösungen für unlösbare Probleme

Offline brixxton

  • Junior Mitglied
  • **
  • Beiträge: 86
Re: Picklist - Kategorien
« Antwort #8 am: 13.09.05 - 17:42:46 »
Ja genau.  ;D

Bei mir werden keine Dokumente abgespeichert, wenn bestimmte felder nicht ausgefühlt sind.
Des wegen hatte ich es nicht in der Funktion drin.
MfG

brixxton

Offline wuwu

  • Senior Mitglied
  • ****
  • Beiträge: 357
  • Geschlecht: Männlich
  • Ich liebe dieses Forum!
Re: Picklist - Kategorien
« Antwort #9 am: 14.09.05 - 11:15:08 »
Hallo brixxton,

bei mir gibt er den Fehler aus:
Illegal parenthesized reference: REPLACESUBSTRING

bei der Functionszeile ->
Database = Chr(34) + ReplaceSubstring(strDatabase,"\","\\") + Chr(34)

Warum?

Mfg Horst
Domino 7.01 - AS 400, Domino 7.01 - Win2003, Lotus Notes 8.01 Basic->PCs, NB, Terminal Server Farm.

Offline brixxton

  • Junior Mitglied
  • **
  • Beiträge: 86
Re: Picklist - Kategorien
« Antwort #10 am: 14.09.05 - 13:36:43 »
uppsss, sorry.  ;D

Zitat
Function ReplaceSubstring(strSourceText As String, strSearchText As String, strReplaceText As String) As String
   Dim strNewText As String
   Dim pos As Integer
   Dim inc As Integer
   
   pos = 0
   strNewText = strSourceText
   
   If strReplaceText <> "" Then
      inc = Len(strReplaceText)
   Else
      inc = 1
   End If
   
   pos = Instr(1, strNewText, strSearchText)
   While pos <> 0         
      strNewText = Mid$(strNewText, 1, pos - 1) & strReplaceText & Mid$(strNewText, (Len(strSearchText) + pos))         
      pos = Instr(pos + inc, strNewText, strSearchText)
   Wend      
   ReplaceSubstring = strNewText
End Function

hier noch DBLookup

Zitat
Function DBLookup(strServerName  As String, strDatabase As String, strViewName As String, strKey As String, intColumnNumber As Integer) As Variant
   Dim NoCache As String
   Dim NotesMacro As String
   Dim UniqueNotesMacro As String
   Dim Database As String
   
   Dim serverName As NotesName
   Set serverName = New NotesName(strServerName)
   
   NoCache = Chr(34) + Chr(34) + ":" + Chr(34) + "NoCache" + Chr(34)
   Database = Chr(34) + ReplaceSubstring(strDatabase,"\","\\") + Chr(34)
   
   NotesMacro = "@DbLookup(" + NoCache + ";"+ Chr(34) + serverName.Abbreviated + Chr(34) + ":" + Database + ";" +_
   Chr(34) + strViewName + Chr(34) + ";" + Chr(34) + strKey + Chr(34) + ";" + Trim(Str(intColumnNumber)) + ")"
   
   DBLookup = Evaluate(NotesMacro)      
End Function   
MfG

brixxton

Offline wuwu

  • Senior Mitglied
  • ****
  • Beiträge: 357
  • Geschlecht: Männlich
  • Ich liebe dieses Forum!
Re: Picklist - Kategorien
« Antwort #11 am: 14.09.05 - 14:20:29 »
Hallo brixxton,

funktioniert einwandfrei!!! SUPER CODE, vielen Dank!
Aber ich habe selbst auch ein wenig probiert und bin auf folgenden Code gekommen:

   Dim se As New NotesSession
   Dim ws As New NotesUIWorkspace
   Dim db As NotesDatabase
   Dim uidoc As NotesUIDocument
   Dim doc As NotesDocument
   Dim vCategory As NotesView   
   Dim response As Variant
   
   Set db = se.CurrentDatabase
   Set uidoc = ws.CurrentDocument
   Set doc = uidoc.document   
   Set vCategory = db.GetView("(Test)")
   
   Dim i As Integer
   Dim arr() As String
   Dim MainCategory As String
   Dim SubCategory As String
   Dim var As String
   i = 0
   Set doc = vCategory.GetFirstDocument   
   While Not (doc Is Nothing)
      Redim Preserve arr(i)      
      MainCategory = doc.ColumnValues(0)
      SubCategory = doc.ColumnValues(1)
      arr(i) = MainCategory
'+ " \ " + SubCategory
      var = var + arr(i) + Chr(10)
      Set doc = vCategory.GetNextDocument( doc )
      i=i+1
   Wend
   Msgbox var
   response = ws.Prompt (PROMPT_OKCANCELLIST,    "Haupt Kategorie",    "Bitte eine Haupt Kategorie auswählen.", _
   "", var)
   
   Exit Sub

Ein Problem besteht: In der Messagebox schreibt er alles sauber darunter
und wenn dann die Auswahl kommt über prompt dann schreibt er mir nur den ersten Eintrag hin, warum???

Mfg Horst
Domino 7.01 - AS 400, Domino 7.01 - Win2003, Lotus Notes 8.01 Basic->PCs, NB, Terminal Server Farm.

Offline Roalf

  • Junior Mitglied
  • **
  • Beiträge: 65
  • Geschlecht: Männlich
  • Ich bin ein speicherrenitentes Programm!
Re: Picklist - Kategorien
« Antwort #12 am: 14.09.05 - 14:30:39 »
statt  PROMPT_OKCANCELLIST
solltest du dann PROMPT_OKCANCELLISTMULT verwenden, hier hilft ein Blick in die Notehilfe (F1)

ausserdem hast du var als String deklariert und erweiterst den ständig
" var = var + arr(i) + Chr(10)"
das ist aber nonsens, du musst die Liste natürlich in ein Array (variant)  schreiben und diese dem Prompt übergeben (wie es im ursprungscode von brixxton auch passiert ist).

Gruß
Roalf

P.S. Was ich mich in solchen fällen aber immer frage: warum müssen solche Sachen immer auf-teufel-komm-raus in Script gelöst werden? Meist kommt er dann auch wirklich raus.

Dieses ganze Aufgabe wäre in @Formel äquivalent in nur DREI zeilen Programmcode zu lösen gewesen (!).
« Letzte Änderung: 14.09.05 - 14:41:03 von Roalf »
Notes: Unbegreifliche Lösungen für unlösbare Probleme

Offline umi

  • Gold Platin u.s.w. member:)
  • *****
  • Beiträge: 2.062
  • Geschlecht: Männlich
  • one notes to rule'em all, one notes to find'em....
    • Belsoft AG
Re: Picklist - Kategorien
« Antwort #13 am: 14.09.05 - 14:32:34 »
Ausserdem müsste var im Prompt ein Array sein.
ungefähr so könnte es funktionieren.
Code
...
response = ws.Prompt (PROMPT_OKCANCELLIST,    "Haupt Kategorie",    "Bitte eine Haupt Kategorie auswählen.", _
   "", var)

->
...
response = ws.Prompt (PROMPT_OKCANCELLIST,    "Haupt Kategorie",    "Bitte eine Haupt Kategorie auswählen.", _
   "", arr)

Gruss

Urs

<:~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~
Jegliche Schreibfehler sind unpeabischigt
http://www.belsoft.ch
~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~:>

Offline Roalf

  • Junior Mitglied
  • **
  • Beiträge: 65
  • Geschlecht: Männlich
  • Ich bin ein speicherrenitentes Programm!
Re: Picklist - Kategorien
« Antwort #14 am: 14.09.05 - 14:36:59 »
sorry umi..wir haben wohl zusammen...
Notes: Unbegreifliche Lösungen für unlösbare Probleme

Offline brixxton

  • Junior Mitglied
  • **
  • Beiträge: 86
Re: Picklist - Kategorien
« Antwort #15 am: 14.09.05 - 14:40:02 »
Ja,

war ich auch grad am schreiben.  ;D

So funktioniert es auf jeden fall.
MfG

brixxton

Offline wuwu

  • Senior Mitglied
  • ****
  • Beiträge: 357
  • Geschlecht: Männlich
  • Ich liebe dieses Forum!
Re: Picklist - Kategorien
« Antwort #16 am: 14.09.05 - 14:42:05 »
Hallo,

@umi, das war noch ein alter Code, das habe ich bereits ausgebessert gehabt.

@Roalf, die Hilfe habe ich bei Prompt verwendet(ist sogar noch geöffnet), aber nicht genau gelesen bzw. geschaut.

@brixxton, nochmals - SUPER CODE.

Danke nochmals an alle 3 Experten für die tolle Hilfe!!!

Mfg Horst
Domino 7.01 - AS 400, Domino 7.01 - Win2003, Lotus Notes 8.01 Basic->PCs, NB, Terminal Server Farm.

 

Impressum Atnotes.de  -  Powered by Syslords Solutions  -  Datenschutz