Das Notes Forum

Domino 9 und frühere Versionen => ND6: Entwicklung => Thema gestartet von: andrew22 am 24.06.05 - 10:31:37

Titel: agent.OnBehalfOf
Beitrag von: andrew22 am 24.06.05 - 10:31:37
hi ho !

kann man der Wert agent.OnBehaltOf bearbeiten oder ersetzen in einem Agent ?!

thx
Titel: Re: agent.OnBehalfOf
Beitrag von: Glombi am 24.06.05 - 10:36:15
Mit Script nicht, da
   name$ = notesAgent.OnBehalfOf
Read-only ist.

Andreas
Titel: Re: agent.OnBehalfOf
Beitrag von: andrew22 am 24.06.05 - 10:38:26
nun ja gibts keine Möglichkeit diesen wert mit LS zu ändern.

Ich habe ein Profildokument wo ein Name gesetzt wird . Im agent soll abgeglichen ob Name der gleiche wie in "agent.OnBehalfTo"wenn nicht soll der name ersetzt werden.

 ???
Titel: Re: agent.OnBehalfOf
Beitrag von: umi am 24.06.05 - 11:14:07
Über die NotesNoteCollection kommst Du an das Agent Dokument ran. Da kannst Du dann in das Feld "$onBehalfOf" den Fullname eintragen.

gruss
umi
Titel: Re: agent.OnBehalfOf
Beitrag von: andrew22 am 24.06.05 - 12:07:06
hättest du vielleicht ein Beispiele .. weiss jetzt gerade net so richtig wie ich das einsetzen soll :(
Titel: Re: agent.OnBehalfOf
Beitrag von: umi am 24.06.05 - 13:44:06
Ungefähr so:
Code
Dim s As New notessession
	Dim db As notesdatabase
	Dim notecoll As notesnotecollection
	Dim noteid As String
	Dim agent As document
	Set db = s.currentdatabase
	Set notecoll = db.createNoteCollection(False)
	notecoll.SelectAgents=True
	Call notecoll.BuildCollection()
	noteid = notecoll.GetFirstNoteId
	Set agent = db.GetDocumentByID(noteid)
	While Not agent Is Nothing
		If agent.name="Mein AGent" Then
			Call agent.replaceitemvalue("$OnBehalfOf","CN=Der Name/O=Meine Organisation")
			Call agent.save(True,False)
		End If
		
		noteid = notecoll.getnextnoteid(noteid)
		Set agent = db.GetDocumentByID(noteid)
	Wend
Titel: Re: agent.OnBehalfOf
Beitrag von: andrew22 am 24.06.05 - 16:17:48
vielen danke habe mir ein nettes script zusammen gebastelt ;) ...

werde es dann noch posten ..

allerdings noch 2 fragen

1. wie kann ich testen ob das Feld $OnBehaltTo überhaupt existiert ?

2. könnte ich auch Zeitperiode ändern sprich wenn der agent periodisch läuft ?!

thx
Titel: Re: agent.OnBehalfOf
Beitrag von: andrew22 am 24.06.05 - 16:25:42
Das Problem ist das wenn das feld nicht gesetzt ist existiert es auch nicht und wenn ich dann nen Namen reinsetze kann ich den agent nicht mehr im Designer öffnen :(
Titel: Re: agent.OnBehalfOf
Beitrag von: umi am 24.06.05 - 16:27:29
zu 1. Mit Document.hasitem ? z.Bleistift

gruss
 umi
Titel: Re: agent.OnBehalfOf
Beitrag von: andrew22 am 24.06.05 - 17:33:18
jupp has item ;) so hab ichs gemacht

nur trotzdem ist das ein Problem für ihn ich kann danach den agent nicht mehr im designer öffnen ..

