Das Notes Forum

Domino 9 und frühere Versionen => ND6: Entwicklung => Thema gestartet von: LisaS am 21.02.06 - 17:38:38

Titel: Mittels Agent Doks in einer andern DB anlegen?
Beitrag von: LisaS am 21.02.06 - 17:38:38
Hallo,
ich habe einen Agent gebaut, mit dem man in einer andern 'Ziel-DB' bestimmte Doks anlegen kann.
Das Problem ist, dass die User in der Regel nur Leserechte in der Ziel-DB haben. Wenn ich als Admin denn Agent ausführe ist alles super, aber andere User bekommen die Fehlermeldung "Sie sind nicht berechtigt diese Aktion auszuführen.".
Gibt es eine Möglichkeit, dass die Doks im Namen vom Signer des Agenten angelegt werden?
Gruß
Hitcher
Titel: Re: Mittels Agent Doks in einer andern DB anlegen?
Beitrag von: koehlerbv am 21.02.06 - 17:42:57
Ja. Signiere ihn mit einer ID mit entspr. Berechtigungen oder lass ihn "in behalf of" laufen. Gestartet werden muss er mit NotesAgent.RunOnServer.

HTH,
Bernhard
Titel: Re: Mittels Agent Doks in einer andern DB anlegen?
Beitrag von: LisaS am 21.02.06 - 18:21:23
@Bernhard:
Danke, dass mit "in behalf of" hab ich gemacht und signiert ist er auch.
wie funktioniert dass mit dem NotesAgent.RunOnServer?
Der Agent fragt den User mittels Picklisten ect. nach bestimmten Informationen ab, funktioniert das dann weiter hin, oder ist das nur für Agenten geeignet die ohne Userinput arbeiten.
Gruß
Hitcher
Titel: Re: Mittels Agent Doks in einer andern DB anlegen?
Beitrag von: koehlerbv am 21.02.06 - 18:44:03
Da das nur auf dem Server funktioniert, verbieten sich natürlich sämtliche FrontEnd-Geschichten.
Ansonsten musst Du Dein Zugriffskonzept umbauen (schreiben, aber nicht schreiben dürfen - das ist schon ein bisschen schräg).

Bernhard
Titel: Re: Mittels Agent Doks in einer andern DB anlegen?
Beitrag von: LisaS am 22.02.06 - 12:56:46
@Bernhard:
Danke, hab es es jetzt hinbekommen. O0
Du hast recht, es hört sich schräg an, passt aber schon. ;)
Bis dahin
Hitcher
Titel: Re: Mittels Agent Doks in einer andern DB anlegen?
Beitrag von: LisaS am 01.03.06 - 10:54:58
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
Titel: Re: Mittels Agent Doks in einer andern DB anlegen?
Beitrag von: DerAndre am 01.03.06 - 11:52:52
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é
Titel: Re: Mittels Agent Doks in einer andern DB anlegen?
Beitrag von: LisaS am 01.03.06 - 13:04:52
@Andre:
Die db2 liegt auch lokal, der Agent kennt die DB.
Gruß Hitcher
Titel: Re: Mittels Agent Doks in einer andern DB anlegen?
Beitrag von: LisaS am 08.03.06 - 15:37:10
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
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

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
Titel: Re: Mittels Agent Doks in einer andern DB anlegen?
Beitrag von: Ralf_M_Petter am 08.03.06 - 16:00:07
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
Titel: Re: Mittels Agent Doks in einer andern DB anlegen?
Beitrag von: LisaS am 08.03.06 - 16:47:24
@Ralf:
Ich habe jetzt mal eine Gruppe Depositor-Rechte gegeben und in der Form Available for public Users ein gestellt und die Gruppe darf doks mit dieser Form erstellen, aber es kommt die Meldung: You are not authorized to perform this operation.
Wo muss ich noch was einstellen?
Gruß
Hitcher
Titel: Re: Mittels Agent Doks in einer andern DB anlegen?
Beitrag von: Ralf_M_Petter am 08.03.06 - 17:19:37
Bei welcher Code Zeile bekommst du diese Meldung?

Grüße

Ralf
Titel: Re: Mittels Agent Doks in einer andern DB anlegen?
Beitrag von: LisaS am 08.03.06 - 17:24:31
Ich habe jetzt einfach das Dokument Direkt in der Db2 über Create und dann die Form gewählt, erstellt.
Habe nichts im Querysave oder so und der Debugger springt nicht an.
Rätzel??
Gruß
Hitcher
Titel: Re: Mittels Agent Doks in einer andern DB anlegen?
Beitrag von: Ralf_M_Petter am 08.03.06 - 17:28:47
Verstehe ich das richtig, du machst Erstellen und wählst die Maske und dann bekommst du die Fehlermeldung. Das kann ich mir nicht vorstellen. Müsste ich jetzt nachstellen. Vielleicht komme ich morgen dazu.

Grüße

Ralf

Titel: Re: Mittels Agent Doks in einer andern DB anlegen?
Beitrag von: LisaS am 08.03.06 - 17:30:32
Eh, ich bekomme die Meldung wenn ich speichern möchte...
Titel: Re: Mittels Agent Doks in einer andern DB anlegen?
Beitrag von: Tode am 10.03.06 - 10:05:06
nein, kein Rätsel, sondern ein Problem mit Deinem "Depositor":

Ein Depositor darf ein Dokument "einliefern", es danach aber nicht mehr verändern (also abspeichern). Du musst also

ERST das Dokument komplett erstellen (in DB1) und DANN in DB2 kopieren (depositen...).
Anders funktioniert das nicht.

HTH
Tode