Skip to Content

For Alert management in PI we have one easy way out to send alert from PI system using UDF or JAVA mapping. We won’t need the ALRTCATDEF and SMTP configuration in PI application for alert management by following this approach. It just depends on few external jars (imported as IMPORTED ARCHIVES in 7.0 and as libraries in 7.1 or above versions) and a JAVA Code with your logic.

You can design you own code as per your requirement can send attachments, can share important data from payload, can provide message IDs and many. Here I am just sharing the basic code of both UDF and Java Mapping.

Note – A java mapping code can be used in INTERFACE DETERMINATION step with a condition for sending alert in PI or in INTERFACE\OPERATION MAPPING with actual mapping.

A java code can be used with some triggering logic in PI mapping.


I’m considering that you have understanding of creating UDFs and JAVA mapping.


Condition in Interface Determination to select the Alert mapping based on payload data:

3.PNG

Condition in Message mapping to execute the UDF based on payload data:

4.PNG 



PFB steps for getting the idea how it’s done:


External jars needed are (attached separately):

1) java-mail-1.4.jar

2)javax.activation.jar

3) aii_map_api.jar or com.sap.xpi.ib.mapping.lib.jar

External jars in PI (needs to be done if you are using version 7.0):

/wp-content/uploads/2014/05/1_451698.png

Screenshot of Alert mail:


Alerts thrown from Mapping:

/wp-content/uploads/2014/05/2_451699.png

Alerts thrown from UDF:

5.PNG


Create a NWDS Java project with this below code:

JAVA MAPPING CODE:

/*

* Created on May 9, 2014

*

* To change the template for this generated file go to

* Window>Preferences>Java>Code Generation>Code and Comments

*/

/**

* @author ashutosh.a.upadhyay

*

* To change the template for this generated type comment go to

* Window>Preferences>Java>Code Generation>Code and Comments

*/

import java.io.FileInputStream;

import java.io.FileOutputStream;

import java.io.IOException;

import java.io.InputStream;

import java.io.OutputStream;

import java.util.Map;

import java.util.Properties;

import com.sap.aii.mapping.api.StreamTransformation;

import com.sap.aii.mapping.api.AbstractTrace;

import com.sap.aii.mapping.api.StreamTransformationException;

import java.util.HashMap;

import javax.mail.Message;

import javax.mail.MessagingException;

import javax.mail.Session;

import javax.mail.Transport;

import javax.mail.internet.InternetAddress;

import javax.mail.internet.MimeMessage;

import javax.xml.parsers.DocumentBuilder;

import javax.xml.parsers.DocumentBuilderFactory;

import javax.xml.parsers.ParserConfigurationException;

import javax.xml.transform.Result;

import javax.xml.transform.Source;

import javax.xml.transform.Transformer;

import javax.xml.transform.TransformerConfigurationException;

import javax.xml.transform.TransformerException;

import javax.xml.transform.TransformerFactory;

import javax.xml.transform.dom.DOMSource;

import javax.xml.transform.stream.StreamResult;

import org.w3c.dom.Document;

import org.xml.sax.SAXException;

public class Alert_Java implements StreamTransformation{

       private Map map = null;

       private AbstractTrace trace = null;

       public void setParameter(Map arg0) {

            map = arg0;   // Store reference to the mapping parameters

            if (map == null) {

                  this.map = new HashMap();

            }

       }

/*public static void main(String args[]) {//FOR EXTERNAL STANDALONE TESTING

            try{

                  FileInputStream fin = new FileInputStream (“C:/Users/ashutosh.a.upadhyay/My Documents/ashuXML1.xml”); //INPUT FILE (PAYLOAD)

                  FileOutputStream fout = new FileOutputStream (“C:/Users/ashutosh.a.upadhyay/My Documents/ashuXML2.xml”); //OUTPUT FILE (PAYLOAD)

                  Alert_Java mapping = new Alert_Java ();

                  mapping.execute(fin, fout);

            }

            catch (Exception e1){

                  e1.printStackTrace();

            }

      }*/

