Need Help: Dynamically displaying parameter values for a procedure.
Problem Statement: Generic Code should display the parameter values dynamically by taking "package name" and "procedure name" as inputs and the values needs to be obtained from the parameters of the wrapper procedure.
Example:
a) Let us assume that there is an application package called customer.
create or replace package spec customer
as
begin
TYPE cust_in_rec_type IS RECORD
cust_id NUMBER,
,cust_name VARCHAR2(25) );
TYPE cust_role_rec_type IS RECORD
(cust_id NUMBER,
role_type VARCHAR2(20)
TYPE role_tbl_type IS TABLE OF cust_role_rec_type INDEX BY BINARY_INTEGER;
Procedure create_customer
p_code in varchar2
,p_cust_rec cust_in_rec_type
,p_cust_roles role_tbl_type
end;
b) Let us assume that we need to test the create customer procedure in the package.For that various test cases needs to be executed.
c) We have created a testing package as mentioned below.
create or replace package body customer_test
as
begin
-- signature of this wrapper is exactly same as create_customer procedure.
procedure create_customer_wrapper
p_code in varchar2
,p_cust_rec customer.cust_in_rec_type
,p_cust_roles customer.role_tbl_type
as
begin
//<<<<<---Need to display parameter values dynamically for each test case-->>>>>
Since the signature of this wrapper procedure is similar to actual app procedure, we can get all the parameter definition for this procedure using ALL_ARGUMENTS table as mentioned below.
//<<
select * from ALL_ARGUMENTS where package_name = CUSTOMER' and object_name = 'CREATE_CUSTOMER'
but the problem is there are other procedures exists inside customer package like update_customer, add_address so need to have generalized code that is independent of each procedure inside the package.
Is there any way to achieve this.
Any help is appreciated.
// >>>>
create_customer
p_code => p_code
,p_cust_rec => p_cust_rec
,p_cust_roles => p_cust_roles
end;
procedure testcase1
as
l_cust_rec customer.cust_in_rec_type ;
l_cust_roles customer.role_tbl_type;
begin
l_cust_rec.cust_id := 1;
l_cust_rec.cust_name := 'ABC';
l_cust_roles(1).cust_id := 1;
l_cust_roles(1).role_type := 'Role1';
create_customer_wrapper
p_code => 'code1'
,p_cust_rec => l_cust_rec
,p_cust_roles => l_cust_role
end;
procedure testcase2
as
l_cust_rec customer.cust_in_rec_type ;
l_cust_roles customer.role_tbl_type;
begin
l_cust_rec.cust_id := 2;
l_cust_rec.cust_name := 'DEF';
l_cust_roles(1).cust_id := 2;
l_cust_roles(1).role_type := 'Role2';
create_customer_wrapper
p_code => 'code2'
,p_cust_rec => l_cust_rec
,p_cust_roles => l_cust_role
end;
end;
Not possible to dynamically in a procedure, deal with the parameter values passed by a caller. There is no struct or interface that a procedure can use to ask the run-time to give it the value of the 1st or 2nd or n parameter.
There could perhaps be some undocumented/unsupported method - as debugging code (<i>DBMS_DEBUG</i>) is able to dynamically reference a variable (see Get_Value() function). But debugging requires a primary session (the debug session) and the target session (session being debugged).
So easy answer is no - the complex answer is.. well, complex as the basic functionality for this do exists in Oracle in its DBMS_DEBUG feature, but only from a special debug session.
The easiest way would be to generate the wrapper itself, dynamically. This allows your to generate code that displays the parameter values and add whatever other code needed into the wrapper. The following example demonstrates the basics of this approach:
SQL> -- // our application proc called FooProc
SQL> create or replace procedure FooProc( d date, n number, s varchar2 ) is
2 begin
3 -- // do some stuff
4 null;
5 end;
6 /
Procedure created.
SQL>
SQL> create or replace type TArgument is object(
2 name varchar2(30),
3 datatype varchar2(30)
4 );
5 /
Type created.
SQL>
SQL> create or replace type TArgumentList is table of TArgument;
2 /
Type created.
SQL>
SQL> -- // create a proc that creates wrappers dynamically
SQL> create or replace procedure GenerateWrapper( procName varchar2 ) is
2 procCode varchar2(32767);
3 argList TArgumentList;
4 begin
5 select
6 TArgument( argument_name, data_type )
7 bulk collect into
8 argList
9 from user_arguments
10 where object_name = upper(procName)
11 order by position;
12
13 procCode := 'create or replace procedure Test'||procName||'( ';
14 for i in 1..argList.Count
15 loop
16 procCode := procCode||argList(i).name||' '||argList(i).datatype;
17 if i < argList.Count then
18 procCode := procCode||', ';
19 end if;
20 end loop;
21
22 procCode := procCode||') as begin ';
23 procCode := procCode||'DBMS_OUTPUT.put_line( '''||procName||''' ); ';
24
25 for i in 1..argList.Count
26 loop
27 procCode := procCode||'DBMS_OUTPUT.put_line( '''||argList(i).name||'=''||'||argList(i).name||' ); ';
28 end loop;
29
30 -- // similarly, a call to the real proc can be added into the test wrapper
31 procCode := procCode||'end;';
32
33 execute immediate procCode;
34 end;
35 /
Procedure created.
SQL>
SQL> -- // generate a wrapper for a FooProc
SQL> exec GenerateWrapper( 'FooProc' );
PL/SQL procedure successfully completed.
SQL>
SQL> -- // call the FooProc wrapper
SQL> exec TestFooProc( sysdate, 100, 'Hello World' )
FooProc
D=2011-01-07 13:11:32
N=100
S=Hello World
PL/SQL procedure successfully completed.
SQL>
Similar Messages
-
Pass parameter values for stored procedure in URL, possible?
Hi, everyone, Our system is Apex4.0.2 in Linux CentOS 5 on Oracle 11GR2, here is the procedure:
create or replace procedure test_public(Cust_id integer)
is
begin
owa_util.mime_header( 'text/xml', FALSE );
owa_util.mime_header( 'application/octet', FALSE );
-- Close the HTTP Header
owa_util.http_header_close;
htp.p(DBMS_XMLGEN.getXML('SELECT * FROM demo_orders where customer_id='|| cust_ID));
end;
+/+
the call to the stored procedure is SUCCESSFUL when Test_public has no parameters, like:
http://myserver/apex/myschema.test_public (OK)
the question is : I want to pass 3 parameters into my stored procedure(on production procedure), just don't know How?
Any suggestions are greatly appreciatedThanks, Vee, definitely working, I do appreciate your help.
I have to use Stored Procedure in Apex: my goal is to setup RESTful web service for IOS and Andriod alike, but APEX RESTful only supports SQL Report ( the RESTFUL check Box goes away with PL/SQL returning Query report, much to my surprise), I need expose some data and the same time I need insert/update some data when the client consumes our data, a PL/SQL based Report will do, but as I found out only simple SQL report has RESTful service, a Before REGION Process will do too, but web service connection WON'T fire that process (normal page display will fire the process) so I'm out of option.... Man I wish APEX REST is not so so basic.... -
Need Help In Displaying Numberic Values In app.alert
How can I display a two placed decimal value in an app.alert, correctly?
app.alert("Invalid - " + this.getField("Sub-Total-2").value, 1);
In the above alert, Sub-Total-2 is defined with 2 decimal places, within its Text Field Properties. But if its value is 2.50, it is displayed as 2.5 from within the alert. And still othertimes, its value is displayed values such as 56.33333333, when it should display 56.40
Use util.printf()
-
Need help to reduce execution time for a procedure
the following procedure takes to long to execute and the server times out. each individual select works perfectly. It does not have to do with the SORT_AREA_SIZE/PGA_AGGREGATE_TARGET not being large enough. Possible rewriting it in funcions might help i don't know.
Thanks in advance
PROCEDURE GET_RM_WORKABILITY_BY_PLANT
(p_in_plantcode IN VARCHAR2,
p_in_statusnum IN NUMBER,
p_out_cursor IN OUT tcursor) AS
BEGIN
OPEN p_out_cursor FOR
select comp.segment1,
comp.description,
comp.organization_id,
nvl(sum(jot.qty), 0) job_qty,
nvl(moq.qty, 0) onhand_qty
from (select jdl.bill_sequence_id bsid,
sum(jdl.job_qty) qty
from job_detail_lines jdl
where jdl.job_stat = p_in_statusnum
and jdl.prod_plant_id = p_in_plantcode
group by jdl.bill_sequence_id) jot,
(select m.inventory_item_id,
sum(m.transaction_quantity) qty
from mtl_onhand_quantities m
where exists
(select 'x'
from plant_codes p1,
plant_codes p
where p.plant_code = p_in_plantcode
and p1.fac_id = p.fac_id
and m.organization_id = p1.organization_id)
group by m.inventory_item_id) moq,
(select msi.segment1,
msi.description,
msi.organization_id,
msi.inventory_item_id,
bom.bill_sequence_id
from bom.bom_bill_of_materials bom,
bom.bom_inventory_components bic,
mtl_system_items msi,
plant_codes pc
where pc.plant_code = p_in_plantcode
and msi.organization_id = pc.organization_id
and msi.item_type||'' IN ('PSSRM', 'PSRM')
and bic.component_item_id = msi.inventory_item_id
and ((bic.disable_date IS NULL AND SYSDATE>= bic.effectivity_date)
or (SYSDATE <= bic.disable_date AND SYSDATE >= bic.effectivity_date))
and bom.bill_sequence_id = bic.bill_sequence_id
and bom.organization_id = 102) comp
where moq.inventory_item_id(+) = comp.inventory_item_id
and jot.bsid(+) = comp.bill_sequence_id
group by comp.segment1,
comp.description,
comp.organization_id,
moq.qty;
END;Ok, so how does it perform if you use the bom info as an in-line query outer join to job detail lines?
SELECT v.plant_code,
v.segment1,
v.description,
v.organization_id,
v.inventory_item_id,
SUM (jdl.job_qty) job_qty
FROM (
SELECT pc.plant_code,
msi.segment1,
msi.description,
msi.organization_id,
msi.inventory_item_id,
bom.bill_sequence_id
FROM bom.bom_bill_of_materials bom,
bom.bom_inventory_components bic,
mtl_system_items msi,
plant_codes pc
WHERE pc.plant_code = p_in_plantcode
AND msi.organization_id = pc.organization_id
AND msi.item_type || '' IN ('PSSRM', 'PSRM')
AND bic.component_item_id = msi.inventory_item_id
AND bic.effectivity_date <= SYSDATE
AND ( bic.disable_date IS NULL
OR bic.disable_date >= SYSDATE)
AND bom.bill_sequence_id = bic.bill_sequence_id
AND bom.organization_id = 102
) v,
job_detail_lines jdl
WHERE jdl.prod_plant_id(+) = v.plant_code
AND jdl.bsid(+) = v.bill_sequence_id
AND jdl.job_stat(+) = p_in_statusnum
GROUP BY
v.plant_code,
v.segment1,
v.description,
v.organization_id,
v.inventory_item_id; -
Need help regarding the maximum limit for data type
Hi,
this is Sravan. for my application am inserting the bulk data in XML format into a column of Database table.
the sample inserted XML data will be in format... like
'<ACC count = "10">
<Acc ac_no = "1111111111" cn_nr = "US" eflag = "Y" />
<Acc ac_no = "1111111111" cn_nr = "US" eflag = "Y" />
<Acc ac_no = "1111111111" cn_nr = "US" eflag = "Y" />
<Acc ac_no = "1111111111" cn_nr = "US" eflag = "Y" />
<Acc ac_no = "1111111111" cn_nr = "US" eflag = "Y" />
<Acc ac_no = "1111111111" cn_nr = "US" eflag = "Y" />
<Acc ac_no = "1111111111" cn_nr = "US" eflag = "Y" />
<Acc ac_no = "1111111111" cn_nr = "US" eflag = "Y" />
<Acc ac_no = "1111111111" cn_nr = "US" eflag = "Y" />
<Acc ac_no = "1111111111" cn_nr = "US" eflag = "Y" />
</ACC>'
this data in XML can have more than 1000 accounts.
now, i need to take a Parameter value from XML node and write into a file. for this i have written a procedure by looping the Nodes from XML data and building Dynamic Query like..
if nvl(v_int, 0) > 0 then
v_sql := '';
for v_count in 1..v_int
loop
if v_sql is null then
v_sql := 'select extractvalue(empdetails, ''/ACC/Acc' || v_count ||'/@ac_no'')||extractvalue(empdetails, ''/ACC/Acc' || v_count
||'/@cn_nr'')||extractvalue(empdetails, ''/ACC/Acc' || v_count ||'/@eflag'') string from sample1';
elsif v_sql is not null then
v_sql := v_sql || ' union all select extractvalue(empdetails, ''/ACC/Acc' || v_count ||'/@ac_no'')||extractvalue(empdetails, ''/ACC/Acc' || v_count
||'/@cn_nr'')||extractvalue(empdetails, ''/ACC/Acc' || v_count ||'/@eflag'') string from sample1';
end if;
end loop;
end if;
i will get this variable "v_int" from <ACC count = "10"> ACC count Attribute, here 10 is the value for v_int variable but in real time the variable value can be more than 1000.
at the time of Building Dynamic Query I make using the Variable v_SQL which is of Data Type "Long",
this variable stores dynamic query which is build at the time of executing procedure but this v_sql Variable is throughing Exception that ....
"numeric or value error Character String Buffer is Too Small"... but Long Data type will store upto 2GB..
this variable cant able to hold much data which is dynamically build.
will you please help me to resolve this issue Or will u suggest me another method to pick the data from XML column.
thanks,
sravan.user11176969 wrote:
i changed the code, now its working fine.
direct assigning the dynamic query to a Clob variable raised error.
for dynamic query building i used another variable and assigned this variable value to actual query variable.Nice! -
I think I need help with driver (software) settings for D110a
I think I need help with driver (software) settings for D110a all-in-one
Product: D110a all-in-one
OS: Windows XP Professional
Error messages: None
Changes before problem appeared: None--new installation
The quality of photo images (mostly JPG files) in printouts is awful even though the files display beautifully on the PC screen. I am using
IrfanView software for displaying/printing. As far as I can tell, IrfanView is not the problem.
When I print the same images on a Deskjet 5150 attached to a different PC also running XP Pro and IrfanView, the quality of the printouts is at
least acceptable, Some would probably say good or very good.
It's dificult to explain in words the problem with the printouts. A picture of really pretty vegetables (squashes, tomatoes, watermelon, etc) comes
out much too red. Moreover, the red, which appears shaded on the screen, seems to be all one shade in the D110a printouts.
Something similar happens to a view of a huge tree in full leaf. On screen, there are subtle variations in the "greenness" of the leaves. In the
printout, all green is the same shade. In the same printout, the trunk of the tree is all a single shade of grey. It isn;t even obvious that the
trunk is a round, solid object.
I liken the effect to audio that disappears entirely when you lower the volume and gets clipped into square waves in even moderately loud passages.
I don't know whether the D110a driver software permits adjusting the parameters that appear to be set incorrectly, and if adjustments are possible,
how I would identify which parameters to adjust, how I would access them, or how I would adjust them. I'm hoping that someone can help. Thanks.
I forgot to mention that I have used the diagnostic application and it tells me that there are no problems.
e-mail me at [email protected]brazzmonkey wrote:
Hi everyone,
I noticed the following message when network starts on my gateway
Warning: This functionality is deprecated.
Please refer to /etc/rc.conf on how to define a single wired
connection, or use a utility such as netcfg.
Then I realized the way network settings should be written in rc.conf has changed. But I can't figure out how this should be done.
Currently, my set up is the following (old way):
INTERFACES=(eth0 eth1)
eth0="dhcp"
eth1="eth1 192.168.0.10 netmask 255.255.255.0 broadcast 192.168.0.255"
ROUTES=(!gateway)
eth0 is on DHCP because the IP is dynamically assigned my ISP.
eth1 has a fix IP because it's on the LAN side.
No problem to use DHCP on eth0 with the new settings.
But for eth1, I don't know what I am supposed to write for gateway.
Wiki isn't clear on that one either, and it looks like many articles still refer to the old way.
Any guidance appreciated, thanks.
brazzmonkey,
you can't define 2 interfaces the old way (even though I saw some tricky workaround somewhere in the forums).
Use, f.e., netcfg:
Comment your old lines.
In /etc/rc.conf insert:
NETWORKS=(Eth0-dhcp Eth1-static)
DAEMONS=(..... !network @net-profiles ....)
In /etc/network.d create 2 files:
First one is named Eth0-dhcp.
Contents:
CONNECTION="ethernet"
DESCRIPTION="Whatever text"
INTERFACE=eth0
HOSTNAME="your hostname"
IP="dhcp"
DHCP_TIMEOUT=15
Second one is named Eth1-static.
Contents:
CONNECTION='ethernet'
DESCRIPTION='whatver'
INTERFACE='eth1'
HOSTNAME='hname'
IP='static'
ADDR='192.168.0.10'
GATEWAY='192.168.0.1' # your gateway IP
DNS=('192.168.0.1') # your DNS server
The names Eth0-dhcp and Eth1-static are not magic. They just must be the same in rc.conf and in /etc/network.d.
Hope it helps.
mektub
PS: netcfg must be installed.
Last edited by Mektub (2011-07-20 14:07:05) -
What is the Parameter values for passing a password to open a pdf
I need help in finding the Parameter values for passing a password to open a pdf(s)? The software is written in Delphi.
The Copy Protection only protects our Disk from being duplicated and also protects our Software from being copied and used locally.
As far as the password encryption, that is why I created the Post. I was hoping that the password can be coded in our Software to open the password protect PDF that we create. This option would of gave us the security for when the customer copies the pdf to there local drive they would be required to input the password which they would not have access to. -
Getting QM parameter values for Raw Material on the basis of goods receipt
Hi All,
I have requirement, while generating inspection lot these tables MCXD&MCXA should update.
when we need a QM parameter value for the month, It should be the average of all the inspection lot generated for the month.
Thanks in advance
Regards
HanamantaOk.. I assume your talking about the actual test result value. These do not roll up into the QM LIS structures used in transactions MCXA or MCXD.
You might be able to create your own structures and have them updated but you would have develop that.
You can create run charts for various MIC's and utilize the SPC functionality if you need monthly averages and trends.
If your batch managed you can easily get reports of batch values via the CL30N transaction. You'll want to make sure you have a characteristic for batch production or receipt date so you can sort and select by date. These can then be loaded to Excel for summing and averaging.
Craig -
How to use different default parameter value for different report subscriptions
In ssrs is it possible to define different default parameter values for different subscriptions? In the following example I have a report which has two subscriptions with different start date and end date values:
Report name – Testsubscription.rdl
Subscription-1
Input parameter (default values):
start_date = first day of current Month
end_date = till date
Subscription-2
Input parameter (default values):
start_date = first day of current Quarter
end_date = till date
I know an alternative way of doing this would be to copy the rdl file with a different name but I am curious whether this can be done within a single report definition file. I am using SQL Server 2008 R2 Standard Edition.
Thanks!
sppHi sppdba,
As per my understanding, there is a report with two parameter: start_date and end_date, you want to configure subscription for the report, and set different default values for start date and end date. And you want to know if it is possible to achieve you
goal by using a single report definition file.
Since you are using SQL Server 2008 R2 Standard Edition, we need to achieve your goal by configuring two subscriptions for the report. For detail information, please refer to the following steps:
1. In design surface, right click start_date and open Parameter Properties dialog box.
2. In General pane, type Name and Prompt, set Data Type to Date/Time.
3. Click Available Values in left pane, select Specify Values.
4. Click Add button, in Label text box, type “First day of Current Month”, click (fx) button in Value section, then type the expression like below:
=DateSerial(Year(Now()), Month(Now()), 1)
5. Click Add button, in Label text box, type “First day of Current Quarter”, click (fx) button in Value section, then type the expression like below, then click OK.
=DateSerial(Year(Now()), (3*DatePart("q",Now()))-2, 1)
6. Right click end_date and open Parameter Properties dialog box.
7. In Available Values pane, select Specify Values.
8. Click Add button, in Label text box, type “Today”, click (fx) button in Value section, then type the expression =Today(), then click OK.
Now that the parameters are created, we need to configure subscription for the report. For detail information, please follow these steps:
1. Open Report Manager, and locate the report for which you want to create a new subscription.
2. Hover over the report, and click the drop-down arrow.
3. In the drop-down menu, click Manage. This opens the General properties page for the report.
4. Select the Subscriptions tab, and then click New Subscription.
5. Select the delivery extension and data source for the subscription.
6. Select a method of delivery, then choose report delivery options.
7. Specify conditions that cause the subscription to process and delivery to occur.
8. Set start_date to First day of Current Month, end_date to Today, then click OK.
9. Create a new subscription as step4 to 7, set start_date to First day of Current Quarter, end_date to Today, then click OK.
The following screenshots are for your reference:
For detail information about Creating Standard Subscriptions, please refer to the following document:
http://msdn.microsoft.com/en-us/data/ms156307(v=sql.105)
If you have any more questions, please feel free to ask.
Thanks,
Wendy Fu
If you have any feedback on our support, please click
here. -
Dynamically setting the values for the Adapter Configuration in BPEL
We are configuring the JMS adapter to put into an MQ topic. For this we are giving all the values for the configuration parameters like
Factory Properties.
JMS connection Factory
Transacted
Destination Type
Username
Password
Destination Name, etc...
and we are able to produce message on the MQ.
Our requirement is to dynamically pass the values for the above parameters from some configuraion files(other than oc4j-ra.xml), which will have value for each obove parameters.
Any help on this is highly appreciated.
Regards,
SumanRe: JMS Properties setup
this thread will explain how to do it. -
Dynamically setting the values for the Adapter Configuration
We are configuring the JMS adapter to put into an MQ topic. For this we are giving all the values for the configuration parameters like
Factory Properties.
JMS connection Factory
Transacted
Destination Type
Username
Password
Destination Name, etc...
and we are able to produce message on the MQ.
Our requirement to dynamically pass the values for the above parameters from some configuraion files(other that oc4j-ra.xml), which will have value for each obove parameters
Any help on this is highly appreciated.Re: JMS Properties setup
this thread will explain how to do it. -
Need help on displaying the callers name on ip phone with cme using external directory
Hello Guys,
Need help on displaying the callers name on ip phone with cme while using external directory
Thank you,
KhajaThanks for your help,
Does it 100% work with CME. We use SIP and 2ring for external directory? Thanks you. -
Display multiple values for a characteristic for Equipment.
Hi is there any way to display multiple values for characteristics of an equipment. Ex. An equipment (Presss) produces multiple ROH Parts. The class VN_TOOl with charactersistic "Part Produced" . When I run IH08 and execute the query, >Show , hide classification I can only get just one part instead of multiple parts. How do I get multiple values for the characteristic
Yes Chandra,
You are not getting it in IH08, but you are getting it in IE07. See this.
IH08
IE07
If you want the report in the ALV layout, then you need to go for a development using FMs in Classification areas such as:
'BAPI_OBJCL_GETCLASSES' 'ALM_ME_CLASS_CHAR_GETDETAIL'
Jogeswara Rao K -
Need Help to create new screen for RF Sapconsole
Hi Guru's
I'm new on RF (but some years in ABAP) since last week.
I need help to create new screens for RF (SAPLLMOB).
Can someone explain me the procedure to create screen (with ABAP code after) or perhaps someone have an exemple (simple or not) ?
I have to develop 2 new screens with really few time.
And, another subsidiary question :
how SAP can transfert information between the flash gun and the screen i have developped.
Is there some code to add to enable this functionality or it is include in SAPLLMOB on standard fields ????
It's a new strange world for me today...
Many thanks to everyone who can explain me
Alainhi,
I am facing this problem as well. Is there any reference to create the new screen?
Hope someone can help! Thanks!
Regards,
Darren -
How do I reorder songs in a playlist in the new itunes??? I can no longer just click and drag. When I click, it doesn't move!!!! Need help ASAP- trying to prepare for an aerobics class and need songs in a specific order!
Vera,
Use View > View Options, and set 'Sort By" to "Manual Order."
Then you will be able to drag-n-drop songs up and down the list.
Maybe you are looking for
-
Hi All, Please how do i resolve this following error: The type initializer for 'CrystalDecisions.CrystalReports.Engine.ReportDocument' threw an exception. This comes up when i run my application online but doesn't occur when i run it during design.
-
I copied Favorites already but they don't show up in Firefox - and I copied before installing Firefox.
-
Hello, i want to view a very large PDF file (~1GB, ~500 pages). The viewers i tested (okular, evince, xpdf) are slow: if i browse through the document one page loads a specific time and is displayed. If i switch to the next page i have to wait again.
-
Problems with swiping to Powerpoint
This is a problem that I've been encountering for quite awhile. Usually, I have multiple powerpoint files and other programs (such as Chrome) open in full screen, and I switch between screens using the swipe action on the trackpad. However, if I swip
-
I have an iMac that I am using to scan phots and negatives, my scanner is an HP Scanjet G4050. I have loaded the lastest drivers for the iMac and the scanner appears to work properly, the thumbnails in the toolbar section of the scanner window are o