Autor Thema: 3 fragen  (Gelesen 4916 mal)

Offline Lorenz

  • Junior Mitglied
  • **
  • Beiträge: 63
  • Geschlecht: Männlich
3 fragen
« am: 20.07.03 - 13:28:54 »
hallo

hier mal so drei fragen...

wie kann ich, mittels script in einem button, in einer view eine spalte durchsuchen. das ziel ist es nur die in der spalte angezeigten werte zu durchsuchen.

wie kann ich die in einem folder angezeigten dokumente aus dem folder mittels script löschen (das dokument sollte aber nicht in der datanbank gelöscht werden.

das $v2AttachmentOptions feld sollte berechnet und mit wert 0 versehen sein, wenn man nicht möchte, dass es einem attachments anzeigt. funktioniert dies unter r6 auch so?

vielen dank für antworten.

Offline Thomas Schulte

  • @Notes Preisträger
  • Moderator
  • Gold Platin u.s.w. member:)
  • *****
  • Beiträge: 4.388
  • Geschlecht: Männlich
  • Ich glaub mich tritt ein Pferd
Re:3 fragen
« Antwort #1 am: 20.07.03 - 15:02:41 »
Zu 1: Gar nicht. Zumindest nicht im Frontend. Mit ein paar Tricks dann im Backend. Hängt davon ab wie gut du Script kannst.

Zu 2: Such mal nach RemovefromFolder (NotesDocument Klasse) bzw. RemoveAllFromFolder (NotesDocumentCollection Klasse)

Zu 3: Keine Ahnung. Musst du ausprobieren.

Thomas
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

Offline Lorenz

  • Junior Mitglied
  • **
  • Beiträge: 63
  • Geschlecht: Männlich
Re:3 fragen
« Antwort #2 am: 20.07.03 - 15:35:20 »
zu 1.  kann leider nicht sehr gut scripten.  :-\ aber, was ja noch eine möglichkeit wäre, ist nach feldinhalten in einem definierten feld zu suchen.

also z.b. beim ftsearch nicht db.ftsearch sondern dann ein db.Feldname.ftsearch. würde das gehen?
(db gleich NotesDatabase)

so könnte man das ganze mit der ansichtsauswahl etc. weglassen.

wie würdest du das problem lösen?

Offline Thomas Schulte

  • @Notes Preisträger
  • Moderator
  • Gold Platin u.s.w. member:)
  • *****
  • Beiträge: 4.388
  • Geschlecht: Männlich
  • Ich glaub mich tritt ein Pferd
Re:3 fragen
« Antwort #3 am: 20.07.03 - 15:51:36 »
mal so aus dem Bauch raus und ohne Funktionsgarantie:
Der FTSearch hat zuviele Tücken um ihn da vernünftig einsetzen zu können. Zum Beispiel ist da die Frage der letzten Aktualisierung die nicht ganz unerheblich ist. Performance und die Anzahl der Zurückgegebenen Werte spielen auch noch eine Rolle.
Das Grundproblem ist, das du eine View hast und mit dieser View in der Regel schon einmal eine Vorauswahl getroffen wurde. Also kannst du zwei Wege gehen:
1. du schnappst dir in Script die View, und benutzt zusätzlich die Column Klasse Dann gehst du her und hast daraus den Feldnamen der verwendet wurde (vorausgesetzt es wurde ein Feldname verwendet, wenn nicht hast du ein problem aber das kannst du auch in der Hilfe nachlesen). Jetzt kannst du mit der Viewentrycollection oder auch im View direkt jedes Dokument des Views durchgehen und anschließend deine Vergleiche auf dem Feldnamen machen. Ist ein bischen Tricky aber funktioniert.
2. Du nimmst db.search (näheres siehe Online Hilfe) Das Teil baut den Search direkt zur Laufzeit auf und wird häufig von Entwicklern unterschätzt. Da kann man nämlich, was z.B. mit FTSearch nicht richtig funktioniert Datumsvergleiche von - bis anstellen. Das Ding erstellt eine DocumentCollection und zwar zur Laufzeit über alle Dokumente. Damit ist es soweit ich weiss immer aktuell. Der Haken dabei ist, Performance (Das Teil frisst sie förmlich) und Speicher (den frisst es auch). Der zweite Teil des Hakens, die Collection ist unsorted, wenn du also eine bestimmte Reihenfolge brauchst muss sie erst noch sortiert werden.

