• EBS_FORM_开发:关于FORM-record的复制


    1.先写PKG-FUNCTION:

    --复制个人记分卡--
      PROCEDURE people_card_copy(p_old_header_id IN NUMBER,
                                 p_new_header_id IN NUMBER,
                                 x_return_code   OUT VARCHAR2,
                                 x_return_msg    OUT VARCHAR2) IS
        l_header_rec CUX_HRPE_HEADERS_T%ROWTYPE;
        l_line_rec   CUX_HRPE_LINES_T%ROWTYPE;
        l_mid_rec    CUX_HRPE_MID_T%ROWTYPE;
        l_mend_rec   CUX_HRPE_MEND_T%ROWTYPE;
    
        l_error_msg VARCHAR2(2000);
    
        l_line_count NUMBER := 0;
        l_MID_count  NUMBER := 0;
        l_mend_count NUMBER := 0;
    
        CURSOR cur_header IS
          SELECT * FROM CUX_HRPE_HEADERS_T t WHERE t.header_id = p_old_header_id;
    
        CURSOR cur_line IS
          SELECT * FROM CUX_HRPE_LINES_T t WHERE t.header_id = p_old_header_id;
        
        CURSOR cur_MID(p_line_id NUMBER) IS
          SELECT * FROM CUX_HRPE_MID_T t WHERE t.line_id = p_line_id;
        
        CURSOR cur_mend(p_MID_id NUMBER) IS
          SELECT * FROM CUX_HRPE_MEND_T t WHERE t.MID_id = p_MID_id;
          
      BEGIN
        x_return_code := fnd_api.g_ret_sts_success;
        x_return_msg  := NULL;
    
        Open  cur_header;
        FETCH cur_header
         INTO l_header_rec;
        CLOSE cur_header;
    
        IF l_header_rec.header_id IS NULL THEN
          l_error_msg := '没找到头数据源,HEADER_ID ' || p_old_header_id;
          RAISE fnd_api.g_exc_error;
        END IF;
    
        IF p_new_header_id IS NULL THEN
          l_error_msg := '请先保存头数据,再进行复制';
          RAISE fnd_api.g_exc_error;
        END IF;
    
        
        --复制头--
        l_header_rec.created_by        := fnd_global.user_id;
        l_header_rec.last_updated_by   := fnd_global.user_id;
        l_header_rec.last_update_login := fnd_global.user_id;
        l_header_rec.creation_date     := SYSDATE;
        l_header_rec.last_update_date  := SYSDATE;
        l_header_rec.status_type       := 'NS';
    /*
        SELECT CUX_HRSC_HEADERS_T_S.nextval INTO l_header_rec.header_id FROM dual;
        INSERT INTO CUX_HRSC_HEADERS_T VALUES l_header_rec;
        p_new_header_id := l_header_rec.header_id; 
    */
    
      
        --复制行--
      FOR c_line IN cur_line LOOP
          l_line_count := l_line_count + 1;
          l_line_rec   := NULL;
    
          l_line_rec.created_by          := fnd_global.user_id;
          l_line_rec.last_updated_by     := fnd_global.user_id;
          l_line_rec.last_update_login   := fnd_global.user_id;
          l_line_rec.creation_date       := SYSDATE;
          l_line_rec.last_update_date    := SYSDATE;
          
          l_line_rec.header_id           := p_new_header_id;
          SELECT CUX_HRPE_LINES_T_S.nextval INTO l_line_rec.line_id FROM dual;
          
          l_line_rec.LINE_NUMBER         := c_line.LINE_NUMBER;
          l_line_rec.MAX_LINE_NUMBER     := c_line.MAX_LINE_NUMBER;
          l_line_rec.OBJECT_VERSION_NUMBER       := c_line.OBJECT_VERSION_NUMBER;
          
          l_line_rec.WPM_WEIGHTING      := c_line.WPM_WEIGHTING;
          l_line_rec.WPM_KPI_BIG        := c_line.WPM_KPI_BIG;
          l_line_rec.BIG_EXPLAIN        := c_line.BIG_EXPLAIN;
          
          INSERT INTO CUX_HRPE_LINES_T VALUES l_line_rec;
          --复制MID
             FOR c_MID IN cur_MID(c_line.line_id) LOOP
                --l_mend_rec   := c_mend;
                l_MID_rec := NULL;
    
                l_MID_rec.created_by          := fnd_global.user_id;
                l_MID_rec.last_updated_by     := fnd_global.user_id;
                l_MID_rec.last_update_login   := fnd_global.user_id;
                l_MID_rec.creation_date       := SYSDATE;
                l_MID_rec.last_update_date    := SYSDATE;
                
                l_MID_rec.header_id           := p_new_header_id;
                l_MID_rec.line_id             := l_line_rec.line_id;
                SELECT CUX_HRPE_MID_T_S.nextval INTO l_MID_rec.MID_id FROM dual;
                
                l_MID_rec.LINE_NUM_L              := c_mid.LINE_NUM_L;
                l_MID_rec.LINE_NUMBER             := c_mid.LINE_NUMBER;
                l_MID_rec.OBJECT_VERSION_NUMBER   := c_mid.OBJECT_VERSION_NUMBER;
                l_MID_rec.MAX_LINE_NUMBER         := c_mid.MAX_LINE_NUMBER;
                l_MID_rec.WPM_KPI_SMALL           := c_mid.WPM_KPI_SMALL;
                l_MID_rec.WPM_MEASURE_FORMULA     := c_mid.WPM_MEASURE_FORMULA;
                l_MID_rec.STD_SCORE               := c_mid.STD_SCORE;
                l_MID_rec.HARD_RATIO              := c_mid.HARD_RATIO;
                
                INSERT INTO CUX_HRPE_mid_T VALUES l_MID_rec;
                --复制mend
                 FOR c_mend IN cur_mend(c_mid.mid_id) LOOP
                    --l_mend_rec   := c_mend;
                    l_mend_rec := NULL;
    
                    l_mend_rec.created_by          := fnd_global.user_id;
                    l_mend_rec.last_updated_by     := fnd_global.user_id;
                    l_mend_rec.last_update_login   := fnd_global.user_id;
                    l_mend_rec.creation_date       := SYSDATE;
                    l_mend_rec.last_update_date    := SYSDATE;
                    
                    l_mend_rec.header_id           := p_new_header_id;
                    l_mend_rec.line_id             := l_line_rec.line_id;
                    l_mend_rec.MID_id              := l_MID_rec.MID_id;
                    SELECT CUX_HRPE_MEND_t_S.nextval INTO l_mend_rec.mend_id FROM dual;
                    
                    l_mend_rec.MEND_ORGANIZATION_ID        := c_mend.MEND_ORGANIZATION_ID;
                    l_mend_rec.MEND_PERSON_ID         := c_mend.MEND_PERSON_ID;
                    l_mend_rec.PEOPLE_COUNT   := c_mend.PEOPLE_COUNT;
                    l_mend_rec.SCD_PERCENT := c_mend.SCD_PERCENT;
                   INSERT INTO CUX_HRPE_MEND_T VALUES l_mend_rec;
             END LOOP; 
          END LOOP; 
     END LOOP;
        
        IF l_line_count = 0 THEN
          l_error_msg := '没找到评定行数据源,HEADER_ID ' || p_old_header_id;
          RAISE fnd_api.g_exc_error;
        END IF;
        
      EXCEPTION
        WHEN fnd_api.g_exc_error THEN
          x_return_code := fnd_api.g_ret_sts_error;
          x_return_msg  := l_error_msg;
        WHEN OTHERS THEN
          x_return_code := fnd_api.g_ret_sts_unexp_error;
          x_return_msg  := SQLERRM || dbms_utility.format_error_backtrace;
    
      END people_card_copy;


    2.在form中的复制按钮调用

    DECLARE
      l_return_code     VARCHAR2(1);
      l_return_msg      VARCHAR2(2000);
      l_new_header_id   NUMBER;
      l_question_result NUMBER;
      l_status     boolean;
      L_DEFAULT_WHERE VARCHAR2(2000);
      l_cur_item varchar2(200):=:system.cursor_item;
    BEGIN
    
      fnd_message.set_string('确认复制?');
      l_question_result := fnd_message.question('', '', NULL, 1, 2, NULL);
      IF l_question_result = 1 THEN
        npfm_score_card_pkg.people_card_copy(:control.copy_from,
                                      :headers.header_id,
                                      l_return_code,
                                      l_return_msg);
      
        IF l_return_code = 'S' THEN
          fnd_message.set_string('复制成功!');
          fnd_message.show;
        ELSE
          fnd_message.set_string(l_return_msg);
          fnd_message.show;
          RAISE form_trigger_failure;
        END IF;
       
        
        :CONTROL.COPY_FROM:=NULL;
        APP_FORM_PKG.commit_form;
      END IF;
       
      go_block('HEADERS');
      --set_block_property('HEADERS', default_where, 'HEADER_ID=' || l_new_header_id);
      execute_query;
      GO_RECORD(:PARAMETER.G_CURRENT_CARD);
    
    EXCEPTION
      WHEN OTHERS THEN
        RAISE form_trigger_failure;
    END;

    3.获取要复制的header_id
    做个copy_form的item

    做一个LOV

    SELECT T.HEADER_ID,
           T.CARD_YEAR,
           T.CARD_PERIOD_MEANING,
           T.CARD_PERIOD,
           T.CARD_TYPE_MEANING,
           T.CARD_TYPE,
           T.COMP_NAME,
           T.ORGANIZATION_ID,
           T.DEP_NAME,
           T.DEPARTMENT_ID,
           T.STATUS_TYPE_MEANING,
           T.STATUS_TYPE
      FROM CUX_HRPE_HEADERS_T_V T
     WHERE T.STATUS_TYPE_MEANING = '已提交'
     

    将 header_id返回到 CONTROL.COPY_FROM

    OK 完毕

  • 相关阅读:
    Programming In Lua 第一章
    TCP/IP 第四、五章
    wireshark数据包分析实战 第三、四章
    [MFC.Windows程序设计(第2版) 第一章
    wireshark数据包分析实战 第二章
    C++PrimerPlus第6版 第四章——复合类型
    TCP/IP 第三章
    Linux命令行与脚本编程大全第一章
    Flink的并行度设置
    基于HttpClient的工具类HttpUtil
  • 原文地址:https://www.cnblogs.com/hopedba/p/5787010.html
Copyright © 2020-2023  润新知