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,
ImranHi 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 -
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 FunctionHi 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. -
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 -
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 -
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
AshwinIn 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 advanceHi,
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,
HuyOh, 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
-
How do i authorize my computer, help!!!
How do I authorize my computer??
-
Probably a stupid question, but pre-FCP X I was able to add a slug and a mask to a clip and I could highlight (with keyframing too) any object. This was great for highlighting an athlete in a sports highlight video. I'm baffled as to how to do this w
-
Hey guys, I´m getting started with the myRIO-1900 and try to connect it with my car via X-CAN module with OBD-II BD9 cable to collect and record data from my car. I've installed Labview 2014, X-CAN, realtime module in my computer without any problem.
-
VIEW_MAINTENANCE_CALL and SORT
Hey everyone. I'm using VIEW_MAINTENANCE_CALL to display/change entries from a client table. Is there any way i can sort the entries before displaying it? Thanks, Mário
-
can i run a printer off the ethernet cable connection without hurting the imac or is the ethernet slot only for internet connection?