Thomas
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

Offline Lorenz

  • Junior Mitglied
  • **
  • Beiträge: 63
  • Geschlecht: Männlich
Re:3 fragen
« Antwort #4 am: 20.07.03 - 17:13:03 »
in einem meiner script bücher hats ein beispiel wie man durch view spalten suchen kann (mit search). ich werde das beispiel einfach anpassen und hoffen, dass es funktioniert.

hier mein code für de ftsearch. jedoch habe ich noch zwei offene punkte, die ich in den code einbauen möchte. und zwar, das automatische removen der dokumente aus dem folder und das automatische aktualisieren des folders bzw. dann der view.

Sub Click(Source As Button)
   Dim s As New NotesSession
   Dim db As NotesDatabase
   Dim doc As notesdocument
   Dim dc As NotesDocumentCollection
   
   
   Dim uiw As New NotesUIWorkspace
   Dim uidoc As notesuidocument
   
   Dim art As String /wird gebraucht um den suchstring zu ergänzen
   Dim vts As String /der suchstring
   
   
   Set uidoc = uiw.CurrentDocument
   
   art = uidoc.FieldGetText("suchart") /einlesen der suchart *wert oder *wert* etc
   
hier die abfrage wie gesucht werden soll.... (gibt sicher schönere varianten)
   
   If ( art = "Festwert") Then
      vts = uidoc.fieldgettext("erf_volltext")
   Else
      If (art = "Fragment") Then
         vts = "*" & uidoc.fieldgettext("erf_volltext") & "*"
      Else
         vts = uidoc.fieldgettext("erf_volltext") & "*"
      End If
   End If
   
   
   
   Set db = s.CurrentDatabase
   Set dc = db.FTSearch(vts,0)
   
1. hier würde ich gerne den folder ergebnis leeren aber wie?    

Call dc.PutAllInFolder("ergebnis")
   
2. und hier sollte noch ein autoupdate der view (bzw. des folders) hinkommen die ich einem unteren frame anzeige.

End Sub

du würdest mir sehr helfen, wenn du mir ein tipp geben könntest wie ich die probleme 1 und 2 lösen könnte. vielen dank

Offline Thomas Schulte

  • @Notes Preisträger
  • Moderator
  • Gold Platin u.s.w. member:)
  • *****
  • Beiträge: 4.388
  • Geschlecht: Männlich
  • Ich glaub mich tritt ein Pferd
Re:3 fragen
« Antwort #5 am: 20.07.03 - 19:39:44 »
zu 1.  Folder sind wie Views, man kann sie mit den gleichen Klassen behandeln
also:
dim foldercollection as notesdocumentcollection
dim folderview as notesview
dann
Set folderview = db.GetView("ergebnis")
Set vc = folderview.AllEntries
Call foldercollection.RemoveAllFromFolder( "ergebnis" )

zu 2.  Aber da musst du schauen ob es funktioniert, das geht nämlich nur wenn du im "richtigen" UIWorkspace bist.

Call folderview.Refresh
Call UIworkspace.folderViewRefresh

Du hast ja leider nicht erzählt in welchem Kontext du das brauchst. Warscheinlich gibt es eine andere, wesenlich einfachere Lösung.

Thomas
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

Offline Lorenz

  • Junior Mitglied
  • **
  • Beiträge: 63
  • Geschlecht: Männlich
Re:3 fragen
« Antwort #6 am: 21.07.03 - 09:45:27 »
vielen dank!!!

zu eins...

hat funktioniert!!!

zu zwei

hat funktioniert!!!

zum kontext

also ich programmiere ein einfacheres adressbuch.
so nach dem schema: oberes frame suche durch kopierte names dokumente, mittleres frame eine view mit den ergebnissen und unteres frame eine detailanzeige.
« Letzte Änderung: 21.07.03 - 09:57:12 von Lorenz »