woran mag das nur liegen ?! :(
Titel: Re: agent.OnBehalfOf
Beitrag von: TMC am 24.06.05 - 17:37:37
Was heißt Du kannst nicht mehr öffnen?

Spezifiziere doch mal.
Titel: Re: agent.OnBehalfOf
Beitrag von: andrew22 am 24.06.05 - 17:42:10
Fehlermeldung -> "Aktion fehlgeschlagen : Dieser Agent enthält ein unzulässig hinzugefügtes 'Im Namen von'-Attribut. Um den Agenten ausführen zu können, entfernen Sie bitte das Attribut."
Titel: Re: agent.OnBehalfOf
Beitrag von: TMC am 24.06.05 - 18:15:00
Dann vermute ich, dass Notes es schlichtweg nicht zulässt, dies per Script zu ändern, also auch nicht über die NotesNoteCollection.

Kannst auch mal einen Blick in folgendes Dokument werfen, kann sein, dass darauf eingegangen wird:
Decoding the new Notes/Domino 6 agent features (http://www-10.lotus.com/ldd/today.nsf/00000000000000000000000000000000/177bbe55c6848ae000256c44003aee17?OpenDocument)

Als letzte Möglichkeit fällt mir noch ein, dies per DXL zu machen, kann aber sein, dass da auch eine Sperre drin ist.
Titel: Re: agent.OnBehalfOf
Beitrag von: Semeaphoros am 24.06.05 - 18:17:51
Da muss eine Sperre drin sein, es sei denn, man hat Managerrechte auf die DB, das wäre sonst ein ganz arges Sicherheitsloch, denn so könnte man sich selber in erhöhte Rechte katapultieren.
Titel: Re: agent.OnBehalfOf
Beitrag von: TMC am 24.06.05 - 18:22:36
Stimmt, wobei ich mal davon ausgehe, andrew22 hat entsprechende Manager-Rechte, d.h. kann manuell die RunOnBehalfOf - Option setzen.
Titel: Re: agent.OnBehalfOf
Beitrag von: Semeaphoros am 24.06.05 - 18:32:12
Wobei es möglicherweise aus Sicherheitsgründe ganz gesperrt ist, es gibt eine Handvoll solcher Sachen, die von Script aus bewusst gesperrt wurden. Ich weiss nicht mehr, bei welchem Property ich das mal ausdrücklich gesehen habe, vermutlich bei den ACL-Settings, möglich dass ichs auch in der API-Doku oder so gesehen hatte ..
Titel: Re: agent.OnBehalfOf
Beitrag von: Glombi am 24.06.05 - 18:43:06
Laut LDD geht es:

Thread aus LDD (http://www-10.lotus.com/ldd/nd6forum.nsf/55c38d716d632d9b8525689b005ba1c0/9bcdd0e41ac6b49c85256f250035395b?OpenDocument&Highlight=0,%24OnBehalfOf)

Andreas
Titel: Re: agent.OnBehalfOf
Beitrag von: Semeaphoros am 24.06.05 - 18:47:42
Aha, so macht es natürlich Sinn, die Sicherheitsprüfung wird beim Signieren gemacht.
Titel: Re: agent.OnBehalfOf
Beitrag von: andrew22 am 27.06.05 - 15:45:50
nochmal zu meiner anderen Frage ;)

könnte man auch über LS Zeitperiode etc. festlegen ?!

geht das ?

wenn ja ein Beispiele ;) ?

thx
Titel: Re: agent.OnBehalfOf
Beitrag von: koehlerbv am 27.06.05 - 16:04:04
Guckst Du hier: http://www.atnotes.de/index.php?topic=9523.0

Bernhard
Titel: Re: agent.OnBehalfOf
Beitrag von: andrew22 am 27.06.05 - 16:07:07
vielleicht noch als Anmerkung ;)

ich würde gern in einem Profildokument Zeitplan festlegen und dann soll dat einfach in agent eingelesen bzw. aktiviert werden.

