Sunday, October 14, 2012

Apex 4.2 has just been released

Salam All,

Apex 4.2 has just been released.

http://apex.oracle.com/i/index.html

Main features:


تسطيع تطوير تطبيقات الهواتف الذكية بسرعة و سهولة

Provide HTML 5 items types and charts.


Packaged Applications
حيث تمثل نقطة البداية لك لتتعلم كيف يتم تطوير تطبيقات أبكس


And a lot more ...

Thursday, January 12, 2012

كيف تبدأ مع أوراكل أبكلكيشن Oracle APEX


Download & Install Oracle 11g XE:







Click To Download Oracle 11g XE

عند عملية التنصيب قد تواجه مشكلة و الحل هنا


connect /as sysdba

SET SERVEROUTPUT ON ;
DECLARE
l_cfgxml XMLTYPE;
l_value VARCHAR2(5) := 'true'; -- (true/false)
BEGIN
l_cfgxml := DBMS_XDB.cfg_get();

IF l_cfgxml.existsNode('/xdbconfig/sysconfig/protocolconfig/httpconfig/allow-repository-anonymous-access') = 0 THEN
dbms_output.put_line('NO access anonymous');
ELSE
dbms_output.put_line('YES access anonymous');
end if;
end ;

====if it is NO you have to add or update ============
SET SERVEROUTPUT ON
DECLARE
l_cfgxml XMLTYPE;
l_value VARCHAR2(5) := 'true'; -- (true/false)
BEGIN
l_cfgxml := DBMS_XDB.cfg_get();
IF l_cfgxml.existsNode('/xdbconfig/sysconfig/protocolconfig/httpconfig/allow-repository-anonymous-access') = 0 THEN
-- Add missing element.
SELECT insertChildXML
(
l_cfgxml,
'/xdbconfig/sysconfig/protocolconfig/httpconfig',
'allow-repository-anonymous-access',
XMLType('<allow-repository-anonymous-access xmlns="http://xmlns.oracle.com/xdb/xdbconfig.xsd">' ||
l_value ||
'</allow-repository-anonymous-access>'),
'xmlns="http://xmlns.oracle.com/xdb/xdbconfig.xsd"'
)
INTO l_cfgxml
FROM dual;
DBMS_OUTPUT.put_line('Element inserted.');
ELSE
-- Update existing element.
SELECT updateXML
(DBMS_XDB.cfg_get(),
'/xdbconfig/sysconfig/protocolconfig/httpconfig/allow-repository-anonymous-access/text()',
l_value,
'xmlns="http://xmlns.oracle.com/xdb/xdbconfig.xsd"')
INTO l_cfgxml
FROM dual;
DBMS_OUTPUT.put_line('Element updated.');
END IF;
DBMS_XDB.cfg_update(l_cfgxml);
DBMS_XDB.cfg_refresh;
END;

commit;
=====================================
step 3

ALTER USER ANONYMOUS IDENTIFIED BY anonymous;
ALTER USER ANONYMOUS ACCOUNT UNLOCK;
ALTER USER XDB IDENTIFIED BY xdb;
ALTER USER XDB ACCOUNT UNLOCK;

step 4
check if there is DAD APEX
====
set serverout on;
declare
my_dad_list dbms_epg.VARCHAR2_TABLE;
begin
DBMS_EPG.GET_DAD_LIST (my_dad_list);
for i in 1..my_dad_list.count
loop
dbms_output.put_line(my_dad_list(i));
end loop;
end;
IT should return APEX

===========

if it is empty you should run
@apex_epg_config.sql /home/oracle <--- dir where new apex was unziped (APEX is in /home/oracle/apex)
It will also load images.

========
step 5
change password for ADMIN APEX user:
@apxchpwd.sql


Upgrade APEX to the latest version:

Click To Download The Latest Version Of APEX



To Install the latest version  ( Upgrade ) follow these steps:
1. Unzip the downloadloaded zip file:
  • Double click <filename>.zip in Windows Explorer
  • [Note: You should keep the directory tree where you unzip the files short and not under directories that contain spaces. 
    For example, within Windows unzip to C:\.]
2. Change your working directory to apex.


  • In Windows 7: Go to Start Menu, then Type CMD. Then type: 
  • CD/
  • cd apex
  • 3. Start SQL*Plus and connect to the Oracle XE database
  • {Command prompt} C:\apex> sqlplus /nolog
     SQL> CONNECT SYS as SYSDBA
     Enter Password: 
     SYS_Password
      
4. Install Application Express:
  • SQL> @apexins SYSAUX SYSAUX TEMP /i/