Offline Thomas Schulte

  • @Notes Preisträger
  • Moderator
  • Gold Platin u.s.w. member:)
  • *****
  • Beiträge: 4.388
  • Geschlecht: Männlich
  • Ich glaub mich tritt ein Pferd
Re:3 fragen
« Antwort #7 am: 21.07.03 - 10:27:14 »
wenn du fertig bist kannst du es ja mal herzeigen.

Klingt interessant. Es kommen zumindest nicht viele auf den Gedanken ein eigenes Adressbuch zu konstruieren.

Thomas
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

Offline Lorenz

  • Junior Mitglied
  • **
  • Beiträge: 63
  • Geschlecht: Männlich
Re:3 fragen
« Antwort #8 am: 21.07.03 - 12:22:49 »
haha  :D wäre ich auch nie, würde nicht mein chef das so wollen.

das adressbuch soll für unsere 4000 user weltweit verfügbar sein. und mein chef meint man könne den usern die notesstandardsuche nicht zumuten...


momentan kämpfe ich noch mit dem suchen in spalten. hast du da ein beispiel zu verfügung?


aja was ich noch los werden wollte. vielen dank für deine hilfe!  

Offline Thomas Schulte

  • @Notes Preisträger
  • Moderator
  • Gold Platin u.s.w. member:)
  • *****
  • Beiträge: 4.388
  • Geschlecht: Männlich
  • Ich glaub mich tritt ein Pferd
Re:3 fragen
« Antwort #9 am: 21.07.03 - 13:23:27 »
Suchen in Spalten? Draufklicken und einfach das Schreiben anfangen. Dann sucht er automatisch in dieser Spalte und stellt sich auf den ersten Treffer, vorausgesetzt die Spalte ist sortiert.

Davon abgesehen. Ich würde mich wirklich mal mit den WhoIsWho von Haitec beschäftigen. Ich hoffe nämlich, das ihr nicht vorhabt das Adressbuch komplett zu ersetzen. Und dafür Mitarbeiter entsprechend Ihrer Qualifikation zu suchen und eine entsprechende Synchronisierung mit dem/den "echten" Adressbuch(büchern) herzustellen ist es ganz gut geeignet.

Thomas
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

Offline Lorenz

  • Junior Mitglied
  • **
  • Beiträge: 63
  • Geschlecht: Männlich
Re:3 fragen
« Antwort #10 am: 21.07.03 - 13:37:57 »
die variante mit einfach auf die spalte drücken und anfangen zu schreiben ist sicher eine variante.
ich frag mal meinen auftraggeber ob ihm das genügt.


das adressbuch werden wir selbstverständlich nicht ersetzen. die idee dahinter ist eher einfach so eine alternative anzeige zum normalen names anzubieten. mir ist der sinn auch nicht ganz schlüssig. da ich aber der lehrling bin, habe ich da nicht all zu viel zu sagen.  :-\

aja, weisst du wie ich es fertig bringe, ein dokument automatisch anzuzeigen wenn ich es in einer view selektiert habe?

die synchronisierung habe ich so gelöst, dass es immer um miternacht alle einträge in meiner db löscht und dann die neuen vom names herkopiert. sehr einfach und äusserst performance intensiv, aber dafür einfach.

Offline Thomas Schulte

  • @Notes Preisträger
  • Moderator
  • Gold Platin u.s.w. member:)
  • *****
  • Beiträge: 4.388
  • Geschlecht: Männlich
  • Ich glaub mich tritt ein Pferd
Re:3 fragen
« Antwort #11 am: 21.07.03 - 14:31:06 »
aja, weisst du wie ich es fertig bringe, ein dokument automatisch anzuzeigen wenn ich es in einer view selektiert habe?
Wie definierst du selektiert? Wenn du im UI bist und manuell drauf klickst oder mit Script?
Mit Script ist es uiworkspace.Editdocument
Manuell geht es nur dann wenn du API Programmierst. Viel Spaß dabei.
die synchronisierung habe ich so gelöst, dass es immer um miternacht alle einträge in meiner db löscht und dann die neuen vom names herkopiert. sehr einfach und äusserst performance intensiv, aber dafür einfach.
Autsch  ::) das ist jetzt wirklich hart. Weisst du überhaupt auf was du dich da einlässt? Erst einmal glaube ich nicht, daß bei 4000 Mitarbeitern deine DB nur auf einem Server laufen wird. Dann gibt es da bestimmt auch welche, die offline arbeiten (Notebook), Außerdem bläst jede Runde die Datenbank auf. Es bedeutet unter anderem auch Gigabyteweise Verkehr im Netzwerk. Jedesmal verlieren die Benutzer z.B. Ihre Gelesen Markierungen, Replikation muss immer mit einem Vollen Set laufen und vergisst jemand mal auf seinem Notebook für 3 Monate diese Datenbank zu replizieren, sind plötzlich die alten Dokumente wieder in der Datenbank! Sorry wenn ich das so sage, aber dieses Design ist krank!

