2020-09-22 16:49发布
加入QQ群:457200227(SAP S4 HANA技术交流) 群内免费提供SAP练习系统(在群公告中)
我有一个报告程序,该程序使用开放数据集语法从程序中指定的文件夹路径(如上载文件夹)中读取文件,然后它将对其进行处理并将文件移动到其他位置。
报告程序在前台也可以正常工作,它在后台也可以工作,但是在后台处理过程中上传文件夹中的文件很少。
我已经使用JDBG调试了后台作业,它在后台的调试模式下工作正常。
请帮助。
纳马杰夫。
如果您有多个应用程序服务器(SM51),则该文件夹可能未"映射"到一个应用程序服务器中。 您可以通过登录到每个服务器(在SM51中双击服务器)进行验证,然后在前台运行该程序。
如果是原因,那么请管理员将文件夹完全映射到所有应用程序服务器上。
PS:在后台,默认情况下,调度程序选择"随机"任何服务器以运行该程序。
" PS:在后台,默认情况下,调度程序选择"随机"任何服务器来运行该程序。 前台,程序将在您登录的服务器上运行。"
这是像您这样的专家提供的信息,这使我陷入了SCN。
感谢分享您的专业知识。
K.Kiran。
嗨Namadev,
在下面创建FM并实现ABAP代码并进行测试。
*局部变量
数据:lv_buffer TYPE int4,
lv_buflen TYPE i。
*开放源文件并开始复制
在BINARY模式下输入OPEN DATASET iv_file_path_s。
IF sy-subrc NE 0。
*例外
RAISE ex_open_file_source。
ENDIF。
*打开目标文件并开始写入
OPEN DATASET iv_file_path_t用于二进制模式下的输出。
RAISE ex_open_file_target。
*读取和传输
做。
清除:lv_buffer。
*读取数据集
读取数据集iv_file_path_s INTO lv_buffer长度lv_buflen。
CASE sy-subrc。
何时0。
*传输源文件
将lv_buffer传输到iv_file_path_t长度lv_buflen。
RAISE ex_write_block_target。
何时4。
*文件结尾
退出。
别人的时候。
RAISE ex_read_block_source。
结束。
ENDDO。
*关闭DataSet源文件
关闭数据集iv_file_path_s。
RAISE ex_close_file_source。
*关闭数据集目标文件
关闭数据集iv_file_path_t。
RAISE ex_close_file_target。
*删除DataSet文件源
删除数据集iv_file_path_s。
RAISE ex_delete_dile_source。
此致
嗨桑托斯,
我使用的逻辑与您解释的相同。
这可能是代码错误,为此我附加了在两种模式下均能正常工作的功能,但是请检查与SAP配合使用的用户 正在运行的服务具有对该文件夹的权限,因为有时您对此文件夹没有权限并且无法读取或写入,因此当您在线执行该文件夹时,该权限是从经过身份验证的用户那里获得的,而该文件夹是服务器的用户。 pre> *&--------------------------------------------- ------------------------ * 表格F_ENVIA_ARCHIVO_ERROR表格T_DATA_TAB结构E_DATA_TAB 使用P_FILENAME类似于RLGRAP-FILENAME。 清除V_FILENAME。 如果不是首字母缩写。 *** Abre Archivo 在文本模式下以非UNICODE编码的输出打开数据集P_FILENAME。如果sy- subrc NE0。 IF sy-batch均衡空间。带有P_FILENAME的MESSAGE I324(bf00)。 ELSE。带有P_FILENAME的M324消息S324(bf00)。 ENDIF。 ENDIF 。 ***将Archivo para servidor 转移到T_DATA_TAB。将T_DATA_TAB转移到P_FILENAME。 ENDLOOP。 *** Cerra Archivo 关闭数据集 P_FILENAME。 ELSE。 将P_FILENAME移到V_FILENAME。 调用功能'GUI_DOWNLOAD'导出 FILENAME = V_FILENAME 表格 DATA_TAB = T_DATA_TAB 例外情况 FILE_WRITE_ERROR = 1 NO_BATCH = 2 GUI_REFUSE_FILETRANSFER = 3 INVALID_TYPE = 4 NO_AUTHORITY = 5 UNKN OWN_ERROR = 6 HEADER_NOT_ALLOWED = 7 SEPARATOR_NOT_ALLOWED = 8 FILESIZE_NOT_ALLOWED = 9 HEADER_TOO_LONG = 10 DP_ERROR_CREATE = 11 DP_ERROR_SEND = 12 DP_ERROR 14 ACCESS_DENIED = 15 DP_OUT_OF_MEMORY = 16 DISK_FULL = 17 DP_TIMEOUT = 18 FILE_NOT_FOUND = 19 DATAPROVIDER_EXCEPTION = 20 CONTROL_FLUSH_ERROR = 21 OTHERS = 22。 IF SY-SUBRC <> 0. 带有V_FILENAME的消息I020。 ENDIF。 ENDIF。 ENDFORM。
*&--------------------------------------------- ------------------------ * 表格F_ENVIA_ARCHIVO_ERROR表格T_DATA_TAB结构E_DATA_TAB 使用P_FILENAME类似于RLGRAP-FILENAME。 清除V_FILENAME。 如果不是首字母缩写。 *** Abre Archivo 在文本模式下以非UNICODE编码的输出打开数据集P_FILENAME。如果sy- subrc NE0。 IF sy-batch均衡空间。带有P_FILENAME的MESSAGE I324(bf00)。 ELSE。带有P_FILENAME的M324消息S324(bf00)。 ENDIF。 ENDIF 。 ***将Archivo para servidor 转移到T_DATA_TAB。将T_DATA_TAB转移到P_FILENAME。 ENDLOOP。 *** Cerra Archivo 关闭数据集 P_FILENAME。 ELSE。 将P_FILENAME移到V_FILENAME。 调用功能'GUI_DOWNLOAD'导出 FILENAME = V_FILENAME 表格 DATA_TAB = T_DATA_TAB 例外情况 FILE_WRITE_ERROR = 1 NO_BATCH = 2 GUI_REFUSE_FILETRANSFER = 3 INVALID_TYPE = 4 NO_AUTHORITY = 5 UNKN OWN_ERROR = 6 HEADER_NOT_ALLOWED = 7 SEPARATOR_NOT_ALLOWED = 8 FILESIZE_NOT_ALLOWED = 9 HEADER_TOO_LONG = 10 DP_ERROR_CREATE = 11 DP_ERROR_SEND = 12 DP_ERROR 14 ACCESS_DENIED = 15 DP_OUT_OF_MEMORY = 16 DISK_FULL = 17 DP_TIMEOUT = 18 FILE_NOT_FOUND = 19 DATAPROVIDER_EXCEPTION = 20 CONTROL_FLUSH_ERROR = 21 OTHERS = 22。 IF SY-SUBRC <> 0. 带有V_FILENAME的消息I020。 ENDIF。 ENDIF。 ENDFORM。
最多设置5个标签!
如果您有多个应用程序服务器(SM51),则该文件夹可能未"映射"到一个应用程序服务器中。 您可以通过登录到每个服务器(在SM51中双击服务器)进行验证,然后在前台运行该程序。
如果是原因,那么请管理员将文件夹完全映射到所有应用程序服务器上。
PS:在后台,默认情况下,调度程序选择"随机"任何服务器以运行该程序。
" PS:在后台,默认情况下,调度程序选择"随机"任何服务器来运行该程序。 前台,程序将在您登录的服务器上运行。"
这是像您这样的专家提供的信息,这使我陷入了SCN。
感谢分享您的专业知识。
K.Kiran。
嗨Namadev,
在下面创建FM并实现ABAP代码并进行测试。
*局部变量
数据:lv_buffer TYPE int4,
lv_buflen TYPE i。
*开放源文件并开始复制
在BINARY模式下输入OPEN DATASET iv_file_path_s。
IF sy-subrc NE 0。
*例外
RAISE ex_open_file_source。
ENDIF。
*打开目标文件并开始写入
OPEN DATASET iv_file_path_t用于二进制模式下的输出。
IF sy-subrc NE 0。
*例外
RAISE ex_open_file_target。
ENDIF。
*读取和传输
做。
清除:lv_buffer。
*读取数据集
读取数据集iv_file_path_s INTO lv_buffer长度lv_buflen。
CASE sy-subrc。
何时0。
*传输源文件
将lv_buffer传输到iv_file_path_t长度lv_buflen。
IF sy-subrc NE 0。
*例外
RAISE ex_write_block_target。
ENDIF。
何时4。
*文件结尾
退出。
别人的时候。
*例外
RAISE ex_read_block_source。
结束。
ENDDO。
*关闭DataSet源文件
关闭数据集iv_file_path_s。
IF sy-subrc NE 0。
*例外
RAISE ex_close_file_source。
ENDIF。
*关闭数据集目标文件
关闭数据集iv_file_path_t。
IF sy-subrc NE 0。
*例外
RAISE ex_close_file_target。
ENDIF。
*删除DataSet文件源
删除数据集iv_file_path_s。
IF sy-subrc NE 0。
*例外
RAISE ex_delete_dile_source。
ENDIF。
此致
嗨桑托斯,
我使用的逻辑与您解释的相同。
一周热门 更多>