Das Notes Forum
Domino 9 und frühere Versionen => Entwicklung => Thema gestartet von: taheri am 08.08.02 - 10:33:03
-
Hallo liebe Entwickler,
Ich habe ein Problem und wie Ihr weiß bin Ich keine Entwickler vor allem wenn es um Scrip geht. Aber der Chef will das.
Hier sieht Ihr ein Agent. Was er macht ist euch sicherlich uninteressant. Auf jedenfalls bringt er Information in einer Maske.und die Maske wird als Email an eine feste Adresse geschickt.
Feste Adresse wird in Zeile 30 geschrieben (Send to.) Jetzt genau in dieser stelle soll kein feste Adresse mehr sein, sondern so eine Art Auswahl Adresse von mir Aus entweder persönliche Adressbuch. Oder Anstichauswahl in Datenbank selber (Datenbank hat seine eigene Maskenadresse mit Email und Ansichten) oder so was ähnliches.
.ist das möglich?
danke
Sub Initialize
Dim session As New Notessession
Dim ws As New NotesUIWorkspace
Dim uidoc As NotesUIDocument
Dim db As NotesDatabase
Dim newdoc As NotesDocument 'neuer Reproauftrag in DB
Dim doc As NotesDocument 'Plandokument in DB
Dim vdoc As NotesDocument 'Verteilerdokument in DB
Dim profile As notesdocument
Dim rtitem As NotesrichtextItem
Dim plitem As NotesItem
Dim profitem As Notesitem
Dim view As NotesView
Dim user As String
Set db = session.Currentdatabase
Set View = db.GetView("ReproAuswahl")
Set profile = db.GetProfileDocument("DBProfil")
Nummern = profile.GetItemValue("Nummern")
Set newdoc = New NotesDocument(db)
newdoc.Form = "ReproAuftrag"
user=session.CommonUserName
Call newdoc.ReplaceItemValue("Autor",user)
Call newdoc.ReplaceItemValue("Ersteller",user)
'als Autorenfeld setzen:
Set plitem=newdoc.GetFirstItem("Autor")
plitem.IsAuthors=True
plitem.IsSummary=True
'SendTo-Feld erzeugen:
[[[[[ Call newdoc.ReplaceItemValue("SendTo", "entwicklung@domäne.de") ]]]]]
For i = 0 To Ubound(Nummern)
zw = ""
Set doc = view.GetDocumentByKey(Nummern(i))
%REM
Die Plan-Dateien werden nicht mehr mit dem Auftrag verschickt...
Set rtitem = doc.GetFirstItem("Plot")
Call newdoc.CopyItem(rtitem,"Anlage_" & i)
%END REM
'... dafür wird jetzt die Doc-ID des Plandocumentes mitverschickt...
Call newdoc.replaceitemvalue( "PlanUnid_" & Cstr(i), doc.universalid)
'... und der Name des Attachments
Set rtitem = doc.getfirstitem("Plot")
If Isarray( rtitem.embeddedObjects) Then
Forall att In rtitem.embeddedObjects
If att.type = Embed_Attachment Then
zw = zw + att.name
End If
End Forall
End If
If zw <> "" Then
Call newdoc.replaceitemvalue( "AttName_" & Cstr(i), zw)
Else
Call newdoc.replaceitemvalue( "AttName_" & Cstr(i), "Kein Attachment vorhanden!")
End If
Set plitem=doc.GetFirstItem("PlanFormat")
Call newdoc.CopyItem(plitem, "Größe_" & i)
Set plitem=doc.GetFirstItem("Verteilerschluessel")
Call newdoc.CopyItem(plitem,"VS_" & i)
Set plitem=doc.GetFirstItem("PlanID")
Call newdoc.CopyItem(plitem,"PlanID_" & i)
Anz=0
For j=0 To 9
zw=doc.GetItemValue("Farbe_" & Cstr(j))
Anz= Anz+Cint(zw(0))
Next j
Call newdoc.ReplaceItemValue("pafa_" & i, Anz)
Anz=0
For j=0 To 9
zw=doc.GetItemValue("sw_" & Cstr(j))
Anz= Anz+Cint(zw(0))
Next j
Call newdoc.ReplaceItemValue("pasw_" & i, Anz)
Next i
Call newdoc.save(True,True)
Call view.Refresh
Set uidoc = ws.EditDocument(True,newdoc)
End Sub
-
Hi Taheri!
Nur mal so eine Frage, weil ich die Angabe nicht richtig kapiert habe. Soll WÄHREND dieser Agent ausgeführt werden, ein Adressauswahldialog erscheinen, oder sollte diese Adresse schon im VORHINEIN irgendwo angegeben und später nur noch ausgelesen werden?
-
Beim Erzeugen einen Auftrag wird eine Maske gestartet. Diese Agent fühlt diese Maske mit Informationen. Was ist bestellt wurde, Anzahl und usw. es gibt eine Klickfunktion in Maske (auftrag senden) und Auftrag wird an Adresse in Agent geschickt. Das heißt der Anwender wählt keine Adresse, sondern der Auftrag wird an je nachdem welche Adresse in Agent ist gesendet.
Nachteil ist , die Aufträge landen immer nur bei einem ,desen Adresse in Agent ist.
Jetzt soll es so sein. , Bei Klickfunktion in der Maske (auftarg senden) soll der Anwender in der Lage sein eine Auswahl zu treffen. An wem soll es gesendet werden.
Woher er auswählen soll. Habe ich zwei Möglichkeit entweder soll er die Auswahl aus seinem persönliche Adressbuch treffen. Oder gibt es in Datenbank auch die Möglichkeit der Name mit Email eingebn
danke
-
Ok, kapiert! Du könntest es folgendermaßen versuchen.
Mache in deiner Maske noch ein zusätzliches Feld, das du 'SendTo' nennst. Nun machst du eine zusätzliche Aktion oder Schaltfläche, die du mit folgender Formel belegst:
@Command([MailAddress])
Durch diese Formel erscheint der Adressauswahldialog, und die ausgewählte/n Adresse/n wird/werden automatisch in das Feld SendTo geschrieben.
Die Zeile im Scriptcode schreibst du so:
Call newdoc.ReplaceItemValue("SendTo", ws.CurrentDocument.FieldGetText("SendTo"))
lg
Manuel
-
ich werde sofort testen.
noch eine frage
@Command([MailAddress])
was wird hier aktiv?
danke
-
Durch @Command([MailAddress]) öffnet sich der Adressauswahldialog, so wie du ihn gewöhnt bist, wenn du eine Mail schreibst.
MailAddress
Öffnet das Fenster "Mail-Adresse", aus dem Sie die Namen von Personen und Arbeitsgruppen für die Aufnahme in ein Adreßfeld eines Mail-Dokuments wählen können.
Syntax
@Command([MailAddress])
-
Danke ersmal
mit Command hat es sehr gut geklappt. ich kann jetzt ein auswahl treffen. mit Agent nicht. kommt felhler Meldung.
für Anfang ist klasse. der Anwender soll nur den erste Emfänger entfernen . es ist automatische in auswahl eingetragen
mfg
-
Ups, hab ich nicht mitgedacht, ist eh klar. Mit ws.CurrentDocument greift man auf das aktuelle Frontend-Dokument zu, nur im Agenten kann das nicht funktionieren. Du könntest die Adresse in ein Profildokument schreiben und dann auslesen. Weißt wie das funktioniert?
-
so was habe ich mir auch gedacht. so ein art profil.weil die Emfänger maximal 3 personen sind.Leider weiss ich nicht wie . abgesehen von maske erstellen und Ansichten
mfg
-
Erstelle eine neue Maske, Name könnte lauten "MailAddress". Diese Maske enthält ein Feld mit dem Namen "SendTo". Das Feld "SendTo" in der anderen Maske bleibt aber dennoch erhalten.
Die Aktion "Adresse" muss nun so aussehen:
@Command([MailAddress]);
@SetProfileField("MailAddress"; "SendTo"; SendTo; @UserName)
In das Profildokument "MailAddress", das einem bestimmten User zugeordnet ist, wird in das Feld SentTo der Inhalt des Feldes SentTo der Auftragsmaske geschrieben.
Im Script musst du natürlich auch noch ein paar Zeilen ergänzen:
Sub Initialize
Dim session As New Notessession
Dim ws As New NotesUIWorkspace
Dim uidoc As NotesUIDocument
Dim db As NotesDatabase
Dim newdoc As NotesDocument 'neuer Reproauftrag in DB
Dim doc As NotesDocument 'Plandokument in DB
Dim vdoc As NotesDocument 'Verteilerdokument in DB
Dim profile As notesdocument
Dim profileMail As NotesDocument
Dim rtitem As NotesrichtextItem
Dim plitem As NotesItem
Dim profitem As Notesitem
Dim view As NotesView
Dim user As String
Set db = session.Currentdatabase
Set View = db.GetView("ReproAuswahl")
Set profile = db.GetProfileDocument("DBProfil")
Set profileMail = db.GetProfileDocument("MailAddress", session.UserName)
Nummern = profile.GetItemValue("Nummern")
Set newdoc = New NotesDocument(db)
newdoc.Form = "ReproAuftrag"
user=session.CommonUserName
Call newdoc.ReplaceItemValue("Autor",user)
Call newdoc.ReplaceItemValue("Ersteller",user)
'als Autorenfeld setzen:
Set plitem=newdoc.GetFirstItem("Autor")
plitem.IsAuthors=True
plitem.IsSummary=True
'SendTo-Feld erzeugen:
Call newdoc.ReplaceItemValue("SendTo", profileMail.SendTo(0))
For i = 0 To Ubound(Nummern)
zw = ""
Set doc = view.GetDocumentByKey(Nummern(i))
%REM
Die Plan-Dateien werden nicht mehr mit dem Auftrag verschickt...
Set rtitem = doc.GetFirstItem("Plot")
Call newdoc.CopyItem(rtitem,"Anlage_" & i)
%END REM
'... dafür wird jetzt die Doc-ID des Plandocumentes mitverschickt...
Call newdoc.replaceitemvalue( "PlanUnid_" & Cstr(i), doc.universalid)
'... und der Name des Attachments
Set rtitem = doc.getfirstitem("Plot")
If Isarray( rtitem.embeddedObjects) Then
Forall att In rtitem.embeddedObjects
If att.type = Embed_Attachment Then
zw = zw + att.name
End If
End Forall
End If
If zw <> "" Then
Call newdoc.replaceitemvalue( "AttName_" & Cstr(i), zw)
Else
Call newdoc.replaceitemvalue( "AttName_" & Cstr(i), "Kein Attachment vorhanden!")
End If
Set plitem=doc.GetFirstItem("PlanFormat")
Call newdoc.CopyItem(plitem, "Größe_" & i)
Set plitem=doc.GetFirstItem("Verteilerschluessel")
Call newdoc.CopyItem(plitem,"VS_" & i)
Set plitem=doc.GetFirstItem("PlanID")
Call newdoc.CopyItem(plitem,"PlanID_" & i)
Anz=0
For j=0 To 9
zw=doc.GetItemValue("Farbe_" & Cstr(j))
Anz= Anz+Cint(zw(0))
Next j
Call newdoc.ReplaceItemValue("pafa_" & i, Anz)
Anz=0
For j=0 To 9
zw=doc.GetItemValue("sw_" & Cstr(j))
Anz= Anz+Cint(zw(0))
Next j
Call newdoc.ReplaceItemValue("pasw_" & i, Anz)
Next i
Call newdoc.save(True,True)
Call view.Refresh
Set uidoc = ws.EditDocument(True,newdoc)
End Sub
Ich hoffe es funktioniert!
lg