打开的销售订单PDF附件已损坏

2020-08-17 14:16发布

点击此处---> 群内免费提供SAP练习系统(在群公告中)加入QQ群:457200227(SAP S4 HANA技术交流) 群内免费提供SAP练习系统(在群公告中)你好 我创建了一个自定义程序,...

         点击此处--->   EasySAP.com群内免费提供SAP练习系统(在群公告中)

加入QQ群:457200227(SAP S4 HANA技术交流) 群内免费提供SAP练习系统(在群公告中)


你好

我创建了一个自定义程序,该程序创建PDF文档并将其附加到销售订单的附件列表中。

我面临的问题是,该程序在开发系统中运行正常,但是在质量系统中却无法运行。

在质量体系中,该程序仍会将文档附加到销售订单上,但是当我尝试打开它甚至将其保存到PC并打开它时,它会给出PDF损坏的错误消息。

我在此过程中使用的代码可以总结如下:

  1. 获取需要通过FM GUI_UPLOAD从PC编辑和附加的PDF文件
  2. 使用FM SO_CONVERT_CONTENTS_BIN转换为压缩二进制格式
  3. 调用" SO_FOLDER_ROOT_ID_GET"功能获取文件夹ID
  4. 创建SAPoffice对象并使用FM SO_OBJECT_INSERT移至文件夹
  5. 使用FM BINARY_RELATION_CREATE_COMMIT链接对象

质量体系没有变化。 代码也没有区别。

如果有人可以在这里提供建议,那将有很大帮助。

谢谢。

6条回答
Alawn_Xu
2020-08-17 14:40

你好,

我假设您要将PDF附加到GOS? 然后使用

cl_bds_document_set => create_with_table

适应以下代码,我为全局变量添加了一些注释,这些注释未复制到此发布中。 该代码来自传入的邮件界面,该界面将邮件及其中的所有附件附加到任何业务对象

 METHOD ATTACH_BINARY_TO_BUSOBJ。

     数据:lt_components TYPE sbdst_components,
         ls_components与lt_components类似,
         lt_signature TYPE sbdst_signature,
         ls_signature与lt_signature类似,
         lt_content TYPE sbdst_content。

     数据:lv_object_key TYPE bds_typeid。
     数据:lv_text(200)TYPE c,
           lv_numc类型n。
 * -------------------------------------------------  ------------------- *

     移动:g_belnr到lv_object_key。 您的销售订单

     通话功能'SCMS_XSTRING_TO_BINARY'
       出口
         buffer = ip_xstring"导入参数类型xstring,您的PDF
       桌子
         binary_tab = lt_content。

     ls_components-doc_count = ip_doc_index。  "大概1,
     ls_components-comp_id =空间。
     ls_components-mimetype = g_mimetype。  "您的pPDF的模仿类型
     ls_components-comp_size = g_attachement_attributes-docsize。  "来自GUI_PLOAD
     将ls_components附加到lt_components。

     调用方法me-> create_signature"参见下文
       出口
         ip_doc_index = g_doc_index
       输入
         et_signature = lt_signature。

     呼叫方法cl_bds_document_set => create_with_table
       出口
 *逻辑系统=
         classname = g_busobj"业务对象,例如BUS2032
         classtype = co_bustype" BO
 *客户=
         组件= lt_components
         含量= lt_含量
       改变
         object_key = lv_object_key
         签名= lt_signature
       例外情况
         internal_error = 1
         error_kpro = 2
         parameter_error = 3
         not_authorized = 4
         not_allowed = 5
         nothing_found = 6
         其他= 7。
     如果sy-subrc <> 0。
 *在这里实施适当的错误处理
 其他。
 *一些成功消息,烟花,... 
ENDIF。
ENDMETHOD。 方法CREATE_SIGNATURE。 数据:ls_signature TYPE bapisignat, lt_signature_keywords bapisignat的类型表。 数据:lt_string TYPE TABLE OF字符串, lv_string TYPE字符串。 数据:ls_recipients类似于g_recipients_table的行。 * ------------------------------------------------- ------------------- * ls_signature-doc_count = ip_doc_index。 ls_signature-prop_name ='DESCRIPTION'。 ls_signature-prop_value = g_attachement_attributes-文件名。 "您的文件 附加ls_signature到et_signature。 ls_signature-prop_name ='BDS_CONTREP'。 ls_signature-prop_value =''。 附加ls_signature到et_signature。 ls_signature-prop_name ='LANGUAGE'。 ls_signature-prop_value = g_langu。 " 语言 附加ls_signature到et_signature。 *来自收件人的关键字 *您可以选择更多关键字 将g_recipients_table循环到ls_recipients。 用l替换ls_recipients中所有正则表达式'@。*'的出现。 压缩ls_recipients。 ls_signature-prop_name ='BDS_KEYWORD'。 ls_signature-prop_value = ls_recipients。 附加ls_signature到et_signature。 结局。 终结法。

一周热门 更多>