Das Notes Forum
Domino 9 und frühere Versionen => Entwicklung => Thema gestartet von: TomLudwig am 30.10.03 - 12:59:12
-
Hallo,
ich möchte per Script ein neues Dokument mit einer von mir festgelegten Maske erstellen. In das neue Dokument einige Feldinhalte befüllen. Und mir von diesem Dokument die DocumentUniqueID zurück geben lassen.
Wie???
-
Hallo,
neues Dokument anlegen mit NotesDatabase Methode CreateDocument.
Felder setzen mit NotesDocument Methode ReplaceItemValue oder AppendItemValue.
Maske zuweisen mit notesdoc.ReplaceItemValue("Form", <Formname>)
Berechnet Felder der Maske berechnen mit NotesDocument Methode ComputeWithForm.
Dokument speichern mit NotesDocument Methode Save.
UNId des Dokumentes auslesen mit NotesDocument Eigenschaft UniversalID.
Genaueres zu den Methoden und Eigenschaften findest Du in der Designerhilfe.
Viele Grüße
ghost
-
Ich habs ausprobiert... Es kommt aber eine Fehlermeldung (Object Variable not set)
Dim db As New NotesDatabase
Dim doc As NotesDocument
Dim item As NotesItem
Set doc = db.CreateDocument
Set item = doc.Replaceitemvalue("Form", "AdvancedInfo")
Set item = doc.GetFirstItem("Temp" )
item.Text = "Hallo" Hier kommt die Fehlermeldung
Call doc.Save( True, True )
-
Eine Anmerkung :
Man muß zum Füllen der Felder nicht unbedingt die genannten Methoden benutzen, es geht auch z.B. so :
doc.Form = "Maskenname"
-
item.Text ist ein Property (read-only), den Du so nicht ändern kannst. Schau mal in die Designer-Hilfe unter NotesItem.
Anhand deines Codes würde ich mal behaupten, Du hast noch nicht viel in Script gemacht, oder ?
Mir ist auf jeden Fall nicht klar, was Du da eigentlich machen willst, beschreib doch mal, dann sehen wir weiter ;)
-
Ich hab wirklich noch nicht viel mit Script gemacht....
Ich möchte ein Dokument neu erstellen und was in Felder rein schreiben. Das dann speichern und mir die DocumentUniqueID zur weiteren verarbeitung zurück geben lassen.
Bei folgendem Code, sagt der Debugger mir, dass die Variable "item" nicht gesetzt ist. Aber warum? Das Feld "Temp" gibt es in der Maske!
Dim item As NotesItem
Set doc = db.CreateDocument
doc.Form ="AdvancedInfo"
Set item = doc.GetFirstItem("Temp" )
Call item.AppendToTextList("Hallo")
Call doc.Save( True, True )
-
Dim db As New NotesDatabase
Dim doc As NotesDocument
Dim item As NotesItem
Set doc = db.CreateDocument
Call doc.Replaceitemvalue("Form", "AdvancedInfo")
Call doc.ReplaceItemValue("Temp", "Hallo")
Call doc.Save( True, True )
Ich glaube so sollte es sein.
@Driri: Es ist richtig, dass man nicht die Methoden benutzen muss, aber ich finde es persönich als unschön die verkürzte Schreibweise zu verwenden. Außerdem ist ein Aufruf über die Methoden performanter. Das macht in kleinen Scripten nicht viel aus, bei größeren Sachen ist es aber durchaus sinnvoll. Trotzdem ist Dein Hinweis natürlich angebracht ;)
Viele Grüße
ghost
-
Nein, das item gibt es nicht - es ist ja ein völlig leeres, neues Dokument, was Du vor Dir hast. Wo soll das item dann herkommen ?
-
Wenn ich mit doc.Form = "AdvancedInfo" die Maske zuweise, dann muss doch das Feld auch da sein, wie es in der Maske dargestellt wird. Oder nicht?
-
Nein, es ist nicht da - jetzt gibt es nur das item "Form".
Du kannst aber ComputeWithForm eine Chance geben ;-)
Bernhard
-
Hi,
äh, jein. Also wenn Du ein neues Dokument erzeugst, dann existieren keine Felder. Es ist quasi vollkommen leer.
Auch wenn Du die Form setzt, wird dem Dokument zwar die Maske zugewiesen, aber dadurch existieren die Felder immer noch nicht.
Das ist quasi nur eine Info, mit welcher Maske das Dokument später geöffnet werden soll.
Du mußt also wirklich die Felder manuell füllen. Und dabei brauchst Du nicht über das Item zu gehen, denn das existiert einfach noch nicht.
Das Script von Ghost tut genau das. Nach dem doc.Save gibt es dann auch die DocumentUniqueID.
-
Ich schaffs einfach nicht...
Set doc = db.CreateDocument
Call doc.Replaceitemvalue("Form", "AdvancedInfo")
Call doc.ReplaceItemValue("Temp", "Hallo")
Call doc.ComputeWithForm(True,False)
Call doc.Save( True, True )
funktioniert nicht. Ich bekomm zwar keine Fehlermeldung mehr. Aber wenn ich mir eine Ansicht bastle in der alle Dokumente aufgelistet werden sollen die das Feld Temp beinhalten.
Bzw. die mit der Maske AdvancedInfo erstellt worden sind, wird nichts angezeigt.
-
Hi,
ReplaceItemValue funktioniert nur, wenn Du vorher ein entsprechendes Objekt erzeugst.
Versuchs mal so :
Set doc = db.CreateDocument
doc.Form = "AdvancedInfo"
doc.Temp = "Hallo"
Call doc.ComputeWithForm(True,False)
Call doc.Save( True, True )
-
Das macht er auch ohne Probleme laut Debugger....
Aber ich finde das erstellte Dokument immernoch in keiner Ansicht oder der gleichen!
-
Schick mal Deinen kompletten Code ...
-
bittesehr... ich werd nicht mehr schlau draus....
Sub Click(Source As Button)
Dim uiwork As New NotesUIWorkspace
Dim uidoc As NotesUIDocument
Dim doc As NotesDocument
Dim itemDB As NotesItem
Dim itemSRV As NotesItem
Dim strSrv As String
Dim strDb As String
Dim db As NotesDatabase
Dim acl As NotesACL
Dim entry As NotesACLEntry
Dim isSonstig As Integer
Set uidoc = uiwork.CurrentDocument
Set doc = uidoc.document
Set itemDB = doc.GetFirstItem("DB")
Set itemSRV = doc.GetFirstItem("Server")
strDb = itemDB.Text
strSrv = itemSRV.Text
If strDb = "" Then
returnvalue = Messagebox("Es wurde keine Datenbank ausgewählt!",MB_OK, "Keine Datenbank")
Exit Sub
End If
If strSrv = "Lokal" Then
strSrv = ""
End If
Set db = New NotesDatabase( strSrv, strDb)
Set acl = db.ACL
Set entry = acl.GetFirstEntry
Dim itemPerson As NotesItem
Dim itemServer As NotesItem
Dim itemSonst As NotesItem
Do While Not(entry Is Nothing)
Set nname = New NotesName(entry.Name)
isSonstig = 0
Select Case nname.Organization
Case "HH"
Set itemServer = doc.Getfirstitem("HH_ACLServer")
Set itemPerson = doc.Getfirstitem("HH_ACLPerson")
Set itemSonst = doc.Getfirstitem("HH_ACLSonstiges")
Case "IWS"
Set itemServer = doc.Getfirstitem("IWS_ACLServer")
Set itemPerson = doc.Getfirstitem("IWS_ACLPerson")
Set itemSonst = doc.Getfirstitem("IWS_ACLSonstiges")
Case Else
Set itemServer = doc.Getfirstitem("Sonst_ACLServer")
Set itemPerson = doc.Getfirstitem("Sonst_ACLPerson")
Set itemSonst = doc.Getfirstitem("Sonst_ACLSonstiges")
isSonstig = 1
End Select
If isSonstig =1 Then
If entry.IsPerson = True Then
itemPerson.appendToTextList(entry.Name)
itemPerson.appendToTextList(" ")
Elseif entry.IsServer = True Then
itemServer.appendToTextList(entry.Name)
itemServer.appendToTextList(" ")
Else
itemSonst.appendToTextList(entry.Name)
itemSonst.appendToTextList(" ")
End If
Else
If entry.IsPerson = True Then
itemPerson.appendToTextList(nname.Common)
Elseif entry.IsServer = True Then
itemServer.appendToTextList(nname.Common)
Else
itemSonst.appendToTextList(entry.Name)
itemSonst.appendToTextList(" ")
End If
End If
Set entry = acl.GetNextEntry(entry)
Loop
Set doc = db.CreateDocument
doc.Form = "AdvancedInfo"
doc.Temp = "Hallo"
Call doc.ComputeWithForm(True,False)
If (doc.Save( True, True )) Then
Messagebox("gespeichert")
Else
Messagebox("Fehler")
End If
End Sub
-
Hi,
ich habs jetzt aus Zeitgründen nur überflogen, aber mir ist aufgefallen, daß Du doc einmal oben verwendest und dort auf das UIDocument verweist und dann später im letzten Abschnitt über doc ein neues Dokument erzeugst.
Ich schau nachher noch mal drüber, wenn ich nen bißchen mehr Zeit habe.
-
Das sollte aber nicht weh tun ...
Wächst denn nach Ablauf des Scripts Deine DB um ein Dokument (lt. DB-Properties)? Schaust Du auch in der richtigen DB nach ? Du erzeugst das Doc ja in einer anderen DB, die Du ja über die Felder in Deinem NotesUIDocument ausliest.
Bernhard
-
Verdammt....
Genau des wars mit der Datenbank die ich von oben einlese! Shit!
Jezt hab ich unsere ganzen Datenbanken mit irgendeinem müll zugeschüttet.
Ich glaube jetzt müsste es funktionieren....
-
Aha, man lerne:
Zuerst soll man alle Datenbanken zumüllen, wenn man das geschafft hat, dann funktionierts ......... :P
-
Nein, nein: Man lerne, NIEMALS fremden Code einzusetzen, dessen Funktion man nicht vollständig erfasst hat. Und das gilt meines Erachtens insbesondere für Neulinge.
Wir hatten das doch erst vor wenigen Monaten: "Niemand würde sich in einen EuroFighter mit laufenden Triebwerk setzen (den man zufällig "gefunden" hat ;-) und irgendeinen Knopf drücken, um zu sehen, was denn dann passiert."
;-)
Bernhard
-
Theoretisch sind die Dokumente ja egal, die ich gespeichert habe.
Steht ja nur Hallo drin.
Oder können die irgendwelche Auswirkungen haben?
-
Bernhard:
Ok ok, das sind wohl die, die dann in Obb abstürzen ..... :-((
Und ich bin doch auch noch Neuling, bin doch erst seit 5 Wochen hier ............ ;D
Tom:
Na ja, elegant ist es sicher nicht. Ob sie stören oder nicht, wenn in allen betroffenen Datenbanken die Programmeure der Agenten und ähnlichem damit rechnen, dass sie falsche Dokumente bekommen könnten, dann sollte tatsächlich nix passieren. Sonst ......... siehe EuroFighter