N.B. beim Gespräch mit deinem Vorgesetzen kannst du ihm/ihr? ja dieses Posting zeigen. Wenn er dann noch Fragen hat kann er ja mal anrufen.

Thomas
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

Offline Lorenz

  • Junior Mitglied
  • **
  • Beiträge: 63
  • Geschlecht: Männlich
Re:3 fragen
« Antwort #12 am: 21.07.03 - 14:59:16 »
hallo

zu 1.. ich verschiebe die thematik auf relase 2 meines adressbuchs...

zu 2 danke für deine offene ehrlichkeit.

die problematik ist mir bekannt und bewusst. ist auch nicht für immer so gedacht, nur zum testen.
im produktiven einsatz werde ich dann die in unserer workflow lösung verwendeter abgleichs - agent verwenden. der überprüft nur nach änderungen und verändert dann nur diese dokumente.
da ich aber noch einiges am adressbuch zu tun habe konnte ich mich noch nicht darum kümmern.

n.b.: mein chef ist in den ferien! nur ich darf  hier meinen sommer mit diesem ding verbringen. herrlich.

hier noch mein versuch nur ein feld in der db zu durchsuchen.

Sub Click(Source As Button)
   
   Dim session As New NotesSession
   Dim db As NotesDatabase
   Dim dc As NotesDocumentCollection
   Dim doc As NotesDocument
   Dim nn As String
   Dim uiw As New NotesUIWorkspace
   Dim uidoc As notesuidocument
   
   nn = uidoc.fieldgettext("vorname")
   
   Set uidoc = uiw.CurrentDocument
   Set db = session.CurrentDatabase
   //Hier gibts immer ein Fehler. Warum?
                Set dc = db.Search("@Contains(FirstName;nn)",  0)
   Set doc = dc.GetFirstDocument()
   
   While Not(doc Is Nothing)
      Messagebox doc.Subject(0)
      Set doc = dc.GetNextDocument(doc)
   Wend
   
End Sub

das ding ist so aus der hilfe kopiert und leicht verändert.

Offline Axel

  • Moderator
  • Gold Platin u.s.w. member:)
  • *****
  • Beiträge: 8.658
  • Geschlecht: Männlich
  • It's not a bug, it's Notes
Re:3 fragen
« Antwort #13 am: 21.07.03 - 15:10:17 »
Hi,

versuch's mal so:

Set dc = db.Search("@Contains(FirstName; '" & nn & '")", Nothing, 0)


Zum einen hast du einen Parameter vergessen, zum anderen, war ein Fehler beim einbinden der Variable nn in deiner Zeile.

Axel
Ohne Computer wären wir noch lange nicht hinterm Mond!

Offline Lorenz

  • Junior Mitglied
  • **
  • Beiträge: 63
  • Geschlecht: Männlich
Re:3 fragen
« Antwort #14 am: 21.07.03 - 15:27:43 »
hat leider nicht funktioniert.

kommt ein fehler so in etwa  "unexepted end of line exepted expression"

hmmm.... ?

aja...

wie kann ich in diesem string angeben, dass eine verfügbare names.nsf db verwendet werden soll?

Set db = s.CurrentDatabase




Offline Axel

  • Moderator
  • Gold Platin u.s.w. member:)
  • *****
  • Beiträge: 8.658
  • Geschlecht: Männlich
  • It's not a bug, it's Notes
Re:3 fragen
« Antwort #15 am: 21.07.03 - 15:33:11 »
Hi,

