Autor Thema: Per Script neues Dokument erstellen (Maske selbst festlegen)  (Gelesen 7329 mal)

TomLudwig

  • Gast
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???

Offline ghost

  • Aktives Mitglied
  • ***
  • Beiträge: 174
  • Geschlecht: Männlich
  • Notes ist gut!
Re:Per Script neues Dokument erstellen (Maske selbst festlegen)
« Antwort #1 am: 30.10.03 - 13:13:22 »
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

TomLudwig

  • Gast
Re:Per Script neues Dokument erstellen (Maske selbst festlegen)
« Antwort #2 am: 30.10.03 - 13:24:19 »
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 )
   

Driri

  • Gast
Re:Per Script neues Dokument erstellen (Maske selbst festlegen)
« Antwort #3 am: 30.10.03 - 13:24:43 »
Eine Anmerkung :

Man muß zum Füllen der Felder nicht unbedingt die genannten Methoden benutzen, es geht auch z.B. so :

doc.Form = "Maskenname"

Driri

  • Gast
Re:Per Script neues Dokument erstellen (Maske selbst festlegen)
« Antwort #4 am: 30.10.03 - 13:29:15 »
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  ;)

TomLudwig

  • Gast
Re:Per Script neues Dokument erstellen (Maske selbst festlegen)
« Antwort #5 am: 30.10.03 - 13:36:02 »
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 )

Offline ghost

  • Aktives Mitglied
  • ***
  • Beiträge: 174
  • Geschlecht: Männlich
  • Notes ist gut!
Re:Per Script neues Dokument erstellen (Maske selbst festlegen)
« Antwort #6 am: 30.10.03 - 13:40:10 »
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

Offline koehlerbv

  • Moderator
  • Gold Platin u.s.w. member:)
  • *****
  • Beiträge: 20.460
  • Geschlecht: Männlich
Re:Per Script neues Dokument erstellen (Maske selbst festlegen)
« Antwort #7 am: 30.10.03 - 13:41:52 »
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 ?

TomLudwig

  • Gast
Re:Per Script neues Dokument erstellen (Maske selbst festlegen)
« Antwort #8 am: 30.10.03 - 13:44:50 »
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?

Offline koehlerbv

  • Moderator
  • Gold Platin u.s.w. member:)
  • *****
  • Beiträge: 20.460
  • Geschlecht: Männlich
Re:Per Script neues Dokument erstellen (Maske selbst festlegen)
« Antwort #9 am: 30.10.03 - 13:46:41 »
Nein, es ist nicht da - jetzt gibt es nur das item "Form".
Du kannst aber ComputeWithForm eine Chance geben ;-)

Bernhard

Driri

  • Gast
Re:Per Script neues Dokument erstellen (Maske selbst festlegen)
« Antwort #10 am: 30.10.03 - 13:49:37 »
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.

TomLudwig

  • Gast
Re:Per Script neues Dokument erstellen (Maske selbst festlegen)
« Antwort #11 am: 30.10.03 - 14:00:48 »
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.

Driri

  • Gast
Re:Per Script neues Dokument erstellen (Maske selbst festlegen)
« Antwort #12 am: 30.10.03 - 14:17:48 »
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 )

TomLudwig

  • Gast
Re:Per Script neues Dokument erstellen (Maske selbst festlegen)
« Antwort #13 am: 30.10.03 - 14:24:24 »
Das macht er auch ohne Probleme laut Debugger....
Aber ich finde das erstellte Dokument immernoch in keiner Ansicht oder der gleichen!

Offline koehlerbv

  • Moderator
  • Gold Platin u.s.w. member:)
  • *****
  • Beiträge: 20.460
  • Geschlecht: Männlich
Re:Per Script neues Dokument erstellen (Maske selbst festlegen)
« Antwort #14 am: 30.10.03 - 14:27:03 »
Schick mal Deinen kompletten Code ...

TomLudwig

  • Gast
Re:Per Script neues Dokument erstellen (Maske selbst festlegen)
« Antwort #15 am: 30.10.03 - 14:30:41 »
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

Driri

  • Gast
Re:Per Script neues Dokument erstellen (Maske selbst festlegen)
« Antwort #16 am: 30.10.03 - 14:39:19 »
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.
« Letzte Änderung: 30.10.03 - 14:39:49 von Driri »

Offline koehlerbv

  • Moderator
  • Gold Platin u.s.w. member:)
  • *****
  • Beiträge: 20.460
  • Geschlecht: Männlich
Re:Per Script neues Dokument erstellen (Maske selbst festlegen)
« Antwort #17 am: 30.10.03 - 14:42:49 »
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

TomLudwig

  • Gast
Re:Per Script neues Dokument erstellen (Maske selbst festlegen)
« Antwort #18 am: 30.10.03 - 14:52:37 »
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....

Offline Semeaphoros

  • Gold Platin u.s.w. member:)
  • *****
  • Beiträge: 8.152
  • Geschlecht: Männlich
  • ho semeaphoros - agr.: der Notesträger
    • LIGONET GmbH
Re:Per Script neues Dokument erstellen (Maske selbst festlegen)
« Antwort #19 am: 30.10.03 - 14:58:44 »
Aha, man lerne:

Zuerst soll man alle Datenbanken zumüllen, wenn man das geschafft hat, dann funktionierts ......... :P
Jens-B. Augustiny

Beratung und Unterstützung für Notes und Domino Infrastruktur und Anwendungen

Homepage: http://www.ligonet.ch

IBM Certified Advanced Application Developer - Lotus Notes and Domino 7 und 6
IBM Certified Advanced System Administrator - Lotus Notes and Domino 7 und 6

 

Impressum Atnotes.de  -  Powered by Syslords Solutions  -  Datenschutz