FORM调用并发请求

本文提供了一个OracleEBSFORM开发中调用并发请求并监控其完成状态的示例代码。通过提交请求并使用fnd_concurrent.wait_for_request等待请求处理完成,展示了如何在FORM界面中操作并发请求。

Oracle EBS FORM开发,有时候需要在客户化form界面调用并发请求,并打开请求界面。代码如下所示,仅供参考。


DECLARE
	l_question_result NUMBER; 
	l_request_id      NUMBER; 
	--等待请求字段
	l_bl_result       BOOLEAN;
	l_phase           VARCHAR2(240);
	l_status          VARCHAR2(240);
	l_dev_phase       VARCHAR2(240);
	l_dev_status      VARCHAR2(240);
	l_message         VARCHAR2(240);
BEGIN 	
	 
	IF :blk_qry.period_yearmonth IS NULL THEN 
		fnd_message.set_string('查询界面字段“期间”为空');
		fnd_message.show;
		RAISE form_trigger_failure; 
	END IF ; 
	
	fnd_message.set_string('查询界面“BU编码”和“期间”将作为参数运行请求“XXMA:管会费用收集”,是否继续?');
	l_question_result := fnd_message.question('YES'
	                                          ,NULL
	                                          ,'CANCEL'
	                                          ,'1'
	                                          ,'3'
	                                          ,'question'); 
	IF l_question_result = 1 THEN 
		--提交请求
		l_request_id  := fnd_request.submit_request('XXMA'
		                                           ,'XXMA_EXPENSE_COLLECT_PKG'
		                                           ,NULL
		                                           ,SYSDATE
		                                           ,FALSE
		                                           ,:blk_qry.bu_code
		                                           ,:blk_qry.period_yearmonth
		                                           ,chr(0));
	 IF l_request_id >0 THEN
	 	  IF NOT(app_form.quietcommit) THEN
	 	  	 RAISE form_trigger_failure;
	 	  END IF; 
	 	  
	 	  fnd_function.execute(function_name => 'fnd_fndrsrun'
	 	                      ,open_flag     => 'Y'
	 	                      ,session_flag  => 'Y'
	 	                      ,other_params  => 'concurrent_program_name="XXMA_EXPENSE_COLLECT_PKG" program_appl_short_name="XXMA"dodt_req_id ="'||l_request_id||'"');      
	 	 --等待请求处理完成
	 	 l_bl_result := fnd_concurrent.wait_for_request(request_id  => l_request_id
	 	                                               ,INTERVAL    => 1
	 	                                               ,max_wait    => 360
	 	                                               ,phase       => l_phase
	 	                                               ,status      => l_status
	 	                                               ,dev_phase   => l_dev_phase
	 	                                               ,dev_status  => l_dev_status
	 	                                               ,message     => l_message);                            
	 ELSE
	 	  fnd_message.set_string('提交并发请求失败,请联系系统管理员!');
	 	  fnd_message.error;
	 	  RAISE form_trigger_failure; 
	 END IF;
	ELSE 
		RAISE form_trigger_failure; 	
	END IF ;
	
END; 

 

### 多文件并发上传的实现 在前端开发中,多文件并发上传可以通过多种技术手段来实现。以下是基于 `jQuery`、`Axios` 和 `Fetch` 的实现方式。 #### 使用 jQuery 实现多文件并发上传 通过 jQuery 提供的 `.ajax()` 方法可以轻松处理多个文件的并发上传。以下是一个简单的代码示例: ```javascript function uploadFiles(files) { const promises = []; $.each(files, function(index, file) { const formData = new FormData(); formData.append('file', file); const promise = $.ajax({ url: '/upload', type: 'POST', data: formData, processData: false, contentType: false }); promises.push(promise); }); return Promise.all(promises).then(results => console.log("All files uploaded", results)); } ``` 上述代码展示了如何遍历文件列表并创建多个 AJAX 请求[^1]。最终使用 `Promise.all` 来等待所有请求完成。 --- #### 使用 Axios 实现多文件并发上传 Axios 是一个功能强大的 HTTP 客户端库,支持更现代化的 JavaScript 特性。下面是如何使用 Axios 进行多文件并发上传的例子: ```javascript async function uploadFilesWithAxios(files) { const requests = Array.from(files).map(file => { const formData = new FormData(); formData.append('file', file); return axios.post('/upload', formData, { headers: { 'Content-Type': 'multipart/form-data' } }); }); try { const responses = await Promise.all(requests); console.log("All files uploaded successfully:", responses); } catch (error) { console.error("Error uploading files:", error); } } ``` 此代码片段利用了 Axios 的 POST 请求能力以及 ES6 的 `Promise.all` 方法[^2],从而实现了高效的并发上传逻辑。 --- #### 使用 Fetch API 实现多文件并发上传 Fetch API 是原生浏览器接口之一,提供了简洁而灵活的方式来进行网络请求。下面是其应用到多文件上传场景下的例子: ```javascript async function uploadFilesWithFetch(files) { const uploads = Array.from(files).map(async (file) => { const formData = new FormData(); formData.append('file', file); const response = await fetch('/upload', { method: 'POST', body: formData }); if (!response.ok) throw new Error(`Upload failed with status ${response.status}`); return response.json(); // 或者其他形式的数据返回 }); try { const results = await Promise.all(uploads); console.log("All files have been uploaded.", results); } catch (err) { console.error(err.message || err.toString()); }
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值