on 2016 Jan 21 7:41 AM
Hello Experts,
My Scenario is IDoc to Mail. I need to send the file as an attachment with dynamic filename and body. I am able to send the the file with attachment and body but not with the dynamic filename. Also I am not supposed to use Mail Package.So for the reason I have implemented Module code for changing the dynamic filename.Here is the code and error exception occurred in the Message Log.
Module Code:
package com.sap.mailmodule;
import javax.ejb.Stateless;
import com.sap.aii.af.lib.mp.module.ModuleContext;
import com.sap.aii.af.lib.mp.module.ModuleData;
import com.sap.aii.af.lib.mp.module.ModuleException;
import com.sap.engine.interfaces.messaging.api.Message;
import com.sap.engine.interfaces.messaging.api.MessageKey;
import com.sap.engine.interfaces.messaging.api.MessagePropertyKey;
import com.sap.engine.interfaces.messaging.api.Payload;
import com.sap.engine.interfaces.messaging.api.PublicAPIAccessFactory;
import com.sap.engine.interfaces.messaging.api.auditlog.AuditAccess;
import com.sap.engine.interfaces.messaging.api.auditlog.AuditLogStatus;
/**
* Session Bean implementation class MailAdapterModule
*/
@Stateless
public class MailAdapterModule implements MailAdapterModuleRemote, MailAdapterModuleLocal
{
public ModuleData process(ModuleContext moduleContext, ModuleData inputModuleData)throws ModuleException
{
Message msg = (Message) inputModuleData.getPrincipalData();
MessageKey key = null;
AuditAccess audit = null;
String attName = null;
String targetFileName = null;
try
{
//Custom Adapter module : Module called
//Reading file name from message header
attName = moduleContext.getContextData("AttachmentName");
Payload payload = msg.getAttachment(attName);
MessagePropertyKey fileKey = new MessagePropertyKey("FileName","http://sap.com/xi/XI/System/Mail");
targetFileName = fileKey.getPropertyName();
audit = PublicAPIAccessFactory.getPublicAPIAccess().getAuditAccess();
audit.addAuditLogEntry(key, AuditLogStatus.SUCCESS, "Input file read successfully");
//Reading the Directory Names from the Module Context
if(targetFileName == null)
{
targetFileName = "Reservation.txt";
}
audit.addAuditLogEntry(key, AuditLogStatus.SUCCESS, " Name of Attachment after msg.getattchment method: " + targetFileName);
audit.addAuditLogEntry(key, AuditLogStatus.SUCCESS, " Name of Attachment after msg.getattchment method: " + targetFileName);
payload.setName(targetFileName);
audit.addAuditLogEntry(key, AuditLogStatus.SUCCESS,"Attachment renamed successfully : " +targetFileName);
audit.addAuditLogEntry(key, AuditLogStatus.SUCCESS, " Entering Mail Adapter");
inputModuleData.setPrincipalData(msg);
}
catch (Exception e)
{
throw new ModuleException(e);
}
return inputModuleData;
}
}
Channel Module Configuration:
Message Exception Error ScreenShot:
Kindly help on the same.!!!
Request clarification before answering.
Hi Eng/Hi All,
Yes the correct module is being called.in the As per the earlier screen shot if you could observe the module code and channel setting the same name is given in both. Please find the below screen shots for your reference.
Module code Name screenshot:
Channel Screen shot with same as Module name:
Module code for your reference:
package com.sap.mailmodule;
import javax.ejb.Stateless;
import com.sap.aii.af.lib.mp.module.ModuleContext;
import com.sap.aii.af.lib.mp.module.ModuleData;
import com.sap.aii.af.lib.mp.module.ModuleException;
import com.sap.engine.interfaces.messaging.api.Message;
import com.sap.engine.interfaces.messaging.api.MessageKey;
import com.sap.engine.interfaces.messaging.api.MessagePropertyKey;
import com.sap.engine.interfaces.messaging.api.Payload;
import com.sap.engine.interfaces.messaging.api.PublicAPIAccessFactory;
import com.sap.engine.interfaces.messaging.api.auditlog.AuditAccess;
import com.sap.engine.interfaces.messaging.api.auditlog.AuditLogStatus;
/**
* Session Bean implementation class MailAdapterModule
*/
@Stateless
public class MailAdapterModule implements MailAdapterModuleRemote, MailAdapterModuleLocal
{
public ModuleData process(ModuleContext moduleContext, ModuleData inputModuleData)throws ModuleException
{
Message msg = (Message) inputModuleData.getPrincipalData();
MessageKey key = null;
AuditAccess audit = null;
String attName = null;
String targetFileName = null;
try
{
//Custom Adapter module : Module called
//Reading file name from message header
attName = moduleContext.getContextData("AttachmentName");
Payload payload = msg.getAttachment(attName);
MessagePropertyKey fileKey = new MessagePropertyKey("FileName","http://sap.com/xi/XI/System/Mail");
targetFileName = fileKey.getPropertyName();
audit = PublicAPIAccessFactory.getPublicAPIAccess().getAuditAccess();
audit.addAuditLogEntry(key, AuditLogStatus.SUCCESS, "Input file read successfully");
//Reading the Directory Names from the Module Context
if(targetFileName == null)
{
targetFileName = "Reservation.txt";
}
audit.addAuditLogEntry(key, AuditLogStatus.SUCCESS, " Name of Attachment after msg.getattchment method: " + targetFileName);
audit.addAuditLogEntry(key, AuditLogStatus.SUCCESS, " Name of Attachment after msg.getattchment method: " + targetFileName);
payload.setName(targetFileName);
audit.addAuditLogEntry(key, AuditLogStatus.SUCCESS,"Attachment renamed successfully : " +targetFileName);
audit.addAuditLogEntry(key, AuditLogStatus.SUCCESS, " Entering Mail Adapter");
inputModuleData.setPrincipalData(msg);
}
catch (Exception e)
{
throw new ModuleException(e);
}
return inputModuleData;
}
}
Also as per my understanding from the above error, the error is due to the below line of code is missing in the module code.
key = new MessageKey(msg.getMessageId(), msg.getMessageDirection());
So could you please confirm if i add the above the error could be resolved.
Kindly help on the same.
Thanks in advance!!!
Many Thanks,
Best Regards,
Prashanth Bharadwaj Ch.
You must be a registered user to add a comment. If you've already registered, sign in. Otherwise, register and sign in.
Prashanth
Yes, your key is not initialized prior to using the AuditLog.
Add these two lines of code as the first statements in the try block
try
{
key = new MessageKey(msg.getMessageId(), msg.getMessageDirection());
audit.addAuditLogEntry(key, AuditLogStatus.SUCCESS, this.getClass().getName() + ": Module Initialized");
Rgds
Eng Swee
| User | Count |
|---|---|
| 13 | |
| 8 | |
| 7 | |
| 5 | |
| 4 | |
| 3 | |
| 2 | |
| 2 | |
| 2 | |
| 2 |
You must be a registered user to add a comment. If you've already registered, sign in. Otherwise, register and sign in.