ccfrom表单设计器之表单事件,表单主表事件,从表事件.

本文详细介绍了CCFlow流程设计器中的表单事件机制,包括主表事件与从表事件的概念及应用场景,如装载前后的处理及保存前的安全检查等。

ccfrom表单设计器之表单事件,表单主表事件,从表事件.

关键字:ccflow 流程设计器,流程管理系统,流程表单事件

10表单事件

表单事件分为主表表事件与从表事件,事件是为您提供的业务处理的接口。

10.1事件概述

设计图如下:

clip_image002

表单事件是在表单装在前后,保存前后发生的事件,它是编辑业务逻辑的接口。所以掌握表单事件非常有必要。

每个表单事件都有一样的如下4个属性:

事件类型:

业务逻辑处理的依托载体,你是用存储过程,还是用sql.。。。 来实现你的功能。

执行内容:

就是执行的主体,书写时支持全局变量@WebUser.No,@WebUser.Name 。支持本表单的字段变量@+字段名。

执行成功时:

执行成功时提示的信息,信息内容支持变量,同执行内容一样。

执行失败时:

执行失败时提示的信息,信息内容支持变量,同执行内容一样。

事件类型解释:

禁用:

不启用

执行存储过程:

请在执行内容里填写一个存储过程名称,注意表达式支持变量。

执行SQL:

请在执行内容里填写SQL,注意表达式支持变量。

如果有多条sql ,可以用@GO 分开。比如:

DELETE WF_Emp WHERE 1=2

@GO

DELETE WF_Emp WHERE 2=3

执行自定义URL.

用户在表达自己的业务逻辑时,往往用代码编写比较顺手,在这样的应用条件下,你可以编写一个url 向这个url中传递不同的标记,返回不同的结果来,返回空表示顺利执行。

实例:在执行内容里设置一个http://myserver/Do.aspx?DoType=aaaaa,创建一个Do.aspx 根据DoType 标记这不同的内容处理。

如果顺利处理了就返回空,出现异常一定要返回: Error+”异常信息。”

处理返回值用: this.Response.Write("Error:"+msg); 方法.

Ccform 处理的机制是,使用 HttpWebRequest 类静默的执行URL ,然后获取返回的内容。如果检查到前几个字符是Error 就认为是异常ccform 就会抛出异常。

执行系统URL

为了方便期间ccform定义一个系统的url, 如果选择这种类型,执行内容里就可以为空。系统在执行的时,就会自动访问。

http://myserver/ccflow/DataUser/AppCoder/FrmEventHandle.aspx

如果在FrmEventHandle.aspx文件中实现业务逻辑里面的一个详尽的案例。

执行自定义WebServices: (未完成)

执行系统WebServices: (未完成)

执行Exe. (未完成)

10.2主表事件

主表分为如下4种事件 装载前事件、装载后事件、保存前事件、保存后事件。您可以根据自己的需要加载相关的事件。

比如:在保存后处理相关的业务逻辑,要保存前做安全检查。

10.3 从表事件

从表具有如下事件:从表保存前,保存后。单条数据保存前,保存后。单条数据删除前,删除后。一共三对共计六个。

从表保存前,保存后:参数是主表的字段参数。

单条数据的事件是明细表的参数。

clip_image004

