Chinaunix首页 | 论坛 | 博客
  • 博客访问: 153433
  • 博文数量: 72
  • 博客积分: 2010
  • 博客等级: 大尉
  • 技术积分: 745
  • 用 户 组: 普通用户
  • 注册时间: 2009-06-15 14:48
文章分类

全部博文(72)

文章存档

2010年(25)

2009年(47)

我的朋友

分类:

2009-07-06 16:02:20

最近在做SMARTFORMS中,客户部要求我们不许我们使用SE11创建表或者是结构,但要实现其等同的功能,在网上搜了一把,发现下面的方法也可以实现殊途同归,容易出错,方法如下,大家共享:
步骤一:在你要调用FORM的程序里定义好要要传的内表的结构,
假设你通过FUNCTION:  CALL FUNCTION 'SSF_FUNCTION_MODULE_NAME'.得到了SMARTFORMS所生成的FUNCTION 
  CALL FUNCTION l_fm_name  ‘上面得到的FUNCTION’. 这里我们在参数里面将不必要填写内标参数。

步骤二:SMARTFORMS的FORM Interface里不需要填写任何参数,但要在Global Definitions 的TYPES中进行结构的定义:如下所

  typesbegin of ty_result,
         A     type I,
         B     type I,
         end of ty_result.
注意这个结构一定要跟你在主程序中定义的结构一摸一样。

在Global Data中你就可以像用SE11里创建了表或者是结构一样去使用我们刚才定义的结构了GS_RESULT TYPE TY_RESULT
GT_RESULT TYPE TABLE OF TY_RESULT

步骤三:在Initialization里编写如下代码:

  DATA:FIELD(50).

FIELD-SYMBOLS:  TYPE ANY,
                TYPE ANY.
CLEAR: gs_result,
       GT_RESULT[].
     

FIELD = '(程序名字-你调用smartfomrs的程序的名字)GT_RESULT[](相当于正常情况下你传过来的内表)'.

【上面的语句你可以这样理解】-----比如调用smartforms的程序叫ztest001 ,正常情况下你call smartforms 要传的内标itab[],可写成如下格式:

FIELD = '(ztest001)itab[]'.
ASSIGN (FIELDTO .
GT_RESULT[] = .
当然一个程序你要传多个内表多来的时候 你就需的写多个下面的语句

FIELD = '(ztest001)itab[]'.
ASSIGN (FIELDTO .
GT_RESULT[] = .

同时也得定义多个类似于下面的结构
typesbegin of ty_result,
         A     type I,
         B     type I,
         end of ty_result.

步骤四:接下来你就可以引用那边传过来的值了

试验过了,呵呵 没问题 ,感谢前人的摸索!


阅读(1491) | 评论(0) | 转发(0) |
给主人留下些什么吧!~~