Unexpected loop behaviour with asynchronous call

I am having trouble with loop behaviour when using an asynchronous call.
I am building an application to record simultaneously temperature (NI USB-TC01 thermocouple), displacement (DC voltage, read from an Agilent 34401a) and resistivity (using a Keithley 2400 sourcemeter).
I am using a voltage sweep function on the Keithley 2400 to alternate current direction in a sample and measure the voltage drop - this is a common technique for eliminating thermal emf from resistance measurements. But what you need to know is that I set the number of current cycles I want and then wait for the instrument to measure and return the meausurements - up to 50 samples, which takes nearly 30 seconds. With the other two measurements, I have to programmatically call a measurement vi for each sample I want.
I have set up my application to asynchronously program the resistivity measurement and then wait for the response, and I want to in parallel measure temperature and position until the resistivity is done. I then want to record the mean and standard deviation for each signal. I used an event structure to interrupt the temperature and position measurements when done.
The problem I am running into is that after the first resistivity measurement is completed and I go to do the second one, the loop that measures temperature and displacement only runs twice, so I only get two samples, regardless of how many resistivity samples I want to collect. For example, if I want 50 resistivity samples at a time, the first iteration will measure rougly 40 samples of temperature and displacement, but any subsequent iterations will only measure twice.
I know this is probably overwhelming to understand the operation, but can anyone help? I have attached my code ('Delatometer') as well as a test vi I built that uses the same structure but has no interactions with instruments ('asynchronousCall').
The
Attachments:
Delatometer.zip ‏221 KB
asynchronousCall.zip ‏29 KB

I forgot to mention...the test vi that I uploaded executes as expected, so I am thinking that maybe its an issue with the instrument calls? I also found that if I run the Delatometer program in 'highligh execution mode' it runs properly, and it is my understanding that in 'highlight execution mode' there is no multi-threading.

