在PL/SQL中调用Oracle ERP请求(一)-提交单个请求

来源:互联网 发布:java 百分比格式化 编辑:程序博客网 时间:2024/05/05 07:45
最近开发一个从PLM系统中通过工作流程向ORACLE ERP系统中导入项目信息的程序,Oracle ERP系统有独立的请求模块,所以这样我们只需调用到ERP模块中的请求即可,由于PLM系统用的是windchill,底层代码是JAVA程序,并且从PLM系统中导出的数据需要经过验证后才能正式导入ERP,所以采用了使用JAVA调用存储过程的方式,过程为:

      1. PLM导出文件流数据;

      2. PLM系统导出数据导入Oracle ERP系统中临时表;

      3. 验证临时表中数据;

      4. 临时表导入ERP接口表;

      5. 提交单个请求或请求集。

 

       下面是如何提交单个请求代码,希望对大家有帮助。网络上有些文章在对参数是否作为子请求提交解释有错误,大家在使用时建议多看一下Oracle官方文档,以免使用过程中造成错误。

PROCEDURE prc_do_import_request(prm_org     IN NUMBER,                                  prm_appcode OUT NUMBER,                                  prm_appmsg  OUT VARCHAR2) IS    custom_exception EXCEPTION;    success        BOOLEAN;    v_request_id   NUMBER;    v_phase        VARCHAR2(30);    v_status       VARCHAR2(30);    v_dev_phase    VARCHAR2(30);    v_dev_status   VARCHAR2(30);    v_message      VARCHAR2(1000);    v_request_flag BOOLEAN;    v_start_time   VARCHAR2(30);  BEGIN    prm_appcode := 0;    --初始化设置    fnd_global.apps_initialize(user_id      => global_user_id,--用户ID                               resp_id      => global_resp_id,          --责任ID                                 resp_appl_id => global_resp_appl_id);   --应用ID    --设置打印参数    success := fnd_request.set_print_options(printer => global_printer,                                             style   => global_style,                                             copies  => global_copies);    IF NOT success THEN      RAISE custom_exception;    END IF;    v_start_time := to_char(SYSDATE, 'DD-MON-YYYY HH24:MI:SS');    --调用请求    v_request_id := fnd_request.submit_request('INV',   --应用                                               'INCOIN',                  --程序                                               '',                              --程序说明                                               v_start_time,               --开始时间                                               FALSE,                        --是否作为子请求提交,该请求如果是被其它请求调用设为TRUE,否则为FALSE                                               prm_org,                    --自定义参数1:组织机构                                               '1',                             --自定义参数2 :                                               '1',                             --自定义参数3:                                               '1',                             --自定义参数4:                                               '1',                             --自定义参数5:                                               '1',                             --自定义参数6:                                               '1',                             --自定义参数7:                                               chr(0));                       --结束标识    IF v_request_id = 0 THEN      RAISE custom_exception;    ELSE      COMMIT;    END IF;    --等待    v_request_flag := fnd_concurrent.wait_for_request(request_id => v_request_id,--返回的请求ID                                                      INTERVAL   => 5,                                     --重复检测时间差                                                      max_wait   => 0,                                       --最长等待时间,0为一直等待                                                        phase      => v_phase,                                                                                                                status     => v_status,                                                      dev_phase  => v_dev_phase,                                                      dev_status => v_dev_status,                                                      message    => v_message);    IF v_request_flag THEN      IF v_dev_status = 'NORMAL' THEN        NULL;      ELSE        RAISE custom_exception;      END IF;    ELSE      RAISE custom_exception;    END IF;  EXCEPTION    WHEN custom_exception THEN      prm_appcode := -1;      prm_appmsg  := '错误提示:导入ERP正式表出错!' || SQLERRM;    WHEN OTHERS THEN      prm_appcode := -1;      prm_appmsg  := '错误提示:导入ERP正式表出错!' || SQLERRM;  END prc_do_import_request;


0 0