Recaptcha در اوراکل اپکس

با سلام

ابتدا باید شما با کاربر SYS وارد شوید و دسترسی چند Package و Table را به کاربر استفاده کننده بدهید

:کد

GRANT EXECUTE ON APEX_040200.WWV_FLOW_PLATFORM to public;

GRANT EXECUTE ON APEX_040200.wwv_flow_image_generator to public;
GRANT SELECT  ON APEX_040200.wwv_flow_request_verifications TO PUBLIC;
GRANT EXECUTE ON APEX_UTIL  TO PUBLIC;

سپس شما در صفحه مورد نظر یک PLSQL Region بسازید با این کد

:کد

sys.htp.p(‘<p>’ || wwv_flow_lang.system_message(p_name=>’SERVICE_SIGNUP.ACCEPT’)||'</p>’);
sys.htp.p(‘<table class=”htmldbStandard3″ cellspacing=”0″ cellpadding=”0″ border=”0″ summary=””>’);
sys.htp.p(‘<tr>’);
sys.htp.p(‘<td class=”htmldbFDB”>
<img src=”APEX_040200.wwv_flow_image_generator.get_image?p_position=1&p_sessionid=’|| :APP_SESSION ||'” height=”60″, width=”40″/>
<img src=”APEX_040200.wwv_flow_image_generator.get_image?p_position=2&p_sessionid=’|| :APP_SESSION ||'” height=”60″, width=”40″/>
<img src=”APEX_040200.wwv_flow_image_generator.get_image?p_position=3&p_sessionid=’|| :APP_SESSION ||'” height=”60″, width=”40″/>
<img src=”APEX_040200.wwv_flow_image_generator.get_image?p_position=4&p_sessionid=’|| :APP_SESSION ||'” height=”60″, width=”40″/>
<img src=”APEX_040200.wwv_flow_image_generator.get_image?p_position=5&p_sessionid=’|| :APP_SESSION ||'” height=”60″, width=”40″/>
</td>’);
sys.htp.p(‘</tr>’);
sys.htp.p(‘</table>’);
sys.htp.p(‘<a href=”f?p=&APP_ID.:&APP_PAGE_ID.:’||:APP_SESSION||'”>’||wwv_flow_lang.system_message(‘REGEN_VER’)||'</a>’);

در اين مرحله آيتمي از نوع Text Filed ايجاد نموده تا كد امنيتي توسط كاربر وارد شود

جهت کنترل آيتم كد امنيتي Validation Beforsubmit Function Returning Boolean با کد زیر بسازید باید توجه داشته باشید در این کد نام آیتم مورد نظر خود را بگذارید

:کد

begin
for c1 in (
select * from APEX_040200.wwv_flow_request_verifications
where session_id = :APP_SESSION
) loop
if c1.verification_string = :P51_VERIFICATION_CODE then
;      return true;
else
— Reset incorrectly entered verification code in session state
— since this value is not very useful (the user will see a new
— code).
apex_util.set_session_state(
p_name  => ‘P51_VERIFICATION_CODE’,
p_value => ”
);
return false;
end if;
end loop;

return false;
end;

مديريت فايل و دايركتوري درمحيط اوراكل و اپكس(Apex)

يكي از مشكلات در محيط اوراكل ساخت دايركتوري ، فايل و … مي باشد و با استفاده از دستورات اوراكل فقط مي توان Oracle Directory ساخت و هر Oracle Directory فقط به يك دايركتوري متصل مي باشد و امكان دسترسي به Subdirectory وجود ندارد
براي حل اين مشكل از Java مي توان استفاده نمود به روش زير:

1- با كاربر SYS به بانك متصل شويد.
2- يك Java Sourec با نام “FileHandler” به روش زير ايجاد نمائيد.

CREATE OR REPLACE AND COMPILE JAVA SOURCE NAMED “FileHandler” AS
import java.lang.*;
import java.util.*;
import java.io.*;
import java.sql.Timestamp;

public class FileHandler
{
private static int SUCCESS = 1;
private static int FAILURE = 0;

public static int canRead (String path) {
File myFile = new File (path);
if (myFile.canRead()) return SUCCESS; else return FAILURE;
}

public static int canWrite (String path) {
File myFile = new File (path);
if (myFile.canWrite()) return SUCCESS; else return FAILURE;
}

public static int createNewFile (String path) throws IOException {
File myFile = new File (path);
if (myFile.createNewFile()) return SUCCESS; else return FAILURE;
}

public static int delete (String path) {
File myFile = new File (path);
if (myFile.delete()) return SUCCESS; else return FAILURE;
}

public static int exists (String path) {
File myFile = new File (path);
if (myFile.exists()) return SUCCESS; else return FAILURE;
}

public static int isDirectory (String path) {
File myFile = new File (path);
if (myFile.isDirectory()) return SUCCESS; else return FAILURE;
}

public static int isFile (String path) {
File myFile = new File (path);
if (myFile.isFile()) return SUCCESS; else return FAILURE;
}

public static int isHidden (String path) {
File myFile = new File (path);
if (myFile.isHidden()) return SUCCESS; else return FAILURE;
}

public static Timestamp lastModified (String path) {
File myFile = new File (path);
return new Timestamp(myFile.lastModified());
}

public static long length (String path) {
File myFile = new File (path);
return myFile.length();
}

public static String list (String path) {
String list = “”;
File myFile = new File (path);
String[] arrayList = myFile.list();

Arrays.sort(arrayList, String.CASE_INSENSITIVE_ORDER);

for (int i=0; i < arrayList.length; i++) {
// Prevent directory listing expanding if we will blow VARCHAR2 limit.
if ((list.length() + arrayList[i].length() + 1) > 32767)
break;

if (!list.equals(“”))
list += “,” + arrayList[i];
else
list += arrayList[i];
}
return list;
}

public static int mkdir (String path) {
File myFile = new File (path);
if (myFile.mkdir()) return SUCCESS; else return FAILURE;
}

public static int mkdirs (String path) {
File myFile = new File (path);
if (myFile.mkdirs()) return SUCCESS; else return FAILURE;
}

public static int renameTo (String fromPath, String toPath) {
File myFromFile = new File (fromPath);
File myToFile = new File (toPath);
if (myFromFile.renameTo(myToFile)) return SUCCESS; else return FAILURE;
}

public static int setReadOnly (String path) {
File myFile = new File (path);
if (myFile.setReadOnly()) return SUCCESS; else return FAILURE;
}

public static int copy (String fromPath, String toPath) {
try {
File myFromFile = new File (fromPath);
File myToFile = new File (toPath);

InputStream in = new FileInputStream(myFromFile);
OutputStream out = new FileOutputStream(myToFile);

byte[] buf = new byte[1024];
int len;
while ((len = in.read(buf)) > 0) {
out.write(buf, 0, len);
}
in.close();
out.close();
return SUCCESS;
}
catch (Exception ex) {
return FAILURE;
}
}
};
/

—————————–

3- يك Package با نام Nepaco_file_api به روش زير ايجاد نمائيد

CREATE OR REPLACE PACKAGE Nepaco_file_api AS

FUNCTION canRead (p_path IN VARCHAR2) RETURN NUMBER
AS LANGUAGE JAVA
NAME ‘FileHandler.canRead (java.lang.String) return java.lang.int‘;

FUNCTION canWrite (p_path IN VARCHAR2) RETURN NUMBER
AS LANGUAGE JAVA
NAME ‘FileHandler.canWrite (java.lang.String) return java.lang.int‘;

FUNCTION createNewFile (p_path IN VARCHAR2) RETURN NUMBER
AS LANGUAGE JAVA
NAME ‘FileHandler.createNewFile (java.lang.String) return java.lang.int‘;

FUNCTION delete (p_path IN VARCHAR2) RETURN NUMBER
AS LANGUAGE JAVA
NAME ‘FileHandler.delete (java.lang.String) return java.lang.int‘;

FUNCTION exists (p_path IN VARCHAR2) RETURN N UMBER
AS LANGUAGE JAVA
NAME ‘FileHandler.exists (java.lang.String) return java.lang.int‘;

FUNCTION isDirectory (p_path IN VARCHAR2) RETURN NUMBER
AS LANGUAGE JAVA
NAME ‘FileHandler.isDirectory (java.lang.String) return java.lang.int‘;

FUNCTION isFile (p_path IN VARCHAR2) RETURN NUMBER
AS LANGUAGE JAVA
NAME ‘FileHandler.isFile (java.lang.String) return java.lang.int‘;

FUNCTION isHidden (p_path IN VARCHAR2) RETURN NUMBER
AS LANGUAGE JAVA
NAME ‘FileHandler.isHidden (java.lang.String) return java.lang.int‘;

FUNCTION lastModified (p_path IN VARCHAR2) RETURN DATE
AS LANGUAGE JAVA
NAME ‘FileHandler.lastModified (java.lang.String) return java.sql.Timestamp‘;

FUNCTION length (p_path IN VARCHAR2) RETURN NUMBER
AS LANGUAGE JAVA
NAME ‘FileHandler.length (java.lang.String) return java.lang.long‘;

FUNCTION list (p_path IN VARCHAR2) RETURN VARCHAR2
AS LANGUAGE JAVA
NAME ‘FileHandler.list (java.lang.String) return java.lang.String‘;

FUNCTION mkdir (p_path IN VARCHAR2) RETURN NUMBER
AS LANGUAGE JAVA
NAME ‘FileHandler.mkdir (java.lang.String) return java.lang.int‘;

FUNCTION mkdirs (p_path IN VARCHAR2) RETURN NUMBER
AS LANGUAGE JAVA
NAME ‘FileHandler.mkdirs (java.lang.String) return java.lang.int‘;

FUNCTION renameTo (p_from_path IN VARCHAR2,
p_to_path IN VARCHAR2) RETURN NUMBER
AS LANGUAGE JAVA
NAME ‘FileHandler.renameTo (java.lang.String, java.lang.String) return java.lang.int‘;

FUNCTION setReadOnly (p_path IN VARCHAR2) RETURN NUMBER
AS LANGUAGE JAVA
NAME ‘FileHandler.setReadOnly (java.lang.String) return java.lang.int‘;

FUNCTION copy (p_from_path IN VARCHAR2,
p_to_path IN VARCHAR2) RETURN NUMBER
AS LANGUAGE JAVA
NAME ‘FileHandler.copy (java.lang.String, java.lang.String) return java.lang.int‘;

END file_api;
/

دسترسي هاي زير را به كاربر SYS اعطا نمائيد

BEGIN
DBMS_JAVA.grant_permission(‘SYS’, ‘java.io.FilePermission‘, ‘<<ALL FILES>>’, ‘read ,write, execute, delete‘);
DBMS_JAVA.grant_permission(‘SYS’, ‘SYS:java.lang.RuntimePermission’, ‘writeFileDescriptor‘, ”);
DBMS_JAVA.grant_permission(‘SYS’, ‘SYS:java.lang.RuntimePermission’, ‘readFileDescriptor‘, ”);
END;
GRANT JAVAUSERPRIV TO SYS;

dir=”LTR”>private static int FAILURE = 0;

public static int canRead (String path) {
File myFile = new File (path);
if (myFile.canRead()) return SUCCESS; else return FAILURE;
}

public static int canWrite (String path) {
File myFile = new File (path);
if (myFile.canWrite()) return SUCCESS; else return FAILURE;
}

public static int createNewFile (String path) throws IOException {
File myFile = new File (path);
if (myFile.createNewFile()) return SUCCESS; else return FAILURE;
}

public static int delete (String path) {
File myFile = new File (path);
if (myFile.delete()) return SUCCESS; else return FAILURE;
}

public static int exists (String path) {
File myFile = new File (path);
if (myFile.exists()) return SUCCESS; else return FAILURE;
}

public static int isDirectory (String path) {
File myFile = new File (path);
if (myFile.isDirectory()) return SUCCESS; else return FAILURE;
}

public static int isFile (String path) {
File myFile = new File (path);
if (myFile.isFile()) return SUCCESS; else return FAILURE;
}

public static int isHidden (String path) {
File myFile = new File (path);
if (myFile.isHidden()) return SUCCESS; else return FAILURE;
}

public static Timestamp lastModified (String path) {
File myFile = new File (path);
return new Timestamp(myFile.lastModified());
}

public static long length (String path) {
File myFile = new File (path);
return myFile.length();
}

public static String list (String path) {
String list = “”;
File myFile = new File (path);
String[] arrayList = myFile.list();

Arrays.sort(arrayList, String.CASE_INSENSITIVE_ORDER);

for (int i=0; i < arrayList.length; i++) {
// Prevent directory listing expanding if we will blow VARCHAR2 limit.
if ((list.length() + arrayList[i].length() + 1) > 32767)
break;

if (!list.equals(“”))
list += “,” + arrayList[i];
else
list += arrayList[i];
}
return list;
}

public static int mkdir (String path) {
File myFile = new File (path);
if (myFile.mkdir()) return SUCCESS; else return FAILURE;
}

public static int mkdirs (String path) {
File myFile = new File (path);
if (myFile.mkdirs()) return SUCCESS; else return FAILURE;
}

public static int renameTo (String fromPath, String toPath) {

Auto Redirect in Oracle apex

1. Copy Code in Html Header Region In Edit page 

<meta http-equiv="refresh" content="5; URL=http://192.168.1.3:7777/apex423/f?p=175:1:&SESSION.">
<meta name="keywords" content="automatic redirection">

Dynamic Image In plsql region

براي نمايش يك تصوير موجود در ديتابيس در يك پيج اوراكل اپكس مي توان از آيتم display image استفاده كرد. براي اينكار Setting مربوط به Display image مقدار Based on روي blob column returned by sql statement قرار داده و با استفاده از دستور sql مناسب تصوير از ديتابيس خوانده مي شود. در حالي كه اين يك راهكار ساده براي نمايش تصاوير است اما انعطاف لازم براي نمايش در يك HTML REGION را ندارد. به عنوان مثال در موارد متعددي لازم است تا يك فرم با استفاده از HTML REGION ساخته شود و در آن يك تصوير مشخص از ديتابيس FETCH شده و با استفاده از تگ <IMG> نمايش داده شود. در اين نوشتار نحوه ي نمايش دايناميك تصاوير موجود در ديتابيس در يك HTML REGION شرح داده شده است.
:براي اين منظور يك PROCEDURE به صورت ذيل مي سازيم

دریافت از فایل پیوست

فایل پیوست:

create or replace procedure am_pr_show_img(in_pk_col_value number,in_table_name varchar2,in_pk_col_name varchar2,in_blob_col_name 

varchar2) as
v_str varchar2(4000);
v_value varchar2(1000);
v_lob blob;
v_temp_mime varchar2(1000);
v_temp_fname varchar2(1000);
begin
v_str := ‘select ‘||in_blob_col_name ||’ from ‘||in_table_name ||’ where ‘||in_pk_col_name ||’=’|| in_pk_col_value;
EXECUTE IMMEDIATE v_str into v_lob;
wpg_docload.download_file( v_lob ); 

end;

اين PROCEDURE نام جدول و نام ستون با كليد اصلي و مقدار آن و نام ستون حاوي تصوير(BLOB) را به عنوان ورودي دريافت مي كند و تصوير BLOB را درون PAGE بارگذاري مي نمايد.
حال يك صفحه جديد بايستي ايجاد شود تا از آدرس اين صفحه به عنوان src مربوط به تگ IMG استفاده شود. در اين صفحه بايستي procedure كه در بالا ساخته شد صدا زده شود:
( به عنوان مثال صفحه 54 براي اينكار ساخته ش ده است. بايستي توجه داشته كه پارامتر هاي لازم براي procedure در اين صفحه بايستي فراهم شود. در اينجا مقدار in_pk_col_value با استفاده از :P54_MARKAZ_CODE مقدار دهي مي شود)

WWV_FLOW.G_PAGE_TEXT_GENERATED := TRUE;

AM_PR_SHOW_IMG(:P54_MARKAZ_CODE,’AM_TB_MARKAZ’,’MARKAZ_CODE’,’LOGO’);
END;
حالا در HTML REGION مورد نظر بايستي در تگ IMG مقدار SRC را به صورت زير مقدار دهيم، در اين آدرس دهي از صفحه 51 مقدار MARKAZ_CODE به صفحه 54 پاس داده شده است.

:کد

<img src=”f?p=440:54:&SESSION.:::54:P54_MARKAZ_CODE:&P51_MARKAZ_CODE.” height=”72″ width=”73″  />

انتشار نسخه جدید اوراکل اپکس 19.2

  • The Early Adopter program for Oracle APEX 19.2 is now available, and it’s open to everyone!  The URL to access it is:

    https://tryapexnow.com/

    Prior to every major release of Oracle APEX, we conduct a hosted Early Adopter (EA) program.  This is similar to a hosted beta, and everyone is welcome to participate and provide feedback.  It’s a great opportunity for the community to participate in the release process of APEX.  We welcome your feedback about features, user interface, bugs, functionality, and more.  Ultimately, it is your feedback which helps us shape Oracle APEX into a high-quality, polished framework.

    There are some exciting new features in this release, including:

    • Faceted Search
    • All new Team Development
    • Enhanced Popup LOV
    • Expanded Shared LOVs
    • REST Enabled Interactive Grid
    • Data Loading into Existing Tables
    • Upgraded Oracle JET
    • Dark Mode theme style in Universal Theme
    • Learn more about the new features in APEX 19.2

     As always, there are a few things to keep in mind:

    • This is hosted only.  We do not make early releases of APEX available for on-premises installation.
    • Everything you do on the Early Adopter instances of APEX should be considered throw-away.  There is no guarantee that APEX applications you build in the Early Adopter instance will even be installable in the production release of Oracle Application Express 19.2.
    • If you’re reading this blog post after APEX 19.2 is released, you will find that the Early Adopter at https://tryapexnow.com/ is no longer available.

    We look forward to your feedback.  And thanks for being such strong supporters of Oracle APEX.  Our magnificent APEX community is to be envied!