Form客户化开发大致步骤

  客户化一个Form程序,一般会经历如下开发过程(未包括具体代码书写及程序包调用):
      1.建立数据库对象(表,视图,序列,同义词等)
      2.打开template.fmb文件,更名为CUXGLIMPORT
      3.删除Data Blocks下的两个块——BLOCKNAME、DETAILBLOCK,
        它们是模版自带的示例主从块。
      4.删除Canvases下的一个画布——BLOCKNAME
      5.修改Windows下的BLOCKNAME这个Window,在Property Palette中
        将Name改为“HEADERS”,将Title改  为“XXXX”
      6.修改Forms级触发器PRE-FORM
      7.修改Forms级触发器WHEN-NEW-FORM-INSTANCE
      8.修改Program Unit下app_custom中的close_window过程
      9.创建Block数据块
      10.设置Block属性及其Subclass
      11.新增CURRENT_RECODE_INDICATOR 子类信息
         CURRENT_RECODE_INDICATOR
      12.画布创建
      13.程序单元    
      14.块级别触发器on_insert……

注意点:
      1.画布和窗口的对应,LOV创建最后在指定的item上面。
      2.ROW_ID 属性 row_id 18
      3.记录间距为0
      4.LOV建立时,需要注意返回项,否则在保存的时候会报错
      5.一般情况下请在order by 中写上命令
      6.form级别第一个导航块
      7.block级别导航块

完成后,通过ftp工具上传至相应服务器目录,最后通过ssh工具编译即可完成。可参考此链接编译form命令:http://www.llku.com/?p=177

 

后台最终关闭PO单号程序代码

    由于客户的PO单是外部系统导入到EBS PO模块,因此会涉及到关闭PO单的操作,可以通过接口关闭PO单。以下是核心代码:

declare
  l_action           varchar2(100) := 'FINALLY CLOSE';
  v_po_header_id     number := 1292;
  l_return_status    varchar2(100);
  l_return_code      varchar2(100);
  l_exc_msg          varchar2(100);
  l_online_report_id varchar2(100);
  p_reasons          varchar2(100) := '小潘测试最终关闭PO单';

begin

  –初始化
  fnd_global.apps_initialize(user_id      => 1110, –用户名
                             resp_id      => 50737, –PO职责
                             resp_appl_id => 201); –PO产品

  –调用系统自带功能释放保留款 
  PO_DOCUMENT_ACTION_PVT.do_manual_close(p_action           => l_action,
                                         p_document_id      => v_po_header_id,
                                         p_document_type    => 'PO',
                                         p_document_subtype => 'STANDARD',
                                         p_line_id          => '',
                                         p_shipment_id      => '',
                                         p_reason           => p_reasons,
                                         p_action_date      => to_date(to_char(sysdate,
                                                                               'DD-MON-YYYY'),
                                                                       'DD-MON-YYYY'),
                                         p_calling_mode     => 'PO',
                                         p_origin_doc_id    => NULL,
                                         p_called_from_conc => FALSE,
                                         p_use_gl_date      => 'N',
                                         x_return_status    => l_return_status,
                                         x_return_code      => l_return_code,
                                         x_exception_msg    => l_exc_msg,
                                         x_online_report_id => l_online_report_id);

  DBMS_OUTPUT.put_line('成功与否标记:' || l_return_status);
  DBMS_OUTPUT.put_line('返回代码:' || l_return_code);
  DBMS_OUTPUT.put_line('错误消息:' || l_exc_msg);
end;

获取FSG报表明细行定义的SQL

客户要求取出某指定的FSG报表的明细行定义的数据,以下是相关的SQL命令:

SELECT *
  FROM (SELECT RRA.NAME,
               RRV.SEQUENCE,
               RRV.DESCRIPTION,
               RRV.NUMBER_CHARACTERS_INDENTED,
               RRV.NUMBER_LINES_SKIPPED_BEFORE,
               RRV.NUMBER_LINES_SKIPPED_AFTER,
               RRV.AMOUNT_TYPE,
               RRV.UNIT_OF_MEASURE_ID,
               RRV.PARAMETER_NUM,
               RRV.PERIOD_OFFSET,
               RRV.FACTOR,
               RRV.LEVEL_OF_DETAIL,
               RRV.DISPLAY_FLAG,
               RRV.DISPLAY_ZERO_AMOUNT_FLAG,
               RRV.CHANGE_SIGN_FLAG,
               RRV.CHANGE_VARIANCE_SIGN_FLAG,
               RRV.CALCULATION_PRECEDENCE_FLAG,
               RRC.SIGN,
               RRC.LEDGER_ID,
               RRC.SEGMENT1_LOW || '.' || RRC.SEGMENT2_LOW || '.' ||
               RRC.SEGMENT3_LOW || '.' || RRC.SEGMENT4_LOW || '.' ||
               RRC.SEGMENT5_LOW || '.' || RRC.SEGMENT6_LOW || '.' ||
               RRC.SEGMENT7_LOW || '.' || RRC.SEGMENT8_LOW SEGMENT_LOW,
               RRC.SEGMENT1_HIGH || '.' || RRC.SEGMENT2_HIGH || '.' ||
               RRC.SEGMENT3_HIGH || '.' || RRC.SEGMENT4_HIGH || '.' ||
               RRC.SEGMENT5_HIGH || '.' || RRC.SEGMENT6_HIGH || '.' ||
               RRC.SEGMENT7_HIGH || '.' || RRC.SEGMENT8_HIGH SEGMENT_HIGH,
               RRC.SEGMENT1_TYPE || '.' || RRC.SEGMENT2_TYPE || '.' ||
               RRC.SEGMENT3_TYPE || '.' || RRC.SEGMENT4_TYPE || '.' ||
               RRC.SEGMENT5_TYPE || '.' || RRC.SEGMENT6_TYPE || '.' ||
               RRC.SEGMENT7_TYPE || '.' || RRC.SEGMENT8_TYPE SEGMENT_HIGH_TYPE,
               RRC.RANGE_MODE,
               RRC.DR_CR_NET_CODE,
               NULL CALCULATION_SEQ,
               NULL OPERATOR,
               NULL CONSTANT,
               NULL AXIS_SEQ_LOW,
               NULL AXIS_SEQ_HIGH,
               NULL AXIS_NAME_LOW        
          FROM RG_REPORT_AXIS_SETS_V   RRA,
               RG_REPORT_AXES_V        RRV,
               RG_REPORT_AXIS_CONTENTS RRC        
         WHERE 1 = 1
           AND RRC.AXIS_SET_ID = RRA.AXIS_SET_ID
           AND RRC.AXIS_SEQ = RRV.SEQUENCE
           AND RRA.AXIS_SET_ID = RRV.AXIS_SET_ID
           AND RRA.NAME IN ('XXXX_新准则CIRC统计指标')
        
        UNION ALL
        
        SELECT RRA.NAME,
               RRV.SEQUENCE,
               RRV.DESCRIPTION,
               RRV.NUMBER_CHARACTERS_INDENTED,
               RRV.NUMBER_LINES_SKIPPED_BEFORE,
               RRV.NUMBER_LINES_SKIPPED_AFTER,
               RRV.AMOUNT_TYPE,
               RRV.UNIT_OF_MEASURE_ID,
               RRV.PARAMETER_NUM,
               RRV.PERIOD_OFFSET,
               RRV.FACTOR,
               RRV.LEVEL_OF_DETAIL,
               RRV.DISPLAY_FLAG,
               RRV.DISPLAY_ZERO_AMOUNT_FLAG,
               RRV.CHANGE_SIGN_FLAG,
               RRV.CHANGE_VARIANCE_SIGN_FLAG,
               RRV.CALCULATION_PRECEDENCE_FLAG,
               NULL                            SIGN,
               NULL                            LEDGER_ID,
               NULL                            SEGMENT_LOW,
               NULL                            SEGMENT_HIGH,
               NULL                            SEGMENT_HIGH_TYPE,
               NULL                            RANGE_MODE,
               NULL                            DR_CR_NET_CODE,
               RRC1.CALCULATION_SEQ,
               RRC1.OPERATOR,
               RRC1.CONSTANT,
               RRC1.AXIS_SEQ_LOW,
               RRC1.AXIS_SEQ_HIGH,
               RRC1.AXIS_NAME_LOW
          FROM RG_REPORT_AXIS_SETS_V  RRA,
               RG_REPORT_AXES_V       RRV,
               RG_REPORT_CALCULATIONS RRC1        
         WHERE 1 = 1
           AND RRC1.AXIS_SET_ID = RRA.AXIS_SET_ID
           AND RRC1.AXIS_SEQ = RRV.SEQUENCE
           AND RRA.AXIS_SET_ID = RRV.AXIS_SET_ID
           AND RRA.NAME IN ('XXXX_新准则CIRC统计指标')
        
        UNION ALL
        
        SELECT RRA.NAME,
               RRV.SEQUENCE,
               RRV.DESCRIPTION,
               RRV.NUMBER_CHARACTERS_INDENTED,
               RRV.NUMBER_LINES_SKIPPED_BEFORE,
               RRV.NUMBER_LINES_SKIPPED_AFTER,
               RRV.AMOUNT_TYPE,
               RRV.UNIT_OF_MEASURE_ID,
               RRV.PARAMETER_NUM,
               RRV.PERIOD_OFFSET,
               RRV.FACTOR,
               RRV.LEVEL_OF_DETAIL,
               RRV.DISPLAY_FLAG,
               RRV.DISPLAY_ZERO_AMOUNT_FLAG,
               RRV.CHANGE_SIGN_FLAG,
               RRV.CHANGE_VARIANCE_SIGN_FLAG,
               RRV.CALCULATION_PRECEDENCE_FLAG,
               NULL                            SIGN,
               NULL                            LEDGER_ID,
               NULL                            SEGMENT_LOW,
               NULL                            SEGMENT_HIGH,
               NULL                            SEGMENT_HIGH_TYPE,
               NULL                            RANGE_MODE,
               NULL                            DR_CR_NET_CODE,
               NULL                            CALCULATION_SEQ,
               NULL                            OPERATOR,
               NULL                            CONSTANT,
               NULL                            AXIS_SEQ_LOW,
               NULL                            AXIS_SEQ_HIGH,
               NULL                            AXIS_NAME_LOW        
          FROM RG_REPORT_AXIS_SETS_V RRA, RG_REPORT_AXES_V RRV        
         WHERE 1 = 1              
           AND RRA.AXIS_SET_ID = RRV.AXIS_SET_ID
           AND RRA.NAME IN ('XXXX_新准则CIRC统计指标')              
           AND NOT EXISTS (SELECT 1
                  FROM RG_REPORT_AXIS_CONTENTS T
                 WHERE T.AXIS_SET_ID = RRA.AXIS_SET_ID
                   AND T.AXIS_SEQ = RRV.SEQUENCE)              
           AND NOT EXISTS (SELECT 1
                  FROM RG_REPORT_CALCULATIONS T2
                 WHERE T2.AXIS_SET_ID = RRA.AXIS_SET_ID
                   AND T2.AXIS_SEQ = RRV.SEQUENCE)        
        )
 WHERE 1 = 1
 ORDER BY NAME, SEQUENCE;

