xml模板提交请求submit_request

本文介绍如何使用Oracle EBS中的fnd_request.add_layout及fnd_request.submit_request函数来设置和提交报表请求,包括参数配置及提交后的状态判断。

摘要生成于 C知道 ,由 DeepSeek-R1 满血版支持, 前往体验 >

1. 首先调用函数 fnd_request.add_layout 来确定输出文件
调用方法: result := fnd_request.add_layout(template_appl_name => :template_appl_name,
                       template_code => :template_code,
                       template_language => :template_language,
                       template_territory => :template_territory,
                       output_format => :output_format,
                       nls_language => :nls_language);
其中 result 为 boolean 类型的变量
template_appl_name 指请求模板对应的应用简称
template_code 指请滶模板的简称,一般与请求的简称相同
template_language 指运行请求时模板的语言,中文为 zh,英文为 us,此参数必需在挂模板时所选的语言范围内
template_territory 指语言对应的区域,中国为 CN
output_format 指报表输出时的格式类型,如 PDF,EXCEL等
nls_language 留空即可
2. 在 result 返回值为 true 时再调用函数 FND_REQUEST.SUBMIT_REQUEST 来正式提交请求
调用方法: ln_request_id := fnd_request.submit_request(application => :application,
                                        program => :program,
                                        description => :description,
                                        start_time => :start_time,
                                        sub_request => sub_request,
                                        argument1..100 => :argument1..100);
其中 ln_request_id 为数值类型的变量
application 指请求对应的应用简称,必须
program 指请求的简称,必须
description 描述,在调用时留空即可
start_time 指请求开始运行的时间,在调用时留空即可,表求即时执行
sub_request 指当前请求是否是子请求,一般在调用时赋值 false,必须
argument1..100 指调用请求时的参数,最多100个,pl/sql中调用时可在最后一个参数后用 chr(0)来表示为最后一个参数,不用写满100个参数,如果form中调用则需要写满100个参数
3. 2步执行后如果 ln_request_id > 0 表示提交成功,则需要显性执行 commit 才可最终提交成功
例: procedure CUX_SUBMIT_REQUEST(p_sob_id in number,
                                                       p_com_code in varchar2,
                                                       p_date_f in varchar2,
                                                       p_date_t in varchar2,
                                                         p_je_batch_id in number,
                                                         p_je_header_id in number
                                                                  ) is
  ln_request_id NUMBER;
  exce_occ EXCEPTION;
  b_wait BOOLEAN;
  v_phase VARCHAR2(80);
  v_status VARCHAR2(80);
  v_dev_phase VARCHAR2(80);
  v_dev_status VARCHAR2(80);
  v_message VARCHAR2(80);
BEGIN
  b_wait := fnd_request.add_layout('CUX','CUX0GLJEPTA4','zh','CN','PDF','');
  if b_wait then
    ln_request_id:= FND_REQUEST.SUBMIT_REQUEST(
                      'CUX', 'CUX0GLJEPTA4', '', '', FALSE,
                      p_sob_id,p_com_code ,p_date_f,p_date_t,'','','','','','','',
                      p_je_batch_id,
                      p_je_header_Id,'','Y','N','','',chr(0),'',
                       '','','','','','','','','','',
                       '','','','','','','','','','',
                       '','','','','','','','','','',
                       '','','','','','','','','','',
                       '','','','','','','','','','',
                       '','','','','','','','','','',
                       '','','','','','','','','','',
                       '','','','','','','','','','');
     IF ln_request_id = 0 then
      fnd_message.debug('您的请求提交失败');
    else
       fnd_message.debug('您的请求已经提交成功,请求编号为: '||ln_request_id);
    end if;
    COMMIT;
  end if;
end CUX_SUBMIT_REQUEST;


其中要注意的几个点,
(1)对于fnd_request.submit_request的前5个人参数,第三个和第四个为空,写出null而不能写做‘’,不然会报错 rusult始终等于0,无法提交。

转载于:https://www.cnblogs.com/akami/p/6940777.html