posted on 2012-06-03 16:35 驰骋工作流 阅读( ...) 评论( ...) 编辑 收藏
在SAP中自定义采购订单(PO)打印表单的布局,主要通过**Smart Forms**或**SAP Script**技术实现。以下是详细步骤和关键代码示例,涵盖表单设计、字段映射、样式调整及测试部署全流程: --- ### **一、技术选型** | 技术 | 适用场景 | 优势 | 开发工具 | |------------|-----------------------------------|-------------------------------|------------------------| | **Smart Forms** | 复杂布局、动态逻辑、多语言支持 | 图形化设计、维护方便 | 事务码 `SMARTFORMS` | | **SAP Script** | 简单表单、 legacy系统兼容 | 轻量级、性能高 | 事务码 `SE71` | **推荐**:优先使用Smart Forms(现代SAP系统默认技术) --- ### **二、Smart Forms实现步骤** #### **1. 创建Smart Form** ```ABAP * 通过事务码SMARTFORMS创建新表单 * 或通过代码调用(需先存在表单) DATA: lv_formname TYPE rs38l_fnam VALUE 'ZPO_CUSTOM_FORM'. * 检查表单是否存在,不存在则创建 CALL FUNCTION 'SSF_FUNCTION_MODULE_NAME' EXPORTING formname = lv_formname IMPORTING fm_name = DATA(lv_fm_name) EXCEPTIONS no_form = 1 no_function_module = 2. IF sy-subrc = 1. " 调用Smart Forms设计器创建新表单 CALL TRANSACTION 'SMARTFORMS' AND SKIP FIRST SCREEN. " 输入表单名称:ZPO_CUSTOM_FORM ENDIF. ``` #### **2. 设计表单布局** 1. **进入设计器**:`SMARTFORMS` → 输入表单名`ZPO_CUSTOM_FORM` 2. **关键节点配置**: - **Pages & Windows**: - 主页面:`MAIN`(A4纵向) - 页眉窗口:`HEADER`(高度2cm) - 主内容窗口:`BODY`(动态高度) - 页脚窗口:`FOOTER`(高度1cm) 3. **插入公司Logo**: ```ABAP " 在页眉窗口插入图形 NODE: HEADER_WINDOW ELEMENT: GRAPHIC PROPERTIES: Name = 'ZCOMPANY_LOGO' " 需先通过SE78上传图片到SAP Width = '80mm' Height = '20mm' ``` 4. **动态字段绑定**: ```ABAP " 绑定采购订单头数据(EKKO) NODE: BODY_WINDOW ELEMENT: TEXT TEXT: '采购订单编号: &EKKO-EBELN&' CONDITION: '&EKKO-EBELN& IS NOT INITIAL' ELEMENT: TABLE DATA: TABLE = 'EKPO' " 项目行数据 COLUMNS: - FIELD: 'MATNR' TITLE = '物料编号' - FIELD: 'TXZ01' TITLE = '物料描述' - FIELD: 'MENGE' TITLE = '数量' - FIELD: 'MEINS' TITLE = '单位' ``` #### **3. 样式定制** ```ABAP * 在表单属性中定义样式 STYLES: - TITLE_STYLE: Font Family = 'Arial' Font Size = '12pt' Bold = 'X' Color = '#0066CC' - BODY_STYLE: Font Family = 'Arial' Font Size = '10pt' Line Spacing = '1.5' * 应用样式到元素 NODE: PO_TITLE STYLE = TITLE_STYLE ``` #### **4. 条件逻辑控制** ```ABAP * 根据订单类型显示不同内容 NODE: CONDITIONAL_SECTION CONDITION: EKKO-BSART = 'NB' " 标准订单 ELEMENT: TEXT TEXT: '此为标准采购订单' NODE: CONDITIONAL_SECTION CONDITION: EKKO-BSART = 'UB' " 外协订单 ELEMENT: TEXT TEXT: '此为外协加工订单' ``` --- ### **三、SAP Script实现步骤(Legacy方案)** #### **1. 创建表单** ```ABAP * 通过事务码SE71创建 * 表单名:ZPO_SAPSCRIPT_FORM * 页面格式:MAIN(A4纵向) ``` #### **2. 编写表单代码** ```ABAP * 页眉部分 /: WRITE '公司名称' /: WRITE '采购订单确认单' /: NEW-PAGE LINE-COUNT 5 * 主内容部分 /: DEFINE &PO_HEADER& /: WRITE: / '订单编号:', EKKO-EBELN /: / '订单日期:', EKKO-ERDAT /: END-OF-DEFINITION /: &PO_HEADER& * 项目行格 /: TABLES EKPO /: IF NOT EKPO[] IS INITIAL /: WRITE: / '序号', '物料编号', '描述', '数量', '单位' /: LOOP AT EKPO. /: WRITE: / SY-TABIX UNDER '序号', /: EKPO-MATNR UNDER '物料编号', /: EKPO-TXZ01 UNDER '描述', /: EKPO-MENGE UNDER '数量', /: EKPO-MEINS UNDER '单位' /: ENDLOOP. /: ENDIF. ``` #### **3. 样式控制** ```ABAP * 在表单属性中设置 /: PROTECT ... ENDPROTECT " 防止分页中断 /: COLOR COL_BACKGROUND INTENSIFIED OFF 'white' /: FONT FAMILY = 'Arial' SIZE = 10 ``` --- ### **四、关键配置** #### **1. 驱动程序配置** ```ABAP * 确保输出设备(打印机)支持PDF * 事务码SPAD → 设备类型 → 创建/修改 * 推荐使用:'PDF' 或 'SAPWIN'(带PDF转换) ``` #### **2. 表单与打印程序关联** ```ABAP * 修改标准打印程序ME_PRINT_PO * 或创建自定义程序调用表单 FORM print_custom_po USING p_ebeln TYPE ekko-ebeln. DATA: lv_fm_name TYPE rs38l_fnam. " 获取表单函数模块名 CALL FUNCTION 'SSF_FUNCTION_MODULE_NAME' EXPORTING formname = 'ZPO_CUSTOM_FORM' IMPORTING fm_name = lv_fm_name. " 调用表单处理 CALL FUNCTION lv_fm_name EXPORTING control_parameters = VALUE #( no_dialog = 'X' ) output_options = VALUE #( tddest = 'PDF' ) " 直接输出PDF po_number = p_ebeln EXCEPTIONS formatting_error = 1 internal_error = 2 send_error = 3 OTHERS = 4. ENDFORM. ``` --- ### **五、测试与部署** 1. **测试打印**: ```ABAP * 事务码ME23N → 采购订单显示 → 菜单"输出"→"编辑"→ 选择自定义表单 * 或通过代码测试: START-OF-SELECTION. PERFORM print_custom_po USING '4500000010'. ``` 2. **调试技巧**: - 使用事务码`SMARTFORMS` → 表单 → 测试/执行 - 检查长文本:`SLG1`(表单日志) 3. **部署到生产**: - 传输表单(通过工作台请求) - 配置NACE事务码(输出类型`NEU`)关联新表单 --- ### **六、常见问题解决** 1. **字段不显示**: - 检查数据绑定语法:`&TABLE-FIELD&` - 确认连接关系(主表EKKO与项目EKPO) 2. **分页错误**: - 在Smart Forms中使用`PROTECT`节点 - 调整窗口高度属性 3. **性能优化**: ```ABAP * 对大数据量使用包处理 DATA: lt_ekpo TYPE TABLE OF ekpo. SELECT * FROM ekpo INTO TABLE lt_ekpo WHERE ebeln = p_ebeln PACKAGE SIZE 1000. " 分批处理 ``` 4. **多语言支持**: - 在Smart Forms中创建文本模块 - 通过`TRANSLATE`函数处理语言切换 --- ### **七、高级功能扩展** 1. **条形码集成**: ```ABAP * 在Smart Forms中插入条形码 ELEMENT: BARCODE TYPE = 'CODE39' VALUE = '&EKKO-EBELN&' HEIGHT = '15mm' ``` 2. **数字签名**: ```ABAP * 调用BAPI生成PDF签名 CALL FUNCTION 'FP_PDF_SIGN' EXPORTING i_pdf_content = gt_pdf_data i_certificate = 'Z_DIGITAL_CERT' IMPORTING e_pdf_content = gt_signed_pdf. ``` 3. **动态图片**: ```ABAP * 根据订单类型显示不同Logo DATA: lv_logo_name TYPE string. IF ekko-bsart = 'NB'. lv_logo_name = 'ZSTANDARD_LOGO'. ELSE. lv_logo_name = 'ZURGENT_LOGO'. ENDIF. ELEMENT: GRAPHIC NAME = lv_logo_name ``` --- ### **八、最佳实践建议** 1. **版本控制**: - 使用事务码`SMARTSTYLES`管理样式库 - 对表单修改创建版本注释 2. **性能基准**: - 对500行项目订单测试生成时间 - 优化点:减少循环中的复杂计算 3. **用户培训**: - 制作表单字段说明文档 - 定义变更审批流程 ---
评论
成就一亿技术人!
拼手气红包6.0元
还能输入1000个字符  | 博主筛选后可见
 
红包 添加红包
表情包 插入表情
 条评论被折叠 查看
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包

打赏作者

驰骋低代码、工作流、表单引擎

你的鼓励将是我创作的最大动力

¥1 ¥2 ¥4 ¥6 ¥10 ¥20
扫码支付:¥1
获取中
扫码支付

您的余额不足,请更换扫码支付或充值

打赏作者

实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值