Oracle财务系统服务器停复机后易忽略点

    在某些情况下,各类系统所在的服务器会被执行停复机操作,这是不可避免的。对于一般的系统,重启服务器后,可能直接重启相应的数据库和应用即可正常使用,但是对Oracle EBS财务系统,除了正常的启动数据库和应用的服务以外(如果是RAC还需单独启动RAC服务),还需要进行另外一项额外的工作,启动VNC服务,以便能在系统运行输出报表的数据调用图形化界面错误,具体的错误画面如下图所示,错误代码为:REP-3000: Internal error starting Oracle Toolkit.

VNC

此时只需按照下面的操作命令执行即可:
以root用户登录,运行命令:
    命令1:vncserver
    用VNC-Viewer登录,密码是第一次运行vncserver提示所输入的密码,如果忘记,可直接网上搜索更改VNC密码的文档,很简单的重置密码操作,
    运行命令:
    命令2:xhost +
    环境检查,运行命令,弹出时钟窗口为正常(apptest为应用用户,10.0.1.1为服务器IP):
 以应用用户apptest登录,运行命令:
    命令3: su – apptest
    命令4: export DISPLAY=10.0.1.1:1.0
    命令5: xclock

出现如下图所示的现象即可:

xclock

如果在操作中发现未知错误,通过以下命令 ps -ef|grep -i vnc 找出vnc的服务,全部kill -9 id,重新按照步骤操作即可。

EBS内部管理器节点问题(克隆后)

    在项目上遇到这样一个情况,从一个有双节点的EBS环境中克隆的一套系统测试系统的时候,当时在测试一个报表的时候出现警告,看日志说是内部管理器有问题,我就依此找到了内部管理器,发现内部管理器节点为空,于是找同事帮忙,定义新的节点,路径为:系统管理员/并发/管理器/定义/,定义方法相信接触的EBS的人都知道的,最后重新启动adcmctl.sh应用服务即可。非正常内部管理器和定义内部管理器如下图所示:

b

a

 

users reports back that reports are not running with no manager error (see below), and when you check manager status, all managers have Description- Target Node/Queue Unavailable

Solution One:


1. . Run the following in SQL*Plus:


