Need an extra BOM Alternative Text

Hi experts,
     In standard SAP we have a provision to write BOM alternative text like the same way I need another BOM Alternative text1 to be included is there any way to do this. and also it should be displayed when you go to item overview 9I.e. new field to be created and it should capture the data from BOM alternative Text1. Is there will be any exit for this.
Thanks in advance
Regards
Venkat

Hi,
Thanks for the valuable inputs
Regards
Ramana

Similar Messages

  • URGENT HELP *** Need to load BOM Header TEXT

    Hello Experts,
    How can i load BOM Header text using LSMW
    Thanks
    S

    Two ways to upload:
    1. Via FM: SAVE_TEXT
    2. Create a recording to add text for BOM Header and Use accordingly.
    Regards
    Eswar

  • Alternative text in BOM header

    HI all,
    Plz let me know the table to find the alternative text in the BOM header ( T-code CS03)
    Regards,
    Arati.

    Hi
    Check in Table STKO, field STKTX

  • Is there a way to find non english keyboard letters in the text? I need the extra Norwegian letters

    So i have an english keyboard on my mac and i need the extra Norse letters. what do i do?

    That old saying is true, Peru Bob: "There is a website for that." 
    Gene

  • Error for open process order when BOM alternative is not found

    Dear colleagues,
    When I open process order. BOM alternative is selected according to the production version. But when  BOM alternative is not found system gives only information message and I can open process order, I want to prevent open process order when there is no BOM alternative according to the production version. Because the Bom can be deleted after creation production version.
    Thanks for your helping,

    Hi,
    U need to use an enhancement at the creation of order to check the active status of the bom and restricting the order creation when BOM status is inactive.
    see whether following enhancement is useful for your scenario:
    PPCO0006 Enhancement & EXIT_SAPLCOZF_003
    Please confirm.
    Regards
    Suri

  • AOL stripping pdf from "multipart/alternative" text email

    Hi! I am using MYOB AccountEdge and it has a function within the program to send out statements as pdf attachments to a text email. As of the beginning of this year, AOL is stripping off the pdf attachment, but the text email goes through. Last year, no problem - the attachments were received.
    I can send the attachment to the AOL accounts successfully if I attach it to a new text mail message from the mac Mail program.
    In examining the Long Headers, it appears the only difference, I can see is that the email where the pdf attachment is stripped is "multipart/alternative" and the email where is goes through is "multipart/mixed".
    As the MYOB program seems to send through Mail, at least the sent message shows up in the Sent folder, is there a way to force "multipart/mixed" through a command in Terminal? Or do I need to continue to do battle with MYOB?
    Anyone else having pdf's stripped when sending a "multipart/alternative" text email to AOL?
    Thanks for any help/ideas.
    Peter Truce

    Thanks for the help, Ernie. I did note that sometimes, not today, the message would take a very long time to get to my test AOL account - perhaps 12 hours, but it would eventually show up.
    Of course not all of my customers use AOL and everyone else is receiving the statement emails correctly. Just AOL clients and usually they are using a PC, curiously. I have one client with a Mac who is getting them OK on her AOL account.
    The brush image has been there for say, 5 years? Hopefully that is not the problem as I really, really like the brush.
    I do agree with what you are suggesting: This is a MYOB problem and MYOB will have to solve it. But thanks for identifying the thing. I will be hopping on the Tech Support Desk tomorrow - can't get through by phone on Mondays usually.
    Peter Truce

  • BOM Alternative Check on CS01 screen

    Dear All,
    Right now i need to implement a user exit for the BOM alternative in CS01 screen. For a particular BOM Usage we should not allow the user to create alternative other than '1'. So before getting the automatic alternative i need to implement the user exit/Badi for the checking on the alternative.
    thanks,
    rajesh.

    Hi,
    There is a standard customzing for alternative BOM in CS01...
    SAP Customizing Implementation Guide --> Production --> Basic Data --> Bill of Material --> Control Data for Bills of Material --> Define Modification Parameters. If you tick the " Multiple BOM inactive" then nobody should be able to create other alternatives then 1.

  • Inserting alternative text to images

    how can you add alternative text to images? which is text that describes an image when the image function is turned off or in another format for blind individuals. This is a ADA compliance requirement in order to export a document to an accessible PDF.

    Pages ’09 v4.3, or Pages 1.7.2 (IOS) do not provide alternative text for images support at this time. For those needing to brush up on alternative text, here is a Wikipedia link.

  • Type creation needing an extra slash in Sqlplus

    DB Version:10gR2
    A table can be created with the termination charachter semicolon plus enter. But when creating TYPEs we need an extra forward slash.
    Why is that?
    SQL> create table xyz(col1 number(4));
    Table created.
    SQL> CREATE OR REPLACE TYPE UID_TYPES  AS TABLE OF UIDLIST;
      2  /                             ------------------------------> the slash i am talking about
    Type created.

    GarryB wrote:
    A table can be created with the termination charachter semicolon plus enter. But when creating TYPEs we need an extra forward slash.
    Why is that?The semicolon for a "+CREATE TYPE+" indicates the end of the type definition. Other SQL commands does not need that - as other commands do not mix PL code with SQL DDL commands.
    Note that a type is defined as a SQL type, but can have PL methods, constructors and so on. This makes the "+CREATE TYPE+" SQL DDL command different from other DDLs - as it includes PL code syntax. For that reason the parser needs to know exactly where the type definition terminates. Thus the semi-colon.
    Now for the confusing part. SQL*Plus needs to know when you have finished typing so that it can transmit the block of text that you typed to the Oracle server to be parsed and executed.
    SQL*Plus uses 2 characters to allow you to tell it "+send this typed text to Oracle+" - it uses the semi-colon and the forward slash.
    Thus the confusion - as SQL*Plus (client) now uses the very same delimiter that Oracle (server) uses. So SQL*Plus have some built-in parsing intelligence. It monitors what you type. If you type a plain vanilla SQL statement like this...
    SQL> select empid from emp *;*
    .. it realises that the *;* is the instruction for it to send the text "+select empid from emp+" to the server.
    If you type a PL type instruction, SQL*Plus realises that you will be using semi-colons as command delimiters - and it will not send the text thus far typed to Oracle. Instead it will wait for you to tell it to send the text when you use the forward slash.
    When you do a type definition, SQL*Plus knows that you need to use a semi-colon as end of statement character. So it will wait for you to finish typing and indicate that you're done type using a forward slash. E.g you type:
    SQL> create or replace type TStrings as table of varchar2(4000);
    +2> */*+
    And SQL*Plus sends the text "+create or replace type TStrings as table of varchar2(4000);+" to Oracle for execution.
    So be careful not to confuse SQL*Plus "transmit text" characters with SQL and PL/SQL command delimiters.. or the SQL*Plus primitive macro language with the formal procedural language of PL/SQL.

  • Subcontracting & BOM  alternative

    Hi:
    I need be able to select a BOM alternative into the Purchase Order for Subcontracting.
    I mean, I've more than one option to make a material in subcontracting (different items for the same material) , then I'd like be able to make this decision.
    Anybody can help me?
    Regards
    Omar Perea

    hi
    i think u need multiple BOm section i.e. alternate BOM,u can achive this using production versions
    for this u have to do following
    1.  Define all the materials in your plant (subcontracting and packaging etc).
    2.  In the material master MRP 4 view there is one field in which you can mention that this material is not relevant to MRP planning, use this field for subcontracting material so that it will not be planned in MRP runs ( generally use this field for re-order point planning).
    3.  In the BOM for the subcontracting material put the special procurement key as Subcontracting and do not keep relevance for costing.
    4.  If you're using packaging material of your company and want to capture the cost of these materials in the subcontracting production order then put relevance for cost.
    5.  Define alternate BOMs for each customer.
    6.   Generally the routing will be the same but materials will change, define different prodcution versions for each alternate BOM and assign to the routing.
    7.   Define the activite types for packing and mixing in the work center and assign them to the cost center, use these for your routing. 
    8.  Whenever you recive a sub-contracting order, use the relevant production version depending on the customer.
    http://sap.ittoolbox.com/groups/technical-functional/sap-log-mm/how-to-include-alternative-2-of-the-bom-in-sub-contract-po-917575
    http://www.sapfans.com/forums/viewtopic.php?f=6&p=969446
    regards
    SAP Learner

  • The BOM alternative 1,2

    Hi,
    We have created one BOM (alternative 1) with date (valid from10.01.2008) and 2 Months later we kept the same BOM and created (alternative 2) with date (valid from 10.03.2008). We will always (re)create the same BOM with new alternative every 2 Months.
    Now we want to display the  BOM (from the last valid from date) only when we give a date and not a alternative number (because in one year we will not remenber the alternative number.)
    How can I customize the System so that it shows the right BOM through the date (valid from or the last valid from date). for exp. if I give 10.03.2008>Display only BOM(alternativ 2) and 17.03.2008>Display only BOM(alternativ 2) because it is the last valid from date
    Thanks

    Dear Dede,
    Kindly read this and revert back what more you need.
    1.When you create a BOM for a material (First Alternative) as on today using an ECN,then in the header of the BOM,the valid from
    date will be 28.03.2008 & valid To Date will be 31.12.9999.
    2.For its BOM components the valid from date will be 28.03.2008 & valid To Date will be 31.12.9999.
    3.If create a Change that's valid from tomorrow(29.03.2008),and using this if i'm changing the First Alternative BOM's components say
    i'm deleting one component and saving the datas.
    4.If i go in display mode of the BOM removing the valid from & To date in the input screen,then for the deleted item or component,the
    valid from date will be 28.03.2008 & valid to date will be 29.03.2008.But in the header of the BOm,there wont be any change,the valid
    from date will be 28.03.2008 & valid to date will be 31.12.9999.
    5.Now if I decide to delete the entire BOM(alternative 01) on 05.04.2008,then i create an ECN that's valid from 05.04.2008,and using
    this,I go in Change mode and then from the top menu,BOm Material --->Delete,and save.
    6.Now go in display mode of the BOM and check in the header of the BOM,there now you can see the valid from date will be
    28.03.2008 & valid to date will be 05.04.2008.
    So this valid to date of the BOM header will be changed,only if the entire BOM is deleted.
    I hope the above explanation will clear all your doubts.
    Reward points if satisfied with the answer and close this thread.
    Regards
    Mangalraj.S

  • BOM Alternative Selection

    Dear All,
    While creating a production order (CO01) I want to be able to select which BOM Alternative I'll be using. Is this possible?
    Where do I select the usage of BOM Alternative 2?
    Thank you

    Hi,
    For BOM Alternative Selection you need to maintain any of the following settings in Material Master --->
    MRP-4 View->BOM Explosion / Dependent Requirements->Selection Method :
    Method for Selecting Alternative Bills of Material
    Indicator determining the selection of the alternative BOM when requirements are exploded in material requirements planning.
    Use
    With Selection by order quantity, the system chooses the alternative BOM into whose lot size range the order quantity falls. The lot size range and area of validity of the BOM apply.
    With Selection by explosion date, the system chooses the alternative BOM into whose area of validity the date falls according to the setting BOM via dates.
    With Selection by production version, the system chooses the alternative BOM defined in the valid production version. The lot size range and area of validity of the production version apply.
    With Selection only by production version, the system chooses the alternative BOM defined in the valid production version. The lot size range and area of validity of the production version apply.
    If no production version is found, no production orders or process orders can be created.
    Hope this helps.
    Revert if any doubt.
    Regards,
    Tejas

  • My husband and I have upgraded our phones (iPhone 4s and iPhone 5) to the iPhone 5s.  We have given 2 of our kids the "old" phones and want to set them up as an iPod touch.  Both kids have email and need to be able to text (iMessage).

    My husband and I have upgraded our phones (iPhone 4s and iPhone 5) to the iPhone 5s.  We have given 2 of our kids the "old" phones and want to set them up as an iPod touch.  Both kids have email and need to be able to text (iMessage).
    I have read multiple posts on how to do this and I am still confused.
    Apple ID/ICoud:
    We want to be able to monitor what they do, but do not want their devices linked to our emails/contacts/etc...  Each kid has their own email account.  So, from what I have read the best way to do this is to use our family Apple ID, but set them up with a separate iCloud account?  Is this correct?
    Reset/Restore/DFU:
    To start fresh we have done multiple factory resets.  I did one that someone said was a DFU and a plan ol' factory reset, etc...  Not sure the difference.  However, when I do that I get the "hello" screen and am able to start setting the phone up anew.  However, when I go to set the phone up as an iPod I end with the same result.
    So, here is what I am doing (tell me what I am doing wrong):
    Hello Screen
    Asks me to select language and selecting:  English
    Select Your Country or Region:  United States
    Choose a Wi-Fi Network:  select my home wi-fi network
    Enter password:  entered my home wi-fi network password
    Activiate iPhone - wants me to enter Apple ID and Passwordsays that this iphone is currently linked to an Apple ID (k*******@gmail.com).  Sign in with the Apple ID that was used to set up this iPhone.
    Location Services - I have enabled location services
    Set Up iPhone
    Set Up as New iPhone
    Apple ID
    Options are to sign in with your Apple ID or Create a Free Apple ID
    Or I could "skip this step"
    I signed in with my Apple ID
    Terms and Conditions - Agree
    iCloud - I can select either to use iCloud or Don't Use iCloud - I selected use iCloud
    Find My iPhone - I can select either to use find my iPhone or to not - I selected use find my iphone
    Once I do this it says iMessage and FaceTime and shows the following:
    my email
    my other child's cell phone number
    and my husband's work phone number
    This is where things do not make sense.  I only want the phone set up with the current child's email address.  Where did I go wrong?

    There are a number of Apple services: iMessage, FaceTime, iCloud, Game center, Find My iPad, etc.
    Now, to share apps, music and books you need to have the same Apple ID:
    iPad's Settings > iTunes & App Stores > Apple ID > Your purchasing Apple ID.
    For the other service, your wife should have her own Apple ID.
    All she needs is a valid e-mail address, apply Apple ID below:
    https://appleid.apple.com
    Here's a limk with useful tips: Note: It's also valid in IOS 6
    iOS 5 & iCloud Tips: Sharing an Apple ID With Your Family

  • DO i need some extra hardware interface for receving both Audio and video

    hi i m doing e-learning project. i have to capture video from webcam and voice from headphone and send to client.
    but my code is working fine for either one at a time.
    DO i need some extra hardware interface for receving both Audio and video. im using code AVTransmit and AVReceive found from this site only
    After running TX
    i give Dsound:// & vfw://0 in Media Locater only sound is received and no vedio
    and when i give vfw://0 in Media Locater only live video is transmited.
    im using JMF1.1.2e.
    if any one know the method to run or cause of it plz reply me soon. i will be very thankfull
    transmiter/server side code .first run TX on server
    import java.io.*;
    import java.awt.*;
    import java.awt.event.*;
    import java.net.*;
    import java.util.*;
    import javax.media.rtp.*;
    import javax.swing.*;
    import javax.swing.event.*;
    import javax.swing.border.*;
    public class Tx extends JFrame implements ActionListener, KeyListener,
    MouseListener, WindowListener {
    Vector targets;
    JList list;
    JButton startXmit;
    JButton rtcp;
    JButton update;
    JButton expiration;
    JButton statistics;
    JButton addTarget;
    JButton removeTarget;
    JTextField tf_remote_address;
    JTextField tf_remote_data_port;
    JTextField tf_media_file;
    JTextField tf_data_port;
    TargetListModel listModel;
    AVTransmitter avTransmitter;
    RTCPViewer rtcpViewer;
    JCheckBox cb_loop;
    Config config;
    public Tx() {
    setTitle( "JMF/RTP Transmitter");
         config= new Config();
         GridBagLayout gridBagLayout= new GridBagLayout();
         GridBagConstraints gbc;
         JPanel p= new JPanel();
         p.setLayout( gridBagLayout);
         JPanel localPanel= createLocalPanel();
         gbc= new GridBagConstraints();
         gbc.gridx= 0;
         gbc.gridy= 0;
         gbc.gridwidth= 2;
         gbc.anchor= GridBagConstraints.CENTER;
         gbc.fill= GridBagConstraints.BOTH;
         gbc.insets= new Insets( 10, 5, 0, 0);
         ((GridBagLayout)p.getLayout()).setConstraints( localPanel, gbc);
         p.add( localPanel);
         JPanel targetPanel= createTargetPanel();
         gbc= new GridBagConstraints();
         gbc.gridx= 1;
         gbc.gridy= 1;
         gbc.weightx= 1.0;
         gbc.weighty= 1.0;
         gbc.anchor= GridBagConstraints.CENTER;
         gbc.fill= GridBagConstraints.BOTH;
         gbc.insets= new Insets( 10, 5, 0, 0);
         ((GridBagLayout)p.getLayout()).setConstraints( targetPanel, gbc);
    p.add( targetPanel);
         JPanel mediaPanel= createMediaPanel();
         gbc= new GridBagConstraints();
         gbc.gridx= 1;
         gbc.gridy= 2;
         gbc.weightx= 1.0;
         gbc.weighty= 1.0;
         gbc.anchor= GridBagConstraints.CENTER;
         gbc.fill= GridBagConstraints.BOTH;
         gbc.insets= new Insets( 10, 5, 0, 0);
         ((GridBagLayout)p.getLayout()).setConstraints( mediaPanel, gbc);
    p.add( mediaPanel);
    JPanel buttonPanel= new JPanel();
    rtcp= new JButton( "RTCP Monitor");
    update= new JButton( "Transmission Status");
         update.setEnabled( false);
         rtcp.addActionListener( this);
         update.addActionListener( this);
         buttonPanel.add( rtcp);
         buttonPanel.add( update);
         gbc= new GridBagConstraints();
         gbc.gridx = 0;
         gbc.gridy = 3;
    gbc.gridwidth= 2;
         gbc.weightx = 1.0;
         gbc.weighty = 0.0;
         gbc.anchor = GridBagConstraints.CENTER;
         gbc.fill = GridBagConstraints.HORIZONTAL;
         gbc.insets = new Insets( 5,5,10,5);
         ((GridBagLayout)p.getLayout()).setConstraints( buttonPanel, gbc);
         p.add( buttonPanel);
    getContentPane().add( p);
         list.addMouseListener( this);
         addWindowListener( this);
    pack();
    setVisible( true);
    private JPanel createMediaPanel() {
    JPanel p= new JPanel();
         GridBagLayout gridBagLayout= new GridBagLayout();
    GridBagConstraints gbc;
         p.setLayout( gridBagLayout);
         JLabel label= new JLabel( "Media Locator:");
         gbc= new GridBagConstraints();
         gbc.gridx = 0;
         gbc.gridy = 0;
         gbc.weightx = 0.0;
         gbc.weighty = 0.0;
         gbc.anchor = GridBagConstraints.EAST;
         gbc.fill = GridBagConstraints.NONE;
         gbc.insets = new Insets( 5,5,10,5);
         ((GridBagLayout)p.getLayout()).setConstraints( label, gbc);
         p.add( label);
         tf_media_file= new JTextField( 35);
         gbc= new GridBagConstraints();
         gbc.gridx = 1;
         gbc.gridy = 0;
         gbc.weightx = 1.0;
         gbc.weighty = 0.0;
         gbc.anchor = GridBagConstraints.WEST;
         gbc.fill = GridBagConstraints.HORIZONTAL;
         gbc.insets = new Insets( 5,5,10,5);
         ((GridBagLayout)p.getLayout()).setConstraints( tf_media_file, gbc);
         p.add( tf_media_file);
         tf_media_file.setText( config.media_locator);
         cb_loop= new JCheckBox( "loop");
         startXmit= new JButton( "Start Transmission");
         startXmit.setEnabled( true);
         startXmit.addActionListener( this);
         gbc= new GridBagConstraints();
         gbc.gridx = 2;
         gbc.gridy = 0;
         gbc.weightx = 0.0;
         gbc.weighty = 0.0;
         gbc.anchor = GridBagConstraints.WEST;
         gbc.fill = GridBagConstraints.NONE;
         gbc.insets = new Insets( 5,5,10,5);
         ((GridBagLayout)p.getLayout()).setConstraints( cb_loop, gbc);
         p.add( cb_loop);
         cb_loop.setSelected( true);
         cb_loop.addActionListener( this);
         gbc= new GridBagConstraints();
         gbc.gridx = 1;
         gbc.gridy = 1;
         gbc.weightx = 0.0;
         gbc.weighty = 0.0;
         gbc.anchor = GridBagConstraints.CENTER;
         gbc.fill = GridBagConstraints.NONE;
         gbc.insets = new Insets( 5,5,10,5);
         ((GridBagLayout)p.getLayout()).setConstraints( startXmit, gbc);
         p.add( startXmit);
         TitledBorder titledBorder= new TitledBorder( new EtchedBorder(), "Source");
         p.setBorder( titledBorder);
         return p;
    private JPanel createTargetPanel() {
    JPanel p= new JPanel();
         GridBagLayout gridBagLayout= new GridBagLayout();
    GridBagConstraints gbc;
         p.setLayout( gridBagLayout);
         targets= new Vector();
         for( int i= 0; i < config.targets.size(); i++) {
         targets.addElement( config.targets.elementAt( i));
    listModel= new TargetListModel( targets);
    list= new JList( listModel);
         list.addKeyListener( this);
         list.setPrototypeCellValue( "xxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxx");
    JScrollPane scrollPane= new JScrollPane( list,
    ScrollPaneConstants.VERTICAL_SCROLLBAR_AS_NEEDED,
    ScrollPaneConstants.HORIZONTAL_SCROLLBAR_NEVER);
         gbc= new GridBagConstraints();
         gbc.gridx= 0;
         gbc.gridy= 0;
         gbc.weightx= 1.0;
         gbc.weighty= 1.0;
         gbc.anchor= GridBagConstraints.CENTER;
         gbc.fill= GridBagConstraints.BOTH;
         gbc.insets= new Insets( 10, 5, 0, 0);
         ((GridBagLayout)p.getLayout()).setConstraints( scrollPane, gbc);
         p.add( scrollPane);
    JPanel p1= new JPanel();
         p1.setLayout( gridBagLayout);
         JLabel label= new JLabel( "IP Address:");
         gbc= new GridBagConstraints();
         gbc.gridx = 0;
         gbc.gridy = 0;
         gbc.weightx = 0.0;
         gbc.weighty = 0.0;
         gbc.anchor = GridBagConstraints.EAST;
         gbc.fill = GridBagConstraints.NONE;
         gbc.insets = new Insets( 5,5,0,5);
         ((GridBagLayout)p1.getLayout()).setConstraints( label, gbc);
         p1.add( label);
         tf_remote_address= new JTextField( 15);
         gbc= new GridBagConstraints();
         gbc.gridx = 1;
         gbc.gridy = 0;
         gbc.weightx = 0.0;
         gbc.weighty = 0.0;
         gbc.anchor = GridBagConstraints.WEST;
         gbc.fill = GridBagConstraints.NONE;
         gbc.insets = new Insets( 5,5,0,5);
         ((GridBagLayout)p1.getLayout()).setConstraints( tf_remote_address, gbc);
         p1.add( tf_remote_address);
         label= new JLabel( "Data Port:");
         gbc= new GridBagConstraints();
         gbc.gridx = 0;
         gbc.gridy = 1;
         gbc.weightx = 0.0;
         gbc.weighty = 0.0;
         gbc.anchor = GridBagConstraints.EAST;
         gbc.fill = GridBagConstraints.NONE;
         gbc.insets = new Insets( 5,5,0,5);
         ((GridBagLayout)p1.getLayout()).setConstraints( label, gbc);
         p1.add( label);
         tf_remote_data_port= new JTextField( 15);
         gbc= new GridBagConstraints();
         gbc.gridx = 1;
         gbc.gridy = 1;
         gbc.weightx = 0.0;
         gbc.weighty = 0.0;
         gbc.anchor = GridBagConstraints.WEST;
         gbc.fill = GridBagConstraints.NONE;
         gbc.insets = new Insets( 5,5,0,5);
         ((GridBagLayout)p1.getLayout()).setConstraints( tf_remote_data_port, gbc);
         p1.add( tf_remote_data_port);     
    JPanel p2= new JPanel();
    addTarget= new JButton( "Add Target");     
    removeTarget= new JButton( "Remove Target");
         p2.add( addTarget);
         p2.add( removeTarget);
         addTarget.addActionListener( this);
         removeTarget.addActionListener( this);
         gbc= new GridBagConstraints();
         gbc.gridx = 0;
         gbc.gridy = 2;
         gbc.weightx = 1.0;
         gbc.weighty = 0.0;
         gbc.gridwidth= 2;
         gbc.anchor = GridBagConstraints.CENTER;
         gbc.fill = GridBagConstraints.HORIZONTAL;
         gbc.insets = new Insets( 20,5,0,5);
         ((GridBagLayout)p1.getLayout()).setConstraints( p2, gbc);
         p1.add( p2);
         gbc= new GridBagConstraints();
         gbc.gridx= 1;
         gbc.gridy= 0;
         gbc.weightx= 1.0;
         gbc.weighty= 1.0;
         gbc.anchor= GridBagConstraints.CENTER;
         gbc.fill= GridBagConstraints.BOTH;
         gbc.insets= new Insets( 10, 5, 0, 0);
         ((GridBagLayout)p.getLayout()).setConstraints( p1, gbc);
         p.add( p1);
         TitledBorder titledBorder= new TitledBorder( new EtchedBorder(), "Targets");
         p.setBorder( titledBorder);
         return p;
    private JPanel createLocalPanel() {
    JPanel p= new JPanel();
         GridBagLayout gridBagLayout= new GridBagLayout();
    GridBagConstraints gbc;
         p.setLayout( gridBagLayout);
         JLabel label= new JLabel( "IP Address:");
         gbc= new GridBagConstraints();
         gbc.gridx = 0;
         gbc.gridy = 0;
         gbc.weightx = 0.0;
         gbc.weighty = 0.0;
         gbc.anchor = GridBagConstraints.EAST;
         gbc.fill = GridBagConstraints.NONE;
         gbc.insets = new Insets( 5,5,0,5);
         ((GridBagLayout)p.getLayout()).setConstraints( label, gbc);
         p.add( label);
         JTextField tf_local_host= new JTextField( 15);
         gbc= new GridBagConstraints();
         gbc.gridx = 1;
         gbc.gridy = 0;
         gbc.weightx = 0.0;
         gbc.weighty = 0.0;
         gbc.anchor = GridBagConstraints.WEST;
         gbc.fill = GridBagConstraints.NONE;
         gbc.insets = new Insets( 5,5,0,5);
         ((GridBagLayout)p.getLayout()).setConstraints( tf_local_host, gbc);
         p.add( tf_local_host);
         try {
    String host= InetAddress.getLocalHost().getHostAddress();     
         tf_local_host.setText( host);
         } catch( UnknownHostException e) {
         label= new JLabel( "Data Port:");
         gbc= new GridBagConstraints();
         gbc.gridx = 0;
         gbc.gridy = 1;
         gbc.weightx = 0.0;
         gbc.weighty = 0.0;
         gbc.anchor = GridBagConstraints.EAST;
         gbc.fill = GridBagConstraints.NONE;
         gbc.insets = new Insets( 5,5,0,5);
         ((GridBagLayout)p.getLayout()).setConstraints( label, gbc);
         p.add( label);
         tf_data_port= new JTextField( 15);
         gbc= new GridBagConstraints();
         gbc.gridx = 1;
         gbc.gridy = 1;
         gbc.weightx = 0.0;
         gbc.weighty = 0.0;
         gbc.anchor = GridBagConstraints.WEST;
         gbc.fill = GridBagConstraints.NONE;
         gbc.insets = new Insets( 5,5,10,5);
         ((GridBagLayout)p.getLayout()).setConstraints( tf_data_port, gbc);
         p.add( tf_data_port);
         tf_data_port.setText( config.local_data_port);
         TitledBorder titledBorder= new TitledBorder( new EtchedBorder(), "Local Host");
         p.setBorder( titledBorder);
         return p;
    public void actionPerformed( ActionEvent event) {
    Object source= event.getSource();
         if( source == addTarget) {
         String ip= tf_remote_address.getText().trim();
         String port= tf_remote_data_port.getText().trim();
         String localPort= tf_data_port.getText().trim();
         addTargetToList( localPort, ip, port);
         if( avTransmitter != null) {
         avTransmitter.addTarget( ip, port);
         } else if( source == removeTarget) {
         int index= list.getSelectedIndex();
         if( index != -1) {
              Target target= (Target) targets.elementAt( index);
              if( avTransmitter != null) {
         avTransmitter.removeTarget( target.ip, target.port);
              targets.removeElement( target);
              listModel.setData( targets);          
         } else if( source == startXmit) {
         if( startXmit.getLabel().equals( "Start Transmission")) {          
         int data_port= new Integer( tf_data_port.getText()).intValue();
              avTransmitter= new AVTransmitter( this, data_port);
         avTransmitter.start( tf_media_file.getText().trim(), targets);          
              avTransmitter.setLooping( cb_loop.isSelected());
         startXmit.setLabel( "Stop Transmission");
         } else if( startXmit.getLabel().equals( "Stop Transmission")) {
              avTransmitter.stop();
              avTransmitter= null;
              removeNonBaseTargets();
              listModel.setData( targets);
         startXmit.setLabel( "Start Transmission");          
         } else if( source == rtcp) {
         if( rtcpViewer == null) {
         rtcpViewer= new RTCPViewer();
         } else {
              rtcpViewer.setVisible( true);
              rtcpViewer.toFront();
         } else if( source == cb_loop) {
         if( avTransmitter != null) {
              avTransmitter.setLooping( cb_loop.isSelected());
    private void removeNonBaseTargets() {
         String localPort= tf_data_port.getText().trim();
         for( int i= targets.size(); i > 0;) {
         Target target= (Target) targets.elementAt( i - 1);
         if( !target.localPort.equals( localPort)) {
    targets.removeElement( target);
         i--;
    public void addTargetToList( String localPort,
                             String ip, String port) {     
    ListUpdater listUpdater= new ListUpdater( localPort, ip,
                                  port, listModel, targets);
    SwingUtilities.invokeLater( listUpdater);           
    public void rtcpReport( String report) {
         if( rtcpViewer != null) {
         rtcpViewer.report( report);
    public void windowClosing( WindowEvent event) {
         config.local_data_port= tf_data_port.getText().trim();
         config.targets= new Vector();
         for( int i= 0; i < targets.size(); i++) {
         Target target= (Target) targets.elementAt( i);
         if( target.localPort.equals( config.local_data_port)) {
              config.addTarget( target.ip, target.port);
         config.media_locator= tf_media_file.getText().trim();
         config.write();
    System.exit( 0);
    public void windowClosed( WindowEvent event) {
    public void windowDeiconified( WindowEvent event) {
    public void windowIconified( WindowEvent event) {
    public void windowActivated( WindowEvent event) {
    public void windowDeactivated( WindowEvent event) {
    public void windowOpened( WindowEvent event) {
    public void keyPressed( KeyEvent event) {
    public void keyReleased( KeyEvent event) {
    Object source= event.getSource();
         if( source == list) {
         int index= list.getSelectedIndex();
    public void keyTyped( KeyEvent event) {
    public void mousePressed( MouseEvent e) {
    public void mouseReleased( MouseEvent e) {
    public void mouseEntered( MouseEvent e) {
    public void mouseExited( MouseEvent e) {
    public void mouseClicked( MouseEvent e) {
    Object source= e.getSource();
         if( source == list) {
         int index= list.getSelectedIndex();
         if( index != -1) {
              Target target= (Target) targets.elementAt( index);
              tf_remote_address.setText( target.ip);
              tf_remote_data_port.setText( target.port);
         int index= list.locationToIndex( e.getPoint());
    public static void main( String[] args) {
    new Tx();
    class TargetListModel extends AbstractListModel {
    private Vector options;
    public TargetListModel( Vector options) {
         this.options= options;
    public int getSize() {
         int size;
         if( options == null) {
         size= 0;
         } else {
         size= options.size();
         return size;
    public Object getElementAt( int index) {
    String name;
    if( index < getSize()) {
         Target o= (Target)options.elementAt( index);
    name= o.localPort + " ---> " + o.ip + ":" + o.port;
         } else {
         name= null;
         return name;
    public void setData( Vector data) {
         options= data;
         fireContentsChanged( this, 0, data.size());
    class ListUpdater implements Runnable {
    String localPort, ip, port;
    TargetListModel listModel;
    Vector targets;
    public ListUpdater( String localPort, String ip, String port,
                   TargetListModel listModel, Vector targets) {
         this.localPort= localPort;
         this.ip= ip;
         this.port= port;
         this.listModel= listModel;
         this.targets= targets;
    public void run() {
    Target target= new Target( localPort, ip, port);
         if( !targetExists( localPort, ip, port)) {
         targets.addElement( target);
    listModel.setData( targets);
    public boolean targetExists( String localPort, String ip, String port) {
         boolean exists= false;
         for( int i= 0; i < targets.size(); i++) {
         Target target= (Target) targets.elementAt( i);
         if( target.localPort.equals( localPort)
         && target.ip.equals( ip)
              && target.port.equals( port)) {          
              exists= true;
         break;
         return exists;
    >>>>>>>>>>>>>>>>>
    import java.awt.*;
    import java.io.*;
    import java.net.InetAddress;
    import java.util.*;
    import javax.media.*;
    import javax.media.protocol.*;
    import javax.media.format.*;
    import javax.media.control.TrackControl;
    import javax.media.control.QualityControl;
    import javax.media.rtp.*;
    import javax.media.rtp.event.*;
    import javax.media.rtp.rtcp.*;
    public class AVTransmitter implements ReceiveStreamListener, RemoteListener,
    ControllerListener {
    // Input MediaLocator
    // Can be a file or http or capture source
    private MediaLocator locator;
    private String ipAddress;
    private int portBase;
    private Processor processor = null;
    private RTPManager rtpMgrs[];
    private int localPorts[];
    private DataSource dataOutput = null;
    private int local_data_port;
    private Tx tx;
    public AVTransmitter( Tx tx, int data_port) {
         this.tx= tx;
         local_data_port= data_port;
    * Starts the transmission. Returns null if transmission started ok.
    * Otherwise it returns a string with the reason why the setup failed.
    public synchronized String start( String filename, Vector targets) {
         String result;
         locator= new MediaLocator( filename);
         // Create a processor for the specified media locator
         // and program it to output JPEG/RTP
         result = createProcessor();
         if (result != null) {
         return result;
         // Create an RTP session to transmit the output of the
         // processor to the specified IP address and port no.
         result = createTransmitter( targets);
         if (result != null) {
         processor.close();
         processor = null;
         return result;
         // Start the transmission
         processor.start();
         return null;
    * Use the RTPManager API to create sessions for each media
    * track of the processor.
    private String createTransmitter( Vector targets) {
         // Cheated. Should have checked the type.
         PushBufferDataSource pbds = (PushBufferDataSource)dataOutput;
         PushBufferStream pbss[] = pbds.getStreams();
         rtpMgrs = new RTPManager[pbss.length];
         localPorts = new int[ pbss.length];
         SessionAddress localAddr, destAddr;
         InetAddress ipAddr;
         SendStream sendStream;
         int port;
         SourceDescription srcDesList[];
         for (int i = 0; i < pbss.length; i++) {
         // for (int i = 0; i < 1; i++) {
         try {
              rtpMgrs[i] = RTPManager.newInstance();     
              port = local_data_port + 2*i;
              localPorts[ i]= port;
              localAddr = new SessionAddress( InetAddress.getLocalHost(),
                                  port);
              rtpMgrs.initialize( localAddr);          
              rtpMgrs[i].addReceiveStreamListener(this);
              rtpMgrs[i].addRemoteListener(this);
         for( int k= 0; k < targets.size(); k++) {
              Target target= (Target) targets.elementAt( k);
              int targetPort= new Integer( target.port).intValue();
              addTarget( localPorts[ i], rtpMgrs[ i], target.ip, targetPort + 2*i);
              sendStream = rtpMgrs[i].createSendStream(dataOutput, i);          
              sendStream.start();
         } catch (Exception e) {
              e.printStackTrace();
              return e.getMessage();
         return null;
    public void addTarget( String ip, String port) {
         for (int i= 0; i < rtpMgrs.length; i++) {
         int targetPort= new Integer( port).intValue();
         addTarget( localPorts[ i], rtpMgrs[ i], ip, targetPort + 2*i);
    public void addTarget( int localPort, RTPManager mgr, String ip, int port) {
         try {
         SessionAddress addr= new SessionAddress( InetAddress.getByName( ip),
                                  new Integer( port).intValue());
         mgr.addTarget( addr);
         tx.addTargetToList( localPort + "", ip, port + "");
         } catch( Exception e) {
         e.printStackTrace();
    public void removeTarget( String ip, String port) {
         try {     
         SessionAddress addr= new SessionAddress( InetAddress.getByName( ip),
                                  new Integer( port).intValue());
         for (int i= 0; i < rtpMgrs.length; i++) {
         rtpMgrs[ i].removeTarget( addr, "target removed from transmitter.");
         } catch( Exception e) {
         e.printStackTrace();
    boolean looping= true;
    public void controllerUpdate( ControllerEvent ce) {
         System.out.println( ce);
         if( ce instanceof DurationUpdateEvent) {
         Time duration= ((DurationUpdateEvent) ce).getDuration();
         System.out.println( "duration: " + duration.getSeconds());
         } else if( ce instanceof EndOfMediaEvent) {
         System.out.println( "END OF MEDIA - looping=" + looping);
         if( looping) {
         processor.setMediaTime( new Time( 0));
              processor.start();
    public void setLooping( boolean flag) {
         looping= flag;
    public void update( ReceiveStreamEvent event) {
         String timestamp= getTimestamp();
         StringBuffer sb= new StringBuffer();
         if( event instanceof InactiveReceiveStreamEvent) {
         sb.append( timestamp + " Inactive Receive Stream");
         } else if( event instanceof ByeEvent) {
         sb.append( timestamp + " Bye");
         } else {
         System.out.println( "ReceiveStreamEvent: "+ event);
         tx.rtcpReport( sb.toString());     
    public void update( RemoteEvent event) {     
         String timestamp= getTimestamp();
         if( event instanceof ReceiverReportEvent) {
         ReceiverReport rr= ((ReceiverReportEvent) event).getReport();
         StringBuffer sb= new StringBuffer();
         sb.append( timestamp + " RR");
         if( rr != null) {
              Participant participant= rr.getParticipant();
              if( participant != null) {
              sb.append( " from " + participant.getCNAME());
              sb.append( " ssrc=" + rr.getSSRC());
              } else {
              sb.append( " ssrc=" + rr.getSSRC());
              tx.rtcpReport( sb.toString());
         } else {
         System.out.println( "RemoteEvent: " + event);
    private String getTimestamp() {
         String timestamp;
         Calendar calendar= Calendar.getInstance();
         int hour= calendar.get( Calendar.HOUR_OF_DAY);
         String hourStr= formatTime( hour);
         int minute= calendar.get( Calendar.MINUTE);
         String minuteStr= formatTime( minute);
         int second= calendar.get( Calendar.SECOND);
         String secondStr= formatTime( second);
         timestamp= hourStr + ":" + minuteStr + ":" + secondStr;     
         return timestamp;
    private String formatTime( int time) {     
         String timeStr;
         if( time < 10) {
         timeStr= "0" + time;
         } else {
         timeStr= "" + time;
         return timeStr;
    * Stops the transmission if already started
    public void stop() {
         synchronized (this) {
         if (processor != null) {
              processor.stop();
              processor.close();
              processor = null;
         for (int i= 0; i < rtpMgrs.length; i++) {
         rtpMgrs[ i].removeTargets( "Session ended.");
              rtpMgrs[ i].dispose();
    public String createProcessor() {
         if (locator == null) {
         return "Locator is null";
         DataSource ds;
         DataSource clone;
         try {
         ds = javax.media.Manager.createDataSource(locator);
         } catch (Exception e) {
         return "Couldn't create DataSource";
         // Try to create a processor to handle the input media locator
         try {
         processor = javax.media.Manager.createProcessor(ds);
         processor.addControllerListener( this);     
         } catch (NoProcessorException npe) {
         return "Couldn't create processor";
         } catch (IOException ioe) {
         return "IOException creating processor";
         // Wait for it to configure
         boolean result = waitForState(processor, Processor.Configured);
         if (result == false)
         return "Couldn't configure processor";
         // Get the tracks from the processor
         TrackControl [] tracks = processor.getTrackControls();
         // Do we have atleast one track?
         if (tracks == null || tracks.length < 1)
         return "Couldn't find tracks in processor";
         // Set the output content descriptor to RAW_RTP
         // This will limit the supported formats reported from
         // Track.getSupportedFormats to only valid RTP formats.
         ContentDescriptor cd = new ContentDescriptor(ContentDescriptor.RAW_RTP);
         processor.setContentDescriptor(cd);
         Format supported[];
         Format chosen;
         boolean atLeastOneTrack = false;
         // Program the tracks.
         for (int i = 0; i < tracks.length; i++) {
         Format format = tracks[i].getFormat();
         if (tracks[i].isEnabled()) {
              supported = tracks[i].getSupportedFormats();
              // We've set the output content to the RAW_RTP.
              // So all the supported formats should work with RTP.
              // We'll just pick the first one.
              if (supported.length > 0) {
              if (supported[0] instanceof VideoFormat) {
                   // For video formats, we should double check the
                   // sizes since not all formats work in all sizes.
                   chosen = checkForVideoSizes(tracks[i].getFormat(),
                                       supported[0]);
              } else
                   chosen = supported[0];
              tracks[i].setFormat(chosen);
              System.err.println("Track " + i + " is set to transmit as:");
              System.err.println(" " + chosen);
              atLeastOneTrack = true;
              } else
              tracks[i].setEnabled(false);
         } else
              tracks[i].setEnabled(false);
         if (!atLeastOneTrack)
         return "Couldn't set any of the tracks to a valid RTP format";
         // Realize the processor. This will internally create a flow
         // graph and attempt to create an output datasource for JPEG/RTP
         // audio frames.
         result = waitForState(processor, Controller.Realized);
         if (result == false)
         return "Couldn't realize processor";
         // Set the JPEG quality to .5.
         setJPEGQuality(processor, 0.5f);
         // Get the output data source of the processor
         dataOutput = processor.getDataOutput();
         return null;
    static SessionAddress destAddr1, destAddr2;
    * For JPEG and H263, we know that they only work for particular
    * sizes. So we'll perform extra checking here to make sure they
    * are of the right sizes.
    Format checkForVideoSizes(Format original, Format supported) {
         int width, height;
         Dimension size = ((VideoFormat)original).getSize();
         Format jpegFmt = new Format(VideoFormat.JPEG_RTP);
         Format h263Fmt = new Format(VideoFormat.H263_RTP);
         if (supported.matches(jpegFmt)) {
         // For JPEG, make sure width and height are divisible by 8.
         width = (size.width % 8 == 0 ? size.width :
                        (int)(size.width / 8) * 8);
         height = (size.height % 8 == 0 ? size.height :
                        (int)(size.height / 8) * 8);
         } else if (supported.matches(h263Fmt)) {
         // For H.263, we only support some specific sizes.
         if (size.width < 128) {
              width = 128;
              height = 96;
         } else if (size.width < 176) {
              width = 176;
              height = 144;
         } else {
              width = 352;
              height = 288;
         } else {
         // We don't know this particular format. We'll just
         // leave it alone then.
         return supported;
         return (new VideoFormat(null,
                        new Dimension(width, height),
                        Format.NOT_SPECIFIED,
                        null,
                        Format.NOT_SPECIFIED)).intersects(supported);
    * Setting the encoding quality to the specified value on the JPEG encoder.
    * 0.5 is a good default.
    void setJPEGQuality(Player p, float val) {
         Control cs[] = p.getControls();
         QualityControl qc = null;
         VideoFormat jpegFmt = new VideoFormat(VideoFormat.JPEG);
         // Loop through the controls to find the Quality control for
         // the JPEG encoder.
         for (int i = 0; i < cs.length; i++) {
         if (cs[i] instanceof QualityControl &&
              cs[i] instanceof Owned) {
              Object owner = ((Owned)cs[i]).getOwner();
              // Check to see if the owner is a Codec.
              // Then check for the output format.
              if (owner instanceof Codec) {
              Format fmts[] = ((Codec)owner).getSupportedOutputFormats(null);
              for (int j = 0; j < fmts.length; j++) {
                   if (fmts[j].matches(jpegFmt)) {
                   qc = (QualityControl)cs[i];
                   qc.setQuality(val);
                   System.err.println("- Setting quality to " +
                             val + " on " + qc);
                   break;
              if (qc != null)
              break;
    * Convenience methods to handle processor's state changes.
    private Integer stateLock = new Integer(0);
    private boolean failed = false;
    Integer getStateLock() {
         return stateLock;
    void setFailed() {
         failed = true;
    private synchronized boolean waitForState(Processor p, int state) {
         p.addControllerListener(new StateListener());
         failed = false;
         // Call the required method on the processor
         if (state == Processor.Configured) {
         p.configure();
         } else if (state == Processor.Realized) {
         p.realize();
         // Wait until we get an event that confirms the
         // success of the method, or a failure event.
         // See StateListener inner class
         while (p.getState() < state && !failed) {
         synchronized (getStateLock()) {
              try {
              getStateLock().wait();
              } catch (InterruptedException ie) {
              return false;
         if (failed)
         return false;
         else
         return true;
    * Inner Classes
    class StateListener implements ControllerListener {
         public void controllerUpdate(ControllerEvent ce) {
         // If there was an error during configure or
         // realiz

    I do this all the time, I put my MBP to a 60 inch Sharp. If you have the video working do the simple thing first. Check to make sure your sound is on your TV and Mac. Then if that doesn't work go to System Prefrences and under sound go to a tab called Output and see if your TV is listed and if it is change it to that setting
    Hope It Works

  • When I send a text message I do not get any confirmathat it has been delivered.  Is there a way of getting an automated confiramtion of deleivery as I'm used to having this on a previous phone, and need to know that my texts have been delivered.

    When I send a text message I do not get any confirmation that it has been delivered.  Is there any way of getting an automated message confirmation delivery and time?  I was used to this with my old phone and need to know that my text message has been delivered to the recipient's phone, and when.

    Thanks.  So there's no means of knowing whether a text message has been delivered, not to mention time of delivery.  Perhaps I've gone for the wrong phone.  It might do a lot but seems to miss out on some basics.

Maybe you are looking for