_lu := @DbLookup("Notes" : "NoCache";"" ; "default"; "F1A"; 2);
@Prompt([Ok];"TEST";@Implode(_lu;"**"))
liefert mir schon alle Werte:
oder habe ich was falsch verstanden?
_lu := @DbLookup("Notes" : "NoCache";"" ; "default"; "F1A"; 2);
@Prompt([Ok];"TEST";@Implode(_lu;"**"))
liefert mir schon alle Werte:
oder habe ich was falsch verstanden?
In den Masken, Ansichten, Pages...gibt es das onHelp-Event.
Hier kann man sehr schön via Formel einen Agenten aufrufen.
Über set doc = workspace.CurrentDocument.Document kann man für Masken den Namen bestimmen: doc.Name bzw. doc.Aliases.
Wenn dabei nix rauskommt, ist es wohl eine Ansicht: workspace.currentview. In der/n Hilfedatenbanken kann man so das passende Hilfe-Dokument suchen zB. docHilfe = vw.getdocumentbykey, search...
dann noch
Call workspace.opendatabase(dbserver,dbname)
Set uidb = workspace.currentdatabase
Call uidb.openview("Hilfe")
Set uivw = workspace.currentview
Call uivw.selectdocument(docHilfe)
Call workspace.viewrefresh()
Call workspace.settargetframe("HilfeInhaltFrame")
Call workspace.editDocument(True)
so öffnet jedes F1 das passende Doc zum focussierten Designelement.
Also,
auf Beweis-Fotos verzichte ich jetzt mal.
Ich habe festgestellt, dass wann/wieso auch immer die Returns mal als "break" und mal in verschiedenen "par" dargestellt werden, z.B. wenn die Texte unterschiedlich formatiert sind.
Dann muss man halt noch den 2-Zeiler einfügen:
[lstText(intCount) = Chr(13)
intCount = intCount + 1]
[ If parNodeList.NumberOfEntries > 0 Then
For parPos = 1 To parNodeList.NumberOfEntries
Set parNode = parNodeList.GetItem(parPos)
Call rekursivChildNodes(parNode)
lstText(intCount) = Chr(13)
intCount = intCount + 1
Next
End If]
An welchen Stellen Du dann vielleicht CHR(13) & CHR(10) einfügen musst, wirst Du schon rausfinden; wenn Du InlineImages und anderes Zeug hast etc., da wird's lustig mit zwischen > und <.
die msgbox ist nicht sauber in der Darstellung, mein strText hat es aber richtig.
noch angehängt:
Set doc = col.GetFirstDocument
doc.Test = strText
Call doc.save(True, False)
Geschlampt habe ich aber bei der col ->lstText
da müsste noch ein Trenner für die einzelnen docs rein...
Aber egal, hautsache läuft!
Ich find's nett, dass Du Dein Script gepostet hast, man kann immer dazulernen.
Wir hatten auch mal so eine User-Dominier-Anforderung, weil der User seine Returns optisch nach seinen Wünschen aufarbeiten können sollte ( -, **, ~, _). Frag mich nicht, warum, hab ich auch nicht mehr.
Und der nächste kann sich die Arbeit sparen.
Ausserdem ein Code sagt mehr als 1000 Worte.
Habe mal 'nen Kollegen von der Arbeit abgehalten, weil ich kein Vista habe: wie Du sagst, da ist es, halt etwas versteckt:
Standardprogramme einstellen, benutzerdefiniert auswählen und erweitern: dort findet sich der Mail-Default...
Und wenn da kein Notes -> fröhliches Installieren...
...nur das es im IE unter Vista halt nicht mehr unter:
Extras-Internetoptionen-Programme die Auswahlbox "E-mail" gibt.
Wo das unter Vista ist, weiss er/ich nicht.
Das heisst nicht, dass was mit der Installation fehlschlug.
Wenn doch, klar -> Notes eventuell sogar Vista neu installieren.
Ist aber doch einen Versuch in der ini Wert oder kannst Du beschreiben, wo das unter Vista im IE oder Explorer etc steht?
Wohl eher im IE-Forum?
Hi,
wenn man den Eintrag
DontCheckDefaultMail=1
in der Notes.ini löscht,
wird beim nächsten Start des NotesClients gefragt, ob man Notes zum Default Mail Client machen will.
Wenn ja, sollte das beim nächsten Link im Browser funktionieren (keine Ahnung ob Neustart...) gehen.
Ich als Grobmotoriker habe das extra deaktiviert, weil es ziemlich lang hat, bis Notes gestartet ist, wenn man aus Versehen auf einen SendTo-Link klickt oder im Kontextmenü statt "speichern unter" runter auf "Link senden" rutscht.
Gruss
edit:
Notes zu
.ini-Eintrag löschen.
Notes starten - ja, ich will...
Browser-Link ohne Neustart anklicken - et voila!
So, jetze einen Button in die Ansicht:
Sub mit subs und functions:
Declarations:
Dim lstText List As String
Dim intCount As Integer
Sub Click(Source As Button)
Dim ws As New notesuiworkspace
Dim ns As New notessession
Dim db As notesdatabase
Dim vw As notesview
Dim col As Notesdocumentcollection
Dim exporter As notesdxlexporter
Dim parser As notesdomparser
Dim importer As notesdxlimporter
Dim strText As String
Dim blnExport2HDD As Boolean
Dim i As Integer
Set db = ns.CurrentDatabase
Set col = db.UnprocessedDocuments
If col.count > 0 Then
Set exporter = ns.CreateDXLExporter
Set parser = ns.CreateDOMParser()
Set importer = ns.CreateDXLImporter
Call exporter.SetInput(col)
Call exporter.SetOutput(parser)
If blnExport2HDD Then 'DebugHelfer
Msgbox "Pech gehabt.", 64, "Systemarbeiten..."
Dim stream As notesstream
Set stream = ns.CreateStream
Call stream.Open("C:\Export.dxl")
Call stream.Truncate
Call parser.setOutput(stream)
Else
Call parser.setOutput(importer)
Call importer.SetOutput(db)
importer.ReplaceDBProperties = False
importer.DocumentImportOption = DXLIMPORTOPTION_UPDATE_ELSE_CREATE
importer.ReplicaRequiredForReplaceOrUpdate = False
End If
On Event PostDOMParse From parser Call ParseEvent
Call exporter.process
Forall x In lstText
strText = strText + x
End Forall
Msgbox strText
End If
End Sub
Sub ParseEvent(source As NotesDOMParser)
Dim domdoc As notesDOMDocumentNode
Dim rtNodeList As notesDOMNodeList
Dim rtNode As notesDOMElementNode
Dim rtPos As Integer
Dim parNodeList As notesDOMNodeList
Dim parNode As notesDOMNode
Dim parPos As Integer
Set domdoc = source.Document
Set rtNodeList = domdoc.GetElementsByTagName("richtext")
If rtNodeList.NumberOfEntries > 0 Then
For rtPos = 1 To rtNodeList.NumberOfEntries
Set rtNode = rtNodeList.GetItem(rtPos)
Set parNodeList = domdoc.GetElementsByTagName("par")
If parNodeList.NumberOfEntries > 0 Then
For parPos = 1 To parNodeList.NumberOfEntries
Set parNode = parNodeList.GetItem(parPos)
Call rekursivChildNodes(parNode)
Next
End If
Next
End If
Call source.serialize
End Sub
Sub rekursivChildNodes(parentNode As NotesDOMNode)
Dim ChildNode As notesDOMNode
Set childNode = parentNode.firstchild
Do Until childNode.IsNull
Call rekursivChildNodes(childNode)
If childNode.NodeType = 3 Then
lstText(intCount) = Replace(childNode.NodeValue, Chr(13), "")
intCount = intCount + 1
End If
If childNode.NodeName = "break" Then
lstText(intCount) = Chr(13)
intCount = intCount + 1
End If
Set childNode = childNode.nextSibling
Loop
End Sub
Ich denke es brauch noch ein bisschen Feintuning...
also, ich nehme zur Ansicht für dxl den firefox, der macht das ganz hübsch finde ich. Das wollte ich dann hier einkopieren, sah über fürchterlich aus und bevor ich Steve_O einen neuen TFT verkaufe :-), habe ich das ausgeschnitten und in eine txt kopiert. Dabei ist wohl einiges ersetzt worden...TXT geht ja eh nicht, also habe ich das in jpg umgewandelt... Letzten Endes sehen die par-Tags etc. schon so aus wie bei Dir... Komisch nur, dass bei Dir gar keine <breaks> sind...
Inhalt als HTML und MIME hast Du auch, sonst wäre da nur Salat...
Bei Gelegenheit werde ich mal was basteln, wenn mir keiner zuvor kommt (erwartungsvoll)...momentan muss ich hier mal was tun...
naja, wohl auch nicht als .txt dann halt .jpg
Kannst Du haben wird Dir aber auch nicht gefallen, weil viel Arbeit :-):
Das Dokument per DXL exportieren, wie man hier nur schlecht sieht, sind die "echten" Umbrüche "Breaks" und die anderen muss man mit replace Filtern und dann die einzelnen Blöcke zusammensetzen...
Halbwegs verständlich?
edit: Sorry, wird alls html teilweise interpretiert, daher im Anhang...
kann ich so bestätigen, ist tatsächlich ein Umbruch:
myText = Implode(Split(item.Text, Chr(13)), "***")
Msgbox myText
aber in den Properties des Feldes kann ich es kopieren und im Editor eingefügt ist es ohne zuviel Umbrüche...
Oder einfach:
Messagebox item.Abstract(5000, True, False),, "Body abstract"
Kannst Du mal paar Zeilen mehr posten, dann kopier ich mir das mal...
habe mal einen Ordner Test erstellt, print in QO und QOD geschrieben.
Dok mit C'n'P eingefügt. Dok öffnen zeigt print an.
Nochmal beide gelöscht, Ordner neu angelegt, privaten durch Öffnen erzeugt und dann im Privaten geändert -> zeigt print an.
Hast Du die Änderung im Hauptordner gemacht?
Die wird nicht in den privaten "vererbt" -> alle privaten löschen damit Designänderungen übernommen werden.
Oder habe ich was falsch verstanden?
Gruss
Ist doch schon mal ein Feedback.
Sicher kannst Du mir aber sagen, wie ich meine Beiträge nachträglich editieren kann?
Findnix & Raffnix
Edith: und ich dachte schon ich wäre zu blöd den Button zu finden
Danke!
hmm, ich find hier keinen Edith-Button, also schreibe ich mal eine Antwort:
Also, soviele Leser, so wenig Antworten:
Ist die Frage unverständlich?
Konnte das mal jemand nachvollziehen?
Kurzanleitung:
Neue db anlegen, leere Maske "0Test" anlegen, Script in Aktion kopieren in Default-Ansicht, Button drücken und im Designer Notesvorschau für das Form, im Notes-Client dann Time picken und stattdessen Datum erhalten.
Datumsfeld löschen.
Gleiches im 6er.
sollte eine Zeit liefern.
Oder kann mir jemand sagen, wo ich das als Bug melden kann ohne Warrant# oder Passport-Advantage-Vertrag?
Irgendwelche Kommentare?
Danke und Grüsse
Hallo zusammen!
In R6 ging/geht mein Code noch. Unter R7 nicht.
Ich erzeuge (per DXL) ein Form und ein Datumsfeld, Anzeige "nur Zeit".
Das fertige Form enthält zwar den richtigen Timepicker, aber egal was ich wähle, es zeigt das heutige Datum an.
Das Export Tool zeigt mir exakt den gleichen XML-Code an, wenn ich das Form händisch erstelle.
Witzigerweise (gleicher Export Code) verschwindet der Fehler, sobald ich den 2 Reiter der Feld-Properties aufrufe und dann speichere (zumindest für das eine Datumsfeld).
Ich habe es mal mit einer angpassten 6er DTD probiert, gleiches Problem.
Kann mir jemand den Bug bestätigen? Habe nix in den Hotfixes oder SPRs gefunden.
Hier ein kleiner Bspl-Code auf das Wesentlichste gekürzt, daher bitte einfach mal ein leeres Form "0Test" anlegen und einen Ansichts-Aktionsbutton mit folgendem Inhalt drücken:
Sub Click(Source As Button)
Dim ns As New NotesSession
Dim db As notesdatabase
Dim vw As notesview
Dim nc As NotesNoteCollection
Dim doc As NotesDocument
Dim exporter As notesdxlexporter
Dim parser As notesdomparser
Dim importer As notesdxlimporter
Dim strID As String
Set db = ns.CurrentDatabase
Set nc = db.CreateNoteCollection(False)
nc.SelectForms = True
'Bitte ein leeres Form anlegen, ich erstelle keins, weil ich hier RTF-Copies mache, die in DXL nicht gehen...:
nc.SelectionFormula = {$Title ="0Test"}
Call nc.BuildCollection
strID = nc.GetFirstNoteId
Set doc= db.GetDocumentByID(strID)
Set exporter = ns.CreateDXLExporter
Set parser = ns.CreateDOMParser()
Set importer = ns.CreateDXLImporter
Call exporter.SetInput(doc)
Call exporter.SetOutput(parser)
Call parser.setOutput(importer)
Call importer.SetOutput(db)
importer.ReplaceDBProperties = False
importer.DesignImportOption = DXLIMPORTOPTION_REPLACE_ELSE_CREATE
importer.ReplicaRequiredForReplaceOrUpdate = False
On Event PostDOMParse From parser Call ParseEvent
Call exporter.process
End Sub
Sub ParseEvent(source As notesdomparser)
Dim domdoc As notesDOMDocumentNode
Dim NodeList As NotesDOMNodeList
Dim parNode As NotesDOMElementNode
Dim runNode As NotesDOMElementNode
Dim fontNode As NotesDOMElementNode
Dim fieldNode As NotesDOMElementNode
Dim datetimeformatNode As NotesDOMElementNode
'%REM
Set domdoc = source.Document
Set NodeList = domdoc.GetElementsByTagName("par")
Set parNode = NodeList.GetItem(1)
'Set runNode = domdoc.CreateElementNode("run")
'Set fontNode = domdoc.CreateElementNode("font")
'Call fontNode.SetAttribute("size", "10pt")
'Call runNode.appendChild(fontNode)
Set fieldNode = domdoc.CreateElementNode("field")
Call fieldNode.SetAttribute("usenotesstyle", "false")
'Call fieldNode.SetAttribute("height", "0.2500in")
'Call fieldNode.SetAttribute("width", "0.7in")
'Call fieldNode.SetAttribute("multiline", "true")
'Call fieldNode.SetAttribute("borderstyle", "none") 'do not work in R6, not necessary in R7
Call fieldNode.SetAttribute("type", "datetime")
'Call fieldNode.SetAttribute("kind", "editable")
Call fieldNode.SetAttribute("name", "MyDateTime")
Call parNode.appendChild(fieldNode)
Set datetimeformatNode = domdoc.CreateElementNode("datetimeformat")
Call datetimeformatNode.setAttribute("show", "time")
'Call datetimeformatNode.setAttribute("date", "yearmonthday")
'Call datetimeformatNode.setAttribute("fourdigityearfor21stcentury", "true")
Call datetimeformatNode.SetAttribute("time", "hourminute")
'Call datetimeformatNode.setAttribute("zone", "never")
Call fieldNode.appendChild(datetimeformatNode)
'%END REM
Call source.serialize
End Sub
Ich habe mal alles ausgeremt, was ich mal für nötig hielt...
Macht sich jemand mal die Mühe? Wäre echt nett...
Danke im Voraus...
Mit fröhlichen Grüssen.