Solved

Email Agent Revisited

Posted on 2004-08-10
7
233 Views
Last Modified: 2013-12-18
I fully understand this agent is coded very poorly.  The problem I have is I don't have the time to go back and rewrite the code.  I really need to put a PartNumber in the subject field.  There is a form with a Approve action button on it.  The action button is pressed it runs this agent.  I need to get the PartNumber off the form and place it in the subject line in the email.  We have looked at this before, but it did not work correctly.  Also when the agent sends out the email it is from the last person to save the agent, It should be from the database.

This is a large agent so I going to place all the code in here.

Declarations **************

Dim session As NotesSession
Dim db As NotesDatabase
Dim dc As NotesDocument
Dim mailDoc As NotesDocument
Dim approverFieldList(6) As String
Dim approverList(6) As String

Initialize********************************

Sub Initialize
 Call InitializeGlobals()

 If dc.SaveOnlyFlag(0) <> "1" Then
      
    If IsRejected(dc) Then
       Call SendRejectionNoticeToInspector
    Else
       recipient = WhoAmIMailingTo()
                  
      If recipient = dc.ApprovalInspectedBy(0) Then
          SendLinkToInspector(recipient)
      Elseif recipient <> "" Then
          SendLinkToApprover(recipient)
      End If
    End If
End If
End Sub

InitializeGlobals**************************************

Function InitializeGlobals
      Set session = New NotesSession
      Set db = session.CurrentDatabase
      Set dc = session.DocumentContext
      Set mailDoc = db.CreateDocument()
      
      approverFieldList(0) = "AssignedQE"
      approverFieldList(1) = "AssignedPME"
      approverFieldList(2) = "AssignedPEDE"
      approverFieldList(3) = "AssignedQEMan"
      approverFieldList(4) = "AssignedPMEMan"
      approverFieldList(5) = "AssignedPEDEMan"
      For i = 0 To 5
            approverList(i) = ""
      Next
      
End Function

WhoAmIMailingTo********************************

Function WhoAmIMailingTo As String
      Dim item As NotesItem
      WhoAmIMailingTo = ""
      
      'If signed by last approver then mail goes back to the inspector
      If dc.HasItem("ApprovalPEDESignatureMan") Then
            Set item = dc.GetFirstItem("ApprovalPEDESignatureMan")
            If item.text <> "" Then
                  WhoAmIMailingTo = dc.ApprovalInspectedBy(0)
            Else
                  
                  For i = 0 To 5
                        approverList(i) = dc.GetItemValue(approverFieldList(i))(0)
                  Next
                  For i = 5 To 0 Step -1  'send mail to next approver
                        
                        If approverList(i) <> "" Then
                              WhoAmIMailingTo = approverList(i)
                              Exit For
                        End If
                        
                  Next
            End If
            
      Else
                                For i = 0 To 5
                  approverList(i) = dc.GetItemValue(approverFieldList(i))(0)
            Next
            For i = 5 To 0 Step -1  'send mail to next approver
                  
                  If approverList(i) <> "" Then
                        WhoAmIMailingTo = approverList(i)
                        Exit For
                  End If
                  
            Next
            
      End If
      
      
End Function

SendLinkToApprover******************************

Function SendLinkToApprover(recipient As String)
      Dim rtitem As NotesRichTextItem
      
      mailDoc.SendTo = recipient
      mailDoc.Subject = "A Metrology Specification Requires Your Approval"
      
      Set rtitem = mailDoc.CreateRichTextItem("Body")
      Call rtitem.AppendText("Click on the link below to access the approval document")
      Call rtitem.AddNewLine(2)
      
      linkString =  "https://knetus4.place.lexmark.com" & dc.HTTPDbLoc(0) & "/0/" & dc.DocID(0) & "?EditDocument"
      Call rtitem.AppendText(linkstring)
      mailDoc.Send(False)
      
End Function

There are a couple more, but I think if we can get SendLinkToApprover to work the others should be simple to fix.  In the mailDoc.Subject = "A Metrology Specification" & PartNum & " Requires Your Approval"  I need to get the value of PartNum off the form.  I also need for the emails be from the database and not the last person who saved the agent.

