Transferring DAQ acquisition data via TCP/IP

Hi all. I am trying to write a program which shares the raw data acquired from a DAQ acquisition device to several computers at the same time. I am using a NI-USB DAQ 6251 to acquire 2 channels of data at 200kS/s on each channel. I need to send this data to other computers in a network so that the each computer can perform different functions on the signal.
Anyone who has done something similar before? Can you help to advice on how I can go about doing this efficiently and reliabily? I cannot afford the data to be lost during the transfer. I did try using shared variables but it did not work well.
Thanks in advance.

Hi K.P,
I hope you are doing well today! The following links should help you get started. If you face any other issues, please be sure to let us know.
Using the LabVIEW Shared Variable and OPC With NI-DAQmx
Shared variable to grab data from remote PC with DAQMX
Message Edited by Adnan Z on 04-12-2007 10:29 AM
Adnan Zafar
Certified LabVIEW Architect
Coleman Technologies

Similar Messages

  • I have problem in transfeering data using field point via tcp

    I am reading the values from the filed point, which is connected, to the RT controller and transferring the values to the client PC via TCP at a specified acquisition rate.
     Case1 when the acquisition rate is 0.1 minutes I get the values from the controller correctly i.e. 5v, 5v, and the chart shows no change. The timed out of the TCP read is default value i.e. is 250ms
     But when I change the acquisition rate to .5 minutes I get the values as 5v, 0v, 5v, and 0v. The time out of the TCP read is same as first case. The inputs to the field point are at the constant 5v.
    Please tell how to solve the problem so as to see the plot in the chart continuously as inputs for the field points the read
    ing are at constant rate of input 5v.

    Suresh,
    Since this question deals with using the LabVIEW TCP/IP functions, you are better off posting it to the LabVIEW discussion forum.
    Regards,
    Aaron

  • Transfering sound via TCP or UDP without delay.

    Hi,
    I'm trying to transfert music via TCP or UDP. But I have delays between packets of bytes that i'm sending and receiving.
    I have sound, delay, sound, delay. Here's my to VI, server and client.
    http://osiris.teccart.qc.ca/osiris/soundserverudp.vi
    http://osiris.teccart.qc.ca/osiris/soundclientudp.vi
    Can someone tell me what i'm doing wrong?

    Hi,
    try change order Sound subVIs.
    Look to exampe: ...National Instruments\LabVIEW 7.1\examples\sound\sound adv.llb\Continuous Sound Output.vi
    When I change size of 'Number of buffers' to 3 and more I hearing continuous sound.
    Have a nice day.
    JCC

  • XModem via TCP for Java

    I am sure that many of you experienced developers have read requests in the past concerning implmentation of Ward Christenen's XModem protocol over a TCP socket. If not, well... you are about to...
    This is a major hack... but it is starting to come together... thanks to Fred Potter for his source code to start this project...
    Objective:
    Basically, I want to create a console application which accepts an incoming connection and starts the receive mode for a XModem file transfer. I am using CGTerm (for Commodore retrocomputing) but can test with HyperTerminal as well...
    The user who connects to the server selects SEND and the FILE to send for a XModem file transfer... and the transfer begins...
    The incoming blocks of 128 bytes are written to a file
    After the transfer is over the server disconnects the client terminal.
    Here is what I have so far:
    import java.net.*;
    import java.lang.*;
    import java.io.*;
    // X-Modem Server implementation via TCP/IP socket
    public class XServer {
    public static FileWriter fw;
    public static void main(String[] args) throws IOException {
    // define the file
    try {   
    fw = new FileWriter("filename.txt");
    } catch (Exception e) {
    System.out.println(e);
    System.exit(0);
    int port = Integer.parseInt(args[0]);
    ServerSocket server = new ServerSocket(port);
    System.out.println("X-Server v1.0 - waiting for connection");
    Socket client = server.accept();
    // Handle a connection and exit.
    try {
    InputStream inputStream = client.getInputStream();
    OutputStream outputStream = client.getOutputStream();
    new PrintStream(outputStream).println("Go to send file mode!"); // sent to client
    System.out.println("Ready to receive file via X-Modem...");
    * BEGIN TRANSFER HERE!
    // set the debug flag
    XModem.debug = true;
    * Here we are instantiating a new InputStream that represents the remote
    * file that we are receiving. In this single line we are attempting to
    * start the flow.
    * Behind The Scenes: We're sending a NAK across the serial line repeatedly
    * until we finaly start seeing the data flow. If we don't see the data
    * flow, then we throw an exception.
    System.out.println("Sending NAK to start receive mode...");
    InputStream incomingFile;
    try {
    incomingFile = new XModemRXStream(inputStream, outputStream);
    } catch (IOException e) {
    System.out.println("ERROR! Unable to start file transfer!");
    e.printStackTrace();
    return;
    System.out.println("Starting file transfer...");
    * Here we are reading from the incoming file, byte by byte, and printing out.
    * Behind The Scenes: Internally, the read() method is handling the task of
    * asking for the next data block from the remote computer, processing it (i.e.
    * parsing, running checksums), and then putting it in an internal buffer. Not
    * all calls to read() will request a new data block as each block contains at
    * least 128 bytes of data. Sometimes you will only hit the buffer.
    try {
    for (;;) {
    int c = incomingFile.read();
    if (c==-1)
    break; // End of File
    // print character / byte
    System.out.print(c+",");
    // write to file
    try {       
    //System.out.print(".");
    fw.write(c);
    } catch (Exception e) {
    System.out.println(e);
    System.exit(0);
    } catch (IOException e) {
    System.out.println("error while reading the incoming file.");
    e.printStackTrace();
    return;
    // done
    System.out.println("File sent.");
    new PrintStream(outputStream).println("");
    new PrintStream(outputStream).println("transfer successful!");
    } finally {
    //client.close();
    // save the file
    try {   
    fw.close();
    System.out.println("file saved.");
    } catch (Exception e) {
    System.out.println(e);
    System.exit(0);
    * XModem keeps track of settings that the Receive and Transmit Stream classes will
    * reference.
    * <p>Copyright: Copyright (c) 2004</p>
    * @author Fred Potter
    * @version 0.1
    class XModem {
    public static boolean debug = false;
    * XModemRXStream is an easy to use class for receiving files via the XModem protocol.
    * @author Fred Potter
    * @version 0.1
    class XModemRXStream
    extends InputStream {
    // CONSTANTS
    private static final int SOH = 0x01;
    private static final int EOT = 0x04;
    private static final int ACK = 0x06;
    private static final int NAK = 0x15;
    private static final int CAN = 0x18;
    private static final int CR = 0x0d;
    private static final int LF = 0x0a;
    private static final int EOF = 0x1a;
    // block size - DON'T CHANGE - I toyed with the idea of adding 1K support but the code is NOT there yet.
    private static final int bs = 128;
    // PRIVATE STUFF
    private int ebn; // expected incoming block #
    private byte[] data; // our data buffer
    private int dataPos; // our position with the data buffer
    private InputStream in;
    private OutputStream out;
    * Creates a new InputStream allowing you to read the incoming file. All of the XModem
    * protocol functions are handled transparently.
    * As soon as this class is instantiated, it will attempt to iniatate the transfer
    * with the remote computer - if unsuccessful, an IOException will be thrown. If it
    * is successful, reading may commense.
    * NOTE: It is important not to wait too long in between calls to read() - the remote
    * computer will resend a data block if too much time has passed or even just give up
    * on the transfer altogether.
    * @param in InputStream from Serial Line
    * @param out OutputStream from Serial Line
    public XModemRXStream(InputStream in, OutputStream out) throws
    IOException {
    this.in = in;
    this.out = out;
    // Initiate the receive sequence - basically, we send a NAK until the data
    // starts flowing.
    init:for (int t = 0; t < 10; t++) {
    if (XModem.debug) {
    System.out.println("Waiting for response [ try #" + t + " ]");
    long mark = System.currentTimeMillis();
    out.write(NAK);
    // Frequently check to see if the data is flowing, give up after a couple seconds.
    for (; ; ) {
    if (in.available() > 0) {
    break init;
    try {
    Thread.sleep(10);
    catch (Exception e) {}
    if (System.currentTimeMillis() - mark > 2000) {
    break;
    // We have either successfully negotiated the transfer, OR, it was
    // a failure and timed out. Check in.available() to see if we have incoming
    // bytes and that will be our sign.
    if (in.available() == 0) {
    throw new IOException();
    // Initialize some stuff
    ebn = 1; // the first block we see should be #1
    data = new byte[bs];
    dataPos = bs;
    * Reads the next block of data from the remote computer. Most of the real XModem protocol
    * is encapsulated within this method.
    * @throws IOException
    private synchronized void getNextBlock() throws IOException {
    if (XModem.debug) {
    //System.out.println("Getting block #" + ebn);
    // Read block into buffer. There is a 1 sec timeout for each character,
    // otherwise we NAK and start over.
    byte[] buffer;
    recv:for (; ; ) {
    buffer = new byte[bs + 4];
    for (int t = 0; t < 10; t++) {
    System.out.println("\nReceiving block [ #" + ebn + " ]");
    // Read in block
    buffer = new byte[buffer.length];
    for (int i = 0; i < buffer.length; i++) {
    int b = readTimed(1);
    // if EOT - don't worry about the rest of the block.
    if ( (i == 0) && (b == EOT)) {
    buffer[0] = (byte) (b & 0xff);
    break;
    // if CAN - the other side has cancelled the transfer
    if (b == CAN) {
    throw new IOException("cancelled");
    if (b < 0) {
    if (XModem.debug) {
    System.out.println("Time out... NAK'ing");
    out.write(NAK);
    continue recv;
    else {
    buffer[i] = (byte) (b & 0xFF);
    break;
    int type = buffer[0] & 0xff; // either SOH or EOT
    if (type == EOT) {
    if (XModem.debug) {
    System.out.println("EOT!");
    out.write(ACK);
    break;
    int bn = buffer[1] & 0xff; // block number
    int bnc = buffer[2] & 0xff; // one's complement to block #
    if (
    (bn != ebn) && (bn != (ebn - 1)) ||
    (bn + bnc != 255)) {
    if (XModem.debug) {
    System.out.println("NAK'ing type = " + type + " bn = " + bn +
    " ebn = " +
    ebn + " bnc = " + bnc);
    out.write(NAK);
    continue recv;
    byte chksum = buffer[ (buffer.length - 1)];
    byte echksum = 0;
    for (int i = 3; i < (buffer.length - 1); i++) {
    echksum = (byte) ( ( (echksum & 0xff) + (buffer[i] & 0xff)) & 0xff);
    if (chksum != echksum) {
    out.write(NAK);
    continue recv;
    out.write(ACK);
    if (ebn == 255) {
    ebn = 0;
    else {
    ebn++;
    break;
    // We got our block, now save it in our data buffer.
    data = new byte[bs];
    for (int i = 3; i < (buffer.length - 1); i++) {
    data[(i - 3)] = buffer;
    dataPos = 0;
    public synchronized int read() throws IOException {
    // If at the end of our buffer, refill it.
    if (dataPos == bs) {
    try {
    getNextBlock();
    catch (IOException e) {
    throw new IOException();
    // If we're still at end of buffer, say so.
    if ( dataPos == bs) {
    return -1;
    int d = data[dataPos];
    if (d == EOF)
    return -1;
    dataPos++;
    return d;
    * A wrapper around the native read() call that provides the ability
    * to timeout if no data is available within the specified timeout value.
    * @param timeout timeout value in seconds
    * @throws IOException
    * @return int an integer representing the byte value read.
    private int readTimed(int timeout) throws IOException {
    long start = System.currentTimeMillis();
    for (; ; ) {
    if (in.available() > 0) {
    return (in.read());
    try {
    Thread.sleep(10);
    catch (InterruptedException ex) {
    //if (System.currentTimeMillis() - start > timeout * 1000) {
    if (System.currentTimeMillis() - start > timeout * 5000) {
    return -1;
    Here was the output...
    Original file:
    (Commodore CBM SEQ file exported to PC using DirMaster)
    ��
    � �
    � ��� �� �� ��� ��
    � �� �� ���� �� ��� ��
    � ��� ����������������������������������������������
    �� ����� ������� ����� �� ����� ������ ����� ���
    � �� ������ ������ ��� ��� �� ��� ���� �� ������
    � � ���
    ����
    � � ��OWERED BY �OLOR 64 ��� V8
    �UNNING �ETWORK64 V1.26A

    �UPPORTING 38400 �AUD �ATES
    �����/����/�������

    �ESTING �CHO-�ET V1 BETA

    �EATURING �ESSAGES, �ILES,
    �ET�AIL, AND �NLINE �AMES!
    �YS�P: � � � � � � � � �

    �RESS ANY KEY TO LOGIN\C�
    The result when the file was uploaded and received by my XServer:
    ? ? ??OWERED BY ?OLOR 64 ??? V8
    ?UNNING ?ETWORK64 V1.26A
    ?UPPORTING 38400 ?AUD ?ATES
    ?ESTING ?CHO-?ET V1 BETA
    ?EATURING ?ESSAGES, ?ILES,
    ?ET?AIL, AND ?NLINE ?AMES!
    ?YS?P: ? ? ? ? ? ? ? ? ?
    ?RESS ANY KEY TO LOGIN\C?
    The result is different!
    Can someone help me along here... I have been trying to figure out how to do this for approx. a year or so... it has been a very slow process.
    I could use a guru to help me out so I can write the upload and download routines for my Commodore BBS PETSCII Emulation Server.
    Visit http://www.retrogradebbs.com for details.
    Thanks.
    Please help out a dedicated developer who is in over his head...
    -Dave

    Ok. Fair enough. What about general information about Xmodem. This is a hard project because of how obscure the legacy technology is that I am having to implement using Java and MySQL.
    I have two major issues which I have to figure out how to troubleshoot and debug, if possible.
    1. The 23+ blocks exception when a file is being received
    2. The exception which is thrown immediately if I try to receive a binary file instead of an ASCII file.
    I read that telnet is a 7-bit technology and that is why Xmodem, which is an 8-bit technology is not that popular as a viable protocol via telnet, whereas Kermit is, since it was developed for 7-bit systems, i.e. mainframes and minicomputers.
    Is this correct?
    If that is the case, why does www.serio.com have a viable X-Y-ZModem library available (for several hundred $$$ of course) which can be used with both RS-232 serial ports and TCP socket ports? Obviously, it can be done. They are the ONLY company with this library for sale for Java to do this. I cannot justify that $$$ amount for a mere hobby (writing the BBS emulation server for supporting Commodore PETSCII (CG) callers via CGTerm or a native C-64 terminal program using Jim Brain's TCPSER middleware, which emulates a Hayes modem via telnet for telBBSing/retrocomputing.
    I really want to learn how to implement a file transfer protocol, since back in the 80s, I used Xmodem, Punter, Y/Z Modem, etc., a lot to upload and download files via modem at baud rates of 2400, 14.4, 19.2, and 38.4, respectively.
    It's fun to learn how the old skool gurus of telecommunications technology did it. It is one thing to run a BBS which supports these technologies and features, and it is an entirely other thing to learn how to design and develop them yourself for implementation into a project such as I taken on.
    It CAN be done. It WILL be done. However, I have just started my exhaustive research on how it needs to be done. I have read up as much as I could on XModem by Ward C., the father of the protocol.
    But, I have no information to help me figure out why the communications are acting as they do so far.
    Can someone please download the xserver.zip file on my website at:
    www.retrogradebbs.com/projects/xserver.zip
    Compile it. Run it. Connect using HyperTerminal, Netrunner, or another telnet terminal emulation program which supports Xmodem file transfers using WinSock.
    See what happens. With finals due in the next two days, this project will have to be put on hold until after I submit my two final projects.
    If anyone knows what needs to be done to support both ASCII and BINARY file transfers via Xmodem via a socket instead of a modem with RTS/CTS hardware flow control, please respond.
    I know for a fact that this can be done.
    - Dave

  • How do I transfer a sound file via TCP?

    I have a .wav file that I'm trying transfer via TCP.  Using LV 8.5, I modified the "Sound File to Output.vi" example to send the data across a TCP connection to a client vi.  But, I've encountered numerous errors along the way with trying to convert the sound data which is a  1-D array of waveform double.  I've attached my server and client VI, but essentially, what I tried to do is break down the array into the y and dt components, send those over the TCP connection, rebuild the waveform client-side, and then play the waveform.  Is there something I'm missing?  Do I need the timestamp information as well and send that over too?  Please let me know how this can be accomplished.  Thanks!
    Attachments:
    Streaming Music - Server.vi ‏97 KB
    Streaming Music - Client.vi ‏65 KB

    One thing to clarify: While the Sound Output Write does not need the dt information, the dt information wouold be required when you use the Configure VI in order to set up the rate.  However, you only need to send that parameter once. Thus, it would seem to me that you want to change your client code so that it checks to see if it receives a special command or something to indicate the start of a new song that may have been sampled at a different rate. If this is the case, then you can reconfigure the sound output. Otherwise, all that you're listening for is just song data that you send along to the Sound Output Write.

  • Transferring Time Sheet Data to Controlling/Financial Module

    All:
    I have an issue I am entering data via CAT2 and have supplied a receiver cost center, using wage type MI10 and entered times 8 hours per day.  I have entered salary data into the basic pay via Personnel Management.  I have approved the time sheet data but it appears that it is only relevant for transfer to the HR module and not the CO module.  Any help would be greatly appreciated.  I am attempting to use these modules to record actual hours worked and associated wage rates then post entries to CO for reporting.
    Thanks,
    Jeremy

    Sorry I wasn't clear it appears that it is not available for transfer to controlling.  It appears it is only building the data structures for transfer in HR and not CO.  I get the message "No data for transfer" it appears once I approve the time sheet data it creates intermediate structures/table for transferring to other modules and is only creating the structure/table for HR.  I can successfully transfer data to HR but not CO.  What data on the time sheet entry triggers it to build the CO structures/tables.
    Thanks,
    Jeremy

  • Receiving data via 802.15.4 radio

    Hi,
    I am familiar with using a bluetooth radio to receive data wirelessly through the serial port using VISA in LabVIEW. However due to the range limitations of my bluetooth radio, I'd like to have a go at receiving date via from an 802.15.4 radio. Has anyone any experience doing something like this and is it possible using VISA and a serial port? Presuming I know the data packet format, it should be ok right..?
    Strokes

    Lewis G wrote:
    Hi Strokes,
    Do you plan on buying a third party 802.15.4 wireless device that connects to your computer through the serial port?  What hardware do you intend to use?
    I assume you wish to use your existing code that was designed for the Bluetooth dongle. Are you communicating using a serial protocol or Bluetooth protocol (Bluetooth or Serial VIs)?
    What is your current setup?  Do you have a Bluetooth device that connects to your PC via serial? What hardware do you have sending and receiving the data?
    Have you seen the NI Wireless Sensor Networks and have you thought about Using LabVIEW with TCP/IP and UDP?
    Kind Regards
    No I plan on using a Shimmer device (see here) which as a 802.15.4 radio on it's circuit board to communicate to a laptop via serial port.
    I'm not set on using the existing code as used with the bluetooth radio on the Shimmer, but if it will reduce the workload then yes of course I will. The existing code currently uses serial protocol so I guess I could modify the existing code?
    My current setup is: I have a Shimmer (wireless sensor, accelerometer in this case) that has both a bluetooth radio and 802.15.4 radio. Due to my application needs, I would like to transmit data to the serial port via the 802.15.4. There is existing code which allows the Shimmer to communicate with the serial port using Bluetooth radio.
    I'm not looking for code or anything, just wanted to know how to go about it and if I could use VISA which I'm fairly familiar with.
    Thanks,
    Strokes

  • Maintain penalty costs in product master data via macro

    Hi all,
    I am trying to use the function MATLOC_SET to maintain the penalty cost (field Non. Del. Penalty) on SNP1 tab, but it didn't work.
    Is it possible to use this function to update this field or I need to use an other function to do this?
    I tried :
    1) MATLOC_SET( 'NDPEN' ; 123 ; ACT_PRODUCT ; ACT_LOCATION ; ACT_VERSION )
    2) MATLOC_SET( 'NDPEN' ; '123' ; ACT_PRODUCT ; ACT_LOCATION ; ACT_VERSION )
    3) MATLOC_SET( 'NDPEN1LOC' ; 123 ; ACT_PRODUCT ; ACT_LOCATION ; ACT_VERSION )
    4) MATLOC_SET( 'NDPEN1LOC' ; '123' ; ACT_PRODUCT ; ACT_LOCATION ; ACT_VERSION )
    Thanks in advance,
    Regards,
    Douglas Marques

    Thanks all for replies!
    Kishore Reddy,
    Yes, it's possible to maintain product master data via macro by functions. In my case, I'm using MATLOC_SET and it's work fine... except for the penalty costs fields.
    Saradha,
    I can't use the MASSD to do this because the costs are calculated in the macro based on sku/location forecast. But call a custom program in the macro is a good idea. I only have a doubt... Is it possible to transfer the calculated values in the macro to the custom program? If it's possible, how can I do to call the custom program transferring these values?
    Julien,
    The function MATLOC_SET works fine for other fields, only doesn't work to penalty costs fields...  
    I saw that the structures are different, but the help that provides by SAP not mention any restriction. So, I think there is some other specific function to update the costs and i tried the MATLOC_EXTRA_SET, but it updates only extra fields...  
    May be having another function to do this...
    Thanks and Regards
    Doug

  • Defining classes for an acquisition data application

    Hi, all.
    I'm working on an acquisition, monitor and control application. I use a wide variety of devices like GPS, total stations, IMUs and others that aren't defined yet. A low level data acquisition algorithm written in C++ has already been implemented for each device type. The acquisition data stream wouldn't be continuous, but only one data read every a certain period of time.
    I want to use LabView for the main application of monitor and control, but I don't know exactly how to communicate with the devices. I want to create a general purpose application, independent from the number and type of devices used.
    - Could I define a "device" class, and manage every device defining class properties and methods?
    For each "device" object, every method would perform the acquistion data functions written in C++. So,
    - Could I define methods that would call to C++ functions?
    Hope you can help me.
    Thanks in advance,
    Francisco

    What kind of acquisition
    device are you going to use? Multifunction cards or more specific HW? This
    hardware is from National Instruments?
    If you are using NI
    hardware, you have to use NI drivers that are OO drivers with properties and
    methods already defined and generic for all HW of his family. These drivers have
    support for C and LabVIEW.
    In addition, LabVIEW can
    call C methods via DLLs using the VI "call library function node" Do
    you know how to use this VI?

  • Nested IPE (In Place Element) usage when accessing Cluster/Array data via DVR

    I am sharing data across several VIs and loops via a DVR, and accessing the data via a DVR IPE. The data is a cluster of arrays. The diagram below (VI attached) illustrates the structures invloved, but not the structure of the application.
    (The diagram above does not include initialization of the arrays, as it is intended only to illustrate the Cluster1 data type. Array lengths could be 100.)
    The DVR (DVR1) is passed to multiple VIs of the application at startup.
    Each VI executes loops that either read or write particular elements of each array (fArray1 or fArray2).
    I believe the DVR IPE (B1-DVR) provides blocking so that only one task can modify the data (Cluster1) at any time.
    Case 1 illustrates how I currently WRITE to array elements. The outer IPE (block B1) is rolled into a VI (not shown) that takes DVR1, Index, and Value as inputs.
    Cases 2 - 4 illustrate 3 additional methods that remove one or both of the inner IPEs (B2-Cluster and B3-Array).
    Case 2: IPE B3 (Array Index/Replace Elements) is replaced with a non-IPE 'Replace Array Subset'.'
    Case 3: IPE B2 (Unbundle / Bundle Elemnts)' is replaced with a non-IPE cluster 'Unbundle'/'Bundle'.
    Case 4: removes both B2 and B3.
    I implemented case 1 a long time ago.  When I had to do the same thing again recently, I did case 4.  When I stumbled across my earlier implementation, I was a bit suprised
    Which of the 4 cases should take the least time (or resources) to execute? I think case 4 has as few array allocations as any of the other 3.
    The attached image did not capture the Buffer Allocation marks, so I marked the ones that differed with a red "B".
    I am only interested in differences in how the arrays are handled, so I see no signioficant differences.
    Is this one of those cases where LV doesn't need my help?
    Incidently, I recently wrote a small app with shared data and decided to try FGVs to share array data.  For small arrays, 10^7 iterations, and an FGV based array-element read followed by a element write, the FGV was faster.  1.2us per read/write for FGV vs 3us per r/w for an DVR/IPE based read/write (like above).
    Peter
    LV 2011 SP1, Windows 7 64-Bit
    Attachments:
    IPE.vi ‏9 KB

    Option 1 is a definite no and as far as I know it has been NI's explicit intention to steer clear from it. I believe there's an idea in the IE which asks for this.
    I agree that option 2 makes sense, but I don't think it should be something the user specifies. Either LV can detect it automatically or it can't, but I doubt NI would let you have an option which creates the possibility for this kind of bug.
    I'm not sure, but the mark as modifier option on the IPES might be the option you're looking for. I know that it exists and I know very roughly what it does, but the documentation for it is very limited and I never actually played around with it, as usually I don't need these kinds of optimizations.
    You may well be right that a new option on the IPES is desirable and you should probably add it to the idea exchange.
    As for NIWeek, I'm not going this year, so I have no idea what kinds of sessions are around, but it's a great place to find people who know what they're talking about and ask them about it directly. Certain people in LV R&D would probably be ideal for this and if you ask relevant people, you might even get their names. I'm sure buying them a beer would also help to loosen their tounges. If you ask me, this type of interaction is the main value of the conference, not the sessions themselves.
    Try to take over the world!

  • Can we view HR DMS data via PA20/PA30

    Dear SAP HR GuruS!
    We had a requirement wherein we stored HR Data scanned and stored on
    DMS server, we wish to link Employee DMS data to Employee master data
    i.e supervisor should be able to view Employee data via PA30/PA20. what
    is the way to view employee record ( Stored in DMS Server) ,
    I am looking by any mean can be link it to PA20/pa30 to any infotype,
    in one of the Tab of employee master data...

    Hey,
    There is no standard solution, but yoju can use this (see below) to create a object link between HR object and DMS
    //Håkan
    Adding Other Objects
    Purpose
    You can also link documents with SAP objects for which no linking is supported in the standard
    SAP System.
    Prerequisites
    In Customizing for the Do
    cument Management ,SAP objects that you want to link to document info records, by choosing Control Data ® Maintain key fields.
    Process
    Program two screens for the following module pools for the SAP object that is to be linked additionally:
    u2013 SAPLCV00
    u2013 SAPLCVIN
    The process logic must be according to that of screen 0204 in program SAPLCV00 and must not be changed.
    Create the function moduleOBJECT_CHECK_XXXX (XXXX = name of the SAP object).
    If this object can be classified, this function module already exists in the standard system. Otherwise, copy the existing function module OBJECT_CHECK_EQUI (linking of equipment) and change it to suit the new object.
    Result
    After you have completed the above, documents can be linked with the SAP object that you have added. You define the settings for this in Customizing for the Document Management System (see:
    Object Links).

  • Error trying to extract data via HFM objects

    I've written a program to extract selected data from HFM (version 11.1.1.3.500) using the API objects. The program (shown at the bottom of this post) is failing on the 2nd of the following 2 lines:
    oOption = oOptions.Item(HSV_DATAEXTRACT_OPT_SCENARIO_SUBSET)
    oOption.CurrentValue = lBudgetScenario
    where oOption is a data load/extract object previously initialized and lBudgetScenario is the long internal ID for our budget scenario.
    The error is usually "COM Exception was unhandled" with a result code of "0x800456c7", but, mysteriously, even with no code changes, it sometimes throws the error "FileNotFoundException was not handled", where it says that it could not load "interop.HSXServerlib or one of its dependencies". The second error occurs even though HSXServer was previously initialized in the program and used in conjunction with the login.
    I've carefully traced through the VB.NET 2010 code and find that all relevant objects are instantiated and variables correctly assigned. It also occurred to me that the data load DLLs might have been updated when the 11.1.1.3.50 and 500 patches were applied. For that reason, I removed the references to those DLLs, deleted the interop files in the debug and release folders and copied the server versions of those DLLs to my PC. I then restored the DLL references in Visual Studio which recreated the interops. However, the error still occurs.
    The ID I'm using (changed to generic names in the code below) has appropriate security and, for example, can be used to manually extract data for the same POV via the HFM client.
    I've removed irrelevant lines from the code and substituted a phony ID, password, server name and application name. The line with the error is preceded by the comment "THE LINE BELOW IS THE ONE THAT FAILS".
    Imports HSVCDATALOADLib.HSV_DATAEXTRACT_OPTION
    Module Module1
    Public lActualScenario, lBudgetScenario As Long
    Public oClient As HSXCLIENTLib.HsxClient
    Public oDataLoad As HSVCDATALOADLib.HsvcDataLoad
    Public oOptions As HSVCDATALOADLib.IHsvLoadExtractOptions
    Public oOption As HSVCDATALOADLib.IHsvLoadExtractOption
    Public oSession As HSVSESSIONLib.HsvSession
    Public oServer As HSXSERVERLib.HsxServer
    Sub Main()
    'Create a client object instance, giving access to
    'the methods to logon and create an HFM session
    oClient = New HSXCLIENTLib.HsxClient
    'Create a server object instance, giving access to
    'all server-based methods and properties
    oServer = oClient.GetServerOnCluster("SERVERNAME")
    'Establish login credentials
    oClient.SetLogonInfoSSO("", "MYID", "", "MYPASSWORD")
    'Open the application, which will initialize the server
    'and session instances as well.
    oClient.OpenApplication("SERVERNAME", "Financial Management", "APPLICATION", oServer, oSession)
    'Instantiate a data load object instance, which will be used to extract data from
    'FRS.
    oDataLoad = New HSVCDATALOADLib.HsvcDataLoad
    oDataLoad.SetSession(oSession)
    'Initialize the data load options interface.
    oOptions = oDataLoad.ExtractOptions
    'Find the internal ID numbers for various scenarios and years.
    'These are required for HFM API function calls.
    lActualScenario = GetMemberID(DIMENSIONSCENARIO, "Actual")
    lBudgetScenario = GetMemberID(DIMENSIONSCENARIO, "Budget")
    'Construct file names for open data.
    strFileName = "c:\Temp\FEWND_BudgetData.dat"
    strLogFileName = "c:\Temp\FEWND_BudgetData.log"
    'Extract data for the current open cycle.
    ExtractData("Budget", BudgetYear, "Dec", strFileName, strLogFileName)
    End Sub
    Sub ExtractData(ByVal strScenario As String, ByVal strYear As String, ByVal strPeriod As String, _
    ByVal strFileName As String, ByVal strLogFileName As String)
    'Populate the Scenario element.
    oOption = oOptions.Item(HSV_DATAEXTRACT_OPT_SCENARIO_SUBSET)
    If strScenario = "Actual" Then
    oOption.CurrentValue = lActualScenario
    Else
    'THE LINE BELOW IS THE ONE THAT FAILS
    oOption.CurrentValue = lBudgetScenario
    End If
    End Sub
    Function GetMemberID(ByVal lDimID As Long, ByVal strMemLabel As String) As Long
    Dim oMetaData As HSVMETADATALib.HsvMetadata
    oMetaData = oSession.Metadata
    oEntityTreeInfo = oMetaData.Dimension(lDimID)
    GetMemberID = oEntityTreeInfo.GetItemID(strMemLabel)
    End Function
    End Module

    I stumbled upon the solution to my problem. The documentation for extracting data via objects defines member ID variables as Longs. In fact, I've always defined such variables as longs in previous object programs and had no problems. It appears that the datal load/extract "option" property of "Currentvalue" is defined as integer. When I changed all of my member ID items (such as the "lBudgetScenario" variable that was the right-side of the failing assignment statement) to be integers, the program worked.

  • How do I add simple text to a photo? For example, if I took a photo of a chalk board and wanted to add a date via Lightroom making it look like it was written on the chalk board, how would I do that?

    I simply need to know how to do this. Everything online talks about doing this as a watermark feature or during Export only. I need to know how to do this during the Develop stage, if it's possible.
    I took a photo of a couple for a pregnancy announcement shoot. We added a chalk board that had the date the birth is to take place written on it, but it didn't show as well when I reviewed the first couple pics. So I erased the chalk board thinking that I could just add the date via Lightroom, but I have been unable to figure it out. Any help would be very much appreciated.

    To create a graphic watermark or identity plate for this purpose with a hand written chalk look you would need Photoshop or Elements to create a transparent PNG file so you might as well do the whole thing in one of those programs to start with.  You can't do this in the develop stage anyway like you requested.

  • Calling a new browser window with WD Abap and passing data via POST

    Hi there,
    does anybody know whether passing data via POST method is possible when opening a new browser window from within a Web Dynpro Component? In my case I use method IF_WD_WINDOW_MANAGER->CREATE_EXTERNAL_WINDOW for opening a new browser window. Now I want to pass a big amount of data which is only possible via POST method. How can I achieve that or is it not considered inside the Web Dynpro Framework?
    Kind regards,
    Albert

    Hi Priya,
    can you please explain a little bit more what you mean? I didn't get it..
    Kind regards,
    Albert

  • Document date is earlier than acquisition date for asset

    Client has an asset which they want to post an acquistion for as of 1/1/2011. They are in December of 2011. They first put an acquisition in with 12/31/2011 and then cancelled it, realizing they needed a docdate of 1/1/2011. When they try to redo the acquisition with a docdate of 1/1/2011 they get the error "Document date is earlier than acquisition date for asset xxxxx"
    The capitalization date on the asset is 1/1/2011. I looked at the acquisition date (thorugh SQL) and it is "1899-12-30 00:00:00.000"
    Does anyone know why it is preventing from posting?
    (Posting dates allowed are 1/1/11-12/31/11 for period 12 of 2011 and the period is unlocked)
    Alan

    Hi
    I do believe that the problem is in the capitalization date 12/31/2011
    Even if you have cancellled the first acqusition , and the acquisition date has taken the dummy date that assets have when there are no acqusitions 1899-12-30 00:00:00.000
    Still the capitalization date remains 12/31/2011
    and this will deter any transactions earlier than 12/31/2011
    My question is,
    can you still edit the field capitalization date?
    Jose Antonio Castillo

Maybe you are looking for