habe mir den link mal angeschaut quellcode sieht ja janz schön dick aus :(

hmm ?!  ???
Titel: Re: agent.OnBehalfOf
Beitrag von: koehlerbv am 27.06.05 - 16:38:52
Der sieht nicht nur ganz schön dick aus, der ist es auch (und er braucht noch ein paar kleine Erweiterungen, damit er wirklich zuverlässig läuft).

Wo Du die Werte hernimmst, die Du der durch LS pur nicht erreichbaren Datenstruktur "tAssistInfo" des Agents unterjubelst, ist egal - das kann natürlich auch ein ProfileDoc sein. Auf jeden Fall und ganz sicher ist dieser Act aber weder etwas für Anfänger noch für etwas Fortgeschrittenere - hier geht es wirklich ans Eingemachte.

Eine "einfache" Lösung gibt es aber - durch "leider" - nicht.

Bernhard
Titel: Re: agent.OnBehalfOf
Beitrag von: Dominique M. am 22.08.07 - 15:34:36
Hallo,

tut mir leid das ich so einen alten Thread wieder ans Tageslicht hole aber hat da jemand eine Lösung? Bei mir funktioniert die Lösung die gepostet wurde nicht.

Ich öffne das Agenten Document, setze das Feld, signiere und Speicher das Document. Danach ploppt im Designer die Meldung "The agent contains an illegally added 'On Behalf' attribute. To make the agent valid, please remove it"


Kann mir einer weiterhelfen?! Ich muss den Wert dynamisch ändern können...
Müssen die Agenten unter bestimmter Eigenschaften/Rechten laufen?!


// Dominique
Titel: Re: agent.OnBehalfOf
Beitrag von: Dominique M. am 22.08.07 - 23:03:23
Guten Abend!

Hab es doch noch geschafft gehabt... API dein Freund und Helfer.
So konnte ich das entsprechende Feld füllen und die Flags verändern und man kann es wieder im Designer öffnen.
Ist bereits ein Wert drin kann man ihn Normal über LotusScript ändern, besteht aber vorher kein solches Feld muss man das Feld schreiben und per API die Flags ändern (Warum auch immer, ging nicht anders)



Schöne Grüße

// Dominique
Titel: Re: agent.OnBehalfOf
Beitrag von: koehlerbv am 22.08.07 - 23:13:33
Respekt, Dominique!

Lässt Du uns auch an der detaillierten Lösung teilhaben?

Bernhard
Titel: Re: agent.OnBehalfOf
Beitrag von: Dominique M. am 23.08.07 - 09:30:40
Guten Morgen,

so hier nun die Gewünschte Lösung:


Orientiert an diesem Beispiel:
API Beispiel (http://www-10.lotus.com/ldd/46dom.nsf/55c38d716d632d9b8525689b005ba1c0/65389424caefa06980256b260051da56?OpenDocument)


Neue Deklaration einfügen:

Code
Private Const wAPIModule = "NNOTES"
Declare Private Function apiNSFItemSetText Lib wAPIModule Alias "NSFItemSetText" ( Byval hNT As Long, Byval N As String, Byval D As String, Byval nD As Integer) As Integer



So nun wie gewohnt die Datenbank öffnen damit man unter anderem das NoteHandle bekommt (hNT&)

Setzen des Felder per API:

Code
apiNSFItemSetText hNT&, "$OnBehalfOf", username$ & Chr$(0), Len(username)

Wobei hier username ein String ist mit dem Canonical Name des Users!
Ich kann allerdings nicht genau sagen ob ein Chr(0) hier an dieser stelle benötigt wird, gegebenenfalls einfach entfernen.

Was nun ganz wichtig ist (siehe auch Beispiel weiter oben) muss nun das Flag Version gesetzt werden auf den Integer 2:

Code
dim version as Integer
version% = 2

Poke p& + 2, version, 2



Je nach wunsch kann man nun noch den Agenten auf "Run as Web User setzen", dazu muss man in den Feldern $AssistFlags und $Flags noch ein kleines "u" einfügen.
Beispiel für $AssistFlags: "Eu" E=Enabled; u=RunAsWebUser
Beispiel für $Flags: "fLS3u" f=V4 Agent; L=LotusScript Agent; S=Scheduled; 3=Hide from V3 Clients; u=RunAsWebUser

Konstanten für Flags (http://www.intertrust.ru/site/itforum.nsf/f1eb228a7ae49970c3256a99004aff3d/d9496f0a830095efc325690b00204469/$FILE/stdnames.h)

Das ganze Speichern und signieren kann auch nie schaden.



Ich hoffe ich konnte euch einen kleinen Eindruck davon geben wie man das Feld $OnBehalfOf dynamisch setzen kann!


Danke

P.S.: Für weitere Fragen könnt ihr gern eine Nachricht schicken, für eventuelle Verbesserungsvorschläge bin ich natürlich auch offen (Bin ja nur ein Praktikant)