Solved

Email Agent Revisited

Posted on 2004-08-10
7
230 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
Is Your Active Directory as Secure as You Think?

More than 75% of all records are compromised because of the loss or theft of a privileged credential. Experts have been exploring Active Directory infrastructure to identify key threats and establish best practices for keeping data safe. Attend this month’s webinar to learn more.

 
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

Is Your Active Directory as Secure as You Think?

More than 75% of all records are compromised because of the loss or theft of a privileged credential. Experts have been exploring Active Directory infrastructure to identify key threats and establish best practices for keeping data safe. Attend this month’s webinar to learn more.

Question has a verified solution.

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

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…
Problem "Can you help me recover my changes?  I double-clicked the attachment, made changes, and then hit Save before closing it.  But when I try to re-open it, my changes are missing!"    Solution This solution opens the Outlook Secure Temp Fold…
This video shows how to remove a single email address from the Outlook 2010 Auto Suggestion memory. NOTE: For Outlook 2016 and 2013 perform the exact same steps. Open a new email: Click the New email button in Outlook. Start typing the address: …
Delivering innovative fully-managed cloud services for mission-critical applications requires expertise in multiple areas plus vision and commitment. Meet a few of the people behind the quality services of Concerto.

932 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

11 Experts available now in Live!

Get 1:1 Help Now