表:SGOSATTR SGOS: 一般服务的属性
标准附件功能
标准附件功能是否显示,取决与用户是否为DIALOG用户, 如果登录用户类型不是A 对话. 标准附件功能可能无法显示. (图一)
用户参数SD_SWU_ACTIVE的设置会影响VA02/VA03的标准附件功能的显示
图三是采购订单中显示的标准附件功能
图四是标准附件功能包含的菜单项
三
使用标准附件功能
在自己开发的程序中使用标准附件功能有两种方式,需要根据实际情况判断一下使用哪种方式. 方式一和方式二的本质时一样的. 都是调用类 CL_GOS_MANAGER 实现
进入界面时已有单号使用方式一
进入界面时没有单号,使用方式二
(方式二其实也整合了方式一, 可以直接使用方式二)
01
方式一
通过标准函数实现附件功能
SWU_OBJECT_PUBLISH
SWU_OBJECT_REFRESH
在PBO 创建模块调用函数
在PAI创建模块调用函数
02
方式二
直接通过类CL_GOS_MANAGER启用附件功能
PBO 中
创建对象
根据是否存在单号确定参数ip_no_instance 的值. 该参数的值会影响是否能显示对象已经存在的附件. 如果为空, 无法显示单号已经存在的附件
所以该参数需要根据单据是否为空来设置.
PAI
获取单号,并调用对象的方法 set_id_of_published_object 更新已经创建的附件和单据的关系. 最后需要通过COMMIT WORK语句提交一下. 以确保单据和附件的关系能成功保存.(COMMIT WORK 不是必须的, 程序结束会隐式提交以下,也能保存).
四
相关表
SRGBTBREL存放了GOS中的关联信息. 可以通过它获取附件的类型及数量.
五
附件功能的增强
标准附件功能的对象 CL_GOS_MANAGER 是一个封装的非常完整的类.
但是比较遗憾的是,在这个类中没有提供一个简单的方法查询单据的附件清单(也可能是我没有找到,如果你知道怎么获取,不吝赐教一下).
实现如下增强会比较麻烦: 单据保存时需要检查附件是否存在,如果不存在报错.
常规思路: 在单据保存前检查单据是否存在附件清单 .找到标准单据通过类CL_GOS_MANAGER定义的对象. 尝试通过对象获取附件清单. (如下图是采购订单检查中尝试获取对象清单. ) 跟踪了一天也啥结果.
所以改变思路. 在CL_GOS_MANAGER 特定的服务的类 (比如 CL_GOS_SRV_URL_CREATE 时创建URL的类) 中隐式增强,并且通过全局变量传递附件创建的结果. 订单检查增强中获取这个结果. 作为判断保存的依据之一
六
总结
SAP标准附件服务(workflow BOX)是一个封装度很高的服务. 在相应的屏幕定义时简单调用即可完成自定义单据的附件服务. 使用很方便. 并且这个服务同时支持GUI客户端及网页客户端.