Das Notes Forum
Domino 9 und frühere Versionen => Entwicklung => Thema gestartet von: Alexis am 04.09.03 - 13:27:21
-
Hallo,
suche wieder einmal einen Lösungsansatz.
Ich möchte aus einer Datenbank heraus Dokumente einer zweiten Datenbank mehr oder weniger automatisch löschen.
In ersterer ist mir das zu löschende Element insofern bekannt, dass in einem RTF der Link eingetragen ist. Gelingt es nun über diese Kenntnis per Programmierung das Dokument hinter diesem Link zu löschen?
Dank für jeden Tipp
Alexis
-
... liegt im RTF nur dieser DocLink, oder liegt da noch mehr drin?
ata
-
Hallo Ata,
der Link steht einsam und allein im RTF.
Alexis
-
... dann probier es mal mit @Text(Feldname)
ata
-
Hallo Ata und Fans,
@Text eines Feldes mit einem Link mag die Funktion nicht --> Error.
Noch 'ne Idee vielleicht?
Alexis
-
@Text geht logischerweise nicht - ist ja ein RichText item.
Dann muß das ganze ja auch noch LS sein, sonst ist es ja nix mit Löschen von Dokumenten.
Und mit LS fällt mir erstmal auch nix ein - GetFormattedText liest natürlich auch nicht die UNID aus, auf die der Link verweist.
Bernhard
-
1. Was heißt eigentlich "mehr oder weniger" automatisch ?
2. Gibt es keine anderen Informationen, mit denen das zu löschende Dokument identifiziert werden kann ?
Bernhard
-
Hallöchen,
das ist mein Problem: User stellen die Verbindung zweier Dokumente per Dokumenten-Link her. Später entscheiden sich, dass diese Dokumente gelöscht werden sollen (aber bitte nur in einer Stelle, wegen des Suchaufwandes ;D).
Leider ist es nicht möglich beide Datenbanken zu migrieren, also bleibt "nur" die Frage, wie kann ich aus einem RTF mit einem Dokumenten-Link dessen ID ermitteln, um dann das andere Dokument zu löschen ???
Dank für jede Idee.
Alexis
-
Bevor ich mir jetzt Gedanken mache: Ist sichergestellt, daß es nur einen DocLink pro Dokument gibt ?
Könnt Ihr eigentlich prinzipiell was an dieser App. ändern (dialogorientierte Aufnahme des zu linkenden Dokuments in einer anderen DB) ?
So long,
Bernhard
-
Hallo Berhard,
die Applikation in der der Link eingebunden ist und aus der heraus ich löschen will, kann ich tatsächlich in Eigenregie umbauen.
Es ist sichergestellt, dass in dem Dokument nur ein einziger Link vorhanden ist.
Aus der "anderen" Datenbank (einer Ressourcendatenbank) sollte aber die Verknüpfung per "Copy as Link" über die Zwischenablage in die erstere (wie auch immer) übertragen werden. An Ressourcendatenbank läßt sich nichts ändern (Global App.).
siehst Du da einen Weg?
Alexis
-
Jo, seh' ich. Aber laß mir bitte bis morgen Zeit - ich geh' jetzt mal in den Feierabend.
Interessant ist Dein Problem aber wirklich !
Bis morgen,
Bernhard
-
Moin, moin
@ Alexis
damit müsste es klappen:
unid$ = notesRichTextDocLink.DocUNID
findest Du in der Hilfe unter "NotesRichTextDocLink class" ist die Propertie "DocUNID".
Gruss Hevelmann
-
Hinweis This class is new with Release 6.
Und wir sind im R5-Forum ...
-
..... wo diese Methode nicht angeboten wird.
Alexis
-
hups, wer lesen kann ist klar im Vorteil
sorry
-
hi,
wenn ich Dich richtig verstanden habe, dann muss die Verlinkung über "als Verknüpfung kopieren" erfolgen und dann ist es egal in welcher Form die Verknüpfung im Richtext Feld steht. Du könntest Dir etwas basteln, dass die die Verknüpfung zusätzlich in ein Textfeld kopiert, dann hast du das gleiche, als wenn du eine Notes Verknüpfung aus dem BS nach Notes hast.
Wenn Du das nicht kennst, dann probier mal folgendes: erstelle ein Verknüpfung zu einem Dokument, öffne den Editor und kopiere einfach mal rein. Dann siehst Du die Verknüpfung. Speicher das ganze als *.ndl (* steht für irgendwas) und öffne die Datei aus dem BS heraus.
Wenn Du das gleiche in einem Textfeld machst, dann siehst Du auch die Verknüpfung (als Text) daraus kannst Du Dir dann etwas basteln, dass Dir dann das Verknüpfte Dokument löscht.
Ich denke das sollte nicht allzu schwer sein.
Gruß
Markus
-
Hallo Markus,
darum finde ich LotusNotes und das Forum so toll, ich kann meinem Basteltrieb so richtig frönen und meine Flugzeugmodelle bleiben heile.
Vielen Dank für Deine Anregung, ich werde mich kurzfristig dranmachen.
Gruß
Alexis
-
Hallo Markus, Hallo Fans,
zurück zu meinem Problem:
Vielleicht bin ich nicht Profi genug, aber den Link aus einem RTF kann ich sicherlich nicht mal so eben in ein Textfeld übertragen --> "Incorrect Data Type Error" (im Editmode sehe ich nur das Verknüpfungsicon im RTF).
Im externen Editor sehe ich natürlich den Link als Text, umbenannt und mit LN geöffnet klappt auch, ABER wie kann ich das innerhalb der Maske berechnen lassen. Wie oben erwähnt bekomme ich stets Datentypfehler.
Wo liegt der Haken ???
Alexis
-
Hallo, Alexis,
leider bin ich in den letzten Tagen nicht dazu gekommen, Dir ausführlicher auf Deine Frage zu antworten. Das wird auch in den nächsten Tagen nix, befürchte ich ...
Das bisherige Basteln wird nichts bringen, und jeder weitere Link oder ein unsauberes Füllen des Feldes, das derzeit "garantiert" nur einen Link enthält, ist unterm Strich zu unsicher für eine wirkliche Lösung.
Du hattest ja aber geschrieben, daß Du den Prozeß des Link-Einfügens überwachen kannst.
Daher auf die Schnelle mein Vorschlag: Bau zwei Buttons: Einer öffnet die Ziel-DB (PickList in NotesUIWorkspace), dort wählt der User das zu verlinkende Dok, Du fügst programmatisch in ein berechnetes RTF den Link ein (mit den Standardmethoden von NotesRichTextItem) sowie in ein verstecktes Feld die wirkliche UNID des zu verlinkenden Dokuments.
Der zweite Button ist dann der Löschbutton, der die gespeicherte UNID wieder ausliest und das Dok instantiiert und "removed".
Ich hoffe, das hilft Dir jetzt weiter. Wenn Du Fragen hast - soviel Zeit werde ich mir schon freischaufeln ;-)
Ciao,
Bernhard
-
Hallo Berhard,
leider scheint die Lösung an meiner Unkenntnis von LotusScript zu scheitern. Picklist klappt ja noch, aber "programmatisch in ein berechnetes RTF den Link einzusetzen (mit den Standardmethoden von NotesRichTextItem) ???
Vielleicht kannst Du mir nochmals helfen, wie und wo der "linkTo" übergeben wird in der Methode "Call notesRichTextItem.AppendDocLink( linkTo, comment$ [, HotSpotText$ ])" im EditMode des Dokumentes?
Alexis
-
Schick' doch bitte mal den Code, den Du schon fertig hast.
-
Hier mein Code:
Sub Click(Source As Button)
Dim session As New NotesSession
Dim workspace As New NotesUIWorkspace
Dim db As NotesDatabase
Dim collection As NotesDocumentCollection
Dim doc As NotesDocument
Set db=session.CurrentDatabase
'Öffnet Fenster in der Ressourcen-Datenbank
Set collection = workspace.PickListCollection(1, True,_
"DE01-SPK24/DE01","local\File012.nsf","My Reservations","Überschrift", _
"Please select a document")
?????????
Set rtitem = New NotesRichTextItem( doc, "Link" )
Call rtitem.AppendDocLink( doc, "" )
End Sub
-
Sag zunächst der PicklistCollection, daß nur ein Doc gewählt werden kann (sonst müßtest Du ja n Links einfügen.
Aus der Collection holst Du Dir dann das erste (und einzige) Dokument:
Set doc = collection.GetFirstDocument.
Und damit hastDu auch schon den Parameter LinkTo (wie schon im Code vorhanden).
Nach Picklist würde ich auf gültige Auswahl checken:
If collection.Count <> 0 then
<Gemecker>
Exit Sub
End If
HTH,
Bernhard
-
Hallo Berhard,
tut mir leid, bin zu dumm für Script und benötige noch einmal Support.
Bin jetzt schon mal so weit, dass ich beliebige Daten des ausgewählten PickList-Objektes kriege und auch einbinden kann. Nicht jedoch den Link ???
Was muss ich ändern:
Sub Click(Source As Button)
Dim session As New NotesSession
Dim workspace As New NotesUIWorkspace
Dim db As NotesDatabase
Dim collection As NotesDocumentCollection
Dim doc As NotesDocument
Dim rtitem As Variant
Set db=session.CurrentDatabase
Set collection = workspace.PickListCollection(1, False,_
"DOW-DE01-SPK24/DE01/DOW","local\deuta\de012.nsf","Meine Reservierungen","Auswahlmaske", "Reservierung auswählen")
If collection.Count <> 1 Then
Messagebox "Eine Reservierung auswählen"
Exit Sub
End If
Set doc = collection.GetFirstDocument
' Beispiel Parameter auslesen
Set uidoc = workspace.CurrentDocument
Call uidoc.FieldAppendText( "Sonstiges", doc.Authors(0))
?????????
Set rtitem = New NotesRichTextItem( doc, "Link" )
Call rtitem.AppendDocLink( doc, "Link")
End Sub
Deine Hilfe wäre mir sehr recht.
Alexis
-
doc ist das zu verlinkende Doc, und uidoc ist sicherlich das Dokument, wo der Link 'rein soll.
Set doc = collection.GetFirstDocument
' Beispiel Parameter auslesen
Set uidoc = workspace.CurrentDocument
Call uidoc.FieldAppendText( "Sonstiges", doc.Authors(0))
?????????
'Mit den folgenden beiden Zeilen erzeugst Du das Link-Feld samt Link im zu verlinkenden Dokument - was sicher nicht erwünscht ist:
Set rtitem = New NotesRichTextItem( doc, "Link" )
Call rtitem.AppendDocLink( doc, "Link")
Daher:
Dim docCurrent as NotesDocument
Set uidoc = workspace.CurrentDocument
Set docCurrent = uidoc.Document
Set rtitem = New NotesRichTextItem( docCurrent, "Link" )
Call rtitem.AppendDocLink (doc, "Link")
Da rtitem ja ein RTF ist, ist das Ergebnis erst nach dem Speichern und erneutem Öffnen des uidocs zu sehen.
HTH,
Bernhard
-
Bernhard,
leider sehe ich den Link in der Maske nicht :-[
Nicht nach Abspeichern,
Feld "Link" als RTF mit Mehrfachwerten oder auch nicht,
Feld "Link" berechnet oder auch nicht.
Hast Du noch 'ne Idee?
Kann der Debugger helfen?
Alexis
-
Deklariere mal Dein rtitem als NotesRichTextItem statt als Variant. Und dann schau mal im Debugger, wie die Variablen nacheinander belegt werden.
Auf die Schnelle sehe ich nicht, was sonst nicht paßt.
So long,
Bernhard
-
Berhard,
mir fällt nur auf, dass uidoc vom Typ Variant ist.
Als NotesDocument deklariert erhalte ich die Fehlermeldung in der Zeile Set uidoc = workspace.CurrentDocument "Type mismatch CurrentDocument"
???
Alexis
-
Da habe ich total übersehen, daß Du ja uidoc gar nicht deklariert hast:
Dim uidoc as NotesUIDocument
Dazu noch ein Tip: Schreibe nie eine einzige Zeile LS, ohne in die Options des Moduls eingetragen zu haben:
Option Declare
HTH,
Bernhard
-
Hallo Forum, hallo Bernhard,
leider bin ich bis jetzt noch nicht erfolgreich, obwohl die Hilfestellung von Berhard für mich Script-Greenhorn prima war und nun leider 8) Urlaub ansteht. Hier der letzte Stand des Scripts, vielleicht hat noch jemand in der Zwischenzeit 'ne Idee, warum der Link nicht in der Maske erscheint. Nach dem Urlaub geht' weiter.
Sub Click(Source As Button)
Dim session As New NotesSession
Dim workspace As New NotesUIWorkspace
Dim db As NotesDatabase
Dim collection As NotesDocumentCollection
Dim doc As NotesDocument ' Reservierung
Dim uidoc As NotesUIDocument ' Bewirtungsmaske
Dim docCurrent As NotesDocument
Dim rtitem As NotesRichTextItem
Set db=session.CurrentDatabase
Set collection = workspace.PickListCollection(1, False,_
"DE01-SPK24/DE01","DOW012.nsf","My Reservations","My Dialog", _
"Please select a document.")
If collection.Count <> 1 Then
Messagebox "Eine Reservierung auswählen"
Exit Sub
End If
Set doc = collection.GetFirstDocument
Set uidoc = workspace.CurrentDocument
Set docCurrent = uidoc.Document
Set rtitem = New NotesRichTextItem( docCurrent, "Link" )
Call rtitem.AppendDocLink (doc, "Link", "Link")
End Sub
Danke und tschüss
Alexis
-
Hm, Du fügst den Link im Backend ein, speichern tust Du dann aber offensichtlich im FrontEnd.Das UI-Dokument weiß aber nicht, was Du hinter seinem Rücken getan hast.
Beende mal Deine Aktion mit einem
Call docCurrent.Save (True, False, True)
HTH,
Bernhard