Similar Messages

  • Error handling / logging with asynchronous calls

    Hi,
    I want to log every error my app might throw. I thought it would be sufficient to surround either the launch method or the start method with a try...catch. But it doesn't work as excepted.
    If an error occurs in an asynchronous call, e.g. in a button click, the exception is never caught.
    Do you have an idea, how to solve this?
    Example:
    import javafx.application.Application;
    import javafx.event.ActionEvent;
    import javafx.event.EventHandler;
    import javafx.scene.Scene;
    import javafx.scene.control.Button;
    import javafx.scene.layout.VBox;
    import javafx.stage.Stage;
    public class TestApp4 extends Application {
        public static void main(String[] args) {
            launch(args);
        public void start(final Stage stage) throws Exception {
            try {
                final VBox root = new VBox();
                Button button = new Button("Click");
                button.setOnAction(new EventHandler<ActionEvent>() {
                    @Override
                    public void handle(ActionEvent actionEvent) {
                        int i = 0;
                        int a = 5 / i;
                root.getChildren().add(button);
                Scene scene = new Scene(root);
                stage.setScene(scene);
                stage.show();
            } catch (Exception e) {
                // do logging here
                e.printStackTrace();
    }

    I'm not 100% sure how it works, but what I am pretty sure is that these Exceptions in EventHandlers are caught by JavaFX itself inside the JavaFX thread. They have to, because if they let the exception bubble up to the top, the FX thread would end (and with it, all response in the UI). It is probably caught at the level where Events are triggered somewhere (my guess is inside the QuantumToolKit).
    Anyway, these exceptions are printed to System.err -- if you can redirect that stream to a log file or whatever you can have them all in one place. The error stream can be set in your application simply by calling System.setErr().
    Note also that exceptions occuring in a Task are stored in the exception property -- sometimes these can be hard to find as they are put there silently -- you'll need to check your Tasks for exceptions and print them.

  • Unexpected Drill behaviour with OBIEE over Essbase

    HI All,
    Just wondering if there is anything in particular that needs to be done to the MOdel design in OBIEE to ensure Essbase data drills "correctly"
    Right now what seems to occur, is that if I choose a particular level of a dimension hierarchy in my query (eg level 3), when I drill on that level, it not only retrieves a new column for the next level in the hierarchy, but also brings in all ancestor levels into the result set.
    Eg
    Query Has :
    My Dimension (Gen 3) , My Measure
    After drilling on My Dimension (Gen 3) i would expect
    My Dimension (Gen 3), My Dimension (Gen 4), My Measure
    instead I get :
    My Dimension (Gen 3), My Dimension (Gen 4), My DImension (Gen 2), My Dimension, (Gen 1), My Measure
    I have tried changing the properties on the physical layer of the dimension for the Hierarchy type from Fully Balanced, to Ragged and Unbalanced, but it does not change the behaviour.
    This occurs for all dimensions in the cube which is imported into the model.
    Is anyone else experiencing similar behaviour, is their a solution for this.
    Thanks,
    Imran

    Hi Imran,
    You just need to go to the BMM layer & select the dimension in which see the logical level properties of that column.
    In that you will find a keys tab which may have more than one keys defined just see the details of all the keys that might include the columns of upper level.
    Either uncheck the use for drill down option.
    Or delete that key.
    Make sure you have a key that has only one (same) column!
    Regards,
    Devesh

  • Asynchronous call with OO4O

    Hello,
    I have a problem. The asynchronous call worked faultlessly under Oracle DB 10.2 and Oracle client 9.2. After the rearrangement to Oracle client 10.2 the VB6 function cannot be ended correctly. If I install the call OraStmt.Cancel explicitly, the function gets stuck directly at cancels. The Stored Procedure is very extensive. It consists from cursors and Object type.
    Can one help me at this problem?
    Many thanks in advance!
    Benedikt Taube
    Important data:
    Development environment:     VB6
    OO4O:                     10.2.0.2.20
    Oracle Client:               10.2.0.1.0
    Oracle Net:               10.2.0.1.0
    Oracle-DB:                10.2
    Function (...)
    Set colCrefos = Nothing
    Set colKapitel = Nothing
    Set colEntscheider = Nothing
    lngRetCode = 0
    objConnection.DB.Parameters.Add "RET", ORACLE_KO, ORAPARM_OUTPUT, ORATYPE_NUMBER
    objConnection.DB.Parameters.Add "CREFOS", Null, ORAPARM_OUTPUT, ORATYPE_VARRAY, (SCHEMAOWNER & ".CCRF_ORGANISATIONS")
    objConnection.DB.Parameters.Add "KAPITEL", Null, ORAPARM_OUTPUT, ORATYPE_VARRAY, (SCHEMAOWNER & ".CCRF_KAPITELS")
    objConnection.DB.Parameters.Add "ENTSCHEIDER", Null, ORAPARM_OUTPUT, ORATYPE_VARRAY, (SCHEMAOWNER & ".CCRF_ENTSCHEIDERS")
    objConnection.DB.Parameters("NAME").Value = objTools.String2Varchar(strName)
    objConnection.DB.Parameters("HAUSNUMMER").Value = objTools.String2Varchar(strHausnummer)
    Set OraStmt = objConnection.DB.CreateSql("Begin :RET := " & SCHEMAOWNER & ".CRF_SUCHE.ANSCHRIFT( :RETCODE, :NAME, :RECHTSFORM, :PLZ, :ORT, :STRASSE, :HAUSNUMMER, :CREFOS, :KAPITEL, :ENTSCHEIDER); end;", ORASQL_NONBLK)
    On Error GoTo err_asynchron
    Dim stat As Long
    stat = OraStmt.NonBlockingState
    While (stat = ORASQL_STILL_EXECUTING And Me.Cancel = False) 'ORASQL_SUCCESS
    DoEvents
    stat = OraStmt.NonBlockingState
    Wend
    err_asynchron:
    err.Clear
    On Error GoTo Anschrift_Err
    'OraStmt.Close
    'Set OraStmt = Nothing
    If Me.Cancel = True Then
    Anschrift = True
    Else
    lngRetCode = objConnection.DB.Parameters("RETCODE").Value
    If lngRetCode = ORACLE_KO Then
    Call err.Raise(objConnection.DB.LastServerErr, sFnc, objConnection.DB.LastServerErrText)
    End If
    Anschrift = IIf(objConnection.DB.Parameters("RET").Value = ORACLE_OK, True, False)
    If Anschrift = True Then
    Set colCrefos = objConnection.DB.Parameters("CREFOS").Value
    Set colKapitel = objConnection.DB.Parameters("KAPITEL").Value
    Set colEntscheider = objConnection.DB.Parameters("ENTSCHEIDER").Value
    End If
    End If
    Anschrift_Ex:
    For i = 1 To objConnection.DB.Parameters.Count
    objConnection.DB.Parameters.Remove 0
    Next i
    Exit Function
    Anschrift_Err:
    Resume Anschrift_Ex
    End Function

    Hi Babu,
    That is the problem with AltovaXMLSPY, it always expect a resonse..and if don't get one it will shown empty headers..
    check moni and see if you have only one entry then your scenario is working and it is working in async mode
    Regards
    Suraj

  • Bug in cursor behaviour with duplicates

    Dear Oracle guys and girls,
    first of all: it sucks that i HAVE to provide business information (company name, address, even phone number) even if i just want to participate in this forum for private reasons. I even have to "unsubscribe" to the newsletters although i never subscribed. Then i have to re-enter my timezone information and email address for the forum, because the settings in my profile are ignored. I think there's some room for improvement in this registration process.
    OK - back to topic. i think i found a bug in the cursor behaviour with duplicate keys. But the behaviour is very consistent, so maybe it's not a bug, but a bad design. (I call it bad because it's totally unexpected and not logical to me).
    I insert some dupes with DB_KEYFIRST; then i create a cursor and iterate over all items in the reverse order (!) with DB_PREV (i also tried DB_PREV|DB_NEXT_DUPE) - no keys are shown.
    Alternatively:
    I insert some dupes with DB_KEYLAST; then i create a cursor and iterate over all items in the reverse order (!) with DB_NEXT (i also tried DB_NEXT|DB_NEXT_DUPE) - no keys are shown.
    cursor->c_get returns the error code -30989 (DB_NOTFOUND).
    Why is it not possible to traverse duplicates in the reverse order? To me it looks like a bug.
    I tested against db 4.5.20.
    Regards
    Chris
    PS: I would love to hear if the bug i reported here: http://groups.google.com/group/comp.databases.berkeley-db/browse_thread/thread/ed471cf6837cb2a6/dd9cda0ad105f401#dd9cda0ad105f401
    will be fixed in the next version.
    Here's a test program:
    int
    main(int argc, char **argv)
    unsigned i;
    int st;
    DB *db;
    DBT key, record;
    DBC cursor, cursor2;
    unlink("test.bdb");
    st=db_create(&db, 0, 0);
    if (st)
    error("db_create", st);
    st=db->set_flags(db, DB_DUP);
    if (st)
    error("db->set_flags", st);
    st=db->open(db, 0, "test.bdb", 0, DB_BTREE, DB_CREATE, 0);
    if (st)
    error("db->open", st);
    memset(&key, 0, sizeof(key));
    memset(&record, 0, sizeof(record));
    st=db->cursor(db, 0, &cursor, 0);
    if (st)
    error("db->cursor", st);
    st=db->cursor(db, 0, &cursor2, 0);
    if (st)
    error("db->cursor", st);
    for (i=0; i<LOOPS; i++) {
    record.data=&i;
    record.size=sizeof(i);
    st=cursor->c_put(cursor, &key, &record, DB_KEYFIRST);
    st=cursor->c_put(cursor, &key, &record, DB_KEYLAST);
    if (st)
    error("cursor->c_put", st);
    while (!(st=cursor2->c_get(cursor, &key, &record, DB_NEXT))) {
    printf("%d\n", *(int *)record.data);
    st=cursor->c_close(cursor);
    if (st)
    error("cursor->c_close", st);
    st=db->close(db, 0);
    if (st)
    error("db->close", st);
    return (0);
    }

    st=cursor->c_put(cursor, &key, &record, DB_KEYFIRST);
    st=cursor->c_put(cursor, &key, &record, DB_KEYLAST);
    if (st)
    error("cursor->c_put", st);
    please delete the first line, it was a cut and paste error. as i said earlier: insert with KEYLAST, query with NEXT.

  • Is there a way to process multiple asynchronous calls individually (instead of all at once)?

    Hello,
    I have a function that saves a record using a RPC call (asyncToken with a new responder).  When I save an individual record (pressing "s" key), it works fine.  However, when I attempt to save multiple records simultaneously (bound to "v" key) (I have a for loop running through the selectedItems in the datagrid), it performs strangely.
    For anyone who hasn't experienced this, the successive calls seem to get stacked (literally - i.e. using a stack) and processed at the end of all operations in that block of code (I had trace functions before and after the call that were executed before I saw the result confirming this).
    What I would like to do is to simulate multiple AsyncToken usages with a single click, but still have them all occur individually since right now, the function saves the last item in the stack 8 times instead of saving each of the 8 items separately.
    OR
    Is there another means of RPC using something like "interruptToken" as opposed to asyncToken?  (In most other areas I've seen, asynchronous calls are performed as interrupts and dealt with immediately, thats why this procedure confused me for a bit)
    Thanks in advance,

    The second paragraph you posted is definitely worthwhile - still figuring out some of the inner workings of Flex calls (not just RPC stuff) that I use as I am pretty new to flex.
    I don't have the code with me at the moment, but I think I have to use separate calls to the save function.  My situation is this (and I plan on updating with code on Monday if necessary):
    I have a datagrid that is populated using a single RPC (which is loaded into an arrayCollection first then the datagrid).  Changes are made to the datagrid through a copy/paste function that I made, but these changes are only reflected on the datagrid (i.e. not in the dataprovider).  When the user hits "save", the selected line (selectedItem actually - i.e. not an index but the object itself) is passed to another class which contains a modified version of my "modify data" function (brings up a dialog after choosing a given line allowing editting/validation of certain fields regarding the selectedItem).  This changed version of "modify data" is then called and immediately closed effectively saving this record (without allowing the user to alter fields - so they don't have to hit save twice).
    With the copy/paste function, I make all of these changes en masse and then have a loop that goes something like
    for each (_object:Object in myDatagrid.selectedItems)
         callSaveFunction(this, _object);
    which ideally loops through the data and saves each item that has been changed.  If there is a way to save all of the data in the datagrid simultaneously, I would appreciate a bit of help there (perhaps dealing with the bindings - right now I have the object I save as the destination and the source is myDatagrid.selectedIndex.[field name]).
    Good to know about the other stuff, though - my understanding was a little bit lacking before

  • Plotting to a number of asynchronously called subVI front panels

    Hello everyone,
    I'm working on a DAQ and monitoring program and I have a dream of doing some very flexible window management for my plot windows. Trying to make it easy to quickly open different kinds of plots and display different channels in each window. So as not to reinvent the wheel I'm trying to use Windows windows to do this by calling VIs asynchronously. The VI will be built as an EXE and used by people who don't know LabVIEW, hence trying to make it really flexible and intuitive.
    I've set up my VI like this example and it has me real close: http://zone.ni.com/reference/en-XX/help/371361J-01/lvhowto/acbr_call_clones/
    When I run the VI it opens whatever number of plotting windows (instances of my plotting window SubVI) I've specificed but the plots don't update. Anyone have any tips as to how to get this behavior?
    Xander Cesari
    Automotive/Internal Combustion Test Engineer
    CLAD certified, mainly focused on data acquisition
    Been LabVIEWing for a few years, still a lot to learn
    Solved!
    Go to Solution.

    Bob,
    Thanks for the reply. I'm using a QSM-PC architecture, here's the relevant loop. Looks pretty much identical to the linked example, I hit that point and I decided I needed a bit of help wrapping my head around it. Data's coming in on a queue (the snippet broke the reference). My idea was to pop open all the windows in this state then use another state to plot data to them.
    In 'synchronous' mode I was able to get the desired behavior out of my subVI but it was also set right in a while loop and by playing with the Call Setup a bit I got it to do what I needed (open a new front panel and constantly plot).
    The queue idea is very promising though! I should be able to generate queues right in the For Loop that calls my VIs synchronously then enqueue in a "RUN" state. I'll give that a try.
    Xander Cesari
    Automotive/Internal Combustion Test Engineer
    CLAD certified, mainly focused on data acquisition
    Been LabVIEWing for a few years, still a lot to learn

  • Jolt and Asynchronous calls

    We are currently using Jolt 1.2 connected to a Tuxedo 6.5 system on Solaris.
    We are porting a Windows thick application to browser. We call a Tuxedo
    service
    with the old system that takes around 10 minutes to complete. We obviously
    call this
    asynchronously. When we call this same service using Jolt it "times-out".
    Which makes
    sense since Jolt 1.2 seems to only allow synchronous ( aka
    Request-Response ) calls.
    I have looked at the documentation for Jolt 1.2, 1.2.1, the Jolt with Tuxedo
    7.1 and Tuxedo 8 and
    I cannot find an ability to make a Asynchronous call. However, I did find
    it in the API documentation
    for the Jolt that comes with Weblogic Enterprise 5.1 and above? Are these
    APIs available without
    Weblogic Enterprise? Is there a special Jolt add-on package?
    Thanks for the info,
    Carl J. Collin
    Walgreen Co.
    [email protected]

    Thank you very much. That is exactly what our engineers came up with
    to get around this. The problem is that we have no ability to be notified
    when this async service is finished. In our old application we would lock
    the window manually (windows api) and run a loop doing getReplies until
    the async returned a buffer. With a browser model, it probably isn't
    possible
    without having an applet or something. It just rubs me raw that the API I
    need
    for Jolt isn't supplied when you BUY JOLT, but only if you buy the
    SUPER-EXPENSIVE
    Weblogic Enterprise. Why have a Jolt product to begin with if you do not
    supply the whole
    functionality needed to merge Java and Tuxedo, which is the supposedly the
    product's goal?
    Carl J. Collin
    Walgreen Co.
    [email protected]
    "Manoj SASIDHARAN" <[email protected]> wrote in message
    news:[email protected]...
    >
    Hello Carl J. Collin,
    I can suggest a workaround to make things happen.
    From the browser call a Tuxedo service (synchronously) using Jolt whichinternally
    does the following:
    SVC(TPSVINFO...)
    SvcName="Name of Service Currently called from Browser..";
    ret=tpacall(SvcName,... TPNOREPLY);
    tpreturn(...);
    HTH
    regards
    MS
    "Carl J. Collin" <[email protected]> wrote:
    We are currently using Jolt 1.2 connected to a Tuxedo 6.5 system on
    Solaris.
    We are porting a Windows thick application to browser. We call a Tuxedo
    service
    with the old system that takes around 10 minutes to complete. Weobviously
    call this
    asynchronously. When we call this same service using Jolt it"times-out".
    Which makes
    sense since Jolt 1.2 seems to only allow synchronous ( aka
    Request-Response ) calls.
    I have looked at the documentation for Jolt 1.2, 1.2.1, the Jolt with
    Tuxedo
    7.1 and Tuxedo 8 and
    I cannot find an ability to make a Asynchronous call. However, I did
    find
    it in the API documentation
    for the Jolt that comes with Weblogic Enterprise 5.1 and above? Are
    these
    APIs available without
    Weblogic Enterprise? Is there a special Jolt add-on package?
    Thanks for the info,
    Carl J. Collin
    Walgreen Co.
    [email protected]

  • Wait on Asynchronous Call - why so long?

    LV 2013, Win7
    I have a window which comes and goes, during program operation.
    This window has 72 subPanels, each containing a reentrant copy of the same VI for a "block".  I insert the VI in the subpanel, and then run the VI with a CALL and FORGET call.
    When the user closes the window, all the block VIs terminate, and the window closes.  I don't care if the closing behind the scenes still goes on after the window disappears.
    But when the user QUITs the program, with this window up, I need to make sure that all the block VIs have terminated before I shut down other things (close files, etc).
    To that end, I changed the CALL and FORGET to a CALL and COLLECT operation, and installed a WAIT ON ASYNCHRONOUS CALL for each instance at the end of the big window code.  This is after the blocks have been commanded to die (via an event).
    I see from the debugging file (a portion is pictured) that it takes over 1000 mSec to wait for all the instances to die.
    The thing is, if I change that "0" to "1000", then what I would expect is that the actual waiting time would drop to < 100 mSec.
    My thinking is that during that timed wait, the blocks would be dying anyway, so it would take less time to actually wait on them.
    But when I do that, nothing really changes.  The listed time is still over 1000 mSec.
    If I limit the number of blocks to 12, the time is 97 mSec, for 24 it is 185, for 36 it is 576, and so on - it's proportional to the number of blocks.
    So, what is really happening?  If it's just waiting on things to die, why doesn't the timed wait affect the numbers?
    I originally  (when I used CALL and FORGET) kept track of how many were opened and how many were closed and waited until that became zero, but this is a cleaner way of doing it, at least in theory.
    Am I missing something?
    Steve Bird
    Culverson Software - Elegant software that is a pleasure to use.
    Culverson.com
    Blog for (mostly LabVIEW) programmers: Tips And Tricks
    Solved!
    Go to Solution.

    Have you checked how long the first loop of the For loop takes, versus all of the others?
    So I tried that, several times - the pattern is the same as shown here.  The first few lines are from the blocks themselves, it's the last thing they do.
    Looks like there's ONE case where there's a bigger delay than expected,  All told, this takes about 600 mSec.
    Maybe the debugging process affects that (* waves to Mr. Heisenberg * )
    The 300-400 mSec is back to where I first saw this delay.  Apparently the unreleased refs clog up the system enough to drive it up to 1000 (or 2000 mSec as I saw in one case).
    Still, I don't understand why a timed delay ahead of the WAITS doesn't affect the WAIT time.
    But I guess that's not important.  It must be actually doing more work than simply asking "is it dead yet?"
    Steve Bird
    Culverson Software - Elegant software that is a pleasure to use.
    Culverson.com
    Blog for (mostly LabVIEW) programmers: Tips And Tricks

  • How can we tell if a VI is already running before calling Start Asynchronous Call?

    The new Start Asynchronous Call node is awesome for spawning multiple instances of reentrant VIs.  However, I've stumbled a bit in using it for non-reentrant VIs.  The old practice of using the "Run VI" method would allow us to check the Execution.State of the VI before invoking the method to run it.  That way if the State was Running or Run Top Level, we could skip the invoke node and just use a property node to open its front panel.  WIth the Start Asynchronous Call node, it looks like we have to use a strictly typed static VI reference, and when we open the VI reference, the VI gets reserved and its Execution.State = Running.  So, how can I tell if it is not just reserved by the thread but actually executing before making a redundant Start call?
    By the way, the redundant Start has interesting behavior.  It will actually cause the targeted VI to be executed again after it stops.  Even if you hit the Abort button on the target VI, it will immediately execute again and again equal to the number of times the Start Asynchronous Call node was run.  There's nothing wrong with that, and I suppose the simple answer is to just go back to using the old "Run VI" method.  It's just that the ability to wire up those inputs directly to the connector pane is so nice.  Perhaps I am missing something obvious.  Oh, I am referring to the Call and Forget mode (0x80).
    Thanks,
    Dan
    Solved!
    Go to Solution.

    Just throwing it out there, I know I'm a year.5 late on this but if it's a psuedo-modal dialog or some other window that you only want a single instance visible at one time, you can check the FP.State property on the strictly typed vi reference. If it's loaded and visible to the user it will be "Standard", if it was closed or not opened prior then the state will be "Closed".
    I think the standard behavior of serializing execution on another thread would be great for doing a pre-set number of iterations with a sub vi in a non-blocking sort of way but for sub vi's meant for UI interaction checking FP.State works.
    Philip
    CLD

  • Asynchronous call in OSB

    Hi, I was trying to call a business service in an asynchronous way. I used publish action but I can´t get the response of the service. It seems it just work with one-way services like a file adapter. Any help please.

    When you say you are making an asynchronous call, then you would not care about the response.
    If you are looking for a response from the service then you should use a service callout instead.
    Let me know if my understanding is incorrect.
    Thanks,
    Patrick

  • SOAP Receiver Adapter (Asynchronous Call)

    Hi All,
    Scenario is  Proxy to Webservice asynchronous call.
    Scenario configuration is done as follows.
    1) Imported the WSDL and using as a asynchronous inbound interface.
    2) SOAP receiver channel is configured with the target URL & soapAction as given in the WSDL as (soap address & soap Action).
    3) Configured the proxy server details as required.
    SOAP channel is successfully sending the message to the application as DLVD.
    But the issue is target application  not receiving the data. What could be the reason ? I am wondering , i have tried with the external tool like Altova XML Spy & SOAP UI  sending data to the webservice & it's  working fine.
    Please suggest me if anything which can help to resolve this issue.
    Thanks
    Ashwin

    In this case you can do the following:
    1. start your tcpmon or TCPGateway, add there a listener e.g. on port 9090
    2. configure the target URL in TCPGateway for this listener
    3. configure the target URL in your XI SOAP Receiver Adapter to http://<ip of TCPGateway>:9090
    4. now execute the scenario again in XI
    (make sure XI can reach your TCP Gateway, e.g. check Proxy)
    I have used this method successfully for error tracking. In some cases it is necessary to add 2 listeners in TCPGateway and route e.g. 9090 to 9191 and from there to the end (I did not analyse why).
    Then you will be able to see what XI is really sending and you will see the full response from the partner side. You can then compare the XI request data with those which are sent via soapUI. This should give a clue about the problem.
    CSY

  • Problems with a call transaction

    Hi, I'm having some problems with a call transaction and I cannot understand why. I put A in the mode, and I am seeing the dynpros and I am pressing enter it works perfectly but when I use mode N it tells me that there is not information for one of the dynpros and it doesn't work. Does anybody know the problem and how to solve it??
    Thanks in advance

    Hi,
    First of all thank you very much for your time.
    I am using FB05 and the problem is in dynpro SAPLKACB 0002, and it says that batch input data doesn't exist. Here is the code, maybe you can see what is happening
    LOOP AT t_resumen WHERE belnr = t_batch-belnr AND
                                ( contador = 3 OR contador = 4 or CONTADOR = 5 ).
          READ TABLE t_clave WITH KEY belnr = t_resumen-belnr.
          d_clave = t_clave-bschl.
          i = i + 1.
          CASE i.
            WHEN 1.
              PERFORM bdc_dynpro  USING 'SAPMF05A'    '0700'.
              PERFORM bdc_field   USING 'BDC_OKCODE'  '/00'.
              PERFORM bdc_field   USING 'RF05A-NEWBS' t_resumen-bschl.
              PERFORM bdc_field   USING 'RF05A-NEWKO' t_resumen-hkont.
              PERFORM bdc_field   USING 'BDC_OKCODE'  '/00'.
              PERFORM bdc_dynpro  USING 'SAPMF05A'    '0300'.
              PERFORM bdc_field   USING 'BDC_OKCODE'  '/00'.
              j_wrbtr = t_resumen-wrbtr.
              REPLACE '.' WITH ',' INTO j_wrbtr.
              PERFORM bdc_field   USING 'BSEG-WRBTR' j_wrbtr.
              PERFORM bdc_dynpro  USING 'SAPLKACB'    '0002'.
              PERFORM bdc_field   USING 'BDC_OKCODE'  '/00'.
            WHEN t.
              PERFORM bdc_dynpro  USING 'SAPMF05A'    '0300'.
              PERFORM bdc_field   USING 'RF05A-NEWBS'  t_resumen-bschl.
              PERFORM bdc_field   USING 'RF05A-NEWKO'  t_resumen-hkont.
              PERFORM bdc_field   USING 'BDC_OKCODE'  '/00'.
              j_hkont = t_resumen-hkont.
              j_clave = t_resumen-bschl.
              PERFORM bdc_dynpro  USING 'SAPMF05A'    '0300'.
              PERFORM bdc_field   USING 'BDC_OKCODE'  '=BU'.
              j_wrbtr = t_resumen-wrbtr.
              REPLACE '.' WITH ',' INTO j_wrbtr.
              PERFORM bdc_field   USING 'BSEG-WRBTR' j_wrbtr.
              PERFORM bdc_dynpro  USING 'SAPLKACB'    '0002'.
              PERFORM bdc_field   USING 'BDC_OKCODE'  '/00'.
            WHEN OTHERS.
              PERFORM bdc_dynpro  USING 'SAPMF05A'    '0300'.
              PERFORM bdc_field   USING 'RF05A-NEWBS'  t_resumen-bschl.
              PERFORM bdc_field   USING 'RF05A-NEWKO'  t_resumen-hkont.
              PERFORM bdc_field   USING 'BDC_OKCODE'  '/00'.
              j_hkont = t_resumen-hkont.
              j_clave = t_resumen-bschl.
              PERFORM bdc_dynpro  USING 'SAPMF05A'    '0300'.
              PERFORM bdc_field   USING 'BDC_OKCODE'  '/00'.
              j_wrbtr = t_resumen-wrbtr.
              REPLACE '.' WITH ',' INTO j_wrbtr.
              PERFORM bdc_field   USING 'BSEG-WRBTR' j_wrbtr.
              PERFORM bdc_dynpro  USING 'SAPLKACB'    '0002'.
              PERFORM bdc_field   USING 'BDC_OKCODE'  '/00'.
          ENDCASE.
            READ TABLE t_porcentajes WITH KEY gjahr = t_resumen-zzbad
                                           zzbtd = t_resumen-zzbtd.
            IF j_hkont = t_porcentajes-cfacpr.
              PERFORM bdc_field   USING 'COBL-PRCTR' t_porcentajes-prctrfac.
              PERFORM bdc_field   USING 'COBL-ZZBTD' t_resumen-zzbtd.
              PERFORM bdc_field   USING 'COBL-ZZBAD' t_resumen-zzbad.
            ELSEIF t_resumen-hkont = t_porcentajes-cadmin.
             PERFORM bdc_field   USING 'COBL-KOSTL' '20801'.
            ELSEIF t_resumen-hkont = t_porcentajes-creca.
             PERFORM bdc_field   USING 'COBL-KOSTL' '20401'.
            ELSE.
              IF d_clave = 01 OR d_clave = 04 OR d_clave = 40 OR d_clave = 09.
                IF j_hkont >= 424001 AND j_hkont <= 424005.
                  PERFORM bdc_field   USING 'COBL-PRCTR' 'DUMMY'.
                ELSEIF j_hkont >= 424601 AND j_hkont <= 424605.
                  IF j_clave = 40.
                    PERFORM bdc_field   USING 'COBL-PRCTR' 'DUMMY'.
                  ENDIF.
                ENDIF.
              ELSEIF d_clave = 11 OR d_clave = 12 OR d_clave = 14 OR d_clave = 50.
                IF j_hkont >= 424001 AND j_hkont <= 424005.
                  PERFORM bdc_field   USING 'COBL-PRCTR' 'DUMMY'.
                ELSEIF j_hkont >= 424601 AND j_hkont <= 424605.
                  IF j_clave = 50.
                    PERFORM bdc_field   USING 'COBL-PRCTR' 'DUMMY'.
                  ENDIF.
                ENDIF.
              ENDIF.
    *Fin modificacion marzo 2007.----
              PERFORM bdc_field   USING 'COBL-ZZBTD' t_resumen-zzbtd.
              PERFORM bdc_field   USING 'COBL-ZZBAD' t_resumen-zzbad.
              PERFORM bdc_field   USING 'COBL-ZZBTT' t_resumen-zzbtt.
              PERFORM bdc_field   USING 'COBL-ZZBTU' t_resumen-zzbtu.
              PERFORM bdc_field   USING 'COBL-ZZBTS' t_resumen-zzbts.
              PERFORM bdc_field   USING 'COBL-ZZBAG' t_resumen-zzbag.
              PERFORM bdc_field   USING 'COBL-ZZBRE' t_resumen-zzbre.
              PERFORM bdc_field   USING 'COBL-ZZBC8' t_resumen-zzbc8.
              PERFORM bdc_field   USING 'COBL-ZZBC9' t_resumen-zzbc9.
            ENDIF.
        ENDLOOP.

  • Asynchronous call to web servie using pl/sql

    1) How do I make an aynschronous call uisng pl/sql. I am currently using utl_http.
    But it is expecting me to get repsonse using utl_http.get_response.
    Is there anyway I can make asynchronous call to web service? Please give me examples if any.

    Web services are NOT asynchronous as the HTTP application protocol is not asynchronous. A web service cannot (as an sync callback event) initiate a call to the web browser (client app) - as the web browser does not have a tcp listening endpoint. The web service must respond using the EXISTING tcp session established via a connect() call from the browser.
    PL/SQL code executes in a dedicated or shared server process. Execution is serialised. So asynchronous calls are not supported and non-existent. Again, async processing requires some from of notification (callback event, message handler or signal interrupt handler) to inform the main process  (while it is executing code), that the async call has completed.
    And this does not exist in PL/SQL processing for very good reasons. (Oracle would have been one of the most unstable products on the market if it did support async PL/SQL processing, as 99% of developers would not understand how to use it correctly, and would have severely violated the fundamental concurrency and MVCC principles)
    What can be done via PL/SQL (and SQL) is parallel processing - not to be confused with async processing. The API in PL/SQL to use for that is DBMS_PARALLEL_EXECUTE. You can also self roll this using DBMS_JOB or DBMS_SCHEDULER.
    No default IPC exists for inter process communication between parallel processes. If IPC is needed, it needs to be manually coded using a standard SQL table (where row locking provides for mutexes and semaphores), or something like DBMS_PIPE.

  • Strange repaint behaviour with JList & Keyboard actions

    Hi everyone,
    This is my first post to the forum. You guys have been a great help in the past and I hope to contribute more in the future.
    Anyways, I've encountered some strange repainting behaviour with a JDialog that uses a JList and a JButton. The dialog is fairly straight-forward and basically this is how it works (like an open file dialog - yes I'm implementing my own filechooser of sorts):
    * JList lists a number of simple items that the user can select from.
    * Once a selection is made, an Open button (JButton) is enabled.
    * <ENTER> key is registered (using registerKeyboardAction()) with a JPanel which is used as the main content pane in the dialog.
    * The user can either click on the Open Button or hit the <ENTER> key which then closes the dialog and runs whatever logic that needs to.
    Now, the repaint problem comes in when:
    1. User selects an item.
    2. User hits the <ENTER> button
    3. Dialog closes
    4. User brings the dialog back up. This entails reloading the list by removing all elements from the list and adding new ones back in.
    5. Now... if the user uses the mouse to select an item lower in the list than what was done in step #1, the selection is made, but the JList doesn't repaint to show that the new selection was made.
    I didn't include a code sample because the dialog setup is totally straight-forward and I'm not doing anything trick (I've been doing this kind of thing for years now).
    If I remove the key registration for the <ENTER> key from the dialog, this problem NEVER happens. Has anyone seen anything like this? It's a minor problem since my workaround is to use a ListSelectionListener which manually calls repaint() on the JList inside the valueChanged() method.
    Just curious,
    Huy

    Oh, my bad. I'm actually using a JToggleButton and not a JButton, so the getRootPane().setDefaultButton() doesn't apply because it only takes JButton as an input param. I wonder why it wasn't implemented to take AbstractButton. hmmm.

Maybe you are looking for