RTP mateiral reference in PO

Standard R/3 provides scenario w.r.t. RTP such a way that the receipt is done by 501M movement type during Goods receipt.
Is there any way of mentioning the RTP material in purchase order and capture of the line item during goods receipt with out manual entry.

hi Florinda,
basically you can not select a purchase document and delivery from the same search help , because they belongs to different tables and should select by different search criterias. what is your logic to  select simultaneously Purchase Order and Delivery Note?
best regards,

Similar Messages

  • Multiple RTP streams + local video Player - S.O.S.

    Hi guys,
    I ran out of ideas, so I need your help now. It's gonna be a long one...
    Given:
    MediaLocator(vfw://0) --> DataSource(video) --> Processor(video)
    Then I send processor's output (videoProcessor.getDataOutput()) over RTP to multiple destinations. Of course, I am using cloneable DataSources for this, cause there's no other way. So, now I also need to have a local video feed just for self-reference, but it seems to be a tough one! Let me go over what I've tried til now:
    1. Using DataSource clone from video processor, I tried to create a Player (i.e. Manager.createPlayer(clonedDS) ). BOOM!
    javax.media.NoPlayerException: Cannot find a Player for: com.ibm.media.protocol.SuperCloneableDataSource$PushBufferDataSourceSlave@126c6ea
         at javax.media.Manager.createPlayerForSource(Manager.java:1512)
         at javax.media.Manager.createPlayer(Manager.java:500)
         at org.interlab.mc.media.MediaManager.setVideoProcessorEnabled(MediaManager.java:2046)
         at org.interlab.mc.media.MediaManager.openVideoStreams(MediaManager.java:1807)
         at org.interlab.mc.UserAgent.callStateChanged(UserAgent.java:2516)
         at org.interlab.mc.call.Call.fireCallStateChangedEvent(Call.java:366)
         at org.interlab.mc.call.Call.setState(Call.java:244)
         at org.interlab.mc.call.CallManager.processInviteOK(CallManager.java:330)
         at org.interlab.mc.UserAgent.processResponse(UserAgent.java:1632)
         at gov.nist.javax.sip.EventScanner.deliverEvent(EventScanner.java:288)
         at gov.nist.javax.sip.EventScanner.run(EventScanner.java:489)
         at java.lang.Thread.run(Unknown Source)So i checked. If I create a clone from my DataSource(video) then Manager would return this instance:
    class com.sun.media.multiplexer.RawBufferMux$RawBufferDataSourceBut if, like now, I want to create a clone from DataSource from video processor (i.e. Processor.getDataOutput()) then I get this instance:
    com.ibm.media.protocol.SuperCloneableDataSource$PushBufferDataSourceSlaveHope you noticed the difference. :) Now, from the latter one neither I can create a Player nor can I create a Processor. Too bad. So, I tried another one.
    2. I took my DataSource(video), created a cloneable (just like in Clone.java) and from there I finally got my precious Player! Yes!! But not so fast.... Player was working, but the rest now wasn't. Once I have my DataSource(video) cloned, my Processor(video)'s data output got starved - i could not send video anymore. What a life?! Fine... Let's try another one.
    3. Just like I send video remote I decided to send the video locally in a loop, for instance, from 203.159.2.3:25000 to 203.159.2.3:25002. And what do you think? Still doesnt work!! This "loop" stream is not detected (i.e. controller's update doest sense anything). But if i open JMStudio, and start listening (i.e. open RTP session) on 203.159.2.3:25002, i get my stream showing nice and clear!
    Someone, anyone, please, help! Point my nose to some document, piece of code - anything to make this work.
    Kind regards.

    I'd better post here, so everyone else can get it too. so here it goes:
    That's RTPSocketAdapter
    import java.io.IOException;
    import java.net.InetAddress;
    import java.net.DatagramSocket;
    import java.net.MulticastSocket;
    import java.net.DatagramPacket;
    import java.net.SocketException;
    import javax.media.protocol.PushSourceStream;
    import javax.media.protocol.ContentDescriptor;
    import javax.media.protocol.SourceTransferHandler;
    import javax.media.rtp.RTPConnector;
    import javax.media.rtp.OutputDataStream;
    * An implementation of RTPConnector based on UDP sockets.
    public class RTPSocketAdapter implements RTPConnector {
        DatagramSocket dataSock=null;
        DatagramSocket ctrlSock=null;
        InetAddress remoteAddress=null;
        int remotePort=0;
        InetAddress localAddress=null;
        int localPort=0;
        SockInputStream dataInStrm = null, ctrlInStrm = null;
        SockOutputStream dataOutStrm = null, ctrlOutStrm = null;
        public RTPSocketAdapter(InetAddress localAddress, int localPort,
                                      InetAddress remoteAddress, int remotePort) throws IOException {
             this(localAddress, localPort, remoteAddress, remotePort, 1);
        public RTPSocketAdapter(InetAddress localAddress, int localPort,
                                       InetAddress remoteAddress, int remotePort, int ttl) throws IOException {
              try {
                  if (remoteAddress.isMulticastAddress()) {
                        dataSock = new MulticastSocket(localPort);
                        ctrlSock = new MulticastSocket(localPort+1);
                        ((MulticastSocket)dataSock).joinGroup(remoteAddress);
                        ((MulticastSocket)dataSock).setTimeToLive(ttl);
                        ((MulticastSocket)ctrlSock).joinGroup(remoteAddress);
                        ((MulticastSocket)ctrlSock).setTimeToLive(ttl);
                  else {
                        dataSock = new DatagramSocket(localPort, localAddress);
                        ctrlSock = new DatagramSocket(localPort+1, localAddress);
              catch (SocketException e) {
                  throw new IOException(e.getMessage());
              this.localAddress = localAddress;
              this.localPort = localPort;
              this.remoteAddress = remoteAddress;
              this.remotePort = remotePort;
         * Returns an input stream to receive the RTP data.
        public PushSourceStream getDataInputStream() throws IOException {
              if (dataInStrm == null) {
                  dataInStrm = new SockInputStream(dataSock, remoteAddress, remotePort);
                  dataInStrm.start();
              return dataInStrm;
         * Returns an output stream to send the RTP data.
        public OutputDataStream getDataOutputStream() throws IOException {
              if (dataOutStrm == null)
                  dataOutStrm = new SockOutputStream(dataSock, remoteAddress, remotePort);
              return dataOutStrm;
         * Returns an input stream to receive the RTCP data.
        public PushSourceStream getControlInputStream() throws IOException {
              if (ctrlInStrm == null) {
                  ctrlInStrm = new SockInputStream(ctrlSock, remoteAddress, remotePort+1);
                  ctrlInStrm.start();
              return ctrlInStrm;
         * Returns an output stream to send the RTCP data.
        public OutputDataStream getControlOutputStream() throws IOException {
              if (ctrlOutStrm == null)
                  ctrlOutStrm = new SockOutputStream(ctrlSock, remoteAddress, remotePort+1);
              return ctrlOutStrm;
         * Close all the RTP, RTCP streams.
        public void close() {
              if (dataInStrm != null)
                  dataInStrm.kill();
              if (ctrlInStrm != null)
                  ctrlInStrm.kill();
              dataSock.close();
              ctrlSock.close();
         * Set the receive buffer size of the RTP data channel.
         * This is only a hint to the implementation.  The actual implementation
         * may not be able to do anything to this.
        public void setReceiveBufferSize(int size) throws IOException {
             dataSock.setReceiveBufferSize(size);
         * Get the receive buffer size set on the RTP data channel.
         * Return -1 if the receive buffer size is not applicable for
         * the implementation.
        public int getReceiveBufferSize() {
              try {
                  return dataSock.getReceiveBufferSize();
              catch (Exception e) {
                  return -1;
         * Set the send buffer size of the RTP data channel.
         * This is only a hint to the implementation.  The actual implementation
         * may not be able to do anything to this.
        public void setSendBufferSize( int size) throws IOException {
             dataSock.setSendBufferSize(size);
         * Get the send buffer size set on the RTP data channel.
         * Return -1 if the send buffer size is not applicable for
         * the implementation.
        public int getSendBufferSize() {
              try {
                  return dataSock.getSendBufferSize();
              catch (Exception e) {
                  return -1;
         * Return the RTCP bandwidth fraction.  This value is used to
         * initialize the RTPManager.  Check RTPManager for more detauls.
         * Return -1 to use the default values.
        public double getRTCPBandwidthFraction() {
             return -1;
         * Return the RTCP sender bandwidth fraction.  This value is used to
         * initialize the RTPManager.  Check RTPManager for more detauls.
         * Return -1 to use the default values.
        public double getRTCPSenderBandwidthFraction() {
             return -1;
         * An inner class to implement an OutputDataStream based on UDP sockets.
        class SockOutputStream implements OutputDataStream {
              DatagramSocket sock;
              InetAddress addr;
              int port;
              public SockOutputStream(DatagramSocket sock, InetAddress addr, int port) {
                  this.sock = sock;
                  this.addr = addr;
                  this.port = port;
              public int write(byte data[], int offset, int len) {
                  try {
                       sock.send(new DatagramPacket(data, offset, len, addr, port));
                  catch (Exception e) {
                       return -1;
                  return len;
         * An inner class to implement an PushSourceStream based on UDP sockets.
        class SockInputStream extends Thread implements PushSourceStream {
              DatagramSocket sock;
              InetAddress addr;
              int port;
              boolean done = false;
              boolean dataRead = false;
              SourceTransferHandler sth = null;
              public SockInputStream(DatagramSocket sock, InetAddress addr, int port) {
                  this.sock = sock;
                  this.addr = addr;
                  this.port = port;
              public int read(byte buffer[], int offset, int length) {
                  DatagramPacket p = new DatagramPacket(buffer, offset, length, addr, port);
                  try {
                       sock.receive(p);
                  catch (IOException e) {
                       return -1;
                  synchronized (this) {
                       dataRead = true;
                       notify();
                  return p.getLength();
              public synchronized void start() {
                  super.start();
                  if (sth != null) {
                       dataRead = true;
                       notify();
              public synchronized void kill() {
                  done = true;
                  notify();
              public int getMinimumTransferSize() {
                  return 2 * 1024;     // twice the MTU size, just to be safe.
              public synchronized void setTransferHandler(SourceTransferHandler sth) {
                  this.sth = sth;
                  dataRead = true;
                  notify();
              // Not applicable.
              public ContentDescriptor getContentDescriptor() {
                  return null;
              // Not applicable.
              public long getContentLength() {
                  return LENGTH_UNKNOWN;
              // Not applicable.
              public boolean endOfStream() {
                  return false;
              // Not applicable.
              public Object[] getControls() {
                  return new Object[0];
              // Not applicable.
              public Object getControl(String type) {
                  return null;
          * Loop and notify the transfer handler of new data.
              public void run() {
                  while (!done) {
                        synchronized (this) {
                            while (!dataRead && !done) {
                                  try {
                                      wait();
                                  catch (InterruptedException e) { }
                            dataRead = false;
                        if (sth != null && !done) {
                            sth.transferData(this);
    }See, how to create RTPManager in next post

  • How to RTP return and get into stock

    In GR we can get RTP into stock by activate one TAB in GR screen at that time 501M movement type will be generate. How to return the RTP stock to vendor? Because that is vendor stock

    Hi
    You may return stock using 661 Returns to vendor via SD delivery
    As with movement type 502, a return delivery to the vendor is entered without reference to the purchase order, but the goods issue is posted via an SD delivery
    hope it helps
    Edited by: ppkk on Oct 25, 2008 7:12 PM

  • Firefox webrtc rtp payload type

    I'm seeing an issue when placing a webrtc call with firefox when the answer SDP has different payload types than the offer. for example, i get an offer from firefox that has the opus codec with payload type 109. if the answer SDP comes in with the opus codec and payload type 110, audio will not be heard. looking in the WebRTC.log file you will see a whole bunch of "IncomingRTPPacket received invalid payloadtype".
    i believe the correct behavior in this case is for firefox to transmit opus with RTP payload type 110 (ie the remote payload type) and expect to receive opus with payload type 109. it looks like firefox will send with 110 and expect to receive with 110.
    the same scenario with chrome does not have a problem. if i change the SDP answer to match the payload type of the offer, audio can be heard in firefox.
    the same issue can be seen with VP8 video or other codecs with dynamic payload types.
    for reference, the relevant excerpt from rfc3264:
    "In the case of RTP, if a particular codec was referenced with a
    specific payload type number in the offer, that same payload type
    number SHOULD be used for that codec in the answer. "
    in this case the answer SDP is violating the SHOULD in the rfc, but this is sometimes unavoidable when interworking SDP between devices (ie some sort of back-to-back signaling agent).

    That RFC is a proposed standard at the moment [http://datatracker.ietf.org/doc/rfc3264/]
    However, this would be a great bug for tech evangelism, I would encourage you to file a bug with some technical examples. Way to keep the web open!

  • Adding Effect on an incoming H.263/RTP stream

    Hi,
    I am playing an h.263/rtp stream which is multicasted over a network. I want to play the file with rotation or some other effect added to it. I tried to see following link for some help(as the forums suggested):- http://java.sun.com/products/java-media/jmf/2.1.1/solutions/RotationEffect.html. But the link is disabled and new link which they are providing does not contain the example.
    Can any of me help me how to add the effect on h263/rtp.
    Though i already created my effect class and tried adding it. But could not add the effect.
    Kindly give me some directions.

    Is there some error in above code or if there is some other issue.There's an error in the above code because you're assuming I'm being imprecise with my language. I am not.
    You must copy the data from the input buffer to the output buffer...
    Buffer objects are wrappers around byte[], and you cannot copy data from one array to another by modifying the object references...which is what your code does.
    public int process(Buffer inBuffer, Buffer outBuffer) {
        // Make sure the output buffer will hold data
        if (!(outBuffer.getData() instanceof byte[])) {
            outBuffer.setData(new byte[inBuffer.getLength()]);    
            outBuffer.setLength(inBuffer.getLength());  
            outBuffer.setOffset(0);
        // Make sure the output buffer is long enough
        if (outBuffer.getLength() + outBuffer.getOffset() < inBuffer.getLength())) {
            int offset = outBuffer.getOffset();
            int length = inBuffer.getLength() + outBuffer.getOffset();
            byte[] oldData = (byte[])outBuffer.getData();
            byte[] newData = new byte[length];
            // Copy the previous data
            for (int i = 0; i < offset; i++) {
                newData[i] = oldData;
    // Set the variables for the output buffer
    outBuffer.setData(newData);
    outBuffer.setLength(length);
    outBuffer.setOffset(offset);
    // Copy the data from in to out
    int j = outBuffer.getOffset();
    for (int i = inBuffer.getOffset(); i < inBuffer.getOffset() + inBuffer.getLength(); i++) {
    ((byte[])outBuffer.getData())[j++] = ((byte[])inBuffer.getData())[i];
    return BUFFER_PROCESSED_OK;
    That's untested code above, fix my dumb mistakes as necessary.                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                           

  • Injecting DTMF event in the midst of RTP media streaming?

    Hi all, I am attempting to implement a mechanism that allows me to inject DTMF RTP events in an RTP media stream. This is useful in telephony applications where the users are prompted to enter digits while being served by automated voice services such as answerinng services or tele-bankings etc. So basically my approach is to extend Sun's RTP packetizer and intercept outgoing packets when necessary and replace them with the appropriate DTMF RTP (RFC 2833) packets. Sounds simple enough. So I derived my custom packetizer from com.sun.media.codec.audio.ulaw.Packetizer, and over-ridden method process(). Normally my packetizer's method process() simply delegates the functionality to its parent class's process() method. When a DTMF digit is required I'd take the outputbuffer generated by the parent's process() and modify its header and payload to turn it into a DTMF RTP packet. The problem is that the class RTPHeader is so limited, there is no way to set the payload type, sequence number, ... And the documentation is precious few and far in between. If someone has solved this issue, or if you have a reference to some documentation that describes the inner working of JMF's codec chaining, I would appreciate some pointers. What I need to know is:
    - What JMF does with the Buffer objects between stages (from one codec to the next)?
    - The data portion of Buffer is an Object of arbitray class, what on earth does JMF do with that?
    - How does JMF take a Buffer object and turn it into a UDP packet?
    - How do I go about creating an RTP header and fill it with the information (payload type, timestamp, sequence number, ...) that I want?
    Thanks in advance,

    I don't know what the heck RTPHeader represents but it sure doesn't seem to conform to RFC1889. And also, it seems the UDP RTP packets are formed somewhere after the packetizer and before the RTP connector, someone oughta jot all this down in a book. So anyway, using my own RTPConnector implementation I have some control over the outgoing/incoming RTP packets, to access and manipulate the real RTP header (not RTPHeader), I devised a new class that takes the RTP packet buffer and provides an API to examine and manipulate some RTP info directly on the buffer without doing any unecessary data copy (you guys can extend it to do more as per your requirement):
    package com.mycompany.media;
    import javax.media.rtp.RTPConnector;
    import java.net.DatagramSocket;
    import java.net.InetAddress;
    import java.io.IOException;
    import javax.media.protocol.ContentDescriptor;
    import javax.media.protocol.SourceTransferHandler;
    import java.net.DatagramPacket;
    import javax.media.protocol.PushSourceStream;
    import javax.media.rtp.OutputDataStream;
    import java.net.SocketException;
    import mitel.utilities.MiQueue;
    import java.nio.ByteBuffer;
    import java.util.LinkedList;
    class MiRtpHeader
         byte[] data;
         int myoffset;
         public MiRtpHeader(byte[] buf, int offset, int len) throws ArrayIndexOutOfBoundsException
              if(len < 12)
                   throw new ArrayIndexOutOfBoundsException("Buffer not large enough to contain a basic RTP header");
              data = buf;
              myoffset = offset;
         public boolean getExtension()
              return (0 != (data[myoffset] & 0x10));
         public void setExtension(boolean state)
              if(state)
                   data[myoffset] = (byte)(data[myoffset] | 0x10);
              else
                   data[myoffset] = (byte)(data[myoffset] & 0xef);
         public boolean getMarker()
              return (0 != (data[myoffset + 1] & 0x80));
         public void setMarker(boolean state)
              if(state)
                   data[myoffset + 1] = (byte)(data[myoffset + 1] | 0x80);
              else
                   data[myoffset + 1] = (byte)(data[myoffset + 1] & 0x7f);
         public int getTs()
              ByteBuffer tsBuf = ByteBuffer.wrap(data, myoffset + 4, 4);
              return tsBuf.getInt();
         public void setTs(int ts)
              ByteBuffer tsBuf = ByteBuffer.wrap(data, myoffset + 4, 4);
              tsBuf.putInt(ts);
         public int getPayloadType()
              ByteBuffer ptBuf = ByteBuffer.wrap(data, myoffset + 1, 1);
              return ptBuf.get();
    }

  • RTP support in Burrito

    Hi,
    Do burrito support RTP/RTSP . I need to build a rtp streaming app for android. Can Burrito be used for it ?
    If possible pls give some reference link .
    Regards,
    Amit

    There is no RTP support in J2ME. Vikram Goyal has done some experiments using current mmapi but it does not work because of limitations of Manager and Player classes.
    http://today.java.net/pub/a/today/2006/08/22/experiments-in-streaming-java-me.html?page=1

  • .RTP file format

    I would like to do some testing of running business rules using the CmdLnLauncher.bat utility. Unfortunately there isn't much detail in the HBR admin guide about the format of the run time prompt file (.rtp) that would need to be called in the process. For example, I have a variable called [CostCenter] in my business rule and I want to run the business rule launch utility for CostCenter_1. Can someone please let me know what would my .rtp file should look like? Thanks.

    Hi,
    I am not sure what version you are using but this is an example I have used in the past.
    Create a file and put the following information into it filling in the servername,app name and db name
    ExecDB::"Planning/servername/appname/dbname"
    Save it as .xml file, so something like connect.xml
    Then when you run your command line do exactly like before Cmdlnlauncher -Sservername -Uusername -Ppassword -rrule -fconnect.xml
    If you have variables in your rule you can
    In EAS right click over the rule and select "Automate Launch Variables", fill in the details and then save it is as an xml.
    You just need to reference the xml in the batch script as described above using the -f parameter.
    Cheers
    John
    http://john-goodwin.blogspot.com/

  • Error in VBA reference for Adobe Photoshop CS4 Object Library

    Hello,
    I'm using Windows 7 Pro, MS Office 2010 Pro and Creative Suite CS4 (with all updates).
    I will automate Photoshop via Visual Basic for Applications in MS Access.
    Befor using there the Adobe Photoshop CS4 Object Library I must reference it in VBA.
    But when I will du this, I get the message "Error loading DLL".
    When I will manually reference to the WIASupport.8LI File, I get the error: "Cannot reference this file"
    Can you give a tip, how I can solve this problem?
    Regards

    I have the same problem!  I have photoshop cc2014 (which we own) and the object library shows, but not for cs 5.1 (30 day trial).
    Does registering unlock something?
    Help please!!

  • "cacheHostInfo is null" and Add-SPDistributedCacheServiceInstance : Object reference not set to an instance of an object.

    I am working on a standalone install Sharepoint 2013 (no Active Directory). I found newsfeed feature is not available and checked Distributed Cache service is stopped. When start it “cacheHostInfo is null” is returned.
    I checked the Windows service “AppFabric caching service” is stopped because the default identity “Network Service” not work. Then I change the AppFabric service identity to use “.\administrator” (which is also the sp farm administrator) and the service can
    be started.
    However the “cacheHostInfo is null” when try to start Distributed Cache service in central admin.
    I searched on web and found this blog: http://rakatechblog.wordpress.com/2013/02/04/sharepoint-2013-spdistributedcacheserviceinstance-cachehostinfo-is-null/
    I tried to run the script but it return error:
    Add-SPDistributedCacheServiceInstance : Object reference not set to an
    instance of an object.
    At C:\root\ps\test.ps1:8 char:13
    + $whatever = Add-SPDistributedCacheServiceInstance
    + ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~
    + CategoryInfo : InvalidData: (Microsoft.Share…ServiceInstance:
    SPCmdletAddDist…ServiceInstance) [Add-SPDistributedCacheServiceInstance]
    , NullReferenceException
    + FullyQualifiedErrorId : Microsoft.SharePoint.PowerShell.SPCmdletAddDistr
    ibutedCacheServiceInstance
    I am not sure what went wrong. Please give me some idea? Thank you for any comment!

    Can you deploy Active Directory as installing without is not a supported installation scenario - http://support.microsoft.com/kb/2764086.
    Trevor Seward
    Follow or contact me at...
    &nbsp&nbsp
    This post is my own opinion and does not necessarily reflect the opinion or view of Microsoft, its employees, or other MVPs.

  • Cross Reference Source text options

    Creating a Cross Reference linking to a Paragraph. In the paragraph where the cross-reference source is inserted, may the cross-reference link be applied to existing text in that paragraph so that the cross-reference destination text does not appear? Text anchors can be created to accomplish this, but that is an extra step (I can create a cross reference linking to a paragraph all in one dialog box). Thanks in advance for any suggestions.

    Hi, Seir:
    I agree that it's confusing. Here's how I do it:
    To create a text anchor at the insertion point location:
    * Open the Hyperlinks/Cross-References panel's menu (also called "flyout menu." It's the small icon at the upper-right of the panel, below the double-arrow (>>) icon that collapses the panel.
    * Choose New Hyperlink Destination. THIS SHOULD BE NAMED NEW TEXT ANCHOR!!!
    * Choose Type: Text Anchor
    * Name the anchor as you like Click OK.
    To create a cross-reference to a text anchor:
    * Place the insertion point where you want it.
    * Click the Create new Cross-Reference button on the bottom of the Hyperlinks/Cross-Reference panel.
    * Choose Link To: Text Anchor
    * Choose the target document
    * Choose the text anchor
    * Choose the Cross-Reference format
    * Choose Appearance properties
    * Click OK
    I'm not sure what could cause the straight/curly quotes problem other than perhaps the font doesn't have curly quotes. Have you tried other fonts?
    HTH
    Regards,
    Peter Gold
    KnowHow ProServices

  • Report generation toolkit and signal express user step : problem of closing reference in "Stop" event

    Hi all,
    I'm trying to make a package of Vis to easily make Excel reports with Signal Express. I'm working on LabVIEW 8.2.1.
    I'm using the report generation toolkit, so I build a .llb from my project which contains all the hierarchy of my steps, but also the hierarchy of dynamic VIs called.
    I have made some steps, like "Open Workbook", "Write Data", etc.
    My steps run well, excepts one step : "Close Workbook".
    If my "Close Workbook" step is firing on "Run" Signal Express event, I have no error, so my reference is properly closed.
    But if my "Close Workbook" step is firing on "Stop" Signal Express event, I have an error "1", from "Generate Report Objectrepository.vi".
    I feel that I'm trying to use a reference which has been killed in the "Stop" step...
    I would like to know what exactly do Signal Express on "Stop" event and why my close function does'nt run well.
    Thanks,
    Callahan

    Hi Callahan,
    SignalExpress (SE for short) does the following on the Stop event:
    1. Takes the list of parameters that SE found on your VI's connector pane, and sets the values that the user set from the "Run LabVIEW VI" configuration page, if any.
    2. Then tells the VI that SE is running the Stop event by setting the Enum found on your VI's front panel. This in turn should produce some boolean values telling your VI to execute the Stop case.
    3. The VI is then run, with those values and states.
    4. SE checks to see if any errors where returned.
    5. Since this is the Stop event, SE releases the reference to the VI which it possesses.
    Questions for you would be, is the reference to your Workbook linked to a control on your connector pane, or held in a uninitialized Shift Register. If it's held in a Shift Register, SE would not be aware of it, and would not be able to affect that reference.
    Hope that helps. Feel free to post your LLB if it doesn't.
    Phil

  • Excel Get ActiveX References​.vi and closing references -- grrr

    I'm new to ActiveX stuff, but eager to learn! 
    The "grrr" in my Subject line is a reference to how I feel about LabVIEW's documentation from time to time.  I'm a dinosaur who came from text-based programming, and did a fair amount of C coding, so sometimes with LabVIEW I'm left with this awful feeling in the pit of my stomach like, "Good grief!  How much memory must LabVIEW be hogging up in the background when I use this vi?" or "What happens to those variables (wires) in that subVI when it completes but doesn't close?  What are their statuses when I come back in the next time?" or "What if I put a lot of elements into that array the first time and then started from element zero the second time and just put in a few?  What has happened with the memroy that was allocated when there were a lot of elements?"
    Today I'm stewing about this "Excel Get ActiveX References.vi," and what happens to the "ActiveX references" it generates each time I call the subVI in which "Excel Get ActiveX References.vi" lives.  I think that at least one of the "ActiveX references" it generates when I call it is of the type Excel._Application.  Then there appears to be an Excel._Workbook, and others.  You see, I've used "Excel Easy Report.vi" to put some data into an Excel spreadsheet, and I want to tell Excel to do a "Save" on the open spreadsheet.  I think ActiveX is the (a) right way to do that, so I'm wading into the ActiveX fray...  But this "Excel Get ActiveX References.vi" says in its help file, "Do not close ActiveX references opened with the Excel Get ActiveX References VI. References must remain open until the report is closed. Otherwise the error 3001 will occur."  Well, these Excel workbooks that get created by my VI could well stay open until after my LabVIEW VI terminates!
    So (finally), here are some of my quesitons:
    1)  When I go through my subVI once, pointing to one workbook, I'll get one set of references "created" or "opened" or whatever you call it when ActiveX references spring into existance.  Now, when I exit the subVI, is it going to automatically try to "close" those ActiveX references?  I don't suppose so, since subVI's stay in memory until the calling VI closes.
    2)  Now, I come back into my subVI a second time.  New workbook gets created, so I get new references.  Ok, fine.  Uh oh!  What happened to those old references?  I suppose that if I didn't somehow save them off, I've probably lost the ability to get them back (maybe I'm wrong, but I don't need them back), but is LabVIEW going to "close" those old references (from previous times through the subVI) because I can't get to them anymore?  Won't that cause the dreaded error 3001?  If LabVIEW is not going to "close" them, what in tarnation happens to them (the old C programmer in me creeping back out)??  Now it's some oddball, orphaned reference, floating out there, hogging memory, waiting to make something crash intermittently and be a debugging nightmare?
    3)  Now, here's the real scary one.  I think I might dodge the "error 3001" bullet in questions 1) and 2), but now let's say the user closes my LabVIEW application while Excel is still open.  All those workbooks are still open.  Presumably, all those ActiveX references I was not supposed to close are still open.  I really hope that LabVIEW is decent enough to close/erase/delete/blow-away (whatever the right word is) all those ActiveX references which were opened/created by "Excel Get ActiveX References.vi" when my program terminates.  But, oh no!  Won't the error 3001 come along then?  I suppose I can just dump it in the shutdown error handling.
    Well, thanks for reading my novel.  I don't know what can be done with LabVIEW documentation to make it more satisfying to folks like me, but perhaps someone can weigh in on all my ActiveX questions here.
    Thank you in advance,
    Steve Brady
    Solved!
    Go to Solution.

    You need to close EVERY ActiveX reference you open.  If you don't you'll end up with some Excel processes running even after LabVIEW exits.  You can see them in Task Manager.
    I, personally, don't like the LabVIEW Report Generation Tool Kit for working with Excel.  I don't think it's flexible enough.  I have a growing library of VIs that I've written that open, manipulate, and close Excel.  Some references I pass from VI to VI and some I close right after I use them.  It all depends on what I'm doing.  If I want to enter read or write data from/to a certain range I'll get the range reference, read or write the data, then close it right away because I have no use for it any more.  On the other hand, when I open Excel or a Workbook I keep the reference until I'm done, which could be later in the program.
    1)  When I go through my subVI once, pointing to one workbook, I'll get one set of references "created" or "opened" or whatever you call it when ActiveX references spring into existence.  Now, when I exit the subVI, is it going to automatically try to "close" those ActiveX references?  I don't suppose so, since subVI's stay in memory until the calling VI closes.
    2)  Now, I come back into my subVI a second time.  New workbook gets created, so I get new references.  Ok, fine.  Uh oh!  What happened to those old references?  I suppose that if I didn't somehow save them off, I've probably lost the ability to get them back (maybe I'm wrong, but I don't need them back), but is LabVIEW going to "close" those old references (from previous times through the subVI) because I can't get to them anymore?  Won't that cause the dreaded error 3001?  If LabVIEW is not going to "close" them, what in tarnation happens to them (the old C programmer in me creeping back out)??  Now it's some oddball, orphaned reference, floating out there, hogging memory, waiting to make something crash intermittently and be a debugging nightmare?
    3)  Now, here's the real scary one.  I think I might dodge the "error 3001" bullet in questions 1) and 2), but now let's say the user closes my LabVIEW application while Excel is still open.  All those workbooks are still open.  Presumably, all those ActiveX references I was not supposed to close are still open.  I really hope that LabVIEW is decent enough to close/erase/delete/blow-away (whatever the right word is) all those ActiveX references which were opened/created by "Excel Get ActiveX References.vi" when my program terminates.  But, oh no!  Won't the error 3001 come along then?  I suppose I can just dump it in the shutdown error handling.
    1)  No, LabVIEW will NOT close those references.  You need to make sure that happens.
    2)  You can save the references in a functional global or use a class but if you're not going to save them close them as soon as you're done with them.
    3)  Your user should not be able to close your LabVIEW application without it going through the shutdown routine you've created for your program.  The ABORT button should never be exposed to the user and you should capture and discard the panel close event so your program ALWAYS shuts down is an orderly fashion.  If you don't you will have fragments of Excel hanging around in your operating system and will have to kill those processes using Task Manager.  That should only be a problem during development, not once deployed.
    I used to program in C and Assembly many moons ago.  You should have seen my first LabVIEW code.  I go back and look at it just so I can see how far I've come in the last 12 years.  I feel your pain.
    Kelly Bersch
    Certified LabVIEW Developer
    Kudos are always welcome

  • Error 7 occurred at open vi reference in New Report.VI

    Hello!
    I use the report generation toolkit on LabView 7.0 to create a report in Excel. The program works fine until I make an executable version. I the get the error:
    Error 7 occurred at open vi reference in New Report.VI
    I use the New Report.VI, Bring Excel to front.VI and Save Report To File.vi
    Can you pleace help me!!!

    Most likely, you did not include the required libraries in your build script. When building an executable in which you use the Report Generation Toolkit, you must include the _Word Dynamic VIs.vi from _wordsub.llb and _Excel Dynamic VIs.vi from _exclsub.llb as dynamic VIs on the Source Files tab.
    Check this article for more info.
    http://digital.ni.com/public.nsf/3efedde4322fef19862567740067f3cc/86256a47004e16d186256a84004cb883?OpenDocument
    Daniel L. Press
    PrimeTest Corp.
    www.primetest.com

  • Open VI Reference for a Project Library VI

    Hi,
    my code calls some subVIs by reference by using "Open VI Reference" and "Call by Reference" VIs. Now, "Open VI Reference" expects a path to the VI:
    When the SubVIs sit in the same folder as the calling VI, it is easy to simply supply the name of the SubVI. However, I would like to call a SubVI that is part of a project library sitting somewhere else on the disk. I could give the relative path, but this make the code pretty inflexible and if the relative path changes all the paths would need to be ammended. Ideally, I want to utilize the fact that I am using a project library. The help for Open VI Reference states that
    vi path accepts a string containing the name of the VI that you want to reference or a path to the VI that you want to reference. If you wire a name string, the string must match the full delimited name of a VI in memory on that target. If you wire a path, LabVIEW searches for a VI in memory that you previously loaded from that path on the same target.
     I thought that the underlined path was my ticket and tried something like this:
    but this did not work and I got
    "Error 1004 occurred at Open VI Reference in MainVI.vi:
    Possible reason(s):
    LabVIEW:  The VI is not in memory.
    To load a VI into memory with the Open VI Reference function, a path must be wired for the VI Path input."
    Wiring a path is not desirable as per reasoning above. Is there a way around the issue?
    Thanks in advance!
    Solved!
    Go to Solution.

    tst wrote:
    That should work, but you have to pay attention to something that's stated both in the help and in the error - if you use a string, the only way for LV to know what to access is if that something is already "in memory" (sometimes also referred to as "being loaded"). In the case of standard libraries, that means the VI itself or one of its callers has to be loaded. In the case of classes and XControls, loading the library (as in having it in an open project) should be enough to also load all of its members.
    Hm, thanks, I am not advanced enough to know about classes and XControls, but I will check it out. My VIs are part of a library but obviously don't get loaded because, as you said, all their calls are dynamic.
    tst wrote:
    What I usually do is use a static reference to a VI to get its name, because that ensures that it will be statically linked, included in executables, etc. That might not work for you if you want dynamic loading and then you will need to use some other means.
    Hm, this actually gives me an idea! I could add an enable input to all these dynamically called VIs so that the logic runs only when enable is ON; otherwise the VI is called but does nothing. Then I call the VI first statically with enable=OFF just to load it in memory and then proceed with my dynamic call. A little ad-hoc, but should work and serve my purposes, I think.
    Thanks!!

Maybe you are looking for

  • If I restore to 2.1, will I lose my application data for Rolando

    i'm tired of my iPhone's caller ID not working long enough. i always have to reset my network settings to get it to work, and i shouldn't have to. if i restore to 2.1, will i lose my game save data? like if i click set up as new iphone? my second old

  • BADI during release of Maintenance Order thru IW32

    hi, is there any badi maintained at the point of, maintenance order release thru IW32. When I trace the logic for the release steps of MO, i can only see AT_SAVE method...i cannot see any AT_RELEASE method... Rgds lakshmi

  • Good books for ooad

    Hello friends Any one know some good books which will be helpful to build a server side java application. I am using servlets and JSP's , no EJB. I need some good standards and advise on creating the classes, passing the data from the backend to fron

  • Code inspector

    Hi, I need to crate a new check for NAMING CONVENTIONS using code inspector. When i went through the documentation its says that check varient is stilll under construction. If anyone has idea about how to create a new check to Naming conventions, it

  • Premiere Elements reports low disk space error right at the end

    Ok, so I wait for 5 hours for a 3 hour long video to get saved to my computer.  It goes to 99% and then I get a low disk space error.  After I clear up space, and click Ok, it starts all over again.  Firstly, why doesn't PrE calculate/predict how muc