sorry, "Fehler vom Amt".

So sollte es gehen:

Set dc = db.Search("@Contains(FirstName; """ & nn & """)", Nothing, 0)

Welche names.nsf ist denn gemeint? Das öffentliche Adressbuch oder das persönliche?

Es gibt in der NotesDatabase-Klasse die Eigenschaften IsPublicAddressBook und IsPrivateAddressBook. Schau mal in die Designer-Hilfe.


Axel


« Letzte Änderung: 21.07.03 - 15:35:25 von Axel »
Ohne Computer wären wir noch lange nicht hinterm Mond!

Offline Lorenz

  • Junior Mitglied
  • **
  • Beiträge: 63
  • Geschlecht: Männlich
Re:3 fragen
« Antwort #16 am: 21.07.03 - 16:06:24 »
grandios! jetzt funktionierts!!!

womit ich jetzt diese drei fragen (oder warens mehr) schliesse.

@axel

das öffentliche. ich werd mal in der hilfe suchen.
« Letzte Änderung: 21.07.03 - 16:08:09 von Lorenz »

Offline Axel

  • Moderator
  • Gold Platin u.s.w. member:)
  • *****
  • Beiträge: 8.658
  • Geschlecht: Männlich
  • It's not a bug, it's Notes
Re:3 fragen
« Antwort #17 am: 21.07.03 - 16:14:11 »
Hi,

wenn's das öffentliche sein soll, dann hab ich viellecit was für dich.
Das ist Code aus einem Hotspot, der den Adressauswahldialog anzeigt, und anhand des gewählten Namens das Kurzzeichen ausliest und in ein Feld schreibt.

Zitat
Sub Click(Source As Button)
   
   Dim view As NotesView
   Dim picklist As Variant
   Dim namesdoc As NotesDocument
   Dim item As NotesItem
   Dim vTmp As Variant   
   Dim i As Integer
   Dim books As Variant
   Dim done As Integer
   Dim iMaxValue As Integer
   
'Suchen des öffentlichen Adressbuches und Zugriff auf die entspr. Ansicht   
   done = False
   books = session.AddressBooks
   Forall b In books
      If (b.IsPublicAddressBook) And (Not done)Then
         Call b.Open( "", "" )
         Set view = b.GetView("($VIMPeople)")
         done = True
      End If
   End Forall
   
   If done Then
      picklist = ws.Pickliststrings(0, False)
      
      If Isempty(picklist) Then Exit Sub
      
      iMaxValue = Ubound(picklist)      
      For i = 0 To iMaxValue
         macrostr$ = | @Name([Abbreviate]; "|+ picklist(i) +|")|
         vTmp = Evaluate(macrostr$)
         
         Set namesdoc = view.GetDocumentByKey(vTmp(0))
'Separierung des Kurzzeichens aus der Internetadresse         
         If Not (namesdoc Is Nothing) Then
            If (namesdoc.InternetAddress(0) <> "") And (Instr(namesdoc.InternetAddress(0), "@") > 0) Then
               vTmp = Evaluate(| @ProperCase("| + Left$(namesdoc.InternetAddress(0), Instr(namesdoc.InternetAddress(0), "@") - 1) + |")|)
               Set item = doc.ReplaceItemValue("Betreuer",Cstr(vTmp(0)))
            Else
               Messagebox "Das Kurzzeichen für " & vTmp(0) & " kann nicht ermittelt werden" & Chr$(10) & _
               "Der Eintrag wird übersprungen", 48, "Adressen"               
            End If  'If namesdoc.InternetAddress(0) <> ""  And ... Then
         Else
            Messagebox "Der Eintrag für " & vTmp(0) & " kann im Adressbuch nicht gefunden werden", 48, "Adressen"
         End If
      Next
   Else
      Messagebox "Funktion bei lokalem Betrieb nicht verfügbar.", 48, "Adressen"      
   End If
End Sub

Es ist nicht genau was du suchst, aber es zeigt die Verwendung der Eigenschaft IsPublicAdressBook.

Axel
Ohne Computer wären wir noch lange nicht hinterm Mond!

 

Impressum Atnotes.de  -  Powered by Syslords Solutions  -  Datenschutz