SQL> EXEC FND_CONC_CLONE.SETUP_CLEAN;


COMMIT;


EXIT;

2. Run AutoConfig on all tiers, firstly on the DB tier and then the APPS tiers, to repopulate the required system tables.


Db Tier:


cd $ORACLE_HOME/appsutil/scripts/<inst>/adautocfg.sh

Apps Tier:


cd $ADMIN_SCRIPTS_HOME/adautocfg.sh

 

Solution Two:


1. Run cmclean.sql with Apps tier down


2. restart all services and check

Solution Three (if All else fails, check all the details  below:)

SQL> select node_name,target_node,control_code from fnd_concurrent_queues;

SQL> update apps.fnd_concurrent_queues set node_name = ‘Node NAME’ where node_name=’Existing Node Name’;

SQL> select NODE_NAME,NODE_MODE,STATUS from fnd_nodes;

SQL> select control_code,target_node,node_name,CONCURRENT_QUEUE_NAME from fnd_concurrent_queues;

SQL> UPDATE fnd_concurrent_queues set control_code = null;

SQL> select TARGET_NODE,NODE_NAME from fnd_concurrent_queues where node_name='<Existing Node Name>’;

SQL> select TARGET_NODE,NODE_NAME from fnd_concurrent_queues where TARGET_NODE='<Existing Node Name>’;

SQL> update fnd_concurrent_queues set NODE_NAME='<Node Name>’ where NODE_NAME='<Source/Existing Node Name>’;

SQL> update fnd_concurrent_queues set TARGET_NODE='<Node Name>’ where TARGET_NODE='<Source/Exixting Node Name>’;

SQL> UPDATE fnd_concurrent_queues set target_node = ‘<Node Name>’;

SQL> UPDATE fnd_concurrent_queues set node_name = ‘<Node Name>’;

SQL> Commit;

SQL> select control_code,target_node,node_name,CONCURRENT_QUEUE_NAME from fnd_concurrent_queues;

SQL>select TARGET_NODE,NODE_NAME from fnd_concurrent_queues where node_name='<Node Name>’;

SQL>select TARGET_NODE,NODE_NAME from fnd_concurrent_queues where TARGET_NODE='<Node Name>’;

Solution four:

SQL> set linesize 1000;

SQL> column CONTROL_CODE format A15

SQL> select CONCURRENT_QUEUE_NAME, CONTROL_CODE , TARGET_NODE, NODE_NAME from FND_CONCURRENT_QUEUES where concurrent_queue_name like ‘OAMGCS_%’;

Sample Output:

CONCURRENT_QUEUE_NAME          CONTROL_CODE    TARGET_NODE                    NODE_NAME

——————————                        —————                 —————————–    ——————————

OAMGCS_SUPTEBSAL1                            E                                                                      SUPTEBSAL1

To implement the solution, please execute the following steps:

1. Please set control_code to null for the OAMGCS concurrent queue on the specific node that is affected by this issue.

SQL>  update FND_CONCURRENT_QUEUES

      set control_code = null

      where concurrent_queue_name = ‘OAMGCS_<hostname>’; <Ur Existing Node Name>

2. Make sure the Target_node is correct for the OAMGCS manager:

SQL> update FND_CONCURRENT_QUEUES

           set TARGET_NODE='<correct node >’

           where CONCURRENT_QUEUE_NAME=’OAMGCS_<hostname>’;

SQL> commit;

References:


Conflict Resolution Manager Shows Target Node/Queue Unavailable [ID 732709.1]


OAM Generic Collection Service shows State: “The target node/queue unavailable”. [ID 393706.1]


After Cloning all the Concurrent Managers do not start for the cloned Instance [ID 555081.1]


Conflict Resolution Manager Shows Target Node/Queue Unavailable [ID 732709.1]


Concurrent Managers Do Not Start After Cloning Nodes Not Updated In Conc_queues [ID 466532.1]

Summary of Possible Reasons and Solutions for the Problem Where All Concurrent Requests Stuck in Pending Phase [ID 182154.1]

Output Post Processor is Down with Actual Process is 0 And Target Process is 1 [ID 858813.1]


Using Load-Balancers with Oracle E-Business Suite Release 12 [ID 380489.1]


Documentation For Specific Load Balancer Hardware [ID 727171.1]


Sharing The Application Tier File System in Oracle E-Business Suite Release 12 [ID 384248.1]


Add new node to application —- 384248.1

Common Error: Concurrent Manager shows “Target Node/Queue Unavailable “

技术笔记(小潘的技术记录博客)