Solved

Email Agent Revisited

Posted on 2004-08-10
7
228 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
What Is Threat Intelligence?

Threat intelligence is often discussed, but rarely understood. Starting with a precise definition, along with clear business goals, is essential.

 
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

What Should I Do With This Threat Intelligence?

Are you wondering if you actually need threat intelligence? The answer is yes. We explain the basics for creating useful threat intelligence.

Join & Write a Comment

I thought it will be a good idea to make a post as it will help in case someone else faces these issues. I trust this gives an idea how each entry in Notes.ini can mean a lot for the Domino Server to be functioning properly. This article discusses t…
Article by: Rob
Notes 8.5 Archiving Steps and Tips This article covers setting up a Notes archive, and helps understand some of the menu choices making setting up and maintaining a Notes archive file easier.
In this seventh video of the Xpdf series, we discuss and demonstrate the PDFfonts utility, which lists all the fonts used in a PDF file. It does this via a command line interface, making it suitable for use in programs, scripts, batch files — any pl…
Here's a very brief overview of the methods PRTG Network Monitor (https://www.paessler.com/prtg) offers for monitoring bandwidth, to help you decide which methods you´d like to investigate in more detail.  The methods are covered in more detail in o…

705 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

Need Help in Real-Time?

Connect with top rated Experts

19 Experts available now in Live!

Get 1:1 Help Now