ASG
IBM
Zystems
Cressida
Icon
Netflexity
 
  MQSeries.net
Search  Search       Tech Exchange      Education      Certifications      Library      Info Center      SupportPacs      LinkedIn  Search  Search                                                                   FAQ  FAQ   Usergroups  Usergroups
 
Register  ::  Log in Log in to check your private messages
 
RSS Feed - WebSphere MQ Support RSS Feed - Message Broker Support

MQSeries.net Forum Index » WebSphere Message Broker (ACE) Support » Attachment on EmailOutput --- WMB 7

Post new topic  Reply to topic
 Attachment on EmailOutput --- WMB 7 « View previous topic :: View next topic » 
Author Message
scravr
PostPosted: Fri Mar 19, 2010 9:45 am    Post subject: Attachment on EmailOutput --- WMB 7 Reply with quote

Partisan

Joined: 03 Apr 2003
Posts: 391
Location: NY NY USA 10021

How can I get $ExceptionList as Attachment on EmailOutput node?

I have on EmailOutput node:
Attachment ContentType as text/plain
ContentEncoding as Quoted-printable
MultiPartContentType as related

I am testing with IH03 on windows puting a meeage to a broker on UNIX SUN box.
Broker sends an email from UNIX to windows via SMTP server.

Email recieved on microsoft outlook has subject and body with expected data, and attachment file with 224 bytes.
But when open with notepad its looks empty.


Any ideas how to pass Attachment?
Do I need to mess with building ESQL or JAVA?
Back to top
View user's profile Send private message Send e-mail MSN Messenger
smdavies99
PostPosted: Fri Mar 19, 2010 11:32 am    Post subject: Reply with quote

Jedi Council

Joined: 10 Feb 2003
Posts: 6076
Location: Somewhere over the Rainbow this side of Never-never land.

IN versions prior to V7, I would zip up both the original message (in unparsed BLOB format) plus the exceptionlist into a single .zip attachment,.
This does work.

So far, the zip node plugin tooklit part does not work on V7. I sent an email to the maintainer but never got a reply.

I'm looking at some other solution probably using a UDN with some Java underneath
_________________
WMQ User since 1999
MQSI/WBI/WMB/'Thingy' User since 2002
Linux user since 1995

Every time you reinvent the wheel the more square it gets (anon). If in doubt think and investigate before you ask silly questions.
Back to top
View user's profile Send private message
mqjeff
PostPosted: Fri Mar 19, 2010 1:09 pm    Post subject: Reply with quote

Grand Master

Joined: 25 Jun 2008
Posts: 17447

There is no parser to serialize ExceptionList into a bitstream.

You have to do that yourself.

This doesn't have a lot to do with "zip files" of any sort, that I can see, unless the zip file plugin does serialization of ExceptionList for you.
Back to top
View user's profile Send private message
smdavies99
PostPosted: Fri Mar 19, 2010 2:11 pm    Post subject: Reply with quote

Jedi Council

Joined: 10 Feb 2003
Posts: 6076
Location: Somewhere over the Rainbow this side of Never-never land.

mqjeff wrote:
There is no parser to serialize ExceptionList into a bitstream.

You have to do that yourself.

This doesn't have a lot to do with "zip files" of any sort, that I can see, unless the zip file plugin does serialization of ExceptionList for you.


I'd have to look at the code to see what I did to put it all together.
What I was aiming at was to give 'support' an attachment that would contain everything they needed to investigate the problem. 1) the exceptionlist, 2) the original unparesed message
IMHO, the best way of sending this through email was to zip it up into a single container.
I was using this as an example of sending the exceptionlist as an email attachment in such a way that it won't get mangled by email or other systems when it is sent or opened in a normal email client.
_________________
WMQ User since 1999
MQSI/WBI/WMB/'Thingy' User since 2002
Linux user since 1995

Every time you reinvent the wheel the more square it gets (anon). If in doubt think and investigate before you ask silly questions.
Back to top
View user's profile Send private message
mqsiuser
PostPosted: Thu Mar 25, 2010 1:44 pm    Post subject: Reply with quote

Yatiri

