大约10年前,我试图在MS SQLServer上构建APEX应用程序。这是可能的,但表现不令人满意。(你可以在这里阅读这篇文章)……
今天我将介绍如何使用APEX和MySQL。显然,我不认为只在MySQL上构建APEX app是一个好主意。它可以作为Hybryd解决方案的一部分(Oracle + MySQL或Postrgres)。
我的描述涵盖了与MySQL的集成。从而实现了基于MySQL数据的交互式报表和CRUD表单的APEX应用。
描述包括两个部分:第一部分是一个MySQL站点,第二部分是一个APEX应用程序部分
先决条件:
- Oracle 11 g +
- 顶18.1 +
- MySQL / Postgres
- RestSQL
i . MySQL部分
1. MySQL包含一个apexutil表的简单apexdb数据库。
2. 要使用此数据库,请安装RestSQL。
RestSQL是什么?RestSQL是一个用于HTTP客户机的开源的、超轻量级的数据访问层。RestSQL是经典三层体系结构(客户机、应用程序服务器和数据库)的中间层的持久性框架或引擎。它也可以作为Java库嵌入到任何中间层中。在项目主页上,您可以找到一些分发类型。我选择WAR是因为我可以将它部署在Tomcat上,与我使用的orb相同。
Instalation:
1. 编辑$TOMCAT_HOME/conf/context.xml文件,如(添加这行):
<Parameter name="org.restsql.properties" value="/etc/opt/restsql/restsql.properties" override="false" />
2. 在/etc/op /restsql/路径中创建文件 restsql.properties ,并粘贴到此信息中:
database.password = MySQL_Pass
database.user = root
sqlresources.dir = /etc/opt/restsql
database.url = jdbc:mysql://localhost:3306
3.下一个放置restql-X.X.XX.war文件,新名称为restql.war在$TOMCAT/webapps目录中,并弹跳TOMCAT服务器。
现在尝试连接到RestSQL模块:转到http://localhost:8080/restsql。如果你连接成功,创造资源。转到工具菜单,清除子目录字段,并在数据库字段中使用数据库名称,在我的例子中是apexdb。然后单击Generate按钮。在此过程中,RestSQL扫描MySQL数据库并基于表创建webservice定义。
现在是检查特定http端点的时候了。在RestSQL模块中,转到资源菜单http://localhost:8080/restsql/res/ 并单击“query/json”链接。
如果您看到json文本下面的结果,那么您就到了。你已经准备好了MySQL网站。接下来我们将转向Oracle这边:
{ "apexutils": [
{ "apx_id": 1, "apx_service": "Development", "apx_percentage": 75 },
{ "apx_id": 2, "apx_service": "Apex hosting", "apx_percentage": 3 },
{ "apx_id": 3, "apx_service": "Apex system sustain", "apx_percentage": 15 },
{ "apx_id": 4, "apx_service": "Other", "apx_percentage": 7 },
]
}
II Oralce APEX
要使用Web源作为交互式报表源,请准备“远程服务器”和“Web源模块”。转到共享组件并单击右侧侧边栏中的远程服务器。下一步使用创建按钮和填写字段:
准备“远程服务器”
创建Web源模块
然后创建Web源模块。转到共享组件并单击Web源模块链接。使用创建按钮,并遵循向导步骤:
步骤1(Step 1)
Step 2
Step 3
Step 4
Click Advanced !
Step 5
Step 6
现在您可以创建交互式报表了。没有基于外部数据构建IR的特殊步骤。在最后的向导步骤中设置数据源“Web source”并在Web source模块字段中选择“APEXUTIL”。
报告准备好了,但是如何操作MySQL数据从APEX上下文?
在APEX 18.1没有表单向导来构建基于Web源模块的表单。只有一个向导来构建基于“遗留Web服务引用”的表单/报告:(我希望它是临时状态,在未来会得到增强。(也许是我没有找到它……也许您知道如何使用新的“Web源模块”作为表单源?)在这种情况下,最好的解决办法是手工创建表单。转到用于构建IR的页面。添加静态内容区域,有4个项目和1个按钮,像这样:
P2_ID - hidden
P2_SERVICE - text field
P2_PERCENTAGE - text field
P2_START_DATE - data picker
添加编辑 (按钮)-操作(提交页面)
IR区域也必须改变。添加一个新的列(动态项目/复选框/)和删除按钮。APX_ID列也必须更改,使其作为一个链接。
更改APX ID列。
进入APX_ID列属性->链接,如下设置:
添加“检查”新列
转到交互式报表区域->本地后处理->类型:SQL查询,粘贴此查询:
SELECT
APEX_ITEM.CHECKBOX2(1,APX_ID) as CHECKS,
APX_ID as APX_ID,
APX_SERVICE as APX_SERVICE,
APX_PERCENTAGE as APX_PERCENTAGE,
APX_START_DATE as APX_START_DATE
from #APEX$SOURCE_DATA#
更改检查列的安全性部分->转义特殊字符->号
添加删除按钮-操作(提交页面)
保存更改并从IR操作菜单中选择检查列。现在页面看起来像截图:
UI准备好了,现在添加进程:
创建3个过程:
1. MySQL CRU操作
来源:PL / SQL代码
条件:服务器端条件->时按钮按下->附加物
declare
l_json clob;
l_response clob;
l_http_method varchar2(128);
parsed_json apex_json.t_values;
begin
/* Start JSON request preparation */
apex_json.initialize_clob_output;
apex_json.open_object;
apex_json.open_array('apexutils');
apex_json.open_object;
if :P2_ID is not null then
/* Update process */
l_http_method := 'PUT';
apex_json.write('apx_id', :P2_ID);
else
/* Insert process */
l_http_method := 'POST';
end if;
apex_json.write('apx_service', :P2_SERVICE);
apex_json.write('apx_percentage', :P2_PERCENTAGE);
apex_json.write('apx_start_date', to_char(to_date(:P2_START_DATE,'DD-MON-YY'),'YYYY-MM-DD'));
apex_json.close_object;
apex_json.close_array;
apex_json.close_object;
l_json := apex_json.get_clob_output;
/* HTTP request preparation. ACL must be set */
apex_web_service.g_request_headers(1).name := 'Content-Type';
apex_web_service.g_request_headers(1).value := 'application/json';
l_response := APEX_WEB_SERVICE.MAKE_REST_REQUEST(
p_url =>'http://192.168.56.101:8080/restsql/res/apexutil',
p_http_method =>l_http_method,
p_body =>l_json) ;
end;
2. MySQL 删除操作
来源:PL / SQL代码
条件:服务器端条件-按下按钮时> ->删除
declare
l_json clob;
l_response clob;
l_http_method varchar2(128);
parsed_json apex_json.t_values;
begin
/* Start JSON request preparation */
apex_json.initialize_clob_output;
apex_json.open_object;
apex_json.open_array('apexutils');
/* Start process dynamic items. Read checked checkboxes */
FOR i IN 1..APEX_APPLICATION.G_F01.COUNT LOOP
apex_json.open_object;
apex_json.write('apx_id', APEX_APPLICATION.G_F01(i));
apex_json.close_object;
END LOOP;
apex_json.close_array;
apex_json.close_object;
l_json := apex_json.get_clob_output;
/* HTTP request preparation. ACL must be set */
apex_web_service.g_request_headers(1).name := 'Content-Type';
apex_web_service.g_request_headers(1).value := 'application/json';
l_response := APEX_WEB_SERVICE.MAKE_REST_REQUEST(
p_url => 'http://192.168.56.101:8080/restsql/res/apexutil',
p_http_method => 'DELETE',
p_body => l_json) ;
end;
3.清除会话
类型:清除当前页面上的所有项目
条件:服务器端条件->时按钮按下->附加物
完成了!:)
如果你想看看它是如何工作的,请观看视频:
原文:https://apexutil.blogspot.com/2018/07/oracle-apex-with-mysql.html
本文:http://jiagoushi.pro/node/1183
讨论:请加入知识星球【仙翁快速和低代码开发】或者QQ群【1061766808】
最新内容
- 2 days ago
- 2 days 14 hours ago
- 4 days ago
- 4 days 18 hours ago
- 4 days 18 hours ago
- 4 days 18 hours ago
- 4 days 19 hours ago
- 4 days 19 hours ago
- 4 days 19 hours ago
- 4 days 20 hours ago