5. Log back into SQL*Plus (as above) and load images:
  • SQL> @apxldimg.sql APEX_HOME
  • [Note: APEX_HOME is the directory you specified when unzipping the file. For example, with Windows 'C:\'.]
6. Upgrade Application Express password:
  • SQL> @apxchpwd
    Enter password for Application Express ADMIN account.
7. In a Web browser, navigate to the Oracle Application Express Administration Services application:
  • http://localhost:8080/apex/apex_admin
  • In Username, enter ADMIN
  • In Password, enter your password. ( that you chose in step 6 )


Unlocking  the APEX_PUBLIC_USER Account

Go To Start Menu and type CMD.
SYSTEM_DRIVE:\ sqlplus /nolog
SQL> CONNECT SYS as SYSDBA
Enter password: SYS_password


Run the following statements:
ALTER USER APEX_PUBLIC_USER ACCOUNT UNLOCK
ALTER USER APEX_PUBLIC_USER IDENTIFIED BY new_password



Enable Network Services in Oracle Database 11g

You may need this for the following reasons:

  • Sending outbound mail in Oracle Application Express.
  • Using Web services in Oracle Application Express.
  • PDF/report printing.

Copy and Past the following code in SQL:

DECLARE
  ACL_PATH  VARCHAR2(4000);
  ACL_ID    RAW(16);
BEGIN
  -- Look for the ACL currently assigned to '*' and give APEX_040100
  -- the "connect" privilege if APEX_040100 does not have the privilege yet.

  SELECT ACL INTO ACL_PATH FROM DBA_NETWORK_ACLS
   WHERE HOST = '*' AND LOWER_PORT IS NULL AND UPPER_PORT IS NULL;

  -- Before checking the privilege, ensure that the ACL is valid
  -- (for example, does not contain stale references to dropped users).
  -- If it does, the following exception will be raised:
  --
  -- ORA-44416: Invalid ACL: Unresolved principal 'APEX_040100'
  -- ORA-06512: at "XDB.DBMS_XDBZ", line ...
  --
  SELECT SYS_OP_R2O(extractValue(P.RES, '/Resource/XMLRef')) INTO ACL_ID
    FROM XDB.XDB$ACL A, PATH_VIEW P
   WHERE extractValue(P.RES, '/Resource/XMLRef') = REF(A) AND
         EQUALS_PATH(P.RES, ACL_PATH) = 1;

  DBMS_XDBZ.ValidateACL(ACL_ID);
   IF DBMS_NETWORK_ACL_ADMIN.CHECK_PRIVILEGE(ACL_PATH, 'APEX_040100',
     'connect') IS NULL THEN
      DBMS_NETWORK_ACL_ADMIN.ADD_PRIVILEGE(ACL_PATH,
     'APEX_040100', TRUE, 'connect');
  END IF;

EXCEPTION
  -- When no ACL has been assigned to '*'.
  WHEN NO_DATA_FOUND THEN
  DBMS_NETWORK_ACL_ADMIN.CREATE_ACL('power_users.xml',
    'ACL that lets power users to connect to everywhere',
    'APEX_040100', TRUE, 'connect');
  DBMS_NETWORK_ACL_ADMIN.ASSIGN_ACL('power_users.xml','*');
END;
/
COMMIT;



Download APEX listener:
http://www.oracle.com/technetwork/developer-tools/apex-listener/downloads/index.html



Download and Install Glass Fish Server:
http://glassfish.java.net/downloads/3.1.1-final.html

Download JDK
http://www.oracle.com/technetwork/java/javase/downloads/jdk-7u2-download-1377129.html
Download SQL Developer.
http://www.oracle.com/technetwork/developer-tools/sql-developer/downloads/index.html



Friday, December 16, 2011

Oracle Apex - Auditing


بسم الله الرحمن الرحيم , الحمد لله و الصلاة و السلام على رسول الله

تعديل الجدول

ALTER TABLE demo_products ADD ( last_updated_by varchar2 (35), last_updated_on timestamp (4) with local time zone )

إنشاء القادح

CREATE OR REPLACE TRIGGER  "BI_product_info"
BEFORE INSERT OR UPDATE ON demo_product_info
FOR EACH ROW
BEGIN
  IF (inserting) THEN
    BEGIN
      :new.Last_updated_by := nvl(v('APP_USER'), 'user');
      :new.last_updated_on := systimestamp;
    END;
  ELSIF (updating) THEN
    BEGIN
      :NEW.Last_updated_by := nvl(v('APP_USER'), 'user');
      :NEW.last_updated_on := systimestamp;
   END;
  END IF;
END;


** Attributes
Region Attributes:   style=width:300px

** HTML Table Cell Attributes
style="color:#800517; font-weight: bold"

*** Do not forget to disable the tigger if you are going to upload data to your table:

ALTER TRIGGER bi_products DISABLE



APP_USER Syntax

Reference Type Syntax

  • Bind variable

:APP_USER

  • PL/SQL

V('APP_USER')

  • Substitution string

&APP_USER.

Consider the following examples:

From within an HTML region:Hello you are logged in as &APP_USER.
Using PL/SQL:

htp.p('Hello you are logged in as'||V('APP_USER'));
As a bind variable:

SELECT * FROM some_table WHERE user_id = :APP_USER


Sunday, October 9, 2011

Some Security Skills بعض النقاط حول الأمان


السلام عليكم و رحمة الله وبركاته, الحمد لله و الصلاة و السلام على رسول الله.
 اليوم إن شاء الله سنتكلم منح الصلاحيات للمتسخدمين لمشاهدة بيانات معينة::

  • تحديد البيانات المتاحة لكل مستخدم. فكل مستخدم يستطيع فقط أن يرى البيانات الخاصة به.
  • عرض بعض الأعمدة  و اخفاء البقية عن المستخدمين  الذين لا يملكون صلاحيات
  •  اخفاء  الحقول خلال فترة زمنية معينة أو جعل التطبيق متاح خلال ساعات معينة
  • جعل بعض الحقول للقراءة فقط بحيث لا يكمن تعديلها
-------------------------

1-
Select * from TABLE_NAME where upper (USER_NAME ) =  UPPER (:APP_USER) order by 1 desc 

إذا كنت أود أن أعطي صلاحيات لمستخدم اسمه اوراكل لكي يرى جيمع الصفوف

Select * from TABLE_NAME where upper (USER_NAME ) =  UPPER (:APP_USER) OR upper ( :APP_USER) = 'ORACLE' order by 1 desc 
-------------------------------------------

2-
click on edit page then Report Columns, ( Report Attributes tab). then go to Conditions.
SELECT * FROM DUAL WHERE upper (:app_user) not like 'ZIAD'
--------------------------------------------------
3-
click on edit item. then go to conditions.

TO_CHAR (SYSDATE, 'HH24') NOT BETWEEN '20' AND '23'

-----------------------------------------------------
يتبع إن شاء الله تعالى ....
4- We need to create Dynamic Action. (Show/Hide)

Go to Conditions. 
choose PL/SQL as Condition Type
 upper(:app_user) in ('X','Y','Z','F') and  :P2_empid is not null
في العادة نستخدم
:P2_ID
و في الاصدار الأخير من
APEX
نستخدم
:P2_RowID


الحمد لله و الصلاة و السلام على رسول الله

Sunday, September 25, 2011

تأسيس الاتصال

بسم الله و الحمدلله و الصلاة والسلام على رسول الله:

لتأسيس  الاتصال بين السيرفر و بقية الحواسيب نحتاج إلى التالي :






--------------

Listener Configuration:
C:\Program Files\Java\jre6\bin\java -Dapex.erase -Dapex.port=3142 -Dapex.home=C:\Connection -Dapex.images=C:\apex\images -jar C:\Connection\apex.war
--------------
Start up file:
"C:\Program Files\Java\jre6\bin\java" -Dapex.erase -Dapex.port=3142 -Dapex.home=C:\Connection -Dapex.images=C:\apex\images -jar C:\Connection\apex.war  >>C:\Connection\my_apex_listener.log 2>&1
--------------
Unlock APEX_PUBLIC_USER:

CONNECT TO SQLPLUS as sysdba
then type:
alter user apex_public_user account unlock
alter user apex_public_user identified by oracle
--------------
Change HTTP Port:
أولا تأكد من رقم البورت


select dbms_xdb.gethttpport as "HTTP-Port"
            , dbms_xdb.getftpport as "FTP-Port" from dual;
لتغير رقم البورت 

 
begin
   dbms_xdb.sethttpport('هنا ضع رقم البورت الذي تريد');
   dbms_xdb.setftpport('هنا ضع رقم البورت الذي تريد');
  end;

 3142 إذا كنت ترغب في تغير رقم البورت المستخدم للاتصال بالسيرفر, فعليك تغير الرقم  
في 
Startup file and listener configuration 


الحمدلله و الصلاة والسلام على رسول الله.
السلام عليكم و رحمة الله وبركاته


Tuesday, September 6, 2011

تصدير تطبيق 2 , إنشاء أغراض قواعد البيانات




بسم الله و الحمد لله و الصلاة و السلام عل رسول الله
السلام عليكم و رحمة الله و بركاته,  من أجل أن تكون الأمور واضحة سنقوم في هذه المحاضرة بإنشاء :
Tables , Sequences, Triggers.
و سنرى إن شاء الله تعالى كيفك يتم توليد الكود لهذه الأغراض . أقصد
Generate DDL : Data Dentition Language 
على أي حال حفاظأ على قتك . ربما تستطيع مشاهدة هذه المحاضرة و أنت تتناول الغداء فهي لا تحتاج إلى تركيز...  إلا إذا كنت مبتدأ
علما أنني عمدا قمت بإنشاء الجداول أولا ثم إضافة القيود .....
ثم في المحاضرة التالية سنبيني التطبيق بالاعتماد على هذه الأغراض:  إن شاء الله تعالى


إنشاء جداول الموظفين و الأقسام:

CREATE TABLE  EMP2
   (
EMPNO NUMBER(4,0) ,
ENAME VARCHAR2(10),
JOB VARCHAR2(9),
MGR NUMBER(4,0),
HIREDATE DATE,
SAL NUMBER(7,2),
COMM NUMBER(7,2),
DEPTNO NUMBER(2,0)
);
-------

CREATE TABLE  DEPT2
(
DEPTNO NUMBER(2,0),
DNAME VARCHAR2(14),
LOC VARCHAR2(13)
        );
-------------------------------------------------
إنشاء القيود

alter table emp2 add constraint PK_emp2 primary key (EMPNO);

-------



alter table dept2 add constraint PK_dept2 primary key (deptno);
-------



alter table emp2 add constraint FK_emp2 foreign key (DEPTNO) references DEPT2 (DEPTNO);

-------------------------------------------------


إنشاء المتسلسلات Sequences

create sequence emp2_seq;


-------



create sequence dept2_seq;

-------------------------------------------------
إنشاء القوادح Triggers



create or replace trigger BI_emp2
before insert on emp2
for each row
begin
if :new.empno is null then
select emp_seq2.nextval into :new.empno from dual;
end if;
end;

-------

alter trigger bi_emp enable;


-------

create or replace trigger BI_dept2


before insert on dept2
for each row
begin
if :new.DEPTNO is null then
select dept2_seq.nextval into :new.DEPTNO from dual;
end if;
end;

-------

alter trigger BI_dept2 enable;



-------------------------------------------------



إدخال البيانات: Inserting The Data

INSERT INTO EMP2 VALUES
(7369,'SMITH','CLERK',7902,to_date('17-12-1980','dd-mm-yyyy'),800,NULL,20);
INSERT INTO EMP2 VALUES
(7499,'ALLEN','SALESMAN',7698,to_date('20-2-1981','dd-mm-yyyy'),1600,300,30);
INSERT INTO EMP2 VALUES
(7521,'WARD','SALESMAN',7698,to_date('22-2-1981','dd-mm-yyyy'),1250,500,30);
INSERT INTO EMP2 VALUES
(7566,'JONES','MANAGER',7839,to_date('2-4-1981','dd-mm-yyyy'),2975,NULL,20);
INSERT INTO EMP2 VALUES
(7654,'MARTIN','SALESMAN',7698,to_date('28-9-1981','dd-mm-yyyy'),1250,1400,30);
INSERT INTO EMP2 VALUES
(7698,'BLAKE','MANAGER',7839,to_date('1-5-1981','dd-mm-yyyy'),2850,NULL,30);
INSERT INTO EMP2 VALUES
(7782,'CLARK','MANAGER',7839,to_date('9-6-1981','dd-mm-yyyy'),2450,NULL,10);
INSERT INTO EMP2 VALUES
(7788,'SCOTT','ANALYST',7566,to_date('13-JUL-87')-85,3000,NULL,20);
INSERT INTO EMP2 VALUES
(7839,'KING','PRESIDENT',NULL,to_date('17-11-1981','dd-mm-yyyy'),5000,NULL,10);
INSERT INTO EMP2 VALUES
(7844,'TURNER','SALESMAN',7698,to_date('8-9-1981','dd-mm-yyyy'),1500,0,30);
INSERT INTO EMP2 VALUES
(7876,'ADAMS','CLERK',7788,to_date('13-JUL-87')-51,1100,NULL,20);
INSERT INTO EMP2 VALUES
(7900,'JAMES','CLERK',7698,to_date('3-12-1981','dd-mm-yyyy'),950,NULL,30);
INSERT INTO EMP2 VALUES
(7902,'FORD','ANALYST',7566,to_date('3-12-1981','dd-mm-yyyy'),3000,NULL,20);
INSERT INTO EMP2 VALUES
(7934,'MILLER','CLERK',7782,to_date('23-1-1982','dd-mm-yyyy'),1300,NULL,10);



-------



INSERT INTO DEPT2 VALUES
(10,'ACCOUNTING','NEW YORK');
INSERT INTO DEPT2 VALUES
                 (20,'RESEARCH','DALLAS');
INSERT INTO DEPT2 VALUES
(30,'SALES','CHICAGO');
INSERT INTO DEPT2 VALUES
(40,'OPERATIONS','BOSTON');




I hope that has been informative for you. Please do not hesitate to pose any question, and I will answer you as I have time بإذن الله تعالى