ABAP--通过'ARCHIV_CREATE_FILE'上传员工照片(代码摘抄OAOH)

本文介绍了一款用于批量导入员工照片到SAP系统的ABAP程序。该程序通过读取包含员工编号的文本文件,自动将对应编号的照片文件上传至SAP,并与员工资料关联。程序实现了自动化流程,提高了人力资源管理中照片更新的效率。
部署运行你感兴趣的模型镜像

1) Store the Photograph of the Employee as the PERNR.JPG (PERNR = EMPLPYEES PERSONNEL NUMBER) at a predifined location.

2) Have a text file with all the pernr for whom you want to upload the photo and the JPGs you have in the folder.

3) Use this Function module with the loop for all the PERNR

* Function module to update Tran OAAD

* Create file path (Directory)-(Employee No.).JPG

CONCATENATE 'dir where the file is stored' wa_pernr-pernr '.' 'jpg' INTO lw_path.
************************************************************************
* Copyright 2004 C-Bons Wuhan *
* All Rights Reserved *
*----------------------------------------------------------------------*
* Program Name : ZHRIPHOTO *
* Project : SAP Implementation Project *
* Program Title: 照片导入 *
* Created by : DEV01 *
* Created on : 2007/09/15 *
* Version : 1.0 *
*----------------------------------------------------------------------*
* Function Description: *
* 照片导入 *
*----------------------------------------------------------------------*
* Data Table List: *
* *
*----------------------------------------------------------------------*
* Refrence Table List: *
* *
*----------------------------------------------------------------------*
* Modification Log: *
* Date Programmer Correction Number *
************************************************************************
REPORT zhriphoto NO STANDARD PAGE HEADING LINE-SIZE 255
MESSAGE-ID zdev .
*I N T E R N A L T A B L E S
DATA : BEGIN OF gt_photo OCCURS 0,
pernr(8),
END OF gt_photo.
DATA: g_path LIKE draw-filep,
g_sapobjid LIKE sapb-sapobjid,
g_filename TYPE string,
g_sappfad LIKE sapb-sappfad.

PARAMETERS: p_file LIKE rlgrap-filename OBLIGATORY. " 文件路径

************************************************************************
*& Initialization
************************************************************************
INITIALIZATION.
* CONCATENATE sy-uname sy-datum+4(4) INTO group.
************************************************************************
* START-OF-SELECTION
************************************************************************
AT SELECTION-SCREEN ON VALUE-REQUEST FOR p_file.
CALL FUNCTION 'WS_FILENAME_GET'
EXPORTING " DEF_FILENAME = ' '
def_path = 'C:/'
mask = ',Text Files,*.txt;*.prn,All Files,*.*.'
mode = 'O'
title = '选取导入文件'(100)
IMPORTING
filename = p_file
EXCEPTIONS
inv_winsys = 1
no_batch = 2
selection_cancel = 3
selection_error = 4
OTHERS = 5.
IF sy-subrc <> 0 AND sy-subrc <> 3.
MESSAGE e102(zdev) WITH 'Error Selecting File'(007).
ENDIF.

************************************************************************
* START-OF-SELECTION
************************************************************************
START-OF-SELECTION.
g_path = p_file.
CALL FUNCTION 'CV120_SPLIT_PATH'
EXPORTING
pf_path = g_path
IMPORTING
pfx_path = g_path.
g_filename = p_file.

CALL FUNCTION 'GUI_UPLOAD'
EXPORTING
filename = g_filename
* FILETYPE = 'ASC'
* has_field_separator = 'X'
* dat_mode = 'X'
TABLES
data_tab = gt_photo
EXCEPTIONS
file_open_error = 1
file_read_error = 2
no_batch = 3
gui_refuse_filetransfer = 4
invalid_type = 5
no_authority = 6
unknown_error = 7
bad_data_format = 8
header_not_allowed = 9
separator_not_allowed = 10
header_too_long = 11
unknown_dp_error = 12
access_denied = 13
dp_out_of_memory = 14
disk_full = 15
dp_timeout = 16
OTHERS = 17.

IF sy-subrc <> 0.
MESSAGE s306 .
ENDIF.