0
Comment
Question by:Jaziar
7 Comments
 
LVL 24

Expert Comment

by:HemanthaKumar
ID: 11763113
Use a global variable called partnum and populate it from the document in the initialize...

or use another parameter in the function SendLinkToApprover, and pass the partnum

~Hemanth

0
 
LVL 46

Expert Comment

by:Sjef Bosman
ID: 11763205
I don't understand. We solved this issue, didn't we??
    mailDoc.Subject = "A Metrology Specification" & doc.PartNum(0) & " Requires Your Approval"

Emails will never be from the database, unless you create an additional User-ID, give it sifficent rights in the database and on the server, and sign the agent with that ID.
0
 

Author Comment

by:Jaziar
ID: 11763528
sjef bosman I thought we did as well, but it never worked.  

I placed  mailDoc.Subject = "A Metrology Specification" & doc.PartNum(0) & " Requires Your Approval"
in the agent and here we work off templates because we don't have access to the act. database.  It replicated the next day and the agent failed.
0
Free Tool: Port Scanner

Check which ports are open to the outside world. Helps make sure that your firewall rules are working as intended.

One of a set of tools we are providing to everyone as a way of saying thank you for being a part of the community.

 
LVL 31

Accepted Solution

by:
qwaletee earned 500 total points
ID: 11763604
OK, here's throwing bad code after bad, but it will work, using LexECRNum...

Function SendLinkToApprover(recipient As String)

     mailDoc.Principal = "the mail in name for your database, so it does not come from agent signer"

     Dim rtitem As NotesRichTextItem
     
     mailDoc.SendTo = recipient
     mailDoc.Subject = "A Metrology Specification Requires Your Approval - " & dc.LexECRNum(0)
     
     Set rtitem = mailDoc.CreateRichTextItem("Body")
     Call rtitem.AppendText("Click on the link below to access the approval document")
     Call rtitem.AddNewLine(2)
     
     linkString =  "https://knetus4.place.lexmark.com" & dc.HTTPDbLoc(0) & "/0/" & dc.DocID(0) & "?EditDocument"
     Call rtitem.AppendText(linkstring)
     mailDoc.Send(False)
     
End Function
0
 
LVL 46

Expert Comment

by:Sjef Bosman
ID: 11763606
Did the agent fail on that specific line?? What was the errormessage in the log database? There could have been other reasons. Did you include error-handling in your code?

In every function, have something like
    On Error Goto onerror
...
exitsub:
    Exit Sub

onerror:
    Dim msg As String
    msg= Error$ & " on line " & Erl
    MessageBox msg
    Error Err, msg
End Sub

You'll see all the lines where the error took place. Isn't it possible to run the agent manually? Using the Debugger?
0
 

Author Comment

by:Jaziar
ID: 11772103
This worked bad code or not.  The ending result is they are off my back.

Thanks
0
 
LVL 46

Expert Comment

by:Sjef Bosman
ID: 11772181
Congrats! :)
0

Featured Post

Free Tool: Site Down Detector

Helpful to verify reports of your own downtime, or to double check a downed website you are trying to access.

One of a set of tools we are providing to everyone as a way of saying thank you for being a part of the community.

Question has a verified solution.

If you are experiencing a similar issue, please ask a related question

For Desktop Techs: How to retain a user's Notes configuration data when swapping out the end user's computer. (Assuming that you are not upgrading to a completely different version of Notes client) All you need to do is: 1) install Notes o…
You’ve got a lotus Domino web server, and you have been told that “leverage browser caching” is a must do. This means that we have to tell the browser everywhere in the web to use cache. In other words, we set (and send) an expiration date in the HT…
This video shows how to quickly and easily add an email signature for all users on Exchange 2016. The resulting signature is applied on a server level by Exchange Online. The email signature template has been downloaded from: www.mail-signatures…
Nobody understands Phishing better than an anti-spam company. That’s why we are providing Phishing Awareness Training to our customers. According to a report by Verizon, only 3% of targeted users report malicious emails to management. With compan…

808 members asked questions and received personalized solutions in the past 7 days.

Join the community of 500,000 technology professionals and ask your questions.

Join & Ask a Question