Call DLL with byte** input parameter type

Hi All,
Have anyone knows how to get output parameter from a Call Library Fuction with having the input prameter type is BYTE**. Please see the code below :
void getMsgBuffFromQueue(BYTE**& p_msgBuff)
if(m_QueueBuffMsg.GetSize() > 0)
p_msgBuff = m_QueueBuffMsgForEqp.DeQueue();
return ;
I did the test this fuction of the DLL on VC++ 6 with successful. but when I tranfer it to LabView, I cannot get the parameter output data after call this fuction., I donn't know to use which control to get approriate data return.
I define the function call on Labview like that:
void getMsgBuffFromQueueForEqp(Array1DLong **msgBuff);
Is it correct ? If anyone have the solutions, please give me your solution.
Thanks in advance.

The problem is that Array1DLong is not a C++ array, but a structure definition for a LV array. If you generate the c code from the Call Library Node, you'll notice the structure that contains the array size as part of it. In addition, there are a lot of rules about how memory should be allocated for the array elements - it is all covered in the "Using External Code in LabVIEW" manual.
I'll also point out that your definition does not match the code. A BYTE**& is actually a BYTE*** - the C++ concept of a reference is really a pointer under the covers - it is just that the C++ language provides special support for it. However, for anyone calling the method from the outside, it needs to know that it is really a pointer. Also, if I remember correctly, you can't expose a C++ method with a reference in the definition with an extern "C" statement, which is what you probably want to do in order to easily hook it up to LV...otherwise you'll have to deal with the C++ name-mangled version.
There are two ways I would recommend going here.
1. Don't use a Call Library Node but a CIN instead. The manual will walk you through the work necessary to marshall the two different data types in and out of LV.
2. Return the buffer to LV as a void*. In this case what are you saying to LV is "here is a handle I want you to hold onto...just give it back to me when I need it". Then you create some additional C functions that take the void* and do the data manipulation with it.
Which one you pick depends a lot of what you want. If you want to manipulate the data within LV with LV constructs, you need to go with #1. If you just need to pass the buffer to another C function, then #2 is the way to go.
Did that make any sense?
Brian Tyler
http://detritus.blogs.com/lycangeek