详细解读一下这个脚本,脚本内容是 #!/usr/bin/python3 # coding=utf-8 import time import json import sys import requests from zaixian_cas_login import cas_login, HttpResponseProcessor # 假设两个文件在同一目录下 # 定义标准返回结构 SUCCESS_RES = { 'resCode': 200, 'resTime': 0, 'keyword': 'SUCCESS', 'message': '', 'data': None # 用于存放业务数据 } FAILURE_RES = { 'resCode': 500, 'resTime': 0, 'keyword': 'FAILED', 'message': '', 'error': None # 存放错误信息 } def make_business_request(url, method='get', params=None, data=None, token=None, session_cookies=None): """ 使用已登录的会话和token进行业务请求 :param url: 业务接口URL :param method: 请求方法,默认为get :param params: 查询参数 :param data: 请求体数据(用于POST) :param token: 登录成功后获取的token :param session_cookies: 登录成功后获取的session cookies :return: 标准化结果字典 """ start_time = time.time() result_template = SUCCESS_RES.copy() # 使用成功模板 try: # 创建会话并设置cookies session = requests.Session() if session_cookies: session.cookies.update(session_cookies) # 设置请求头 headers = { 'User-Agent': 'Mozilla/5.0 (Windows NT 10.0; Win64; x64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/91.0.4472.124 Safari/537.36', 'Accept': 'application/json,text/plain,text/html,application/xhtml+xml,application/xml;q=0.9,image/avif,image/webp,image/apng,*/*;q=0.8,application/signed-exchange;v=b3;q=0.7', 'Accept-Encoding': 'gzip, deflate, br, zstd', 'Connection': 'keep-alive', 'Cache-Control': 'no-cache', 'Pragma': 'no-cache' } if token: headers['Cookie'] = f'prod-token={token}' # 将token添加到Cookie # 根据方法选择请求方式 if method.lower() == 'get': response = session.get( url, params=params, headers=headers, verify=False ) elif method.lower() == 'post': response = session.post( url, data=data, headers=headers, verify=False ) else: raise ValueError(f"不支持的请求方法: {method}") # 使用HttpResponseProcessor处理响应 processor = HttpResponseProcessor(url, headers=headers) processor.response = response # 手动设置响应对象,避免重复请求 processor.raw_content = response.content processor.status_code = response.status_code text_content = processor.decode_content() # 记录响应时间 result_template['resTime'] = int((time.time() - start_time) * 1000) # 检查HTTP状态码 if response.status_code != 200: result_template.update(FAILURE_RES) # 转换为失败结构 result_template['resCode'] = response.status_code result_template['message'] = f"业务接口请求失败,状态码: {response.status_code}" result_template['error'] = text_content[:500] # 截取部分错误信息 return result_template # 尝试解析JSON响应(如果响应是JSON格式) try: json_data = json.loads(text_content) result_template['data'] = json_data except json.JSONDecodeError: result_template['data'] = text_content # 如果不是JSON,则保存文本 result_template['message'] = "业务请求成功" return result_template except Exception as e: result_template.update(FAILURE_RES) # 转换为失败结构 result_template['resTime'] = int((time.time() - start_time) * 1000) result_template['message'] = "业务请求过程中发生异常" result_template['error'] = str(e) return result_template def main(): # 第一步:登录获取token和session username = "jffwbc1" password = "R2pjcHgxMjMhQCM=" # base64编码的密码 token, session_cookies = cas_login(username, password) if not token or not session_cookies: print("登录失败,无法进行业务请求") sys.exit(1) print("登录成功!") print(f"Token: {token}") print(f"Session Cookies: {session_cookies}") # 第二步:使用获取到的token和session_cookies请求业务接口 # 示例:获取用户信息的接口 business_url = "https://assess.fifedu.com/testcenter/home/getUser" result = make_business_request(business_url, token=token, session_cookies=session_cookies) # 打印结果 print("\n业务请求结果:") print(json.dumps(result, indent=2, ensure_ascii=False)) if __name__ == '__main__': main()
最新发布
08-08
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值