      public void execute(InputStream inputstream, OutputStream outputstream) throws StreamTransformationException  {

            try{

//Code for sending the input XML as it is for further processing…

// receive XML

                  DocumentBuilderFactory documentBuilderFactory = DocumentBuilderFactory.newInstance();

                  DocumentBuilder documentBuilder = documentBuilderFactory.newDocumentBuilder();

                  Document xml = documentBuilder.parse(inputstream);

    

                  // write XML

                  TransformerFactory transformerFactory = TransformerFactory.newInstance();

                  Transformer transformer = transformerFactory.newTransformer();

                  Result result = new StreamResult(outputstream);

                  Source domSource = new DOMSource(xml);

                  transformer.transform(domSource, result);

          

                  String to = “<Recipient mail ID>”;

                  // Sender’s email ID needs to be mentioned

                  String from = “<Sender mail ID>”;

                  // Assuming you are sending email from localhost

                  String host = “<Hostname of the SMTP server>”;

                  // Get system properties

                  Properties properties = System.getProperties();

                  // Setup mail server

                  properties.setProperty(“mail.smtp.host”, host);

                  // Get the default Session object.

                  Session session = Session.getDefaultInstance(properties);

                   //or use Session session = Session.getInstance(properties); //if you get Unknown Host exception in JAVA

                  // Create a default MimeMessage object.

                  MimeMessage message = new MimeMessage(session);

                  // Set From: header field of the header.

                  message.setFrom(new InternetAddress(from));

                  // Set To: header field of the header.

                  message.addRecipient(Message.RecipientType.TO,new InternetAddress(to));

                  // Set Subject: header field

                  message.setSubject(“Check the problem dude…”);

                  // Now set the actual message. Experiment here pass values from payload or desired template

                  message.setText(“You did blunder correct that…”);

                  // Send message

                  Transport.send(message);

                  // for standalone test in NWDS

                  System.out.println(“\n”+”File processed”);

                  System.out.println(“Sent message successfully….”);

            }

            //Code to transform the Input stream to Output

            catch (ParserConfigurationException e) {

                  e.printStackTrace();

                  throw new StreamTransformationException(“Can not create DocumentBuilder.”+ e.getMessage(), e);

            }

            catch (SAXException e) {

                  e.printStackTrace();

                  throw new StreamTransformationException(“Can not read XML. “+ e.getMessage(), e);

            }

            catch (IOException e) {

                  e.printStackTrace();

                  throw new StreamTransformationException(“Can not read XML. “+ e.getMessage(), e);

            }

            catch (TransformerConfigurationException e) {

                  e.printStackTrace();

                  throw new StreamTransformationException(“Can not create Transformer. “+ e.getMessage(), e);

            }

            catch (TransformerException e) {

                  e.printStackTrace();

                  throw new StreamTransformationException(“Can not write XML. “+ e.getMessage(), e);

            }

            catch (MessagingException e) {

                  //trace.addWarning(e.getMessage());

                  e.printStackTrace();

                  throw new StreamTransformationException(“Can not send alert. ” + e.getMessage(), e);

            }   

       }

}

JAVA UDF CODE;

public String Mail_Test(String input,Container container){

      // Recipient’s email ID needs to be mentioned.

      String to = “<Recipient mail ID>”;

        // Sender’s email ID needs to be mentioned

      String from = “<Sender mail ID>”;

       // Assuming you are sending email from localhost

       String host = “<Hostname of the SMTP server>”;

       // Get system properties

       Properties properties = System.getProperties();

      // Setup mail server

      properties.setProperty(“mail.smtp.host”, host);

      // Get the default Session object.

      Session session = Session.getDefaultInstance(properties);

    //or use Session session = Session.getInstance(properties); //if you get Unknown Host exception in JAVA

       try{

             // Create a default MimeMessage object.

            MimeMessage message = new MimeMessage(session);

             // Set From: header field of the header.

             message.setFrom(new InternetAddress(from));

             // Set To: header field of the header.

             message.addRecipient(Message.RecipientType.TO,new InternetAddress(to));

             // Set Subject: header field

             message.setSubject(“Check the problem dude…”);

             // Now set the actual message

             message.setText(“You did blunder correct that…”);

             // Send message

             Transport.send(message);

             System.out.println(“Sent message successfully….”);

      }

      catch (MessagingException mex) {

            mex.printStackTrace();

            throw new RuntimeException(mex.getMessage());

      }

      return input;

  }

To report this post you need to login first.

9 Comments

You must be Logged on to comment or reply to a post.

      1. Surender Durgam

        Hi Ashutosh,

        Thanks for your reply. Now I am able to trigger the alerts by using java mapping.

        But I have a doubt, can we send an email without password authentication?

        (0) 
  1. Shreyansh Shah

    Hi Ashutosh,

    The email can also be sent with System Accessor APIs of SAP PI in Java Mapping/UDF. You can check my blog: EMail with System Accessor Lookup Service

    System Accessor is simple to use because it doesn’t need to use external javax.mail APIs. Also PI folks are well verse with email channel and lookup functionality.

    Thanks for explaining this one more way of sending emails. 🙂

    (0) 

Leave a Reply