Joined: 15 Apr 2008
Posts: 637
Location: Germany

I had the same problem some time ago. I have written a tree-walker which goes through the tree (that I am interested in, in this case the exception-tree) and flattens out the contents to lines. The lines can then be passed over to the eMail-Node.

This is not an attachment, but it is "within" the body of the eMail. You can contact me directly for further support.
Back to top
View user's profile Send private message
lancelotlinc
PostPosted: Fri Mar 26, 2010 5:19 am    Post subject: Reply with quote

Jedi Knight

Joined: 22 Mar 2010
Posts: 4941
Location: Bloomington, IL USA

Why not post your source code for an example that people can learn from? This sounds like a utility that many people could use.







Back to top
View user's profile Send private message Send e-mail
mqsiuser
PostPosted: Fri Mar 26, 2010 6:15 am    Post subject: xmlTree2eMailLines() Reply with quote

Yatiri

Joined: 15 Apr 2008
Posts: 637
Location: Germany

This code is written for the support pack IA07 (Send mail node)

Code:
   CREATE PROCEDURE msgTree2EMailLines (IN root REFERENCE, IN rOutputRoot REFERENCE, IN depth INT)
   BEGIN
      DECLARE cursor REFERENCE TO root;
      DECLARE lineIndex INT CARDINALITY( rOutputRoot.XML.Message.Body.Line[] ) + 1;
      IF lineIndex < 1000 THEN
         IF CARDINALITY (cursor.*[]) = 0 THEN -- IF the Element has no children, then it is a leaf
            DECLARE whiteSpace CHAR REPLICATE( '  ', depth );
            DECLARE fieldName1 CHAR FIELDNAME( cursor );
            DECLARE fieldValue1 CHAR coalesce( cursor, '');
            IF fieldName1 <> '' THEN
               CALL insertEMailLine( rOutputRoot, whiteSpace || fieldName1 || ' = ' || fieldValue1 );
               SET lineIndex = lineIndex + 1;
            ELSE
               CALL insertEMailLine( rOutputRoot, 'TEST' || rOutputRoot.XML.Message.Body.Line[lineIndex] || ' = ' || fieldValue1 );
            END IF;
         ELSE -- If has children then loop through the children, then it is a node in the tree
            DECLARE whiteSpace CHAR REPLICATE( '  ', depth );
            DECLARE fieldName1 CHAR FIELDNAME( cursor );
            DECLARE fieldValue1 CHAR coalesce( cursor, '*NULL*');         
            IF fieldValue1 = '*NULL*' THEN
               CALL insertEMailLine( rOutputRoot, whiteSpace || fieldName1 );
            SET lineIndex = lineIndex + 1;
            ELSE
               CALL insertEMailLine( rOutputRoot, whiteSpace || fieldName1 || ' = ' || fieldValue1 );
               SET lineIndex = lineIndex + 1;
            END IF;
             MOVE cursor FIRSTCHILD;
            WHILE LASTMOVE(cursor) DO
               CALL msgTree2EMailLines(cursor, rOutputRoot, depth + 1);
               MOVE cursor NEXTSIBLING;
            END WHILE;
         END IF;
      ELSE
         IF rOutputRoot.XML.Message.Body.Line[lineIndex - 1] <> '-------Message too long-------' THEN
            SET rOutputRoot.XML.Message.Body.Line[lineIndex] = '-------Message too long-------';
         END IF;
      END IF;
   END;
   
   CREATE PROCEDURE insertEMailLine (IN rOutputRoot REFERENCE, IN text CHAR)    
   BEGIN
      DECLARE lineIndex INT CARDINALITY( rOutputRoot.XML.Message.Body.Line[] ) + 1;      
      IF lineIndex < 5001 THEN
         IF LENGTH( text ) > 1000 THEN   -- Trim eMail-lines which are too long
            SET text = SUBSTRING( text FROM 1 FOR 1000) || '[...]'; 
         END IF;
         SET rOutputRoot.XML.Message.Body.Line[lineIndex] = text;
      ELSEIF lineIndex = 5001 THEN   -- eMail has enough email-lines
         SET rOutputRoot.XML.Message.Body.Line[ 5000 ] = '-------eMail too long-------';      
      ELSE
         CALL throw( '"lineIndex" CANNOT BE greater than 5001, but it is "' || CAST( lineIndex AS CHAR ) || '"!' );
      END IF;
   END;
   
   CREATE PROCEDURE insertException ( IN exceptionRef REFERENCE, IN outputRoot REFERENCE )
   -- Creates custom Error Messages or returns a generic one
   -- Use REPLACE('Error on Port $1, Server $2', CAST( 1234 AS CHAR ), '123.45.67.89' ) to create proper ErrorMsgs
   BEGIN
      DECLARE exceptionType CHAR;      
      -- Parse the Exception for the last Error
      WHILE(   FIELDNAME(exceptionRef.*[<]) = 'RecoverableException' or
            FIELDNAME(exceptionRef.*[<]) = 'ParserException' or
            FIELDNAME(exceptionRef.*[<]) = 'DatabaseException' or
            FIELDNAME(exceptionRef.*[<]) = 'UserException' or
            FIELDNAME(exceptionRef.*[<]) = 'ConvertionException' )
      DO
         SET exceptionType = FIELDNAME( exceptionRef.*[<] );
         MOVE exceptionRef TO exceptionRef.*[<];         
      END WHILE;
      DECLARE exceptionNumber INT exceptionRef.Number;
      IF exceptionType = 'ParserException' THEN
         IF exceptionNumber IN ( 5304 ) THEN      -- RM Dictionary not Found.
            CALL insertEMailLine( outputRoot, coalesce( exceptionRef.Text, '- Text is null -' ) || ' (' || coalesce( exceptionRef.Insert[3].Text, '- Text is null -' ) || ')' );
         ELSE
            CALL insertEMailLine( outputRoot, coalesce( exceptionRef.*[<].Text, '- Text is null -' ) );
         END IF;
      ELSEIF exceptionType = 'DatabaseException' THEN
         IF exceptionNumber = 2322 THEN      -- Unique Constraint violated
            CALL insertEMailLine( outputRoot, coalesce( exceptionRef.*[<].Text, '- Text is null -' ) );
         ELSE
            CALL insertEMailLine( outputRoot, coalesce( exceptionRef.*[<].Text, '- Text is null -' ) );
         END IF;
      ELSEIF exceptionType = 'UserException' THEN
         IF exceptionNumber = 3012 THEN      -- User generated Exception
            CALL insertEMailLine( outputRoot, coalesce( exceptionRef.*[<].Text, '- Text is null -' ) );
         ELSE
            CALL insertEMailLine( outputRoot, coalesce( exceptionRef.*[<].Text, '- Text is null -' ) );
         END IF;
      ELSEIF exceptionType = 'ConvertionException' THEN
