10. september 2001 - 14:20Der er
47 kommentarer og 3 løsninger
fælles arkivering
når man står i et memo og skal sende det, kan man vælge at trykke på knappen \"send og arkiver\" hvordan får jeg en ekstra database med i options her, så jeg kan vælge at arkivere direkte ned i eks. et fællesarkiv.. ??? man må jo kunne fikse scriptet på knappen, selvom jeg ikke har kunnet finde den i designeren... ?!?
ok. Jeg ville lave en script agent under other/shared action indeholdende noget a la følgende: Dim archiveDb As New NotesDatabase( \"\", \"\" ) Dim doc As NotesDocument \'...set value of archiveDb... \'...set value of doc... Call doc.CopyToDatabase( archiveDb )
jjj>> det giver mig jo netop kun en statisk knap som kopierer til en fast database....det har jeg allered elavet en agent der kan, men jeg ville gerne have mulighden for at når man trykker send og arkiver, der at kunne vælge en ekstern database... thanks anyway....
så lav en en dialogbox hvor man kan vælge ud fra en liste af relevante databasen, og læg den værdi ned i archiveDB. så er database valget dynamisk, men funktionaliteten lidt mere kompliceret. for at finde alle databaser på server skal du gøre noget a la dette: Dim dbdir As New NotesDbDirectory(\"Snapper\") Dim db As NotesDatabase Set db = dbdir.GetFirstDatabase(DATABASE) Msgbox db.Title, , db.FileName
her er det script der står på knappen i forvejen, kan det ikke flettes ind i den?? MEMO_SEND_FILE:=2097152; FIELD ActionInProgress:=MEMO_SEND_FILE; @If(@Command([FileSave]);@Command([FileCloseWindow]);@Return(\"\"))
damn....det er sgu for avanceret..... hvis der er en der sidder med nøglefærdig løsning til hvordan man gemmer i ekstern database direkte fra \"memo\" formen, så afsætter jeg gerne flere points...... ;)
Hvis du skal lave en nogenlunde elegant løsning skal du over at have fat i Database-open dialogen fra nlnotes(ws?).dll og så erklære den i din agent, lave dialogen, åbne databasen og så bruge jjj\'s løsning med doc.CopyToDatabase.
Jeg vil godt love at kigge efter den præcise funktion, men hvis du selv havde tid til at søge på notes.net eller clp-forum e.l. kunne vi speede en del op.
hmm...skulle det være morsomt ;-) vi har bevidst fravalgt IT factory...alene p.gr.a prisen .... jeg syntes ikke der dukker noget op på Note gold forum.... ;-(
Try @Command([choosedatabase]; \"\"; \"\"; \"\"; \"\"). It shows a dialog to select database, and returns list of name of server, path of database, title of database
Dvs. at det den skal testes imod er en
dim dbnew as variant dbnew = evaluate([@Command([choosedatabase]; \"\"; \"\"; \"\"; \"\")])
if IsEmpty(dbnew) then exit sub \'<-- den skal lige grovtestes
dim Arc as new NotesDatabase(dbnew(0),dbnew(1))
hth jes -- Og jeg har ikke kinmands chance for selv at teste ;-)
jeg tror ikke jeg har formuleret mig rigtigt, det jeg ønsker er en knap på min mailform, som jeg efter at have modtaget eller konstrueret en mail kan trykke på og her vælge hvilken database/ mappe jeg vil gemme mailen i !! som det er nu kan man kun vælge lokale mapper.... ved at trykke send og arkiver.
Jeg har, som det fremgår aldrig fundet den der command-choosedatabase før, men den har den rigtige beskrivelse.
Læg det som en agent, som skal aktiveres fra agentlisten, skjul den og kald den fra din knap.
Den vil stadig kende den kontekst, den kommer fra, så vi adgang til dokument, database m.v.
Hvad der lige er en trickyhed er, at det må anbefales at gemme dokumentet før vi kopierer, men det er der vel heller ikke noget galt i.
Altså: Tryk på en knap, få en database-vælg-dialog, se en liste over folders (med mulighed for at vælge blank, så det er en view-selection, der bestemmer), vælg denne og send så.
For øvrigt (jeg nåede ikke en Notes-installation -- verden blev jo lige ændret) kan det ikke være i orden, at vi sætter en fast server?
For hvis ikke choosedatabase virker, kan vi jo i hvert fald bruge den almindelige fileOpen-dialog ved hjælp af en fast netværks-adressering af serverens data-drev.
ups..min fejl, det drejer sig om en fast server installation..... så hvis file open kan gøre tricket, ville det jo være perfekt....og ja det tør siges at verden er ændret....rystende...
Jamen så kan jeg give dig det meste af koden uden at bruge en Notes-installation:
dim ws new NotesUIWorkspace dim s as new NotesSession dim db as NotesDatabase dim uidoc as NotesUIDocument dim doc as NotesDocument dim filstreng as variant dim target as NotesDatabase dim folder as String dim kopi as NotesDocument
set db = s.CurrentDatabase set uidoc = ws.CurrentDocument set doc = uidoc.Document
%rem Jeg kan ikke lige huske syntaksen for OpenFileDialog, men den kan du vist godt lige fikse, ik\' Men jeg forudsætter, at alle brugeres maskiner i logon-scriptet har en net use o = \\\\DominoServer\\Datadrev\\DominoBibliotek\\data -- eller hvordan en net use li\'e ser ud %end rem filstreng = ws.OpenFileDialog(\"\",false,\"Vælg database, du vil arkivere mailen i\",\"o:\\\",\"Notes databaser|*.nsf\") if isEmpty(filstreng) then \'<-- Jeg har lige glemt om det er den eller om der skal checkes for filstreng=nothing msgbox \"Arkivering og afsendelse afbrudt\" exit sub end if
if filstreng(0) = \"\" then msgbox \"Arkivering og afsendelse afbrudt\" exit sub end if \' Ja, det er med vilje, at der er to check
if instring(lcase(filstreng), \"o:\\\") then filstreng = mid$(filstreng, 4) else msgbox \"Arkivering og afsendelse afbrudt\" exit sub end if
set target = new NotesDatabase(db.server, filstreng) if not target.IsOpen then msgbox \"Arkivering og afsendelse afbrudt\" exit sub end if
%rem her kan du så sætte en dialog ind, hvis der skal kopieres til en særlig brugervalgt folder: dim tmpdoc as NotesDocument set tmpdoc = db.CreateDocument tmpdoc.folders = target.Folders
\'Lav en form med en Layout-region, eet skjult felt med multivalue, som hedder Folders \'Og en Combo- eller listbox (navn her: folder) med data-formlen: Folders call ws.DialogBox(\"Dialogboxform\",true,true,false,false,false,false,\"Vælg arkiveringsfolder\",tmpdoc) folder = tmpdoc.folder call kopi.PutInFolder(folder) %end rem
end sub
-- Og -- Lige skrevet her på Eksperten, så vend du bare tilbage, hvis jeg skulle have overset noget i mit 10-liniers-billede.
Altså opret en action, vælg at den skal køre LotusScript og paste koden (husk at fjerne \'end sub\'), prøv at gemme og vend tilbage med de syntaks-fejl den melder (der var tre steder, jeg var alvorligt i tvivl, så statistikken siger ...) jes
Folders call ws.DialogBox(\"Dialogboxform\",true,true,false,false,false,false,\"Vælg arkiveringsfolder\",tmpdoc) folder = tmpdoc.folder call kopi.PutInFolder(folder) denne kode vil ikke godkendes på comboboxen
EY EY EY EY \"Men jeg forudsætter, at alle brugeres maskiner i logon-scriptet har en net use o = \\\\DominoServer\\Datadrev\\DominoBibliotek\\data\"
Er det ikke et kæmpe sikkerhedshul ? Mig bekendt kan du Domino\'s overstyre sikkerhed fuldstændigt ved \"lokal\" adgang til filerne. Og det har du jo netop ved at mappe drevet.
>>wise Jo ! Men jeg er da som default gået i gang med at sætte en administrator-server på ALLE mine databaser, det klarer den. Men jeg ville også vælge et underbibliotek, hvis jeg skulle lave det.
>>spine \'Og en Combo- eller listbox (navn her: folder) med data-formlen: Folders
-- og så ikke mere Årh, funktionen hedder instr (og lige en detalje mere forkert):
If instr(Lcase(filstreng), \"o:\\\")>0 Then filstreng = Mid$(filstreng, 4) Else Msgbox \"Arkivering og afsendelse afbrudt\" Exit Sub End If
nå nu har jeg så fået knappen smidt på min memoform, ved tryk på den får jeg en dialogboks som siger. Incorrect argument type: string expected
Og den form med comboboxen resulterer udelukkende i en option i \"create\" menue der hedder combofolders og som ingen valgmuligheder har... ???jeg er på herrens mark her
Som jeg skrev>: Jeg kan ikke lige huske syntaksen for OpenFileDialog, men den kan du vist godt lige fikse, ik\'
Så check lige syntaksen for OpenFileDialog (Cursoren i script-vinduet, reference-tabben, NotesUIWorkspace-->methods-->OpenFileDialog-->[F1] ) Kopier den evt. hertil, da jeg nu ved, at jeg tidlgst sent i aften kommer i nærheden af en Notes *måske*
filstreng = ws.OpenFileDialog(\"\",false,\"Vælg database, du vil arkivere mailen i\",\"o:\\\",\"Notes databaser|*.nsf\")
Har nu rettet syntaksen for openfile men det vil stadig ikke virke... Sub Click(Source As Button) Dim ws As New NotesUIWorkspace Dim s As New NotesSession Dim db As NotesDatabase Dim uidoc As NotesUIDocument Dim doc As NotesDocument Dim filstreng As Variant Dim target As NotesDatabase Dim folder As String Dim kopi As NotesDocument
Set db = s.CurrentDatabase Set uidoc = ws.CurrentDocument Set doc = uidoc.Document
%REM Jeg kan ikke lige huske syntaksen for OpenFileDialog, men den kan du vist godt lige fikse, ik\' Men jeg forudsætter, at alle brugeres maskiner i logon-scriptet har en net use o = \\\\DominoServer\\Datadrev\\DominoBibliotek\\data -- eller hvordan en net use li\'e ser ud %END REM filstreng = ws.OpenFileDialog(\"\",False,\"Vælg database, du vil arkivere mailen i\",\"o:\\\",\"Notes databaser|*.nsf\") If Isempty(filstreng) Then \'<-- Jeg har lige glemt om det er den eller om der skal checkes for filstreng=nothing Msgbox \"Arkivering og afsendelse afbrudt\" Exit Sub End If
filstreng = ws.OpenFileDialog(True, \"File List\", _ \"\", \"c:\") Dim messagelist As String Forall filelist In files messagelist = messagelist & filelist & Chr(10) End Forall Messagebox messagelist If filstreng(0) = \"\" Then Msgbox \"Arkivering og afsendelse afbrudt\" Exit Sub End If \' Ja, det er med vilje, at der er to check
If Instr(Lcase(filstreng), \"o:\\\")>0 Then filstreng = Mid$(filstreng, 4) Else Msgbox \"Arkivering og afsendelse afbrudt\" Exit Sub End If
Set target = New NotesDatabase(db.server, filstreng) If Not target.IsOpen Then Msgbox \"Arkivering og afsendelse afbrudt\" Exit Sub End If
%REM her kan du så sætte en dialog ind, hvis der skal kopieres til en særlig brugervalgt folder: dim tmpdoc as NotesDocument set tmpdoc = db.CreateDocument tmpdoc.folders = target.Folders
\'Lav en form med en Layout-region, eet skjult felt med multivalue, som hedder Folders \'Og en Combo- eller listbox (navn her: folder) med data-formlen: Folders call ws.DialogBox(\"Dialogboxform\",true,true,false,false,false,false,\"Vælg arkiveringsfolder\",tmpdoc) folder = tmpdoc.folder call kopi.PutInFolder(folder) %END REM
Vi skal lige have kombineret det eksempel, du fandt i hjælpen:
filstreng = ws.OpenFileDialog(False,\"Vælg database, du vil arkivere mailen i\",\"o:\\\",\"Notes databaser|*.nsf\") If Isempty(filstreng) Then \'<-- Jeg har lige glemt om det er den eller om der skal checkes for filstreng=nothing Msgbox \"Arkivering og afsendelse afbrudt\" Exit Sub End If
SÅLEDES SER KODEN UD NU...ABER ES WIRKT JA NICHT ;-( Sub Click(Source As Button) Dim ws As New NotesUIWorkspace Dim s As New NotesSession Dim db As NotesDatabase Dim uidoc As NotesUIDocument Dim doc As NotesDocument Dim filstreng As Variant Dim target As NotesDatabase Dim folder As String Dim kopi As NotesDocument
Set db = s.CurrentDatabase Set uidoc = ws.CurrentDocument Set doc = uidoc.Document
%REM Jeg kan ikke lige huske syntaksen for OpenFileDialog, men den kan du vist godt lige fikse, ik\' Men jeg forudsætter, at alle brugeres maskiner i logon-scriptet har en net use o = \\\\DominoServer\\Datadrev\\DominoBibliotek\\data -- eller hvordan en net use li\'e ser ud %END REM filstreng = ws.OpenFileDialog(\"\",False,\"Vælg database, du vil arkivere mailen i\",\"o:\\\",\"Notes databaser|*.nsf\") If Isempty(filstreng) Then \'<-- Jeg har lige glemt om det er den eller om der skal checkes for filstreng=nothing Msgbox \"Arkivering og afsendelse afbrudt\" Exit Sub End If
filstreng = ws.OpenFileDialog(True, \"File List\", _ \"\", \"c:\") Dim messagelist As String Forall filelist In files messagelist = messagelist & filelist & Chr(10) End Forall Messagebox messagelist If filstreng(0) = \"\" Then Msgbox \"Arkivering og afsendelse afbrudt\" Exit Sub End If \' Ja, det er med vilje, at der er to check
If Instr(Lcase(filstreng), \"o:\\\")>0 Then filstreng = Mid$(filstreng, 4) Else Msgbox \"Arkivering og afsendelse afbrudt\" Exit Sub End If
Set target = New NotesDatabase(db.server, filstreng) If Not target.IsOpen Then Msgbox \"Arkivering og afsendelse afbrudt\" Exit Sub End If
%REM her kan du så sætte en dialog ind, hvis der skal kopieres til en særlig brugervalgt folder: dim tmpdoc as NotesDocument set tmpdoc = db.CreateDocument tmpdoc.folders = target.Folders
\'Lav en form med en Layout-region, eet skjult felt med multivalue, som hedder Folders \'Og en Combo- eller listbox (navn her: folder) med data-formlen: Folders call ws.DialogBox(\"Dialogboxform\",true,true,false,false,false,false,\"Vælg arkiveringsfolder\",tmpdoc) folder = tmpdoc.folder call kopi.PutInFolder(folder) %END REM
Hvorfor bruge OpenFileDialog når Notes tilbyder klassen NotesDBDirectory?
Dette skal selvfølgelig stadig kombineres med dialogbox osv. men man vil være ude over problemet med at finde filnavne og med at have brug for en bagindgang til Notes\' databibliotek
ok...den kender jeg ikke hvis du kan flette den ind i koden er pointene dine...så afsætte jeg nogle flere til roenving som trods alt har brugt meget tid på dette...
Prøv det her - du skal i din database have en formular til brug for dialogboksen med disse felter: AvailableDBs - skjult multiværdi tekstfelt - editerbart selectedDb - keywordfelt - har availableDbs som valgmuligheder (evt. saveoptions sat til \"0\" for en sikkerheds skyld)
Dim ws As New NotesUIWorkspace Dim s As New NotesSession Dim db As NotesDatabase Dim uidoc As NotesUIDocument Dim doc As NotesDocument Dim filstreng As Variant Dim target As NotesDatabase Dim kopi As NotesDocument Dim files() As String Dim fileCount As Integer Dim tmpDb Dim library As New NotesDbDirectory(s.currentDatabase.Server)
Set db = s.CurrentDatabase Set uidoc = ws.CurrentDocument Set doc = uidoc.Document
fileCount=-1 Set tmpDb=library.getFirstDatabase(DATABASE) While Not tmpDb Is Nothing \'if you only want to present databases of a certain type or in a special folder - this i the place to do the check fileCount=fileCount +1 Redim Preserve files(fileCount) files(fileCount)=tmpDb.title & \"|\" & tmpDb.filePath Set tmpDb=library.getNextDatabase Wend
If count<0 Then Messagebox \"Der var ingen databaser tilgængelige\" Exit Sub End If
Set tmpDoc=New NotesDocument(db) Call tmpDoc.replaceItemValue(\"AvailableDBs\", files) If Not ws.DialogBox(\"Dialogboxform\",True,True,False,False,False,False,\"Vælg arkiveringsfolder\",tmpdoc) Then Messagebox \"Arkivering afbrudt\" Exit Sub End If
fileString=tmpDoc.getItemValue(\"SelectedDB\")(0)
Set target=New NotesDatabase(server, filestring) If Not target.isOpen Then Messagebox \"Arkiveringsdatabasen blev ikke fundet\" Exit Sub End If
%REM her kan du så sætte en dialog ind, hvis der skal kopieres til en særlig brugervalgt folder: dim tmpdoc as NotesDocument set tmpdoc = db.CreateDocument tmpdoc.folders = target.Folders
\'Lav en form med en Layout-region, eet skjult felt med multivalue, som hedder Folders \'Og en Combo- eller listbox (navn her: folder) med data-formlen: Folders call ws.DialogBox(\"Dialogboxform\",true,true,false,false,false,false,\"Vælg arkiveringsfolder\",tmpdoc) folder = tmpdoc.folder call kopi.PutInFolder(folder) %END REM
denne stump virker ikke \'Lav en form med en Layout-region, eet skjult felt med multivalue, som hedder Folders \'Og en Combo- eller listbox (navn her: folder) med data-formlen: Folders call ws.DialogBox(\"Dialogboxform\",true,true,false,false,false,false,\"Vælg arkiveringsfolder\",tmpdoc) folder = tmpdoc.folder call kopi.PutInFolder(folder) %END REM
den finder godt nok formen nu, men formlen på dialogboksen (feltet folders) virker ikke, fejlen med operator or semicolon expected fremkommer før call i dette: Folders (HER!)call ws.DialogBox(\"Dialogboxform\",true,true,false,false,false,false,\"Vælg arkiveringsfolder\",tmpdoc) folder = tmpdoc.folder call kopi.PutInFolder(folder)
Tilladte BB-code-tags: [b]fed[/b] [i]kursiv[/i] [u]understreget[/u] Web- og emailadresser omdannes automatisk til links. Der sættes "nofollow" på alle links.