Avatar billede cbkc. Nybegynder
14. maj 2001 - 12:58 Der er 2 kommentarer og
1 løsning

Ændring af feltet i dokumenter, andre databaser

Hvor dan rettes felter i dokumenter i en anden database, end den man foretager rerttelsen fra. Feks. hvis man retter en dato i database 1, og ønsker at samme ændring skal ske i database 2, der har samme dato stående i et felt i et dokument.
Avatar billede jhr Nybegynder
15. maj 2001 - 12:43 #1
Hmm, det kan gøres med et script i en agent - den kan tilgå andre databaser, tilmed på andre servere.
Avatar billede cbkc. Nybegynder
16. maj 2001 - 09:00 #2
Har prøvet at benytte en agent der kører følgende:
Dim ses As New NotesSession   
Dim db As NotesDatabase   
Dim view As NotesView   
Dim dc As NotesDocumentCollection
Dim doc As NotesDocument   
Dim i As Integer, j As Integer
   
Set db = ses.getDatabase(\"\",\"Notesdatabase.nsf\" )
Set view=db.GetView\"Noteorinteringsoversigt\")   
Set dc = db.UnprocessedDocuments
i = dc.Count
For j = 1 To i
Set doc = dc.getnthdocument(j)   
If doc.Dato_Udvmøde = startdato Then   
  doc.Dato_UdvMøde = mdato
  Call doc.save(True,False)
End If                   
Next

Men eneste resultat er beskeden :
Cant get left-to-do list, \"databasen\" is not the agent\'s database.

Skal der rettes i adgangs lister, eller er der nogle indstillinger af agenten jeg ikke er opmærksom på??
Avatar billede jhr Nybegynder
16. maj 2001 - 10:53 #3
Ja du skal være sikker på at serveren har ret til at tilgå databaserne.

Så skal du også lige være sikker på at du som bruger har adgang til at afvikle scripts i hele domænet. Hvis du ikke har det, kommer det til at knibe med at hente data i en anden database (Se i serverdokumentet, hvem der må afvikle scripts).
Husk i ACL på alle databaser kan man angive på alle brugere om de har ret til at afvikle agenter.

Men ingen diskussion:
Du kan sagtens tilgå en anden database fra dit script.

Så et lille hint:
LAD VÆRE MED AT HENTE DOKUMENTER SOM DU GØR:
dc.getnthdocument(j) - måden den funktion kører på er nemligt som følger:

1.dokument: Tæller 0-1.
2.dokument: Tæller 0-2.
10000. dokument: Tæller 0-10000!!!

Gør istedet således:
Set dc = db.UnprocessedDocuments
Set doc = dc.getfirstdocument
Do until doc is nothing
...
Her kan du sætte din if sætning.
...
Set doc = dc.getnextdocument(doc)
Loop

Hvis du vil tune performancen yderligere laver du et view, hvor første kolonne er Dato_Udvmøde. Så kan du lave en collection, hvor du KUN får fat i de dokumenter der har den dato du er ude efter.
Avatar billede Ny bruger Nybegynder

Din løsning...

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.

Loading billede Opret Preview
Kategori
Computerworld tilbyder specialiserede kurser i database-management

Log ind eller opret profil

Hov!

For at kunne deltage på Computerworld Eksperten skal du være logget ind.

Det er heldigvis nemt at oprette en bruger: Det tager to minutter og du kan vælge at bruge enten e-mail, Facebook eller Google som login.

Du kan også logge ind via nedenstående tjenester