--         IF exceptionNumber =  THEN
--            CALL insertEMailLine( outputRoot, coalesce( exceptionRef.*[<].Text, '- Text is null -' ) );
--         ELSE
            CALL insertEMailLine( outputRoot, coalesce( exceptionRef.*[<].Text, '- Text is null -' ) );
--         END IF;
      ELSE         
         CALL msgTree2EMailLines( exceptionRef, outputRoot, 0 );         
      END IF;      
   END;
   
   CREATE PROCEDURE throw(IN exceptionText CHAR)      -- Throws an exception
   BEGIN
      THROW USER EXCEPTION Message 3012 VALUES( exceptionText );
   END;

_________________
Just use REFERENCEs
Back to top
View user's profile Send private message
Display posts from previous:   
Post new topic  Reply to topic Page 1 of 1

MQSeries.net Forum Index » WebSphere Message Broker (ACE) Support » Attachment on EmailOutput --- WMB 7
Jump to:  



You cannot post new topics in this forum
You cannot reply to topics in this forum
You cannot edit your posts in this forum
You cannot delete your posts in this forum
You cannot vote in polls in this forum
Protected by Anti-Spam ACP
 
 


Theme by Dustin Baccetti
Powered by phpBB © 2001, 2002 phpBB Group

Copyright © MQSeries.net. All rights reserved.