LOOP AT gt_photo.
CONCATENATE g_path gt_photo-pernr '.JPG' INTO g_sappfad.
CONCATENATE gt_photo-pernr '0002' INTO g_sapobjid.
CALL FUNCTION 'ARCHIV_CREATE_FILE'
EXPORTING
ar_object = 'HRICOLFOTO'
object_id = g_sapobjid
sap_object = 'PREL'
doc_type = 'JPG'
path = g_sappfad
EXCEPTIONS
error_conectiontable = 1
error_parameter = 2
error_archiv = 3
error_upload = 4
error_kernel = 5
no_entry_possible = 6
error_comunicationtable = 7
OTHERS = 8.
IF sy-subrc <> 0.
MESSAGE ID sy-msgid TYPE sy-msgty NUMBER sy-msgno
WITH sy-msgv1 sy-msgv2 sy-msgv3 sy-msgv4.
ENDIF.
CLEAR g_filename.
ENDLOOP.

************************************************************************
* END-OF-SELECTION
************************************************************************
END-OF-SELECTION.
WRITE / '执行完毕!'.

您可能感兴趣的与本文相关的镜像

Wan2.2-T2V-A5B

Wan2.2-T2V-A5B

文生视频
Wan2.2

Wan2.2是由通义万相开源高效文本到视频生成模型,是有​50亿参数的轻量级视频生成模型,专为快速内容创作优化。支持480P视频生成,具备优秀的时序连贯性和运动推理能力

