Domino 9 und frühere Versionen > ND6: Entwicklung

Mittels Agent Doks in einer andern DB anlegen?

<< < (2/4) > >>

LisaS:
Es klappt doch noch nicht so ganz...
Und zwar habe ich jetzt folgende Situation.
Der User kann mit hilfe des Agent1 auf der DB1 ein Dokument mit versch. Fronend-Abfragen erstellen. Ist das Dok. erstellt stößt der Agent1 den Agent2 mit NotesAgent.RunOnServer an und agent2 kopiert das Dok in eine andere DB2.
Da Agent2 mit Adminrechten signiert ist darf er auch das dok in die DB2 schreiben, obwohl der User nur Leserechte auf der DB2 hat.

Das funktioniert alles Super, bis das Ganze mit lokalen Repliken passieren soll.
Leider kann man die Agenten die mit NotesAgent.RunOnServer aufgerufen werden nicht debuggen, aber es sieht so aus als ob lokal der Agent2 einen Fehler produziert zumindest aber nicht richtig durchläuft.
Woran kann das liegen, kann man NotesAgent.RunOnServer lokal nich nutzen?
Gruß
Hitcher

DerAndre:
Hi.

Wo liegt die 2. Datenbank? Auch lokal oder auf dem Server?
Wenn die DB auf dem Server liegt, weis der Agent das?

Gruss

André

LisaS:
@Andre:
Die db2 liegt auch lokal, der Agent kennt die DB.
Gruß Hitcher

LisaS:
Hallo,
ich bekomme es einfach nicht hin, dass Agent2 Lokal die Dokumente in die in die DB2 schreibt.
Auch habe ich festgestellt, dass in der DB1 geschrieben werden kann, aber nicht doc.remove greift.
Wie gesagt auf dem Server klappt alles.
Also hier etwas Code:
Der Agent 1 erstellt mit Hilfe von Frontend Eingaben das Dok1 auf der DB1, dann startet er den Agennt2 mit hilfe von 

--- Code: ---Set agent = ndb.GetAgent("writetask")
If agent.RunOnServer = 0 Then
Else
Messagebox "Agent did not run",, "Failure"
End If
--- Ende Code ---
Und hier der Agent2, er soll das Dok1 in der DB2 anlegen und danach Dok1 auf der DB1 löschen:

--- Code: --- Set ns = New notesSession
Set ndb = ns.currentDatabase
Set dbnameview = ndb.getview("A Replik ID")
Set dbnamedoc = dbnameview.getdocumentbykey("Aktuell")
dbnamestring = dbnamedoc.DB_Name_ZeiterfassungStammdaten
server = ndb.server
Set db_stamm = ns.GetDatabase(server, dbnamestring(0))
Set tview = ndb.GetView("RTempTasks")
tview.Refresh
tview.AutoUpdate=False
Set ndoc = tview.GetFirstDocument
Do Until ndoc Is Nothing
id= ndoc.task_ParentUNID(0)
Set pdoc=db_stamm.GetDocumentByUNID(id)
Set tDoc = New NotesDocument(db_stamm)
With Tdoc
.Form=ndoc.task_DocTyp(0)
.task_PrjId=nDoc.task_PrjId(0)
.task_Prj=nDoc.task_prj(0)
.task_ValidFrom=nDoc.task_ValidFrom(0)
.task_ValidTo=nDoc.task_ValidTo(0)
.task_main=ndoc.task_main(0)
If ndoc.task_DocTyp(0)="PTask" Then
.task_part=ndoc.task_part(0)
End If
.task_titel=ndoc.task_title(0)
Call .MakeResponse(pdoc)
Call .Save(True,True)
Set rdoc = ndoc
Set ndoc= tview.GetNextDocument(ndoc)
rdoc.Remove(True)
End With
Loop
tview.AutoUpdate=True
--- Ende Code ---

Beide Agenten sind mit Managerrechten signiert.
Agent2 läuft on behalf mit einer Gruppe die Managerrechte hat
Runtime Security Level ist 3
default access ist All Readers an above
consistent ACL ist aktiviert

Bitte helft mir auf die Sprünge ich verstehe einfach nicht, warum es auf den Servern läuft und auf den Lokalen Repliken nicht.
Übrigens wenn ich das Lokal laufen lasse geht es (Entwicklerrechte) normale User scheitern.
Kann es sein, das die Signierung des Agenten auf lokalen Repliken nicht mehr greift?
 
Gruß
Hitcher

Ralf_M_Petter:
Tut mir leid, das geht meines Wissens nach nicht. Du kannst lokal keine Agenten mit on Behalf laufen lassen. Das ist, aber eine gute Sache, da es sonst eine große Securitylücke gibt. Kannst du des nicht zeitlich entkoppeln. Sprich du schreibst die Dokumente in eine Zwischendatenbank, die auf den Server repliziert wird und dann vom Server regelmäßig in die Zieldatenbank übertragen wird, oder ist das so zeitkritisch.

Ausserdem muß ich Bernhard recht geben, warum erlaubst du keinen Schreibzugriff wenn du schreiben willst. Eventuell könnte man ja als Zugriff Einlieferer machen dann kann eigentlich nicht viel passieren. Der Benutzer darf dann schreiben, kann aber trotzdem keine Dokumente ändern.

Grüße

Ralf

Navigation

[0] Themen-Index

[#] Nächste Seite

[*] Vorherige Sete

Zur normalen Ansicht wechseln