Generating a custom signal through a simulated device
Hello,
I am acquiring 6 channels of strain gauge data simultaneously through the SCXI-1000 chasis with the SCXI 1520 card. I want to create a synthetic input signal so I can test my programming structure. I created a simulated device and simulated channels, but I cannot figure out how to control the simulated signal that is being generated. I would like to be able to specify a waveform, frequency, and amplitude of the simulated data so that I can test some special cases of my application. i cannot use the 'simulate signal' subvi because my code needs to remain unchanged to truly test this. please let me know if this is possible through a simulated device. your help is much appreciated.
thanks,
jt
jt,
You can write your own simulated signal source. Make a copy of the DAQ Read VI with a different name. This gives you a VI with the same connector pane so it can be substituted into your program. Open the simulation VI and remove all of the DAQ stuff. Put your simulation code in its place. Substitute the simulation VI for the DAQ Read VI in the main program.
Now, how do you "specify a waveform, frequency, and amplitude of the simulated data?"
You can add a cluster with controls for all those variables to the connector pane if there is a terminal available. Or you can use an Action Engine. Call the action engine with the command set to Write in your setup code or in a separate VI for the purpose. Inside the simulated DAQ Read VI call the AE with the command Read to get the parameters for your simulation. Your flexibility with this approach is limited only by your imagination and your coding skills.
Lynn
Similar Messages
-
Hello all,
I've been trying to generate a customized signal on LabVIEW. It needs to be repeated periodically. I wrote a C-code and implemented it in the function block and put the block inside a while loop that is time-controlled using a tick counter. The signal works properly, when I tried plotting it within the while loop. However, when I try to read the data from outside the while loop, I am unable to. Is there any way I can extract the data outside the while loop or use a different timing mechanism that doesn't involve a while loop?
I tried using a queue but the values weren't passed outside the loop even when I used the queue.
Thanks!
sirius18
Attachments:
C++ Loop (1).vi 31 KBWow, you're determined to stick to a text based programming language even inside a LabVIEW block diagram!
I'm not sure your VI is working the way you want it to. There is nothing slowing down the while loop. It will loop as fast as the CPU can handle.
The timing primitives on your block diagram are just giving a millisecond timer value, they aren't providing any periodic timing.
Your formula node is supplying 1 value pair at a time, these pairs need to be collected somehow. When the XY graph is placed on the the block diagram a "Build XY Graph" express VI is also added to collect the XY data points for you, otherwise you will only ever see a single value pair. The bit that isn't obvious is that you need to wire the "reset" input to the "Build XY Graph" express VI. Otherwise its default value is True and it resets at every iteration and you only ever see one value.
There is a "First Call?" primitive you can use to reset the Build XY Graph VI once at the start and then switch over to collecting data.
I've also added a "Wait millisecond multiple" inside loop to slow it down and give you consistently timed data points. Without it you will get countess millions of unpredictably timed data points a second.
I think this will get you to the next step.
Troy
CLDEach snowflake in an avalanche pleads not guilty. - Stanislaw J. Lec
I haven't failed, I've found 10,000 ways that don't work - Thomas Edison
Beware of the man who won't be bothered with details. - William Feather
The greatest of faults is to be conscious of none. - Thomas Carlyle
Attachments:
C++ Loop (2).vi 32 KB -
Is PCI-6036E suitable for me to send out analog signal to controll a device?
Hello
I need to controll and generate an analog signal to control a nanopositioning stage and I would like to know which one will be better using PCI-7344 board through UMI-7764 or using PCI-6036E board through SCC-68 I/O connector. additional question, I have actualy four wiring pigtailed with LEMO connector, the LEMO connector have two PINs which will be connected to the device, and the 4 wires which will be connected to the signal conditioner, the two pins Ain+ and Ain- with respect to the device, the other 2 wires one is the shield ground and the other one is ground also, the device is CGND, shall I connect the only two differential wires which will be connected in the analog out at the UMI-7764 snd the other one in AOGND at UMI-7764, and the other 2 will be ignored. please may I get any help or advice with full of thanks.
Aneece
Message Edited by Aneece on 04-09-2009 10:22 AMThe XXXXX's means it's recording sys-ex information from somewhere, probably from your Yamaha. It also means you're probably recording onto an audio instrument track, or a MIDI track, not an audio track.
Without assuming too much on my end, I would suggest, obviously, of course, that you spend a day or two really learning how Logic operates. Learn the terminology, really digest it, and take baby steps.
Plug in one MOTU interface, and get audio in and out of that. Then plug-in the Yamaha, and do the same. Once you get that under your belt, set up the aggregate device, and by that point, you should be well on your way.
Focus on the "Getting Started" guide, and after you have a handle on that, try pumping audio in and out of the interfaces, one interface at a time. -
Hello,
I am trying to generate a digital signal which can be controlled in terms time i.e. Switching ON for 10 minis off for 5 minutes. I tried to generate a digital signal which is going high but unable to control it. As I am the beginner in labview any kind of help is appreciated.
Please see the attachment for the developed block diagram
Attachments:
digital signal generation.vi 17 KBIt appears that all you posted is one of the shipping examples. Is that all you've tried? You can't control it because you're not actually doing anything inside the loop. You're simply setting the value high before the loop starts, and not changing it in the loop. What kind of device do you have? Is it software controlled? If so, you will need to keep track of the time inside the loop. You can use the Elapsed Time VI to do this. Attached is a simple example to get you started to see how this can be done. I'm sure you can figure out how to integrate what you did and what I've shown you.
To learn more about LabVIEW it is recommended that you go through the introduction material, tutorial(s), and other material in the NI Developer Zone's Learning Center which provides links to other materials and other tutorials. You can also take the online courses for free.
Attachments:
Switching signal.vi 29 KB -
Apple TV worked until today. Message says unsupported signal check your output device. I have checked hdmi cable with another device and it's fine. Put on a different tv and same message. Went out yesterday and bought a new Apple TV and same problem.
Which TV do you have.
You may wish to try the following:
Press and hold the menu and the up button simultaneously on the remote for six seconds, the Apple TV should then begin to cycle through the various resolutions available to it at 20 second intervals.. If you see a picture appear up on your screen, use the remote to scroll down to the OK option and select it. -
Sending and receiving Signal through Internet connection
Hello,
I want to send data that is a continuous generated signal through internet.
I want to transmit this signal live through internet technology.
I don't have any background of web development
Can anyone suggest me how could I send and receive data using internet.
RegardsHello,
I have made a basic VI using Network Stream, it send Random Number generator which i want to plot on a waveform chart on the other side.
But when i run the VI on continuous mode it gives an error as End point broken on the client side.
Kindly guide where i am lagging.
Regards
Attachments:
streams.vi 14 KB -
Changing input buffer size slows down simulated device?!?
hi,
my basic problem is having a 200279 buffer overflow.
for a quick fix I increased the buffer size using DAQmxSetBufInputBufSize, but now the signal coming from the simulated device is much slower.
how can it be?
thanx!Hi,
Buffer overflow errors occur when data is written to the buffer faster than it is being read off of it. Buffer underflow errors occur when data is being read off the buffer faster than new data is being added. In order to avoid either of these, a general rule of thumb for NI devices is to acquire around 1/10th of a second of data. For example, for a sample rate of 100 Hz, set samples to read at 10 samples.
Is it possible for you to decrease the sample rate? -
How to Generate a Custom Message for A Custom Code.
Hello,
Can anyone guide me on this -
Application : 11.5.10.2
We have a cutom Trigger through which we want to display a custom message.
We have re-generated the .msb, but it seems that something is missing.
Following are the Steps We have followed to generate a custom message.
1. Responsibility "Application Developer"
2. Go to Applications
3. Select Message
4. Define a new custom message.
5. Save
6. Run Request " Generate Message"
Now when the trigger gets fired , we are not able to see our Custom message.
How do we call this messge in the custom code.
Pl. help on this , also can i get some reference note id's on this.
Thanks in advance.
Regards,
JennyCREATE OR REPLACE TRIGGER KPC_RCV_TRANSACTIONS_INTERFACE
AFTER INSERT OR UPDATE ON APPS.RCV_TRANSACTIONS_INTERFACE
REFERENCING NEW AS NEW OLD AS OLD
FOR EACH ROW
--- This Trigger Validates following things
--- 1. Creation date is not modified and is greater than system date.
--- 2. RTV should not be possible before ERS is generated.
--- 3. Inspection should not be possible through Deliver Transactions Responsibility
--- 4. Delivery of Material should not be possible through Inspection Responsibility
--- 5. Item is Excisable and Excise Invoice No Or Excise Invoice Date is Missing
--- 6. Only Inspected and Accepted material is Delivered to Subinventory
--- 7. Check for Existance of 57F4 for Subcon Job Receipts
--- 8. Check Taxes are not Missing
--- 9. Check Taxes are Correct
--- Declaring The Variables
DECLARE
v_grade number := 0;
v_employee_id number := 0;
v_responsibility varchar2(100) := 'Z';
v_closed_taxes_count number := 0;
v_taxes_count number := 0;
v_invoiced_status_code varchar2(01) := 'N';
v_57f4_id number := 0;
l_date_ok varchar2(01) := 'N';
l_gate_date_ok varchar2(01) := 'N';
l_cenvatable_flag varchar2(01) := 'N';
l_excise_ok varchar2(01) := 'N';
l_rtv_ok varchar2(01) := 'N';
l_inspection_ok varchar2(01) := 'N';
l_delivery_ok varchar2(01) := 'N';
l_rej_delivery_ok varchar2(01) := 'N';
BEGIN
-- Get Looged in Responsibility Name
begin
SELECT upper(responsibility_name)
INTO v_responsibility
FROM apps.fnd_responsibility_vl
WHERE responsibility_id = apps.fnd_global.resp_id;
EXCEPTION
WHEN NO_DATA_FOUND THEN
v_responsibility := 'Z';
WHEN OTHERS THEN
v_responsibility := 'Z';
END;
--- Modifications Done by SMT to Bypass checking for following Users
if (apps.fnd_global.user_id < 1091) then
return;
end if;
--- if (apps.fnd_global.user_id in (1090,1111,1112,1126,1540,1591,1570,1881)) then
--- return;
--- end if;
---- Collect the Information Required from Other Tables
--- Check whether item is cenvatable
l_cenvatable_flag := 'N';
begin
select 'Y'
into l_cenvatable_flag
from apps.ja_in_po_line_location_taxes jipll
where upper(jipll.tax_type) in ('EXCISE','CVD')
and jipll.po_header_id = :new.po_header_id
and jipll.po_line_id = :new.po_line_id
and jipll.line_location_id = :New.po_line_location_id;
EXCEPTION
WHEN NO_DATA_FOUND THEN
l_cenvatable_flag := 'N';
WHEN OTHERS THEN
l_cenvatable_flag := 'N';
end;
--- Check whether Taxes are closed
v_closed_taxes_count := 0;
begin
select count(distinct jit.tax_id)
into v_closed_taxes_count
from apps.ja_in_tax_codes jit,
apps.ja_in_po_line_location_taxes jipl
where nvl(jit.end_date,sysdate)< sysdate
and jit.tax_id = jipl.tax_id
and po_header_id = :new.po_header_id
and po_line_id = :new.po_line_id
and line_location_id = :new.po_line_location_id;
EXCEPTION
WHEN NO_DATA_FOUND THEN
v_closed_taxes_count := 0;
WHEN OTHERS THEN
v_closed_taxes_count := 0;
end;
--- Check Existance of Taxes
v_closed_taxes_count := 0;
begin
select count(distinct jit.tax_id)
into v_taxes_count
from apps.ja_in_tax_codes jit,
apps.ja_in_po_line_location_taxes jipl
where nvl(jit.end_date,sysdate)< sysdate
and jit.tax_id = jipl.tax_id
and po_header_id = :new.po_header_id
and po_line_id = :new.po_line_id
and line_location_id = :new.po_line_location_id;
EXCEPTION
WHEN NO_DATA_FOUND THEN
v_taxes_count := 0;
WHEN OTHERS THEN
v_taxes_count := 0;
end;
--- Modifications Done by SMT to Get Invoice Status Code of the Original Transaction
v_invoiced_status_code := 'N';
BEGIN
SELECT 'Y'
INTO v_invoiced_status_code
FROM apps.ap_invoices_all ap,
apps.rcv_shipment_headers rcv
WHERE ap.invoice_num like '%'||rcv.receipt_num||'%'
AND ap.org_id = rcv.ship_to_org_id
AND rcv.shipment_header_id = :NEW.shipment_header_id;
EXCEPTION
WHEN NO_DATA_FOUND THEN
v_invoiced_status_code := 'N';
WHEN OTHERS THEN
v_invoiced_status_code := 'N';
END;
--- RAISE_APPLICATION_ERROR(-200151,'Incorrect Transaction Date...');
--- Check the transaction_date is correct or not
l_gate_date_ok := 'Y';
IF ((:new.ship_head_attribute6 is null) or
(to_date(:new.ship_head_attribute7,'DD-MON-YYYY') < (sysdate-3)) or
(to_date(:new.ship_head_attribute7,'DD-MON-YYYY') > sysdate)) then
l_gate_date_ok := 'N';
END IF;
--- Check the transaction_date is correct or not
l_date_ok := 'Y';
IF (to_date(:new.transaction_date,'DD-MON-YYYY') < to_char(sysdate,'DD-MON-YYYY')) then
l_date_ok := 'N';
END IF;
--- Check whether Excise Invoice No and Excise Date is present
l_excise_ok := 'Y';
if (l_cenvatable_flag = 'Y' and
:new.ship_head_attribute1 is null and
upper(:new.destination_type_code) = 'RECEIVING') then
l_excise_ok := 'N';
end if;
if (l_cenvatable_flag = 'Y' and
:new.ship_head_attribute2 is null and
upper(:new.destination_type_code) = 'RECEIVING') then
l_excise_ok := 'N';
end if;
--- Check whether Inspection transaction is being made in correct Responsibility
l_inspection_ok := 'Y';
if (upper(:new.destination_type_code) = 'RECEIVING') then
if (v_responsibility like '%RECEIPT%QA%') then
l_inspection_ok := 'Y';
else
l_inspection_ok := 'N';
end if;
else l_inspection_ok := 'Y';
end if;
--- Check whether Delivery transaction is being made in correct Responsibility
l_delivery_ok := 'Y';
if (upper(:new.destination_type_code) in ('INVENTORY','SHOP FLOOR')) then
if (v_responsibility not like ('%RECEIPT%QA%')) then
l_delivery_ok := 'Y';
else
l_delivery_ok := 'N';
end if;
else l_delivery_ok := 'Y';
end if;
--- Check whether RTV is made prior to generating the ERS Invoice
l_rtv_ok := 'Y';
if (upper(:new.transaction_type) in ('REJECT','RETURN TO VENDOR')) then
if (v_invoiced_status_code = 'INVOICED') then
l_rtv_ok := 'Y';
else
l_rtv_ok := 'N';
end if;
else l_rtv_ok := 'Y';
end if;
--- Check Error and Display Proper error message
--- Transaction Date Error
if (nvl(l_date_ok,'N') != 'Y') then
apps.fnd_message.set_name('FND','Wrong GRR Date');
apps.fnd_message.raise_error;
end if;
--- Gate Entry Date Error
if (nvl(l_gate_date_ok,'N') != 'Y') then
apps.fnd_message.set_name('FND','KPC_RCV_CHEK:Wrong Gate Entry Date');
apps.fnd_message.raise_error;
end if;
--- Return CENVAT Error
if (nvl(l_excise_ok,'N') != 'Y') then
apps.fnd_message.set_name('FND','KPC_RCV_CHEK:Enter Excise Invoice No');
apps.fnd_message.raise_error;
end if;
--- Return Closed Taxex Error
if (nvl(v_closed_taxes_count,1) != 0) then
apps.fnd_message.set_name('FND','KPC_RCV_CHEK:Taxes Wrong');
apps.fnd_message.raise_error;
end if;
--- Return Taxes Missing Error
if (nvl(v_taxes_count,0) = 0) then
apps.fnd_message.set_name('FND','KPC_RCV_CHEK:Taxes Missing');
apps.fnd_message.raise_error;
end if;
--- Return from trigger, if Transaction Type = 'RECEIVE'
if (upper(:new.transaction_type) = 'RECEIVE') then
return;
end if;
--- Return Inspection Error
if (nvl(l_inspection_ok,'N') != 'Y') then
apps.fnd_message.set_name('FND','KPC_RCV_CHEK:Inspection Not Allowed');
apps.fnd_message.raise_error;
end if;
--- Return Material Delivery Error
if (nvl(l_delivery_ok,'N') != 'Y') then
apps.fnd_message.set_name('FND','KPC_RCV_CHEK:Delivery not Allowed');
apps.fnd_message.raise_error;
end if;
return;
END KPC_RCV_TRANSACTIONS_INTERFACE; -
Adapting custom driver for a robotic device that is interfacin​g with an FPGA
Hi,
I have a custom driver for a robotic device that I'd like to interface with an FPGA that is reading the digital encoder signals. I am a novice at programing driver files so any help would be much appreciated.
Thanks!Hey Xaq,
Well we had some other side projects to work on, and I'm no back working with the Windows/FPGA interface. I have one VI that is able to determine the relative position of the PHANTOM device. We're doing this by using 3 loops (one for each motor), running in parallel. So from LabView I have the x,y,z location of the device. As a first pass I want to build a dll that allows my C program to query to position at any time.
A couple problems here:
We probably need to break up the vi into several sub vi's, but I'm not sure where to start. Should the contents of each loop be placed into its own file?
Also we've just upgraded to 8.2, and I'm noticing the method for building dll's has changed significantly. I was not involved with the conversion process, and I'm a bit confused about the tree structure. Under My Computer we have the FPGA target (this comes from our original *.lep project). If I go to Build Specifications here, the only option is to create a new Source Distribution. If I go back up a level to My Computer, the Build Specifications allows me to build a shared library, but now I can't find the vi listed for the FPGA target.
Please let me know what I should do next. Thanks!
--Neel -
Recording a Line Signal through Motu 828mk3 into Cubase, Please help!
Hello everyone,
So i use Motu 828mk3, pair of m-audio monitors, I have logic but find Cubase more compatible for my style. I want to record a line in signal from my DJ mixer (allen&heath xone 62, pair of Pionner cdjs-1000).
So i connect the main outs (xlr to 1/8") into my Motu analog 1-2 ins. The meter on the Motu reads the signal, i expected the signal to come through my monitors although they are silent. I dont understand what blocks the Main Outs of my Motu.(If i play a song on itunes or a sample in cubase it plays through my monitors)
I set everything correct on my Motu Audio Setup, i put Default input as my Analog 1-2, and default main outs as Main Outs.
The Cue mixer which comes with Motu reads the in signal also. I tried to get it connected though cubase too, but im assuming that once i get motu release the signal through my outs i will be able to connect it through cubase.
Seems like i tried everything in my knowledge, now i need your help. Thank you folksYes i checked on My system preferences, everything is there for Motu, it reads the input and it send out sound from itunes youtube etc.
In cubase, well first i feel like the input should come out the Main outs of the Motu even if wouldnt want to record anything right ?
And yes in cubase everything seems to be set to record, drivers are motu on, setting are set, the handle (little speaker) is on to record, in preferences of Device setup motu it set active. -
I'm trying to create a development machine where we can test new code without using our physical hardware. I've followed this guide in setting up a simulated device. I can get to step 3.2b, but the device does not show up in the DAQ assistant. In MAX, the device self tests and self calibrates successfully, and when I open the test panels, I see some sort of signal. I assume this is a default simulated input since I haven't told the device to look for anything? Note that the two devices I'm trying to create show up in the Devices and Interfaces section, but that even after running Self-Calibrate, the Self-Calibration date is still unspecified.
When I try to test the device and create a voltage input according to the guide, I am unable to see either device in the DAQ task creator.
Steps 1 and 2 of this guide are obviously satisfied. Step 3 is not, but this is unsurprising since a simulated device wouldn't be found in the Device Manager anyways. Also, I am not running RT, so step 4 is satisfied.
Does anyone have any ideas?
Solved!
Go to Solution.That would be because the PXI 5124 is a digitizer not a analog input device. You need to use the NI SCOPE driver not NI DAQmx
Jeff -
I have completed the FPGA Module tutorial and I am attempting to generate an input signal, but i really don't understand exactly what is going on in the tutorial. I have two FPGA I/O nodes in the FPGA VI that are labeled "ADC 0 PORT A_I" and a corresponding one labeled Q as well. I'm assuming that these generate a sine wave that the tutorial used as the input signal. I want the input to be a sine wave with noise, and Mauricio suggested using DDS, but I don't know exactly how to add this to the existing FPGA VI that I created in the tutorial. Can anyone help me out on this one?
I'm a bit confused by your post. The FPGA Module tutorial guides you through the creation of a VI that acquires a signal. The I/O nodes labled "ADC 0 Port A I" and "ADC 0 Port A Q" are the I and Q elements of the acquired and downconverted signal. Just to be able to test this code, the HOST VI also configures one of the Analog Output channles in "Single Tone Mode" and therfore generates a sine through it. However, the FPGA is not doing anything to generate the sine tone, it's the DAC which is configured to generate the sine tone.
The I/O nodes that you need to use to generate signals are the "DAC 0 Data" and "DAC 0 TxEnabled". You will also need to use another clock, the "DAC 0 IQ Clk".You might want to read some documentation on the Analog Output and look at the IQ Output example. You can find the documentation on this post: http://forums.ni.com/ni/board/message?board.id=ifrio&message.id=140 -
Does DAQmx 7.5 allow the creation of an PXI-8464/2 as a simulated device?
I'm using 7.4, but could not find the 8464 in the list of possible simulated devices. Likewise for the PCMCIA CAN cards - can I create these as simulated devices in 7.5?
Thanks In Advance - MJD
Mike Dillon
Product Manager - Sound & Vibration Software
MTS Systems CorporationHi Mike,
The National Instruments' CAN hardware is supported through its own
driver, NI-CAN. The NI-DAQ (mx) driver software does not interact with
National Instruments' CAN hardware, only with data acquisition (DAQ)
devices.
However, NI-CAN 2.3
introduced a concept similar to the 'simulated device', where there are
two virtual ports (CAN256 & CAN257) that are connected to each
other. Unlike the 'simulated devices' of NI-DAQmx, those two virtual
ports/interfaces are not visible in the Measurement and Automation
Explorer.
For more information on the two virtual ports, please refer to the readme file of NI-CAN 2.3 or to the Frame to Channel Conversion section of Chapter 6, Using the Channel API of the NI-CAN Hardware and Software Manual.
-B2k -
Simulated Device Aliases should behave like other device Aliases
BUG submission:
Here is a nasty little problem: do the following:
Replace a USB device neatly:
Assign an Alias to a USB Device For simplicity use an NI USB 6008 "MFD1"
Remove the device from the system
Plug in a new NI USB 6008
Run the code here with "Device to rename" = MFD1
require no further action. This is desirable behavior! user's are happy (And if I went to nirvana and wrote the Devmon hook linked from the abResult: Old 6008 becomes "Dev1" New 6008 is MFD1 and existing applications calling resources for "MFD1" ove the swap happened at PnP device discovery)
Similar techniques can be used for a system where one developer delivered a solution using a DMM as "Dev1" and your app call's it "DMM1" Yup, Application specific hardware configuration has a lot of potential!
Contrast that with this:
Replace a Simulated USB device:
Assign an Alias to a Simulated USB Device For simplicity use an NI USB 6008 "MFD1"
Plug in a new NI USB 6008
Run the code here with "Device to rename" = MFD1
Ignore the runtime error
Result: Simulated 6008 remains "MFG1" New 6008 is "Dev1" and existing applications calling resources for "MFD1" are broken pointing to the simulated device.
Simillar problems ocurr when importing a *.nce file (No surprise since, the system configuration API lets LabVIEW act on system configuration methods and properties just the way MAX does)
This bug can be a showstopper for high mix test enviornments with staged test releases.
JeffIntaris wrote:
An alias for a usb device is probably intimately linked to the device serial number. If the devices have valid serial numbers (usb spec says its optional) then what you want wont work because windows will only ever recognise that device with pid vid and serial number exactly matching as being the same device.
Which is why I intercept the connection event and configure NI Device monitor to launch the custom exe to re-name the alias via the system configuration API for USB DAQmx devices (and launch a config import from file in a system rollcall sequence for system hardware that doesn't use the DAQmx expert)
With an alias I could care less about how the OS identifies the resource- its what they exist for
Jeff -
Hi!
Oracle 10.2.0.4 32, Apex 4.0.2, BIP 10.x Win.
I have to generate cca. 1000 reports in PDF (some customer bills) through BI Publisher print server.
PDF is defined through "Reports queries" and "Reports layouts" directly defined from Apex env. Report template is Word RTF file. Report query has one parameter:
and R.BILL_ID = :G_BILL_IDRunning from App page process it is not acceptable to do that because operation should takes hours and user cannot have open freezed browser.
So I found out "APEX_PLSQL_JOB.SUBMIT_PROCESS", which submit process in "job" as background process.
On page I left just "SUBMIT_PROCESS" call:
BEGIN
APEX_PLSQL_JOB.SUBMIT_PROCESS ('begin bills_pkg.generate_biils; end');
END;and put the whole logic in package. Small problem was to change Apex item (Application item), what I solved and change with:
APEX_UTIL.set_session_state(p_name => 'G_BILL_ID', p_value => cur_array(i).B_ID);for every record in cursor (I know his is not optimal but I just wanted to get working demo).
Call from package procedure is like (slightly modified from Apex page process which was working!):
open cur;
-- assign to have that value as parameter for !??
APEX_UTIL.set_session_state(p_name => 'G_BILL_ID', p_value => cur_array(i).B_ID);
print_one_report (cur_array(i).B_ID);
close cur;where "print_one_report" is mine procedure which saves PDF in db (proc was the same as before when was working but with too long result).
Unfortunately then all generated PDF reports (which I save in database) has 0 bytes length (I call the same procedure called as before when reports were generated but from Apex page process directly).
Seems that "G_BILL_ID" is no longer having correct values ... like session problems.
How to achieve and fix that (generate PDF from cursor) or is there any article how to manage BI Publisher printing with APEX_PLSQL_JOB.SUBMIT_PROCESS?
Rg,
Damir Vadas
P.S.
Should
apex_custom_auth.define_user_session (p_user, p_session_id );
apex_application.g_flow_id := p_app_id;might help?
Edited by: user1050751 on May 13, 2011 12:57 PMDamir,
Here is one way that you could get a background job to create your thousand reports (4 steps).
1st define your report query and layout within APEX (and BI-Publisher builder - Word plugin).
2nd write a custom process to call apex_util.get_print_document to generate your 1000 reports and place them in a blob column.
http://download.oracle.com/docs/cd/E17556_01/doc/apirefs.40/e15519/apex_util.htm#CHDDECIA
DECLARE
l_document BLOB;
l_security_group_id NUMBER;
CURSOR your_cur IS
SELECT...your thousand records
BEGIN
wwv_flow_api.set_security_group_id(p_security_group_id);
l_security_group_id := wwv_flow_api.get_security_group_id;
FOR your_rec IN your_cur LOOP
BEGIN
set any item values that will be referenced in your report query here
l_document := APEX_UTIL.GET_PRINT_DOCUMENT (p_application_id => v_your_app_id,
p_report_query_name => v_your_defined_report_name,
p_report_layout_name => v_your_defined_layout_name,
p_report_layout_type => 'rtf',
p_document_format => 'pdf',
--p_print_server =>
INSERT INTO your_table... id, l_document, file_name, mime_type...
COMMIT;
EXCEPTION
WHEN others THEN
write an error to a job log...
END;
END LOOP;
EXCEPTION
WHEN others THEN
write an error to a job log...
END;3rd write logic that will submit your custom process using APEX_PLSQL_JOB.SUBMIT_PROCESS or you can use dmbs_scheduler package.
4th write code to retrieve the report data from the blob column and display or distribute to users.
I've never called the apex_util.get_print_document recursively like this before so I'm not sure how it will perform. There are 4 versions of the get_print_document API so use the one that best fits your needs with performance in mind.
After writing the above logic I found this post that is very similar.
Scheduling reports with dbms_scheduler
An alternative method to what I've listed above is scheduling reports using the Bi-Publisher web service.
http://bipconsulting.blogspot.com/2010/04/how-to-schedule-report-with-bi.html
Regards,
Todd
Edited by: tfa on May 16, 2011 8:03 AM
Maybe you are looking for
-
in my control center there is no airplay option only air drop,,,,i dnt jailbreak,,but y that airplay is not comming in my control center?????
-
Next_day is not giving correct date
SELECT NEXT_DAY('01-apr-2013','monday') from dual; When i fire the above query it suppose to display '01-apr-2013' but it is displaying '08-apr-2013' which is wrong.. Pls suggest.
-
Hi We're using iPlanet 4.1 with Verisign certificates. Every now and again it seems to die, i.e. when you attempt to access it you get a 404. The process is still in the Unix process list and when you go into the admin server it claims that the serve
-
XCode-Debugging Where is Step Over/Into/Out
I have been racking my brain... and trying different things... but I just can't find them. I am "new" (as of two months ago), to this development environment. I am able to get into the debugger, with brakepoints... However, I can not step Over/Into/O
-
Fehlermeldung beim Installieren von CS6
Hallo, ich kann CS 6 nicht installieren, da der Installer nicht initialisiert werden kann. Der in der Fehlermeldung angegebene Adobe Support Advisor kann leider nicht nicht mehr heruntergeladen werden. Was kann ich tun? Mit besten Grüßen Volker