<think>首先,用户的问题是关于在ABAP屏幕中使用textedit的set_readonly_mode方法来隐藏文本框。用户提到了参考内容,包括引用[1]、[2]、[3],这些是关于ABAP中长文本处理和GUI控件的内容。 用户的直接查询是:"我想查找在ABAP屏幕中使用textedit->set_readonly_mode时隐藏文本框的方法"。意思是用户想在ABAP屏幕中,当使用CL_GUI_TEXTEDIT的set_readonly_mode方法时,如何隐藏文本框。set_readonly_mode通常用于设置文本框是否可编辑(只读模式),而不是直接隐藏它。 从引用[3]中看到:用户展示了如何根据操作模式(如创建或更改)设置只读模式: - 如果操作是 'CREATE' 或 'CHANGE',设置 readonly_mode = 0(可编辑)。 - 否则,设置 readonly_mode = 1(只读)。 但用户现在想知道如何隐藏文本框,而不是只设置只读。 在ABAP中,CL_GUI_TEXTEDIT控件是GUI控件的一部分。要隐藏一个控件,通常需要使用方法来控制控件的可见性。CL_GUI_TEXTEDIT类中没有直接隐藏的方法;隐藏控件通常是通过其容器或父控件来实现的。 在ABAP Dynpro中,控件如CL_GUI_TEXTEDIT通常嵌入在容器中。要隐藏控件,应该使用set_visible方法或类似的方法来控制其可见性。 回顾类CL_GUI_TEXTEDIT: - 我没有完整的SAP文档,但从标准知识来看,CL_GUI_TEXTEDIT继承自CL_GUI_CONTROL,而CL_GUI_CONTROL有方法来设置可见性。 - 具体来说,CL_GUI_CONTROL类应该有方法SET_VISIBLE来设置控件的可见性。 所以,隐藏文本框的正确方法应该是调用SET_VISIBLE方法,将可见性设置为FALSE。 用户的问题提到了"在使用textedit->set_readonly_mode时",但set_readonly_mode不是用于隐藏的;它是用于只读状态的。所以,我需要解释清楚:隐藏和只读是不同的概念。用户可能混淆了,或者说想在某个条件下既设置只读又隐藏。 我的回答应该: 1. 澄清隐藏和只读的区别。 2. 提供隐藏文本框的方法。 3. 参考用户提供的引用,因为它提到了相关类和方法。 从引用[3]中,有调用set_readonly_mode的例子。但要隐藏,应该使用SET_VISIBLE。 在ABAP中,对于控件,继承层次是: - CL_GUI_TEXTEDIT 继承自 CL_GUI_CONTROL。 - CL_GUI_CONTROL 有方法 SET_VISIBLE ( EXPORTING VISIBLE TYPE ABAP_BOOL ). 所以,要隐藏文本框,代码应该是: CALL METHOD editor->set_visible EXPORTING visible = abap_false. 其中,editor 是 CL_GUI_TEXTEDIT 的实例。 如果用户想在设置只读模式时同时隐藏,他们可以在同一个逻辑中调用 set_visible。 现在,生成相关问题: - 根据系统指令,我需要在回答末尾生成相关问题。 - 相关问题应该基于主题,比如ABAP控件操作、隐藏方法等。 回答结构: - 先用中文清晰地解释。 - 确保语法正确。 - 添加引用标识,如 [^1]、[^2]、[^3],但要自然地引用用户提供的引用。 - 由于用户引用了这些,我应该引用它们来解释。 用户提供的引用: - [^1]: 关于长文本处理和 CL_GUI_TEXTEDIT 方法。 - [^2]: 读取和设置文本的例子。 - [^3]: 设置只读模式的例子。 在我的回答中,我可以提到: - 引用 [^3] 展示了设置只读模式,但隐藏需要使用其他方法。 - 引用 [^1] 和 [^2] 是关于文本处理的上下文。 最终回答: - 解释隐藏文本框的方法。 - 给出示例代码- 生成相关问题。 </think>在 ABAP Dynpro 屏幕中,`CL_GUI_TEXTEDIT` 控件的 `SET_READONLY_MODE` 方法仅用于控制文本框的**可编辑状态**(是否只读),而不是隐藏控件本身。隐藏文本框需要调用 `SET_VISIBLE` 方法(继承自父类 `CL_GUI_CONTROL`),该方法可直接设置控件的可见性。下面我将逐步解释实现方法,并确保回答可靠,参考了您提供的引用内容。 ### 步骤 1:理解 `SET_READONLY_MODE` 与隐藏的区别 - **`SET_READONLY_MODE`**:控制文本框是否可编辑。例如: - `readonly_mode = 0`: 文本框可编辑。 - `readonly_mode = 1`: 文本框只读(内容可见但不可修改)。 这在引用 [^3] 的示例中已有演示(基于操作模式设置只读状态),但它不会隐藏控件。 - **隐藏文本框**:需使用 `SET_VISIBLE` 方法,设置 `visible = abap_false` 使控件完全不可见(包括内容)。这是独立的操作,与只读模式无关。 ### 步骤 2:隐藏文本框的实现方法 在 ABAP 屏幕控制器中,先创建 `CL_GUI_TEXTEDIT` 实例(如在 `PBO` 模块中初始化),然后在需要隐藏时调用 `SET_VISIBLE`。以下是完整示例代码,基于引用 [^3] 的逻辑扩展(假设控件已定义): ```abap DATA: lo_textedit TYPE REF TO cl_gui_textedit. " 声明文本框实例 DATA: gv_operate TYPE string. " 示例变量,代表当前操作模式 " 初始化文本框(通常在 PBO 模块中) IF lo_textedit IS NOT BOUND. CREATE OBJECT lo_textedit EXPORTING parent = cl_gui_container=>screen0. " 绑定到屏幕容器 ENDIF. " 根据条件隐藏或显示文本框(例如在用户操作触发时) IF gv_operate = 'HIDE'. " 当需要隐藏时 " 调用 SET_VISIBLE 方法隐藏控件 CALL METHOD lo_textedit->set_visible EXPORTING visible = abap_false " abap_false 表示隐藏 EXCEPTIONS error_cntl_call_method = 1 invalid_parameter = 2 OTHERS = 3. IF sy-subrc <> 0. " 错误处理(如 MESSAGE 语句) ENDIF. ELSE. " 其他情况下显示控件(visible = abap_true) CALL METHOD lo_textedit->set_visible EXPORTING visible = abap_true. ENDIF. " 可选:同时设置只读状态(如引用 [^3] 的逻辑) IF gv_operate = 'CHANGE'. CALL METHOD lo_textedit->set_readonly_mode EXPORTING readonly_mode = 0. " 可编辑 ELSE. CALL METHOD lo_textedit->set_readonly_mode EXPORTING readonly_mode = 1. " 只读 ENDIF. ``` #### 关键点说明: 1. **方法调用**: - `SET_VISIBLE` 是核心方法,接受参数 `visible`(类型 `ABAP_BOOL`)。 - `abap_false` 隐藏控件,`abap_true` 显示控件。 2. **错误处理**: - 检查 `sy-subrc` 处理异常(如无效参数或调用失败),引用 [^3] 中的错误处理可作为参考。 3. **与只读模式的结合**: - 隐藏和只读可独立使用或组合(例如,先隐藏再显示时恢复只读状态)。 4. **性能注意事项**: - 隐藏操作不会影响文本内容,后续可通过 `GET_TEXT_AS_STREAM` 或 `GET_TEXT_AS_R3TABLE` 读取数据(如引用 [^1] 和 [^2] 中的文本处理逻辑)。 ### 注意事项 - 确保控件已正确绑定到容器(如 `parent` 参数),否则隐藏可能失效。 - 在屏幕生命周期中(如 `PBO` 或事件处理模块)调用方法,避免在无效上下文中操作。 - 本方法适用于所有 ABAP GUI 控件(继承自 `CL_GUI_CONTROL`),引用 [^1] 和 [^3] 中的类层级支持此操作[^1][^3]。
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

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

余额充值