分类目录归档:EBS PLSQL开发

并发程序连续调用带有模板的请求

    昨天在做一个客户化功能的时候,我想实现的是一个程序包中有3个procedure,这3个procedure均被做为单独的并发请求,其中主请求是单纯的功能,两个子请求是针对此功能做的两个报表程序。我希望在主请求完成以后,连续调用两个子请求完成带有rtf模板的报表输出。如下图所示,在加载模板后,再调用请求执行,却发现只能正确执行前面并发请求的模板加载并成功输出,后面的并发请求能执行,但是不能加载模板文件,只能输出XML文件。

      连续调用加载模板

   于是尝试了下面的做法,如图所示,正确的做法是,在A做先调用B子程序,然后在子程序B中去调用C程序,这样便可将两个子程序B、C的模板正常加载完成(目前测试结果,求大家更深层次的指导)。

      思路

 

通过传入的字符串并根据分隔符截取出目标字符串

    刚刚写一接口的时候,外围系统需要传入一个字符串来作为查询条件查询数据,最后由财务系统返回数据至外围系统,但传入的一个变量数据是一个整体,需要截取获取目标字符串才能作为查询条件,于是写一函数,记录于此以备后用:

–通过传入的字符串并根据分隔符截取出目标字符串(分隔符为',',可自定义分隔符)

declare
  p_str   varchar2(1000) := 'a,c,g';
  l_count number := 0;
  l_str   varchar2(100); –目标字符串数据
begin
  –首先获取字符串特别字符的数量
  select nvl(length(regexp_replace(p_str, '[^,]', '')) + 1, 0)
    into l_count
    from dual;

  –如果只有一个字符段,则不处理 
  if l_count = 0 then
    dbms_output.put_line('Data: ' || p_str);
  end if;
  –如果有多个字符段,则分割
  if l_count <> 0 then
    for i in 1 .. l_count loop
      select regexp_substr(p_str, '[^,]+', 1, i) as str
        into l_str
        from dual;
      dbms_output.put_line('Data' || i || ':' || l_str);
    end loop;
  end if;
exception
  when others then
    dbms_output.put_line('error code :' || sqlcode);
    dbms_output.put_line('error msg  :' || sqlerrm);
end;

HTML报表中空白行的处理

前段时间在项目上做一个HTML版的凭证打印,空白行的问题找了不少资料,最后终于在一个同事的帮助下完成了。
    比如:一个凭证有4行,此凭证固定行数为8行,如果不做处理,就会出现没有数据的行出现连续空白的情况,最后,定义了
  一个常量,可能现在想很简单,但是当时就没有想到这样做。
   l_cell_null CONSTANT varchar2(10) := chr(38) || 'nbsp;';
   在可能出现空白行的地方,在最后加上如下代码所示的样子:
  nvl(substr((Get_Segment_Desc(c2.list_account,
                                             'segment3',
                                             l_sob_id) || ' ' ||
                           Get_Segment_Desc(c2.segment4,
                                             'segment4',
                                             l_sob_id)),
                           1,
                           40),
                    l_cell_null) || l_cell_null 
最后终于解决了此问题,现在项目上对凭证的格式要求很严格,之前用的是PDF版本的,但是空白页有时候不好把握,最终客户提需求开发了这个HTML班的报表。