SQL Developer has had a command-line interface of sorts. The primary use cases were for formatting files and running unit tests. However, we wanted to expand the support to include things like generating Carts and running reports.
Instead of just creating a few more one-off interfaces, we kind of started over and built a new CLI from scratch. Random Observation: Developers get very excited when they get to redo something.
Rather than call the main executable, we created a new one. So with SQL Developer version 4, when you run ‘sdcli.exe’ from the BIN directory, you’ll see something like this:
Please ignore the yellow highlighted text. That’s an error message that shouldn’t be appearing – a bug that we’ll have fixed for the next EA drop.
It’s the green part that’s more interesting!
Available features
What we have available now are the following features:
- cart: Database Cart Batch Tasks
- dba: Basic Batch DBA Tasks
- format: SQL Format Task
- migration: Database Migration Tasks
- reports: Basic Batch Reporting Tasks
- unittest: Unit Testing Batch Tasks
If I want to know the syntax for running one of these features, simply ask for it. Let’s look at Reports first. I reckon that this might be the most popular use case for the command-line interface.
Running Reports via the Command Line
If I run ‘sdcli64.exe reports’ – it will come back with the usage syntax for the reports option:
Reports Usage:
reports <command> <command arguments>
Supported commands:
generate -report <path> -db <connection name> -file <output file> [-bind <bname>=<bvalue>]* generates an HTML report
Ok, so let’s run a report and see what happens.
C:\Users\jdsmith\Desktop\sqldeveloper\4.0 EA1\sqldeveloper\sqldeveloper\bin>sdcli64.exe reports generate -report "Demo for 4.0 Take Three" -db HR -file "C:\sqldev4.html"
Success!
Let’s break down that command:
sdcli64.exe reports – this part I hope you get
generate – at this time, generating a report is the only feature exposed, so let’s do that
-report “Demo for 4.0 Take Three” – the name of the report, contains spaces, so I’m quoting it
-db HR – the database connection name to run the report against, requires you to have saved the password
-file “C:\sqldev4.html” – the output, where do we want it and what’s it going to be named
At the moment only HTML is available for output options.
Ok, let’s go look at the output – which in this case is an HTML file.
All of the charts should render in HTML WYSIWYG – what you see is what you get. I haven’t played with all 6400 new chart types yet, so let me know if you find one it breaks on.
99 Comments
Hi Jeff, I need to run a unit test suite using SDCLI on a Unix server (we are automating ut). On this server, I cannot run the GUI so have no chance to create the needed connections within SQL Developer. How can I create the connections.xml file to use with SDCLI? Is there any alternative authentication method in SDCLI?
Not sure that’s going to work. You can try generating the connections on a different computer and copying the files over, but we’ve built that to NOT carry over the connections.
So, run the test suite somewhere else, or get GUI support on that server.
Jeff, trying SDCLI reports, I hit a new error.
E:\sqldeveloper17.4\sqldeveloper\sqldeveloper\bin>.\sdcli reports generate -report “Redo heat map” -db DBNAME -FILE “c:\temp\heatmap.html”
Invalid reports command: -FILE
it’s JAVA, so try -file not -FILE
Jeff, that was the first thing I tried. Regards, John
I just tried this in 17.4
Try this:
— David Mann
— http://ba6.us
— Archived Log Redo in GB Heat Map for past 31 Days
— Requires access to v$archived_log, v$database
— Usage (3 possiblities):
— o Spool output to file and view with browser
— o Use SQL Developer PL/SQL DBMS_OUTPUT report type
— o Paste code into Apex PL/SQL output type and change DBMS_OUTPUT to HTP.P
— I tried to use a scripted stylesheet but SQL Dev wouldn’t cooperate so
— that is my excuse for all of the ugly inline CSS. For now 🙂
— Date Change
— ———– —————————————————————
— 24-JUL-2012 Initial version
— 25-OCT-2012 Only print max value number, trying to reduce visual complexity
— 08-MAR-2016 Changed report to Redo in GB, updated calulations, added Total col
–SET SERVEROUTPUT ON
DECLARE
myMaxDay NUMBER;
myMaxHour NUMBER;
myDBName VARCHAR2(16);
— dec2hex Function from http://www.orafaq.com/wiki/Hexadecimal
FUNCTION dec2hex (N in number) RETURN varchar2 IS
hexval varchar2(64);
N2 number := N;
digit number;
hexdigit char;
BEGIN
while ( N2 > 0 ) loop
digit := mod(N2, 16);
if digit > 9 then
hexdigit := chr(ascii(‘A’) + digit – 10);
else
hexdigit := to_char(digit);
end if;
hexval := hexdigit || hexval;
N2 := trunc( N2 / 16 );
end loop;
return hexval;
END dec2hex;
FUNCTION DataCell ( P_Value NUMBER, P_Max NUMBER) RETURN VARCHAR2 IS
myReturn VARCHAR2(256);
myColorVal NUMBER;
myColorHex VARCHAR2(16);
BEGIN
— Determine shade of red the P_Value should be compared to Solid Red for P_Max
— Higher HEX values for G,B render as lighter colors
myColorVal := ROUND( 255-FLOOR(255 * (P_VALUE / P_MAX)));
myColorHex := LPAD(TRIM(dec2hex(myColorVal)) ,2,’0′);
IF P_Value >= P_Max THEN
myColorHex := ’00’;
END IF;
myReturn := ”;
myReturn := myReturn ||TO_CHAR(P_Value,’9999.9′);
myReturn := myReturn ||”;
RETURN myReturn;
END DataCell;
BEGIN
DBMS_OUTPUT.ENABLE(1000000);
SELECT ROUND(MAX(ROUND(SUM(blocks*block_size)/1024/1024/1024)),1)
INTO myMaxDay
FROM v$archived_log
WHERE trunc(FIRST_TIME) >= trunc(sysdate – 31)
GROUP BY TO_CHAR(first_time,’YYYY-MM-DD’);
SELECT ROUND(MAX(ROUND(SUM(blocks*block_size)/1024/1024/1024)),1)
INTO myMaxHour
FROM v$archived_log
WHERE trunc(FIRST_TIME) >= trunc(sysdate – 31)
GROUP BY TO_CHAR(first_time,’YYYY-MM-DD HH24′);
SELECT NAME INTO myDBName FROM V$DATABASE;
DBMS_OUTPUT.PUT_LINE(”);
DBMS_OUTPUT.PUT_LINE(‘Archived Log Heat Map by Hourly and Daily Redo GB – ‘||myDBName||’ – Past 31 days’);
DBMS_OUTPUT.PUT_LINE(”);
DBMS_OUTPUT.PUT_LINE(”);
DBMS_OUTPUT.PUT_LINE(‘Date / Hour’);
DBMS_OUTPUT.PUT_LINE(’00’);
DBMS_OUTPUT.PUT_LINE(’01’);
DBMS_OUTPUT.PUT_LINE(’02’);
DBMS_OUTPUT.PUT_LINE(’03’);
DBMS_OUTPUT.PUT_LINE(’04’);
DBMS_OUTPUT.PUT_LINE(’05’);
DBMS_OUTPUT.PUT_LINE(’06’);
DBMS_OUTPUT.PUT_LINE(’07’);
DBMS_OUTPUT.PUT_LINE(’08’);
DBMS_OUTPUT.PUT_LINE(’09’);
DBMS_OUTPUT.PUT_LINE(’10’);
DBMS_OUTPUT.PUT_LINE(’11’);
DBMS_OUTPUT.PUT_LINE(’12’);
DBMS_OUTPUT.PUT_LINE(’13’);
DBMS_OUTPUT.PUT_LINE(’14’);
DBMS_OUTPUT.PUT_LINE(’15’);
DBMS_OUTPUT.PUT_LINE(’16’);
DBMS_OUTPUT.PUT_LINE(’17’);
DBMS_OUTPUT.PUT_LINE(’18’);
DBMS_OUTPUT.PUT_LINE(’19’);
DBMS_OUTPUT.PUT_LINE(’20’);
DBMS_OUTPUT.PUT_LINE(’21’);
DBMS_OUTPUT.PUT_LINE(’22’);
DBMS_OUTPUT.PUT_LINE(’23’);
DBMS_OUTPUT.PUT_LINE(‘Total’);
DBMS_OUTPUT.PUT_LINE(”);
FOR cur IN (
select trunc(first_time) AS Day,
sum(DECODE(to_char(first_time, ‘HH24′), ’00’, blocks*block_size/1024/1024/1024, 0)) AS “00”,
sum(DECODE(to_char(first_time, ‘HH24′), ’01’, blocks*block_size/1024/1024/1024, 0)) AS “01”,
sum(DECODE(to_char(first_time, ‘HH24′), ’02’, blocks*block_size/1024/1024/1024, 0)) AS “02”,
sum(DECODE(to_char(first_time, ‘HH24′), ’03’, blocks*block_size/1024/1024/1024, 0)) AS “03”,
sum(DECODE(to_char(first_time, ‘HH24′), ’04’, blocks*block_size/1024/1024/1024, 0)) AS “04”,
sum(DECODE(to_char(first_time, ‘HH24′), ’05’, blocks*block_size/1024/1024/1024, 0)) AS “05”,
sum(DECODE(to_char(first_time, ‘HH24′), ’06’, blocks*block_size/1024/1024/1024, 0)) AS “06”,
sum(DECODE(to_char(first_time, ‘HH24′), ’07’, blocks*block_size/1024/1024/1024, 0)) AS “07”,
sum(DECODE(to_char(first_time, ‘HH24′), ’08’, blocks*block_size/1024/1024/1024, 0)) AS “08”,
sum(DECODE(to_char(first_time, ‘HH24′), ’09’, blocks*block_size/1024/1024/1024, 0)) AS “09”,
sum(DECODE(to_char(first_time, ‘HH24′), ’10’, blocks*block_size/1024/1024/1024, 0)) AS “10”,
sum(DECODE(to_char(first_time, ‘HH24′), ’11’, blocks*block_size/1024/1024/1024, 0)) AS “11”,
sum(DECODE(to_char(first_time, ‘HH24′), ’12’, blocks*block_size/1024/1024/1024, 0)) AS “12”,
sum(DECODE(to_char(first_time, ‘HH24′), ’13’, blocks*block_size/1024/1024/1024, 0)) AS “13”,
sum(DECODE(to_char(first_time, ‘HH24′), ’14’, blocks*block_size/1024/1024/1024, 0)) AS “14”,
sum(DECODE(to_char(first_time, ‘HH24′), ’15’, blocks*block_size/1024/1024/1024, 0)) AS “15”,
sum(DECODE(to_char(first_time, ‘HH24′), ’16’, blocks*block_size/1024/1024/1024, 0)) AS “16”,
sum(DECODE(to_char(first_time, ‘HH24′), ’17’, blocks*block_size/1024/1024/1024, 0)) AS “17”,
sum(DECODE(to_char(first_time, ‘HH24′), ’18’, blocks*block_size/1024/1024/1024, 0)) AS “18”,
sum(DECODE(to_char(first_time, ‘HH24′), ’19’, blocks*block_size/1024/1024/1024, 0)) AS “19”,
sum(DECODE(to_char(first_time, ‘HH24′), ’20’, blocks*block_size/1024/1024/1024, 0)) AS “20”,
sum(DECODE(to_char(first_time, ‘HH24′), ’21’, blocks*block_size/1024/1024/1024, 0)) AS “21”,
sum(DECODE(to_char(first_time, ‘HH24′), ’22’, blocks*block_size/1024/1024/1024, 0)) AS “22”,
sum(DECODE(to_char(first_time, ‘HH24′), ’23’, blocks*block_size/1024/1024/1024, 0)) AS “23”,
sum(blocks*block_size/1024/1024/1024) as “Total”
FROM v$archived_log
WHERE trunc(FIRST_TIME) >= trunc(sysdate – 31)
GROUP BY trunc(first_time)
ORDER BY TRUNC(FIRST_TIME) DESC
)
LOOP
DBMS_OUTPUT.PUT_LINE(”);
DBMS_OUTPUT.PUT_LINE(”||
TO_CHAR(cur.Day,’DD-MON-YYYY’)||’‘);
DBMS_OUTPUT.PUT_LINE( DataCell(cur.”00″, myMaxHour) );
DBMS_OUTPUT.PUT_LINE( DataCell(cur.”01″, myMaxHour) );
DBMS_OUTPUT.PUT_LINE( DataCell(cur.”02″, myMaxHour) );
DBMS_OUTPUT.PUT_LINE( DataCell(cur.”03″, myMaxHour) );
DBMS_OUTPUT.PUT_LINE( DataCell(cur.”04″, myMaxHour) );
DBMS_OUTPUT.PUT_LINE( DataCell(cur.”05″, myMaxHour) );
DBMS_OUTPUT.PUT_LINE( DataCell(cur.”06″, myMaxHour) );
DBMS_OUTPUT.PUT_LINE( DataCell(cur.”07″, myMaxHour) );
DBMS_OUTPUT.PUT_LINE( DataCell(cur.”08″, myMaxHour) );
DBMS_OUTPUT.PUT_LINE( DataCell(cur.”09″, myMaxHour) );
DBMS_OUTPUT.PUT_LINE( DataCell(cur.”10″, myMaxHour) );
DBMS_OUTPUT.PUT_LINE( DataCell(cur.”11″, myMaxHour) );
DBMS_OUTPUT.PUT_LINE( DataCell(cur.”12″, myMaxHour) );
DBMS_OUTPUT.PUT_LINE( DataCell(cur.”13″, myMaxHour) );
DBMS_OUTPUT.PUT_LINE( DataCell(cur.”14″, myMaxHour) );
DBMS_OUTPUT.PUT_LINE( DataCell(cur.”15″, myMaxHour) );
DBMS_OUTPUT.PUT_LINE( DataCell(cur.”16″, myMaxHour) );
DBMS_OUTPUT.PUT_LINE( DataCell(cur.”17″, myMaxHour) );
DBMS_OUTPUT.PUT_LINE( DataCell(cur.”18″, myMaxHour) );
DBMS_OUTPUT.PUT_LINE( DataCell(cur.”19″, myMaxHour) );
DBMS_OUTPUT.PUT_LINE( DataCell(cur.”20″, myMaxHour) );
DBMS_OUTPUT.PUT_LINE( DataCell(cur.”21″, myMaxHour) );
DBMS_OUTPUT.PUT_LINE( DataCell(cur.”22″, myMaxHour) );
DBMS_OUTPUT.PUT_LINE( DataCell(cur.”23″, myMaxHour) );
DBMS_OUTPUT.PUT_LINE( DataCell(cur.”Total”, myMaxDay) );
DBMS_OUTPUT.PUT_LINE(”);
END LOOP;
DBMS_OUTPUT.PUT_LINE(”);
DBMS_OUTPUT.PUT_LINE(”);
END;
Hi,
We want to execute the sybase sql through sdcli migration -actions=runsql -conn=source_sybase -sql=”select getdate();”command and we are getting below error. Error:java.sql.SQLException: Driver class not found.
Verify the Driver location. We have installed sybase driver through command sdcli migration -actions=driver -files=C:\driver\jtds-1.2.jar still we are facing the same issue.
If we try to execute the runsql on Oracle we are getting the output.
sdcli migration -actions=runsql -conn=Oracle_target -sql=”select sysdate from dual”
Could you please help me out.
Thanks in advance.
Regards,
Mandar
Please open a service request with my oracle support. I want to help, just don’t have the time at the moment, and don’t want you to have to wait.
Hello,
I try this feature on Linux but error connections like other people.
On SQL Developer 4.2.0.17.089, I have a connection HR with sys account saved to a db.
sqldeveloper/sqldeveloper/bin$ ./sdcli reports generate -report TOTO -db HR -file “/home/toto/Downloads/test.html”
Oracle SQL Developer
Copyright (c) 1997, 2017, Oracle and/or its affiliates. All rights reserved.
Command failed:
java.lang.IllegalArgumentException: null connection not allowed
at oracle.dbtools.db.DefaultConnectionIdentifier.(DefaultConnectionIdentifier.java:29)
at oracle.dbtools.db.DefaultConnectionIdentifier.createIdentifier(DefaultConnectionIdentifier.java:21)
at oracle.dbtools.raptor.metadata.AbstractDisplayModel.getQuery(AbstractDisplayModel.java:393)
at oracle.dbtools.raptor.metadata.AbstractDisplayModel.getQuery(AbstractDisplayModel.java:377)
at oracle.dbtools.raptor.controls.display.html.TableHtmlGenerator.generateHtml(TableHtmlGenerator.java:63)
at oracle.dbtools.raptor.controls.display.DisplayHtml.generateStyleSpecificHtml(DisplayHtml.java:391)
at oracle.dbtools.raptor.controls.display.DisplayHtml.generateModelHtml(DisplayHtml.java:325)
at oracle.dbtools.raptor.controls.display.DisplayHtml.generateHtml(DisplayHtml.java:261)
at oracle.dbtools.raptor.controls.display.DisplayHtml.generate(DisplayHtml.java:202)
at oracle.dbtools.raptor.report.headless.ReportsProcessor$GenerateReportTask.doWork(ReportsProcessor.java:101)
at oracle.dbtools.raptor.report.headless.ReportsProcessor$GenerateReportTask.doWork(ReportsProcessor.java:39)
at oracle.dbtools.raptor.backgroundTask.RaptorTask.call(RaptorTask.java:193)
at java.util.concurrent.FutureTask.run(FutureTask.java:266)
at oracle.dbtools.raptor.backgroundTask.RaptorTaskManager$RaptorFutureTask.run(RaptorTaskManager.java:629)
at java.util.concurrent.Executors$RunnableAdapter.call(Executors.java:511)
at java.util.concurrent.FutureTask.run(FutureTask.java:266)
at java.util.concurrent.ThreadPoolExecutor.runWorker(ThreadPoolExecutor.java:1149)
at java.util.concurrent.ThreadPoolExecutor$Worker.run(ThreadPoolExecutor.java:624)
at java.lang.Thread.run(Thread.java:748)
I change to lower case the DB connection :
/App/sqldeveloper/sqldeveloper/bin$ ./sdcli reports generate -report TOTO -db hr -file “/home/toto/Downloads/test.html”
Oracle SQL Developer
Copyright (c) 1997, 2017, Oracle and/or its affiliates. All rights reserved.
Command failed:
java.lang.Exception: connection ‘hr’ not found
at oracle.dbtools.raptor.report.headless.ReportsProcessor$GenerateReportTask.doWork(ReportsProcessor.java:84)
at oracle.dbtools.raptor.report.headless.ReportsProcessor$GenerateReportTask.doWork(ReportsProcessor.java:39)
at oracle.dbtools.raptor.backgroundTask.RaptorTask.call(RaptorTask.java:193)
at java.util.concurrent.FutureTask.run(FutureTask.java:266)
at oracle.dbtools.raptor.backgroundTask.RaptorTaskManager$RaptorFutureTask.run(RaptorTaskManager.java:629)
at java.util.concurrent.Executors$RunnableAdapter.call(Executors.java:511)
at java.util.concurrent.FutureTask.run(FutureTask.java:266)
at java.util.concurrent.ThreadPoolExecutor.runWorker(ThreadPoolExecutor.java:1149)
at java.util.concurrent.ThreadPoolExecutor$Worker.run(ThreadPoolExecutor.java:624)
at java.lang.Thread.run(Thread.java:748)
I created the DB connection hr (in lower case)
/App/sqldeveloper/sqldeveloper/bin$ ./sdcli reports generate -report TOTO -db hr -file “/home/toto/Downloads/test.html”
Oracle SQL Developer
Copyright (c) 1997, 2017, Oracle and/or its affiliates. All rights reserved.
Command failed:
java.lang.Exception: connection ‘hr’ not found
at oracle.dbtools.raptor.report.headless.ReportsProcessor$GenerateReportTask.doWork(ReportsProcessor.java:84)
at oracle.dbtools.raptor.report.headless.ReportsProcessor$GenerateReportTask.doWork(ReportsProcessor.java:39)
at oracle.dbtools.raptor.backgroundTask.RaptorTask.call(RaptorTask.java:193)
at java.util.concurrent.FutureTask.run(FutureTask.java:266)
at oracle.dbtools.raptor.backgroundTask.RaptorTaskManager$RaptorFutureTask.run(RaptorTaskManager.java:629)
at java.util.concurrent.Executors$RunnableAdapter.call(Executors.java:511)
at java.util.concurrent.FutureTask.run(FutureTask.java:266)
at java.util.concurrent.ThreadPoolExecutor.runWorker(ThreadPoolExecutor.java:1149)
at java.util.concurrent.ThreadPoolExecutor$Worker.run(ThreadPoolExecutor.java:624)
at java.lang.Thread.run(Thread.java:748)
Are you running it as the exact same OS user you’re running the GUI with? The connections are stored per OS user.
Yes. It’s the same.
If I start the sqldeveloper.sh from this user, I can see the connection.
It should work then…I’ll say this though, I’ve never tested it with a SYS AS SYSDBA connection before. It should work, but maybe try a non SYS account to see if that makes a difference.
With none SYSDBA user, I have the same error :
Command failed:
java.lang.IllegalArgumentException: null connection not allowed
at oracle.dbtools.db.DefaultConnectionIdentifier.(DefaultConnectionIdentifier.java:29)
…
Hi,
I’m trying to generate a report that use mysql connection from the command line and I m getting the following error
sdcli64.exe reports generate -report “mis-history-per-date” -db “pivot-db.nfb.ca {nfbdba}” -file “f:\mis-history-date.html”
Command failed:
oracle.javatools.db.DBException: java.sql.SQLException: Driver class not found.
I tried to add the mysql connector file within the directory of sdcli64.exe but it did not help
mysql-connector-java-5.0.4-bin.jar
Can you please guide how to resolve this.
Thanks in advance
Pretty sure we only support that feature for Oracle databases…
within the graphical client you do support for all the database engine. I was hoping you would support it as well for the command line …
let me know.
thanks
Most of the reporting features do not work for non-Oracle databases. If you’re looking for a reporting solution for MySQL, try the MySQL Workbench.
ok. thank you
Hi Jeff,
I didn’t try single qoute, only doble quote. I’ll try it and ley you know.
Thanos.
Hi Jeff,
I’m trying to run a simple report using sdcli, but I cannot make it work……
This is what I run and the error I get…
[oracle@localhost bin]$ ./sdcli reports generate -report “tbs_cortado” -db DB11G -file “/home/oracle/Informes/Data/tbs_cortado.html”
Oracle SQL Developer
Copyright (c) 1997, 2017, Oracle and/or its affiliates. All rights reserved.
Command failed:
java.lang.IllegalArgumentException: null connection not allowed
at oracle.dbtools.db.DefaultConnectionIdentifier.(DefaultConnectionIdentifier.java:29)
at oracle.dbtools.db.DefaultConnectionIdentifier.createIdentifier(DefaultConnectionIdentifier.java:21)
at oracle.dbtools.raptor.metadata.AbstractDisplayModel.getQuery(AbstractDisplayModel.java:393)
at oracle.dbtools.raptor.metadata.AbstractDisplayModel.getQuery(AbstractDisplayModel.java:377)
at oracle.dbtools.raptor.controls.display.html.TableHtmlGenerator.generateHtml(TableHtmlGenerator.java:63)
at oracle.dbtools.raptor.controls.display.DisplayHtml.generateStyleSpecificHtml(DisplayHtml.java:391)
at oracle.dbtools.raptor.controls.display.DisplayHtml.generateModelHtml(DisplayHtml.java:325)
at oracle.dbtools.raptor.controls.display.DisplayHtml.generateHtml(DisplayHtml.java:261)
at oracle.dbtools.raptor.controls.display.DisplayHtml.generate(DisplayHtml.java:202)
at oracle.dbtools.raptor.report.headless.ReportsProcessor$GenerateReportTask.doWork(ReportsProcessor.java:101)
at oracle.dbtools.raptor.report.headless.ReportsProcessor$GenerateReportTask.doWork(ReportsProcessor.java:39)
at oracle.dbtools.raptor.backgroundTask.RaptorTask.call(RaptorTask.java:193)
at java.util.concurrent.FutureTask.run(FutureTask.java:266)
at oracle.dbtools.raptor.backgroundTask.RaptorTaskManager$RaptorFutureTask.run(RaptorTaskManager.java:629)
at java.util.concurrent.Executors$RunnableAdapter.call(Executors.java:511)
at java.util.concurrent.FutureTask.run(FutureTask.java:266)
at java.util.concurrent.ThreadPoolExecutor.runWorker(ThreadPoolExecutor.java:1142)
at java.util.concurrent.ThreadPoolExecutor$Worker.run(ThreadPoolExecutor.java:617)
at java.lang.Thread.run(Thread.java:748)
FYI, the report works fine in SQLDeveloper GUI, password connection is saved as required but I can’t make it work…….Am I missing something???
Thanks in advance.
Marcelo
it doesn’t like or can’t find your connection name – does it need quoted too?
Hi Jeff,
I can’t make it work……
Any ideas???
Thanks
Works for me