Looping in message mapping
Hello XI Gurus,
I need your help in doing following mapping.
The source ORDERS02 Idoc contains is fields like
E1EDP01(segment) under this
E1EDP19(segment)-QUALF(field) = Z18
E1EDP19(segment)-QUALF(field) = Z39
E1EDP19(segment)-QUALF(field) = Z39
E1EDP19(segment)-QUALF(field) = Z39
E1EDP19(segment)-QUALF(field) = Z39
and the Target structure is like this
E1NTITM(segment) under this-
BAUTL(field)
we need to populate the E1NTITM segment in target system only when
E1EDP19-QUALF = Z39 , so here i got the idea how to get the E1NTITM segement. But BAUTL field will be populate in each E1NTITM segment only when E1EDP19-QUALF = Z18. It means, in the source structure contains one
E1EDP19-QUALF = Z18 and n number of E1EDP19-QUALF = Z39 fields. So E1NTITM segment will appear in the target n number of times and BAUTL field will be appear in each and every E1NTITM segment. if the source doesn't have
E1EDP19-QUALF = Z18 field then BAUTL field could't be there in target E1NTITM segment. For this i just have an idea like, we need to loop the E1EDP01 segment to check if there is any E1EDP19-QUALF = Z18 field is there but i don't no how to do the looping. Please help me how to solve this problem.
Rao,
Based on your structure I created the logic, please find them below in the URL. If you think it's not correct, then reply back.
<b>Mapping</b>
http://www.flickr.com/photo_zoom.gne?id=1954590723&size=o
http://www.flickr.com/photo_zoom.gne?id=1954590729&size=o
<b>UDF</b>
http://www.flickr.com/photo_zoom.gne?id=1954590957&size=o
Just see the logic[ The UDF window belongs to SP14, so don't care] I believe u know how to create advanced UDF.
I used two UDF, find the code below.
<b>UDF - Generate</b>
int z39cnt =0;
int z18cnt =0;
for(int i=0;i<a.length;i++)
if(a<i>.equals("Z18"))
z18cnt+=1;
else if(a<i>.equals("Z39"))
z39cnt+=1;
if(z18cnt == 0)
result.addSuppress();
else
for( int j=0;j<z39cnt;j++)
result.addValue("BAUTL");
result.addContextChange();
<b>UDF - Generateroot</b>
int z39cnt=0;
for(int i=0;i<a.length;i++)
if(a<i>.equals("Z39"))
result.addValue("");
<b>Results</b>
http://www.flickr.com/photo_zoom.gne?id=1954590735&size=o
http://www.flickr.com/photo_zoom.gne?id=1954590737&size=o
If you find any difficulties in achieving the same then let me know.
raj.
Similar Messages
-
Hi all,
I have a requirement and have been breaking my head on this .
Source Target
PO1 - 0 to 999999 Idoc Segment(E1EDK2)
Item No(field)
SCH 0 to 999999 (Node)
Here I have a Parent node PO1 which needs to be looped
and within that I have SCH segemet which gets repeated
the requirement is first I need to check the if the values in the SCH exist , If it exist then I need to take the two values from SCH and item number from PO1 segment an create a traget segment. If the SCH does not exist then i need to take the item level values and create a segment. The challenge here is, I have a loop within a loop and the target segment is only one.
Kindly help me with this scenario.
Regards
Venuhi,
this is possible
which sp are you running on?
if you can define global variables
you can define global arrays in which you'll store the results
then you need to put all values in one advanced function
and put them in map for example and do the looping
in your java function (with all values at once)
then put the result in the global array
from which you can take it out in any other function
(for all the rest of the tags)
but I don't know about the performance of this ...
maybe you can do the same in java mapping?
but I'm sure it can be done in message mapping too
Regards,
michal -
Need Clarification on Looping in Message Mapping.
Hi All,
I'm trying to implement the Dynamic emailing as explained in the Michals blog.
/people/michal.krawczyk2/blog/2005/03/07/mail-adapter-xi--how-to-implement-dynamic-mail-address
I have this partially working for the scenario I have.
XI will be receiving a ORDRSP IDoc from an external system and XI needs to do the following.
1) Check the value of <b> E1EDP01-ABGRU </b> equals to Z2. If any of the E1EDP01-ABGRU has a value of Z2, it should do the following
a) Get the email address from the E1EDKA1-ILNNR and map it to the TO field as shown in the blog.
b) Get the values of BELNR-E1EDK01, MENEE, VPREI, POSEX, PEINH, ABGRT from the E1EDP01 segment and concatenate them all and map it to the Content tag as explained in Michals blog.
I have this process partially working. The XI interface is only mapping for the first occurrence of E1EDP01 and not the subsequent occurrences of E1EDP01 which matches the criteria ( E1EDP01-ABGRU = Z2)
Any help in getting fixing this problem??
ThanksMake sure to define multiple target messages in your message and interface mappings, for the mail package message definition (occurrence = 0...unbounded).
Also, in the logic of your message mapping, you need to create a new mail package message only if E1EDP01-ABGRU = 'Z2'. Use it like this:
ABGRU --- EqualS --- createIf --- Mail
Constant[Z2]
Regards,
Henrique. -
Hi,
I want to have a loop in message mapping.
For example:
Customers
Name (unbounded)
ID
GivenName
Adress (unbounded)
ID
City
ID is the key which determines which Given Name belongs to which city.
That should be transformed to
Customers
Customer (unbounded)
ID
GivenName
City
Now every Customer has is own element.
Does anybody have experience with that?
Regards,
UdoHi Udo,
can you this code with <b>advanced user function</b>:
(with three input values)
a, b, c
a - Customers-ID
b - Adress-ID
c - Adress-City
===============================================
for (int t =0; t<a.length; t++)
for (int j=0; j<b.length; j++)
if (a[t].equals(b[j]))
result.addValue(c[j]);
==================================================
Regards,
michal -
Problem with Message-Mapping: Loop over Elements possible?
Hi all,
I want do create a Message-Mapping for an IDoc-to-File Scenario. In the Source Structure there are some Elements which can appear more than once (1..unbounded). I need a mechanism which loops over these elements and search for specified values. From the Element which contains an element with this specified value the mapping should write a value in the target structure.
Here a simple example (source structure) for better understanding:
<root>
<invoice>
<number> 10 </number>
<sum> 200.00 </sum>
</invoice>
<invoice>
<number> 20 </number>
<sum> 150.00 </sum>
</invoice>
<invoice>
<number> 30 </number>
<sum> 120.00 </sum>
</invoice>
</root>
Now the duty of the Mapping should be to search in the elements <invoice> for the number 30. And then the sum of the invoice with the number 30 should be written in a field of the target structure.
I tried it out with a constant togehter with an equalsS-function and an ifWithoutElse-function, but it is working only then, if the invoice with the number 30 has the first position in the root context.
Can anybody help me? Thanks
With kind regards
ChristopherHi,
Write a UDF to sum the required values and map to target node.
See while writing the UDF select the type as queue.
number -- removecontext-UDF targetnode
sum----removecontext--/
number abd sum or the two inputs
in UDF
int nsum = 0;
for(int i;i < number.length;i++){
if number(i).equals("30") then
nsum = nsum + valueOf(sum(i));
result.addValue(nsum); // convert the nsum into string
Regsrds
Chilla -
Message-Mapping: nested Loops over Elements
Hi Experts,
I have problems with my Message-Mapping in the IR. I have a source and a target structure. In the following I will give you easy examples of these structures:
<u>source structure:</u>
<E1EDP01>
<E1EDP19>
<QUALF> ... </QUALF>
<IDTNR> ... </IDTNR>
</E1EDP19>
<E1EDP19>
<QUALF> ... </QUALF>
<IDTNR> ... </IDTNR>
</E1EDP19>
</E1EDP01>
<E1EDP01>
<E1EDP19>
<QUALF> ... </QUALF>
<IDTNR> ... </IDTNR>
</E1EDP19>
<E1EDP19>
<QUALF> ... </QUALF>
<IDTNR> ... </IDTNR>
</E1EDP19>
</E1EDP01>
<u>target structure:</u>
<LineItem>
<IDTNR></IDTNR>
</LineItem>
<LineItem>
<IDTNR></IDTNR>
</LineItem>
That means:
For every <E1EDP01> in the source structure I create one <LineItem> in the target structure. One E1EDP01-Element can contain more than one E1EDP19-Elements. I have to loop over these E1EDP19-Elements, because I have to locate the Element <QUALF> with a given (fixed) value. The Mapping should put the value from the Element <IDTNR> from the source structure - where the QUALF-Element has this given value - in the IDTNR-Element of the target structure.
I tried it with a UDF, but only the first <IDTNR> in the target structure got filled.
Thanks for your help
ChristopherThank you,
but how I can set the Elements IDTNR and QUALF to the context E1EDP01?
In the splitByValue-Function do I need "each value"?
best regards
Christopher -
How can I use loop in graphical message mapping
The source input XML is like:
<bookstore>
<book>
<item1>xxx</item1>
<item2>yyy</item2>
</book>
<book>
<item1>zzz</item1>
<item2>www</item2>
</book>
</bookstore>
I want to create an output XML like
<output>
<item>
<item1>xxx</item1>
<item2>yyy</item2>
</item>
<item>
<item1>xxx</item1>
<item2>www</item2>
</item>
<item>
<item1>zzz</item1>
<item2>www</item2>
</item>
<item>
<item1>xxx</item1>
<item2>yyy</item2>
</item>
</output>
That means I want to do permutation and combination for all <item1> <item2> under <book>.
Of course I can write a customer function to do it, but I want to basically use the buildin functions to do the graphical message mapping for this.
Any idea? thank you.well, I'm not very clear of those 2 English words
What I want is to list all possible combination of item1 and item2 (and in fact, we have item3, item4, ....etc).
example
input:
<item>
<item1> 111 </item1>
<item2> 222 </item2>
<item3> 333 </item3>
</item>
<item>
<item1> aaa </item1>
<item2> bbb </item2>
<item3> ccc </item3>
</item>
I want to get
<item><Item1>111>/item1> <item2>222</item2> <item3>333</item3> </item>
<item><Item1>111>/item1> <item2>222</item2> <item3>ccc</item3> </item>
<item><Item1>111>/item1> <item2>bbb</item2> <item3>333</item3> </item>
<item><Item1>111>/item1> <item2>bbb</item2> <item3>ccc</item3> </item>
<item><Item1>aaa>/item1> <item2>222</item2> <item3>333</item3> </item>
<item><Item1>aaa>/item1> <item2>222</item2> <item3>ccc</item3> </item>
<item><Item1>aaa>/item1> <item2>bbb</item2> <item3>333</item3> </item>
<item><Item1>aaa>/item1> <item2>bbb</item2> <item3>ccc</item3> </item> -
Accessing container variable of BPM in Message Mapping function
Hi,
I have a scenario in BPM where i have a container variable that is used as a loop counter.I want to access that counter defined , every time when i go around the loop and perform certain actions based on that counter. so how can i access that variable in my message Mapping function.Hi Sudharshan,
check these links, hope they give you the required information (i think there is some problem with SDN site, check these links after a while)
Re: How to use Container Variable across Maps
Container object in Message Mapping
Copy value of container (abstract interface) to an other container
Regards
Vishnu -
Hello experts,
What is Support inheritence in SAP XI.
Difference between value,context,Queue.
How to use LOOP in XSLT mapping.
Thank youHi,
Value : Value makes the UDF a simple UDF, wherein u pass only a single value.
Context : But there might be occasion when you want to pass the input as contexts, then you use context.
So here you will be looping through each context.
Introduction to Context Handling in Message Mapping
Queue : When you want to pass the entire queue, you choose Queue. Here you will looping through the entire queue. Queue contains different contexts.
Introduction to queues in message mapping
For XSLT
http://www.w3schools.com/xsl/xsl_for_each.asp -
UDF in message mapping instead of Java Mapping. Pls advice urgent
Hi All,
My scenario
CRM --- XI -- CRM
In XI I have to open socket connection.
Pls refer link:
/people/saravanakumar.kuppusamy2/blog/2005/12/15/socket-integration-with-xi
Can Java Mapping code given in above link for socket connection can be used in Message Mapping (CRM -- CRM)UDF?
Pls advice urgent
RegardsHi Henry,
I understood your requirement.
But as per the architecture of XI/PI some message has to trigger your scenario.
In this case there is no adapter where you can directly communicate with CRM system.
Do one thing configure a dummy scenario on the sender side.
Use File adapter for simplicity. once it pools the file with some dummy data in the file it comes to Interface mapping(message mapping) of the PIPELINE steps. Now use the code as you mentioned above(within UDF) for opening socket to CRM system and implement you business logic within that program and write the response to target interface which will infact talk with CRM system.
Dont forget to do the coding in an infinite loop with some delay (if required). Other wise every time you have to put a message for File Adapter for triggering purposes.
You can also acheive the same if you use Java Mapping instead of Graphical mapping with UDF(code for Opening socket and business logic). I suggest you to use Java Mapping.
I dont know how you will comunicate with CRM system on receiver side.?
Thanks,
Gujjeti -
Hi,
1)I need some information regarding Message Mapping. I need to map the field TDLINE of segment E1EDKT2 of IDOC ORDERS05 to the target fields. But based upon the index number of the record of this segment, I must map it to different fields (eg.E1EDKT2[10], E1EDKT2[3]). How can I incorporate this in Message Mapping?
2)And one more scenario is as follows.Use PARTN if exists or use LIFNR to map to target and it must satisfythe conidtion PARVW = AG. Should we need Java code or can we achieve this using two 'If' conditions.
3)We are looping at a source segment and it has multiple occurances.How to create multiple segments in target based on condition.
Can anyone help me.
Thanks,
Srinivas> 1) I need to map the field TDLINE of segment E1EDKT2
> of IDOC ORDERS05 to the target fields. But based upon
> the index number of the record of this segment, I
> must map it to different fields (eg.E1EDKT2[10],
> E1EDKT2[3]). How can I incorporate this in Message
> Mapping?
You can use the index function (with SP13):
E1EDKT2* - index
equalS
constant(10) /
ifWithoutElse - target
TDLINE - removeContexts /
check the correct context
> 2)And one more scenario is as follows. Use PARTN if
> exists or use LIFNR to map to target and it must
> satisfy the conidtion PARVW = AG. Should we need Java
> code or can we achieve this using two 'If'
> conditions.
Sure you can chain if statements:
PARVW
equalS
constant(AG) /
ifWithoutElse
PARTN /
PARTN - exist - if - target
LIFNR
This mapping assumes, that PARVW = AG is available, when PARTN is available.
> 3)We are looping at a source segment and it has
> multiple occurances. How to create multiple
> segments in target based on condition.
Here is a pattern:
condition - createIf - target
condition has to be a queue of true and false with the same occurrency as source.
All sub nodes of source are now arranged correctly under the target node.
Regards
Stefan
Message was edited by: Stefan Grube -
Message Mapping - Filter on parent element
Hi,
I'm using message mapping for mapping IDoc ORDERS05 to flat file.
This is the source structure :
ORDERS05 1..1
---- IDOC 1..1
---- E1EDKT1 0..99
---- TDID 0..1
---- TSSPRAS_ISO
---- E1EDKT2 0..9999999
---- TDLINE 0..1
and this is the target structure :
TCD 1..1
---- TCT 1..unbounded
---- TDID
---- TDSPRAS
---- TDLINE
Can anybody help me about how to do the mapping for having 1 TCT element for each
E1EDKT2 element with parent (E1EDKT1) having field TDID equals to the constant "ZALO" ?
For exemple:
<ORDERS05>
<IDOC>
<E1EDKT1>
<TDID>ZALO</TDID>
<TSSPRAS_ISO>tdspras1</TSSPRAS_ISO>
<E1EDKT2>
<TDLINE>tdline11</TDLINE>
</E1EDKT2>
<E1EDKT2>
<TDLINE>tdline12</TDLINE>
</E1EDKT2>
</E1EDKT1>
<E1EDKT1>
<TDID>unused</TDID>
<TSSPRAS_ISO>tdspras2</TSSPRAS_ISO>
<E1EDKT2>
<TDLINE>tdline2</TDLINE>
</E1EDKT2>
</E1EDKT1>
<E1EDKT1>
<TDID>ZALO</TDID>
<TSSPRAS_ISO>tdspras3</TSSPRAS_ISO>
<E1EDKT2>
<TDLINE>tdline3</TDLINE>
</E1EDKT2>
</E1EDKT1>
</IDOC>
</ORDERS05>
must result in :
<?xml version="1.0" encoding="UTF-8"?>
<TCD>
<TCT>
<TDID>ZALO</TDID>
<TDSPRAS>tdspras1</TDSPRAS>
<TDLINE>tdline11</TDLINE>
</TCT>
<TCT>
<TDID>ZALO</TDID>
<TDSPRAS>tdspras1</TDSPRAS>
<TDLINE>tdline12</TDLINE>
</TCT>
<TCT>
<TDID>ZALO</TDID>
<TDSPRAS>tdspras3</TDSPRAS>
<TDLINE>tdline3</TDLINE>
</TCT>
</TCD>
Thanks in advance,
LaurenceHi,
When implementing your solution, I get only 1 TCT per E1EDKT01 (and no more loop on E1EDKT02) and filter on "ZALO" TDID is not working.
<TCT>
<TDID>ZALO</TDID>
<TDSPRAS>tdspras1</TDSPRAS>
<TDLINE>tdline11</TDLINE>
</TCT>
<TCT>
<TDID>unused</TDID>
<TDSPRAS>tdspras2</TDSPRAS>
<TDLINE>tdline2</TDLINE>
</TCT>
<TCT>
<TDID>ZALO</TDID>
<TDSPRAS>tdspras3</TDSPRAS>
<TDLINE>tdline3</TDLINE>
</TCT>
I have changed context of TDID to ORDERS05, and context of E1EDKT2 to ORDERS05 too. Aren't thoses contexts correct?
Laurence -
Problem in Graphical message mapping.Need UDF to add array based on some co
Hi All,
I have been struck in message mapping.Below i am explaining it,
I have two input array,
one array lets call X [24]
[25]
[26]
[24]
[25]
other array is Y [10]
[11]
[12]
[13]
[14] .length of both the array will be same .
Now I want the output as: if there is any same value in first array i.e array X then corresponding value of second array should be added.i.e in array X if 24 is coming as twice (1st and 4th) then 1st and 4th value of array Y will be added.So here there will be only three output as Z[23]
[25]
[12]
Please guide me if posiible .I tried to use the for loop but its not working as the value of X is repeating.
Regards,
SaurabhHi,
Tru this..
public void test(String[] a,String[] b,ResultList result,Container container){
int flaga,flagb;
for(int i=0;i<a.length;i++)
flaga =0;
for(int j=i+1;j<a.length;j++)
int p = Integer.parseInt(a<i>);
int q = Integer.parseInt(a[j]);
if(p==q)
flaga =1;
int c = Integer.parseInt(b<i>)+Integer.parseInt(b[j]);
String d = new Integer(c).toString();
result.addValue (d);
if (flaga ==0)
flagb=0;
for(int q =i-1; q>=0;q--)
if(Integer.parseInt(a<i>) == Integer.parseInt(a[q]))
flagb = 1;
if (flagb == 0) result.addValue((b<i>));
I have tested with the same input... it is working for me
http://www.flickr.com/photos/28929439@N06/2721471681/
Thanks
SaNv... -
Export Parameters in Parameterized Message Mapping does not work.
Hello, XI-Gurus!
I have a question: how to use an EXPORT parameter in Parameterized Message Mapping? seems it does not work...
(I use XI / PI 7.1)
For example, I have a follow scenario: a large message comes to XI from one BS (message contains a lot of rows), then this large message splits to some small messages (something about 1000 rows in one small message), and send small messaeg one by one from XI to second BS. So, after receive step I use a transformation step with Parameterized Message Mapping to get a total amount of rows in large message (it needs for making condition for loop in IP, for example). I want to use an EXPORT parameter to pass this number from Parameterized Message Mapping to Integration Process. How can I do it?
Of course, I know the way to how to make this scenario without any parameterizing, but I want to use exactly "Parameterized Message Mapping" like it writes in this help:
http://help.sap.com/saphelp_nwpi71/helpdata/en/43/c3e1fa6c31599ee10000000a1553f6/frameset.htm
This topic contains something about procedure how to use an EXPORT parameter, but this procedure does not work. I don't understand how to write this UserDefined Function, which I can set any export parameters.
I read this blog:
/people/jin.shin/blog/2008/02/14/sap-pi-71-mapping-enhancements-series-parameterized-message-mappings
this blog has NO solutions about EXPORT parameters. about IMPORT parameters - everything OK.
Some topics about how to use export parameters in MM in this forum marked as "answered", but this is not true.
How to export parameters from Message Mapping
Export parameter REALLY work in message mapping???????
Export parameter in Message mapping UDF
WBR,
VsevolodHi Rudolf,
It still does not works.
Great thanks for all your answers! If your advice works on your PI-server, it means that my problem not in UDF.
Step by step:
1) I create in "Signature" tab two parameters: FILE_NAME, FILE_TYPE (of course, they both Export and xsd:string type)
2) Then, I goes to "Functions" tab and create new function "testUDF" with one argument var1.
3) In body of this UDF insert 2 strings:
getOutputParameters.setString("FILE_NAME" , "Order");
getOutputParameters.setString("FILE_TYPE" , "PDF");
4) in "Definition" tab I bind function "Local.testUDF" with one field in my input message and goes to "Test" tab for testing.
5) And then I have a message window "Problems While Testing":
Source text of object Message Mapping: mm_ParamMap | urn:****.*.:****:TEST has syntax errors:
Function testUDF, Line 1:
cannot find symbol
symbol : variable getOutputParameters
location: class com.sap.xi.tf._mm_ParamMap_
getOutputParameters.setString("FILE_NAME" , "Order");
^
Function testUDF, Line 2:
cannot find symbol
symbol : variable getOutputParameters
location: class com.sap.xi.tf._mm_ParamMap_
getOutputParameters.setString("FILE_TYPE" , "PDF");
^
Note: /usr/sap/PID/DVEBMGS00/j2ee/cluster/server0/./temp/classpath_resolver/Mapb1562570ca9e11deb3fe00237d301cd6/source/com/sap/xi/tf/_mm_ParamMap_.java uses or overrides a deprecated API.
Note: Recompile with -Xlint:deprecation for details. Note: /usr/sap/PID/DVEBMGS00/j2ee/cluster/server0/./temp/classpath_resolver/Mapb1562570ca9e11deb3fe00237d301cd6/source/com/sap/xi/tf/_mm_ParamMap_.java uses unchecked or unsafe operations.
Note: Recompile with -Xlint:unchecked for details.
2 errors
Look at this notes, first writes that I use a deprecated API, second - about unchecked or unsafe operations.
And I have no idea what's wrong... Can you help me?
Thanks!
WBR,
Vsevolod -
Message mapping hint 1:N in group of 2?
Hi All,
I am looking for message mapping hint to do following:
Source XML.
<itab>
<itab_body>
<a>1</a>
<b>1</b>
</itab_body>
<itab_body>
<a>2</a>
<b>2</b>
</itab_body>
<itab_body>
<a>n</a>
<b>n</b>
</itab_body>
</itab>
Target XML:
<itab>
<itab_body>
<a>1</a>
<b>1</b>
</itab_body>
<itab_body>
<a>2</a>
<b>2</b>
</itab_body>
</itab>
<itab>
<itab_body>
<a>n-1</a>
<b>n-1</b>
</itab_body>
<itab_body>
<a>n</a>
<b>n</b>
</itab_body>
</itab>
ThanksThere are many ways to achieve this. I would use java mapping to get the desired result. You have to loop the source and in the target pick every two nodes as separate. Please follow this link for java mapping. This might provide some idea.
Refer this [link|http://techplay.plozzle.com/?p=21]
Maybe you are looking for
-
How can I force delete SharePoint 2013 search service?
I installed Search service using PowerShell. It failed. I tried to remove the service and only partially removed. Now when i try to remove it again it says I cannot login to the search database - the search database no longer exists. Is there a way
-
Can't find new DAL Library in DM Studio
Hey folks, I have a few different projects that are all part of the same MRL. Up until now they've all used the default SETRCPTB DAL library for triggers. But I'm working on a new project, still in the same MRL, that I'm creating a new DAL library to
-
Third Party with item cat group NORM
Hi! I've created a material X with item cat gr NORM. Now I'm creating a standard order with type OR. I don't have the material X in my plant and want to go through third party process. I've done the following- Maintained Purchasing and MRP views OR +
-
WITH HOLDING TAX ON DOWN PAYMENT
HI I am using TCode F-47 for down payment request to be paid to vendor. In Vendor Master Record with holding tax information is activated. But at the time of processing payment against down payment request using TCode F-58 With holding tax not deduc
-
Problem with saving InDesign newsletter to a print ready PDF in CS6
I am using a PC and created a 4 page newsletter in InDesign, CS6. I have made this newsletter over and over in previous version of CS products and never had a problem. But with CS6, I cannot get it to save as a print-ready PDF with the bleeds and m