Similar Messages

  • Call dll with 1D array parameter

    Hi, I am trying to interface a Keyence laser displacement sensor controller with labview. Keyence has a dll API and I wrote a wrapper in C with DEV-C++. The wrapper is compiled into another DLL so I can call in my application. (Keyence DLL cannot be called directly for some reason)
    These are tested in Matlab and worked well. The problem is when I try to use the "Call Library Function Node " in Labview, it always report me errors. The C code is pasted as below. The arrays are 1-D and not been resized in the function call.
    Any input is highly appreciated.
    Bo 
     DLLIMPORT int AcqData(float *DataA, float *DataB)
      typedef int (_stdcall *DataStorageStartPtr) (void);
      typedef int (_stdcall *DataStorageStopPtr) (void);
      typedef int (_stdcall *DataStorageInitPtr) (void);
      typedef int (_stdcall *DataStorageGetDataPtr) (int OutNo,int NumOutBuffer, LKIF_FLOATVALUE *OutBuffer, int *NumReceived);
      typedef int (_stdcall *DataStorageGetStatusPtr) (int OutNo, int *IsStorage, int *NumStorageData);
      DataStorageStartPtr DataStorageStart;
      DataStorageStopPtr DataStorageStop;
      DataStorageInitPtr DataStorageInit;
      DataStorageGetDataPtr DataStorageGetData;
      DataStorageGetStatusPtr DataStorageGetStatus;
      HINSTANCE hLib;
      int feedback;
      int OutNo;
      int NumOutBuffer = MAX_NUM_DATA;
      int IsStorageA, IsStorageB;
      int NumStorageData;
      int NumReceivedA, NumReceivedB;
      LKIF_FLOATVALUE OutBufferA[NumOutBuffer];
      LKIF_FLOATVALUE OutBufferB[NumOutBuffer];
      //---------------- Import the DLL --------------------//
      hLib = LoadLibrary("LkIF.dll");
      if(!hLib)
       return -1;
      //---------------- Get the addresses of functions ---------------//
      DataStorageStart = (DataStorageStartPtr)GetProcAddress(hLib, "LKIF_DataStorageStart");
      if(DataStorageStart == NULL)
       return -2;
      DataStorageStop = (DataStorageStopPtr)GetProcAddress(hLib, "LKIF_DataStorageStop");
      if(DataStorageStop == NULL)
       return -3;
      DataStorageInit = (DataStorageInitPtr)GetProcAddress(hLib, "LKIF_DataStorageInit");
      if(DataStorageInit == NULL)
       return -4;
      DataStorageGetData = (DataStorageGetDataPtr)GetProcAddress(hLib, "LKIF_DataStorageGetData");
      if(DataStorageGetData == NULL)
       return -5;
      DataStorageGetStatus = (DataStorageGetStatusPtr)GetProcAddress(hLib, "LKIF_DataStorageGetStatus");
      if(DataStorageGetStatus == NULL)
       return -6;
      //---------------------------- Data Acqusition --------------------------//
      feedback = (DataStorageInit)();
      if(!feedback)
        return -7;
      feedback = (DataStorageStart)();
      if(!feedback)
        return -8;
      sleep(10000);
      sleep(500);
      OutNo = 0;
      feedback = (DataStorageGetStatus)(OutNo, &IsStorageA, &NumStorageData);
      if(!feedback)
       return -9;
      OutNo = 1;
      feedback = (DataStorageGetStatus)(OutNo, &IsStorageB, &NumStorageData);
      if(!feedback)
       return -10;
      while(IsStorageA || IsStorageB)
       sleep(500);
       OutNo = 0;
       feedback = (DataStorageGetStatus)(OutNo, &IsStorageA, &NumStorageData);
       if(!feedback)
        return -9;
       OutNo = 1;
       feedback = (DataStorageGetStatus)(OutNo, &IsStorageB, &NumStorageData);
       if(!feedback)
        return -10;
      feedback = (DataStorageStop)();
      if(!feedback)
       return -11;
      OutNo = 0;
      feedback = (DataStorageGetData)(OutNo,NumOutBuffer,&OutBufferA[0],&NumReceivedA);
      if(!feedback)
       return -12;
      OutNo = 1;
      feedback = (DataStorageGetData)(OutNo,NumOutBuffer,&OutBufferB[0],&NumReceivedB);
      if(!feedback)
       return -13;
      int i;
      for(i = 0; i < NumReceivedA; i++)
        DataA[i] = OutBufferA[i].Value;
      for(i = 0; i < NumReceivedB; i++)
        DataB[i] = OutBufferB[i].Value;
      return 0;
    Attachments:
    program.JPG ‏49 KB
    error.JPG ‏15 KB

    I notice you have corrections dot on the input side. Check the type used then building the array at the input side. Then you build a array on the input side, you do this to reserve memory for the dll. If you have not reserved the correct amount of memory before you call the function an erreor or a crash might happend. A float in C is 4 byte wide, equal to SGL in labview. A double is 8 byte wide, equal to DBL
    Besides which, my opinion is that Express VIs Carthage must be destroyed deleted
    (Sorry no Labview "brag list" so far)

  • How to call function which has input parameter type??

    Hi all,
    I am facing problem while
    executing select ftest1(123) from dual;
    and i am getting error
    ORA-006553:PLS-306 : wrong number or types of arguments in call to ftest1
    and this is the code for function;
    create package body pkg1 is
    type no_array is table of NUMBER index by binary_integer;
    end pkg1;
    CREATE OR REPLACE FUNCTION ftest1(lvdriver pkg1.No_arrray)
        RETURN VARCHAR2
    IS
        lv VARCHAR2(100);
    BEGIN
        FOR i IN lvdriver.first .. lvdriver.last LOOP
            SELECT last_nm
              INTO lv
              FROM person
             WHERE person_id = lvdriver(i);
            dbms_output.put_line(lv);
        END LOOP;
        RETURN lv;
    END;
    how to pass array values to function
    i need to pass multiple values to array here it is lvdriver(1,2,3,123,4,5)??

    Example...
    create or replace type tNums as table of number;
    create or replace function ftest1(nms tNums) return number is
      vResult number := 0;
    begin
      for i in 1 .. nms.count
      loop
        vResult := vResult + nms(i);
      end loop;
      return vResult;
    end;
    SQL> select ftest1(tNums(1,2,3,4)) from dual;
    FTEST1(TNUMS(1,2,3,4))
                        10

  • Creating a job for a procedure with an input parameter

    Hi,
    I want to create a job for a procedure ( sp_proc ) with a input parameter.
    The input parameter is a date value.
    As per the syntax for dbms_job.submit procedure;
    dbms_job.submit (
    job IN BINARY_INTEGER,
    what IN VARCHAR2,
    next_date IN DATE,
    interval IN VARCHAR2 DEFAULT 'NULL',
    no_parse IN BOOLEAN DEFAULT FALSE);
    How should the procedure be declared in the 'what' parameter of the dbms_job.submit procedure ?
    Please guide.
    Thanks.

    Hi,
    You are wright, I have found this thread [DBMS_JOB -- how to pass parameters to the job|http://asktom.oracle.com/pls/asktom/f?p=100:11:0::::P11_QUESTION_ID:351033761220].
    Regards,

  • Receiving error: Terminating app due to uncaught exception 'MFSQLiteException', reason: 'inserting mailbox url' abort() called terminating with uncaught exception of type NSException

    Today, I received this error when I re-added two email accounts that are tied in to my domain. The error is: "Terminating app due to uncaught exception 'MFSQLiteException', reason: 'inserting mailbox url' abort() called terminating with uncaught exception of type NSException"
    Two days ago, at my wits end with email issues, I googled how to Reset Mail.app and followed the recommendation found here: https://discussions.apple.com/thread/2266399?tstart=0
    That's. all. I've. done.
    What should I do correct the error I'm receiving when adding my email accounts?

    Launch the Console application in any of the following ways:
    ☞ Enter the first few letters of its name into a Spotlight search. Select it in the results (it should be at the top.)
    ☞ In the Finder, select Go ▹ Utilities from the menu bar, or press the key combination shift-command-U. The application is in the folder that opens.
    ☞ Open LaunchPad. Click Utilities, then Console in the icon grid.
    Step 1
    For this step, the title of the Console window should be All Messages. If it isn't, select
              SYSTEM LOG QUERIES ▹ All Messages
    from the log list on the left. If you don't see that list, select
              View ▹ Show Log List
    from the menu bar at the top of the screen.
    In the top right corner of the Console window, there's a search box labeled Filter. Initially the words "String Matching" are shown in that box. Enter the name of the crashed application or process. For example, if iTunes crashed, you would enter "iTunes" (without the quotes.)
    Each message in the log begins with the date and time when it was entered. Select the messages from the time of the last crash, if any. Copy them to the Clipboard by pressing the key combination command-C. Paste into a reply to this message by pressing command-V.
    ☞ The log contains a vast amount of information, almost all of which is irrelevant to solving any particular problem. When posting a log extract, be selective. A few dozen lines are almost always more than enough.
    Please don't indiscriminately dump thousands of lines from the log into this discussion.
    Please don't post screenshots of log messages—post the text.
    ☞ Some private information, such as your name, may appear in the log. Anonymize before posting.
    Step 2
    In the Console window, select
              DIAGNOSTIC AND USAGE INFORMATION ▹ User Diagnostic Reports
    (not Diagnostic and Usage Messages) from the log list on the left. There is a disclosure triangle to the left of the list item. If the triangle is pointing to the right, click it so that it points down. You'll see a list of crash reports. The name of each report starts with the name of the process, and ends with ".crash". Select the most recent report related to the process in question. The contents of the report will appear on the right. Use copy and paste to post the entire contents—the text, not a screenshot.
    I know the report is long, maybe several hundred lines. Please post all of it anyway.
    If you don't see any reports listed, but you know there was a crash, you may have chosen Diagnostic and Usage Messages from the log list. Choose DIAGNOSTIC AND USAGE INFORMATION instead.
    In the interest of privacy, I suggest that, before posting, you edit out the “Anonymous UUID,” a long string of letters, numbers, and dashes in the header of the report, if it’s present (it may not be.)
    Please don’t post other kinds of diagnostic report—they're very long and rarely helpful.

  • Calling PLSQL Procedure with CLOB input parameter from JDBC

    Hi..
    I've got a PLSQL procedure with a CLOB object as input parameter:
    function saveProject (xmldoc CLOB) RETURN varchar IS
    I want to call that procedure from my JDBC Application as...
    String data = "..."
    CallableStatement proc = conn.prepareCall
              ("begin ? := saveProject (?); end;");
    neither
    proc.setCharacterStream(2, new StringReader(data, data.length());
    nor
    proc.setString(2, data);
    will work.
    The Application throws java.sql.Exception: ... PLS-00306 wrong
    number or types of arguments in call 'SAVEPROJECT'
    How can I use set setClob method?
    The Problem is: with Oracles CLOB implementation I can't create
    an Instance, and from the CallableStatement a can't get a
    Locator for a CLOB-Object.
    This CLOB stuff makes me really nuts!
    please somebody help me.. thanks
    Alex

    Hi All,
    You can not make it like that.
    You can not make clob as input parameter.
    Do you want an easy way?
    This is the easy way.
    sample:
    function myFunction(S varchar2(40))
    return integer as
    begin
    insert into TableAAA values(S)
    --TableAAA only contains 1 column of clob type
    end;
    This will work the problem with this is the parameter is in
    varchar2 right? so there will be limited length for it.
    You can do this to call that function:
    nyFunction('My String that will be input into clob field');
    There's another slight difficult way, I understand that you have
    installed Oracle client/server in your system, try to look at
    jdbc folder and try to find demo.zip in that folder, you can
    find several ways of doing thing with jdbc.
    Have a nice day,
    Evan

  • Stored Procedure Call with only Input Parameter

    Hi, The Example at Oracle Toplink Developer's Guide, Volume 5 uses an output param named IS_VALID. How Can I Call a Stored Procedure that has only Input Param ? If I don't use an Ouput Param Toplink throw the following Exception:
    *Excepción [TOPLINK-4002]* (Oracle TopLink - 10g Release 3 (10.1.3.3.0) (Build 070620)): oracle.toplink.exceptions.DatabaseException Excepción Interna: java.sql.SQLException: ORA-00900: invalid SQL statement
    Here's the Sample Code Depicted at the Guide:*
    Example 98–48 Stored Procedure Call with an Output Parameter
    StoredProcedureCall call = new StoredProcedureCall();
    call.setProcedureName("CHECK_VALID_POSTAL_CODE");
    call.addNamedArgument("POSTAL_CODE");
    call.addNamedOutputArgument(
    "IS_VALID", // procedure parameter name
    "IS_VALID", // out argument field name
    Integer.class // Java type corresponding to type returned by procedure
    ValueReadQuery query = new ValueReadQuery();
    query.setCall(call);
    query.addArgument("POSTAL_CODE");
    Vector parameters = new Vector();
    parameters.addElement("L5J1H5");
    Number isValid = (Number) session.executeQuery(query,parameters);
    Here's my code
    StoredProcedureCall call = new StoredProcedureCall();
         call.setProcedureName("MYSTOREDPROCEDURE");
         call.addNamedArgument("INPUTPARAM1");
         call.addNamedArgument("INPUTPARAM2");
         call.addNamedArgument("INPUTPARAM3");
         call.addNamedArgument("INPUTPARAM4");
         call.addNamedArgument("INPUTPARAM5");
         call.addNamedArgument("INPUTPARAM6");
         ValueReadQuery query = new ValueReadQuery();
         query.setCall(call);
         query.addArgument("INPUTPARAM1");
         query.addArgument("INPUTPARAM2");
         query.addArgument("INPUTPARAM3");
         query.addArgument("INPUTPARAM4");
         query.addArgument("INPUTPARAM5");
         query.addArgument("INPUTPARAM6");
    Vector parameters = new Vector();
         parameters.addElement("INPUTVALUE1");
         parameters.addElement("INPUTVALUE2");
         parameters.addElement("INPUTVALUE3");
         parameters.addElement("INPUTVALUE4");
         parameters.addElement("INPUTVALUE5");
         parameters.addElement("INPUTVALUE6");
         uow.executeQuery(query,parameters);
    Regards,
    Manuel

    You need to use a DataModifyQuery as your query does not return anything.
    James : http://www.eclipselink.org

  • Call library with struct as parameter - several problems

    Hi everyone,
    I'm trying to send a MIDI sysex message to a midi device through winmm.dll using MidiOutLongMsg. I have trouble figuring out how to pass the parameters right.
    I need to call three functions (midiOutPrepareHeader, midiOutLongMsg, midiOutUnprepareHeader), all of them having the same form
    MMRESULT midiOutPrepareHeader(
    HMIDIOUT hmo,
    LPMIDIHDR lpMidiOutHdr,
    UINT cbMidiOutHdr
    where HMIDIOUT hmo is a handle that I have already. Troubling me are the other two parameters. cbMidiOutHdr is the size (in bytes) of the struct lpMidiOutHdr. This is a struct of the form
    typedef struct {
    LPSTR lpData;
    DWORD dwBufferLength;
    DWORD dwBytesRecorded;
    DWORD_PTR dwUser;
    DWORD dwFlags;
    struct midihdr_tag far * lpNext;
    DWORD_PTR reserved;
    DWORD dwOffset;
    DWORD_PTR dwReserved[4];
    } MIDIHDR;
    (Struct: http://msdn2.microsoft.com/en-us/library/ms711592.aspx
    PrepareHeader http://msdn2.microsoft.com/en-us/library/ms711634.aspx
    SendMessage http://msdn2.microsoft.com/en-us/library/ms711629.aspx
    UnprepareHeader http://msdn2.microsoft.com/en-us/library/ms711641.aspx)
    [Note: The full code for what I want to do can be found here http://www.borg.com/~jglatt/tech/lowmidi.htm (section "outputting system exclusive MIDI messages) - basically I need a translation of this code to LabView.]
    The following are my problems:
    a) How do I emulate a struct in LabView? (other threads suggest that this is done by clusters)
    b) How do I pass a pointer to a struct (cluster?) to a DLL?
    c) If I can use a cluster for this struct, how do I represent the LPSTR lpData in the cluster, i.e., a pointer to my data?
    d) how do I get the struct size for cbMidiOutHdr?
    This is how far I got, lots of it with the help of several threads in this forum:
    a) use a LabView cluster
    b) use "adapt to type" in the dll call (couldn't get this to work)
    c) I use a type cast on my string in the hope that what it returns is the register address (and I'm probably superwrong here)
    d) my cluster consists of 9 elements of 4 byte datatypes, so I just use 36 for cbMidiOutHdr
    The dll seems to be happy with the way I pass the cluster - I get error codes of 0 in both the PrepareHeader and UnprepareHeader functions. However, sending doesn't work (error code 7). Guessing that the type cast returns a pointer, I have also cast the cluster to an Int32 and passed that parameter as pointer to numeric value. Interestingly, the PrepareHeader and UnprepareHeader functions are still happy, but I get a different error code from the sending (code 11)
    Most of what I've done so far is guesswork, and I'm out of guesses now. I've attached the code to this post (it uses VIs from the NI MIDI example library ftp://ftp.ni.com/pub/devzone/epd/midi-example.llb ). I'd appreciate any help with this. Thanks!
    Attachments:
    Write MIDI SysEx Message.vi ‏21 KB

    First off, this problem doesn't have anything to do with control references; those have meaning only inside of the LabView environment.
    My first suggestion is to look for a higher-level library that will do whatever MIDI function you are trying to call. If you can find an ActiveX or .NET object that will control the MIDI subsystem, I recommend that you use it instead since it will be a lot easier.
    If calling the DLL directly is the best option (and calling DLLs is absolutely the way to go when you need high performance) then you need to understand how LabView passes data to library functions. That is described here:
    http://zone.ni.com/reference/en-XX/help/371361D-01/lvexcodeconcepts/configuring_the_clf_node/
    As you can see there are a lot of ways to pass data, but they boil down to this: LabView can pass, via various levels of dereferencing, a pointer to some [mostly] flat data. Things are easiest when your DLL mimics LabView's own data storage methods. For example, wiring a cluster into a node set with Adapt to Type passes a handle (struct**, pointer to pointer to [mostly] flat data). So if you are writing your own DLL, it's pretty easy to write something that works nicely with LabView data (e.g., strings with 4-byte length headers, self-describing arrays) and in fact the result is cleaner looking than its "pure C" variant because of the self-describing arrays and string length prefixes. (I say "mostly" flat because LabView clusters with variable-length elements aren't stored in a flat format.)
    When it comes to matching someone else's API things get harder, and in this case you are out of luck; you are going to have to write a LabView-callable wrapper function in C because LabView can't mimic the exact data structure needed. The problem is not the struct; there is a sneaky way to pass a pointer (vs a handle) to a struct, which is to do this:
    Generate a cluster in LabView representing the struct (atomic numeric data only! no strings arrays etc!)
    Flatten to string using native byte order.
    Convert string to byte array.
    Configure the call library function note to accept a pointer to an unsigned byte array. (NOT a C-string as suggested at the bottom of the page in the link above; your data may have internal 0x00s, and it certainly doesn't need an extra 0x00 at the end!)
    The reason this works is that a pointer is just an address; as long as all the right bytes are in memory in the right order starting at that address, all is well. The DLL doesn't know that LabView thinks it is passing a pointer to an array of bytes, it just gets the pointer to the first byte and it reads and interprets those bytes according to its own struct def. Reverse the process cooming back from the DLL (convert byte array to string, unflatten from string against the LV cluster.) This method will work for any flat struct.
    In LabView 8.5 there may be a less bogus way of doing this, which is to pass the cluster in with Adapt to Type and select "Array Data Pointer" as the format. This is new and I haven't tried it.
    But in your case, you want to point to a struct that contains a pointer to a string plus some numeric data and another pointer, and this you can't do directly. LabView does not expose the location of a string to you anywhere outside the Call Library Function node, so there's no way to "find the pointer" to a LabView string from outside the DLL. What you need to do in this case is write a wrapper function in C that takes your LabView data. Only then will LabView "tell you where the bytes are" and promise not to fiddle with them until the library call is complete. Once you are in C-land, you can throw pointers around to your heart's content. As long as you do it all perfectly, all will be well. (If you write one byte too many on output, boom! :-)
    There are a few ways to do this. You could make a cluster that has meaning in LabView, e.g. replace lpData with a LabView string, then pass the cluster in to your wrapper function set to "Adapt to Type"; that will pass a handle to the cluster. You can generate the .c file from the Call Lib Fuction, and it will outline where the data is.
    Complications: In this case it's your job to convert the handle to the labview string (which has 4 bytes of length as a prefix and no trailing 0x00) to a C-string by malloc()'ing a new buffer and memcopying the string out. There might be something in the LV CIN tools that does this, I'm not sure. Make sure you release the new string after the MIDI call.
    The lazy route (which is what I would do) is pass the string as the first arg and all of the numeric stuff as the second arg, leaving the space for lpData as you have now. (I don't know what struct "midihdr_tag" is, but if that's not something you were passed in a previous call, you'll need to add a third argument for that cluster and treat it similarly.) Then you can tell LabView that it should pass the string arg as a C-string pointer. Inside your wrapper, extract the pointers and stuff them into the data structure as needed. Dereference once (to go from handle to pointer) and make the MIDI call. To be clean, put everything back where it was before in the cluster; in particular don't believe you can pass out lpData* and do whatever you want with it in LabView; LabView will release/change that address as soon as you leave the output string unwired or do anything to it (e.g. concatenate.) You'll be creating a new string buffer and a new pointer on your next MIDI call.
    All of this complication is a result of a) LabView's hiding the details of memory allocation/deallocation from you and b) LabView's internal data structures being a bit different from C conventions (e.g. LabView strings vs. C strings). The second means that even when LabView is using non-flat data structures (e.g. cluster containing an array), you can't just blindly pass them along to a C function and expect it to work right. It would be nice if NI would write a little mini-compiler into the Call Library Function that would do what our wrapper function is going to do, but that's probably a fairly significant project. 
    Still, each function wrapper is only going to have about 10 lines of C. You can put wrappers for all the MIDI functions you want to call into a single DLL, then ship that DLL with your app.
    (Now you see why I suggested you look for an ActiveX MIDI control!)
    -Rob Calhoun

  • Web service data control with complex input parameter problem

    Hi!
    I'm making ADF web app, using JDev 11.1.1.2.0. I have to call a web service (using a data control), which has complex input parameter (array of complex objects).
    I followed steps from Susan Duncan blog: http://susanduncan.blogspot.com/2006/09/dealing-with-complex-input-params-in.html , but I ran into a problem.
    As Susan wrote, I changed submit's button action binding to an operation in a managed bean, which returns array of objects and everything works fine. I can call a WS and my table shows the result.
    The problem is, that after I change button's action binding to my manage bean, row selection in result table doesn't work anymore (I allways get NullPointerException).
    What can be done here?
    Can somebody please help?

    Hi,
    I also have similar type of problem where I need to invoke a Web service with Complex input parameters.
    I followed Susan's blog but I stuck at a point where methos getItem is created.
    Can anyone tell me how to get that method for my requirement.
    If possible can you guys share your solutions here.
    Thanks in advance.

  • Cisco webview - create a template with new input parameter

    Dear all,
    I know the Infomaker will help to create a template for webview. I have done with some custom template. My problem is that I can not change the input parameter for webview page. For example, if the template under the skill group, I can only choose with skill group and datetime to generate the report.
    I want to change the input field on the web page, for example the input will be a calling number and a range of datatime and the webview will query on the detail table and pop out some detail call.
    Or I want to run the report for outbound dialer, the input is the customer number and the output page will be the status of this customer call (closed, retry, pending...)
    Can I create a new set of template like Call Detail beside the default Call Type, Agent, Skill Group...?
    Please help to give me some advices.
    Thank you,
    Thanh

    I've personally never seen anything like this done, not saying it is not possible, but you might have to use a different reporting mechanism all together in order to achieve something like this.  I've always been curious why someone would request a report on a single call, just seem like a single call will never trully give you a true representation of your call center metrics.
    Sorry if this is not much help.
    david

  • SUBMIT keyword along with one input parameter

    Hi
    actually i have two programs A and B.
    i am calling B using SUMBIT, from program A.
    but for B program there is one input parameter,
    what i need is, B program should execute with SUBMIT as well as input field.
    thanks in advance
    vEnu

    Hi,
      Refer this
    Program accessed
    REPORT report1.
    DATA text TYPE c LENGTH 10.
    SELECTION-SCREEN BEGIN OF SCREEN 1100.
      SELECT-OPTIONS: selcrit1 FOR text,
                      selcrit2 FOR text.
    SELECTION-SCREEN END OF SCREEN 1100.
    Calling program
    REPORT report2.
    DATA: text       TYPE c LENGTH 10,
          rspar_tab  TYPE TABLE OF rsparams,
          rspar_line LIKE LINE OF rspar_tab,
          range_tab  LIKE RANGE OF text,
          range_line LIKE LINE OF range_tab.
    rspar_line-selname = 'SELCRIT1'.
    rspar_line-kind    = 'S'.
    rspar_line-sign    = 'I'.
    rspar_line-option  = 'EQ'.
    rspar_line-low     = 'ABAP'.
    APPEND rspar_line TO rspar_tab.
    range_line-sign   = 'E'.
    range_line-option = 'EQ'.
    range_line-low    = 'H'.
    APPEND range_line TO range_tab.
    range_line-sign   = 'E'.
    range_line-option = 'EQ'.
    range_line-low    = 'K'.
    APPEND range_line TO range_tab.
    SUBMIT report1 USING SELECTION-SCREEN '1100'
                   WITH SELECTION-TABLE rspar_tab
                   WITH selcrit2 BETWEEN 'H' AND 'K'
                   WITH selcrit2 IN range_tab
                   AND RETURN.
    Regards,
    Prashant

  • OSB XSLT trasformations with XML input parameter

    Hello , In my proxy service i need to make assign step with XSLT transformation which have input parameter thats have to be XML.
    As "Input Document" I select the body - $body/db:OutputParameters.
    In Bind Variables I have v_accinfo where i want to put $accinfo/ai:OutputParameters.
    $accinfo is variable populated before this assign by Service Call out ( Response Document Variable ) .
    with this setup i get an error "No value could be bound to variable: v_accinfo".
    I tried some different expressions in place of $accinfo/ai:OutputParameters, but i get some other errors. I think it should be $accinfo/ai:OutputParameters.
    Can someone help with this?
    I lost too much time pulling hair, on this. :(

    I got the same error with $accinfo/*:OutputParameters --->> BEA-382107: No value could be bound to variable: accsinf
    *$accinfo goes like this:*
    <get:OutputParameters      xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance" xmlns:soap-env="http://schemas.xmlsoap.org/soap/envelope/" xmlns:get="http://xmlns.oracle.com/pcbpel/adapter/db/SMS/GET_ACCOUNT_INFO/">
         <get:RESULTRECORDSET>
         <get:RESULTRECORDSET_Row>
         <get:BRANCH>87400</get:BRANCH>
    the XSLT:
    xmlns:ns1="http://xmlns.oracle.com/pcbpel/adapter/db/SMS/GET_ACCOUNT_INFO/"
    <!-- Where the variable is defined -->
    <xsl:param name="v_accinfo"/>
    <xsl:template match="/">
    <inp1:something>
    <accounts>
    <!-- Here's how I use the variable: -->
    <xsl:for-each select="$v_accinfo/ns1:OutputParameters/ns1:RESULTRECORDSET/ns1:RESULTRECORDSET_Row">
    <xsl:if test="(ns1:BRANCH = $br) and ((ns1:ACC_NUM = $ac) and (ns1:CURRENCY = $cr))">
    <acc_description1>
    <xsl:value-of select="ns1:TYPE"/>
    </acc_description1>
    </xsl:if>
    </xsl:for-each>
    I tested the XSLT in JDeveloper. I just used the content of the $accinfo and $body from "Invocation Trace" (OSB Console > Proxy Service >Test) and the transformation works Fine. But I have problems when I use it in the Proxy Service's flow in OSB.
    Edited by: 849874 on Apr 5, 2011 6:43 AM

  • Problems with Mapping Input Parameter

    Hi everybody,
    just another question. I have a Mapping with an Mapping Input Parameter. If i provide a Parameter with an prefixed 0 e.g.: 01234 the output of this is 1234.
    How can i manage this that the output of the Input Parameter ist 01234 and not like now 1234?
    Many thanks in advance.
    Greetings

    The Mapping Input Parameter is of type varchar2 and it still gives 1234. The Problem is i have to provide the whole input parameter for logging proposes. I managed this now by building a workflow an provide the mapping input parameters to new variables. Now the Input 01234 gives 01234....:-)
    Does anybody know another solution for this problem?
    Greetings

  • Input parameter types

    Hey Everyone,
    I'm curious if there is a way to get around having to specify the full package for the input type such as <input-parameter name="departmentCd" required="true" type="String"> instead of <input-parameter name="departmentCd" required="true" type="java.lang.String">.  It's convenient to use the gui to add a service, but I find myself manually updating each of these types.  I also found that if I specify public void someMethod(java.lang.String foo) it automatically pulls it in, but that's obviously not ideal.
    Appreciate your feedback,
    Michael

    Hey Michel,
    I reproduced your senario on my side and found it is rational to make an improvement on the Component Development Tool to resolve the trouble you encounter.
    The change taken on the tool is that when selecting java.lang.string as an input/output parameter of an operation, the generated function Java class would be String someMethod(String foo) instead of java.lang.String someMethod(java.lang.String foo).
    The update will come up in next release.
    Thank you again for using our product and sharing your experience with us. The product would be better by your valuable advice.
    Rex

  • OVS with no input parameter

    Hi,
    I'm trying tu implement an Object Value Selector for one of my inputfields.
    I use an RFC fonction module that gives a list of values that the OVS should use. I follow the tutorial on OVS but the difference is that my RFC function does not have input parameters, it only outputs a list.
    The result is that when I am press the OVS button of my inputfields, I get the following error :
    [code]java.util.NoSuchElementException
         at java.util.TreeMap$EntryIterator.nextEntry(TreeMap.java:1024)[...]
    [/code]
    I do not do anything in the method applyInputValue because I do not have input parameters so I can't set them but this is probably causing the problem.
    How can I correct this ?
    Thanks,
    Sylvain

    Hi NagaKishore,
    Here is the code I use in my wdInit() method of the view :
    IWDAttributeInfo[] ovsStartUpAttributes = { wdContext.nodeOVSNode().getNodeInfo().getAttribute("Mtart") };
              IWDOVSContextNotificationListener listener = wdThis.wdGetOVSCustomController().getOVSListener();
              WDValueServices.addOVSExtension("Selection type article", // not used yet
              // fields bound to startup attributes will be OVS-enabled
                  ovsStartUpAttributes,
                   wdThis.wdGetOVSCustomController().getOVSInputNode(),
                   wdThis.wdGetOVSCustomController().getOVSOutputNode(),
                   listener);
    The applyInputValues() method of the OVS custom controller is empty.
    My rfc module is returning a list of all material types available in the system. THere is no input parameter, and the result is a list of type Mtart.
    Regards,
    Sylvain

Maybe you are looking for

  • How can I remove "skype caller" from caller id

    When I make calls from Skype I don't mind if it shows my phone number, but would prefer the customer I'm calling don't see that it's from a "skype caller" as this startles some customers I do business with.   Can I have that wording removed and repla

  • Iphone synced with another computer after reinstalling win7

    After reinstalling windows 7, itunes states my iphone 4 is synced with another computer and wants to erase all my music and content.

  • Best way to derive a "week ending" date using the Derived Column Transformations

    Hi, I have an interesting challenge. I am working on creating a BI DB that contains timesheet data. The data contains a column representing the date "worked"  ([Date]. Nearly all output reporting is based on a timesheeting week that end on a Wednesda

  • Problem activating 'Show Date/Time in Menubar'

    Hallo all, since the upgrade to Snow Leopard the Time is not shown in the menubar. I teried to activate 'Show Date/time in Menubar' in System Preferences->Date/time->Clock, but it is not possible to check the corresponding button, it remains unchecke

  • Language Selector Component Choice

    Hi Everyone, I have a Flash AS2 Pull-Down language selector for 11 languages that I use for Director 11, Authorware 7 and web pages. Now, time marches on and I must add 19 more languages. It will be too large for several of it use locations.  I also