当前位置: 首页 > article >正文

SM30表维护视图:实现审计追踪字段的自动化填充

1. SM30表维护视图与审计追踪的完美结合每次打开企业级SAP系统看到那些密密麻麻的数据表我都会想起十年前刚入行时的手忙脚乱。那时候最头疼的就是要手动记录每条数据的修改人和修改时间不仅效率低下还经常出错。直到发现了SM30这个神器配合适当的配置就能实现审计追踪字段的全自动填充简直是数据管理员的福音。SM30表维护视图是SAP系统中用于维护自定义表格数据的标准工具它就像是一个万能的数据管家。想象一下你有一个Excel表格但每次修改都需要手动填写谁改的和什么时候改的——这得多麻烦SM30的自动化审计功能就是来解决这个痛点的。通过配置视图事件和字段赋值逻辑系统可以自动记录创建人CREATED_BY、修改人CHANGED_BY、创建日期CREATED_DATE、修改日期CHANGED_DATE等关键信息。这个功能特别适合需要严格数据审计的场景比如财务系统、主数据管理、合规性要求高的业务模块。我经手过一个制药企业的项目他们的GMP规范要求所有主数据变更都必须记录完整的审计追踪。通过SM30的自动化配置不仅满足了合规要求还把数据维护效率提升了60%以上。2. 配置前的准备工作在开始配置之前我们需要先做好基础工作。就像盖房子要打地基一样配置SM30的审计追踪功能也需要先搭建好数据结构。首先确保你的表中已经包含了这些标准字段CREATED_BY创建人、CREATED_DATE创建日期、CHANGED_BY修改人、CHANGED_DATE修改日期、CREATED_AT创建时间戳、CHANGED_AT修改时间戳。这些字段就像是数据的身份证记录着每条数据的完整生命周期。我建议使用SE11事务码创建或修改表结构时把这些字段都设置为必填项。虽然我们会通过自动化方式填充它们但设为必填可以防止意外遗漏。字段类型也很关键CREATED_BY和CHANGED_BY通常使用SY-UNAME类型长度12的字符型CREATED_DATE和CHANGED_DATE使用DATS类型而CREATED_AT和CHANGED_AT则使用时间戳类型如COMT_CHANGED_AT_USR。在实际项目中我遇到过字段命名不一致导致的问题。有的系统使用ERNAM和ERDAT表示创建信息AENAM和AEDAT表示修改信息。建议统一采用英文命名规范这样代码可读性更好也便于维护。如果接手的是老系统可能需要先做字段映射确保命名一致性。3. 表格维护生成器的关键配置进入正题让我们来看看如何通过表格维护生成器实现自动化审计追踪。使用SE54事务码进入表格维护生成器选择你的表后重点要配置两个关键事件FORM_CREATE_DATA事件05和FORM_UPDATE_DATA事件21。这两个事件就像是数据变更的监控摄像头前者在创建新记录时触发后者在修改现有记录时触发。配置步骤很直观在事件选项卡中点击新建行按钮先添加事件05FORM_CREATE_DATA再添加事件21FORM_UPDATE_DATA。记得保存配置这个步骤虽然简单但很容易被忽略。我有次深夜加班就忘了保存结果第二天所有配置都不见了不得不重头再来。这里有个实用技巧在配置事件时可以顺便设置屏幕属性。比如把审计追踪字段设置为只读INPUT0或隐藏INVISIBLE1防止用户误操作。我通常会给这些字段设置一个特殊的屏幕组如AUDIT这样在屏幕逻辑中就能统一控制它们的显示属性。4. 编写字段赋值的核心逻辑配置好事件后我们需要编写实际的字段赋值逻辑。这部分代码需要放在一个Include程序中如LZMMT0037F01这样便于复用和维护。代码的核心是一个FORM例程我习惯命名为SET_TIMESTAMP它负责根据操作类型创建或修改来填充相应的审计字段。FORM set_timestamp USING iv_flag CHANGING cs_tab TYPE any. DATA: lv_ts TYPE comt_changed_at_usr. FIELD-SYMBOLS: lv_comp_fs TYPE any. CONVERT DATE sy-datum TIME sy-uzeit INTO TIME STAMP lv_ts TIME ZONE sy-zonlo. CASE iv_flag. WHEN abap_true. 创建 ASSIGN COMPONENT CREATED_BY OF STRUCTURE cs_tab TO lv_comp_fs. IF lv_comp_fs IS ASSIGNED. lv_comp_fs sy-uname. ENDIF. ASSIGN COMPONENT CREATED_DATE OF STRUCTURE cs_tab TO lv_comp_fs. IF lv_comp_fs IS ASSIGNED. lv_comp_fs sy-datum. ENDIF. ASSIGN COMPONENT CREATED_AT OF STRUCTURE cs_tab TO lv_comp_fs. IF lv_comp_fs IS ASSIGNED. lv_comp_fs lv_ts. ENDIF. WHEN abap_false. 修改 ASSIGN COMPONENT CHANGED_BY OF STRUCTURE cs_tab TO lv_comp_fs. IF lv_comp_fs IS ASSIGNED. lv_comp_fs sy-uname. ENDIF. ASSIGN COMPONENT CHANGED_DATE OF STRUCTURE cs_tab TO lv_comp_fs. IF lv_comp_fs IS ASSIGNED. lv_comp_fs sy-datum. ENDIF. ASSIGN COMPONENT CHANGED_AT OF STRUCTURE cs_tab TO lv_comp_fs. IF lv_comp_fs IS ASSIGNED. lv_comp_fs lv_ts. ENDIF. ENDCASE. ENDFORM.这段代码的精妙之处在于使用了FIELD-SYMBOLS动态访问结构体组件这样同一个例程就能处理不同的表结构。我特别添加了IS ASSIGNED检查避免因为字段不存在而导致dump。在实际项目中这种防御性编程非常重要特别是当多个开发人员共同维护系统时。5. 事件与逻辑的绑定实现有了核心逻辑后我们需要把它绑定到之前配置的事件上。这需要创建两个FORM例程FORM_CREATE_DATA和FORM_UPDATE_DATA。这两个例程就像是事件处理的接线员负责在适当的时候调用我们的核心逻辑。FORM form_create_data. FIELD-SYMBOLS: fs_view_name TYPE any. ASSIGN (vim_view_name) TO fs_view_name. PERFORM set_timestamp USING abap_true CHANGING fs_view_name. ENDFORM. FORM form_update_data. FIELD-SYMBOLS: fs_view_name TYPE any. ASSIGN (vim_view_name) TO fs_view_name. PERFORM set_timestamp USING abap_false CHANGING fs_view_name. ENDFORM.这里用到了VIM_VIEW_NAME这个系统变量它指向当前正在操作的数据视图。通过FIELD-SYMBOLS的动态赋值我们的代码可以适用于任何SM30维护视图实现了最大程度的复用性。记得在测试时要同时验证创建和修改两种场景确保两种情况下审计字段都能正确填充。6. 屏幕属性的优化设置为了让用户体验更好我们还需要优化屏幕属性设置。审计追踪字段通常应该设为只读防止用户误修改。这可以通过屏幕逻辑中的MODULE实现MODULE frm_screen_modify OUTPUT. LOOP AT SCREEN. CASE screen-group1. WHEN AUDIT. 审计字段组 screen-input 0. 设为只读 WHEN OTHERS. 保持原样 ENDCASE. MODIFY SCREEN. ENDLOOP. ENDMODULE.在实际项目中我习惯把审计字段分组管理。比如设置screen-group1为AUDIT这样在PBO逻辑中就能统一控制它们的属性。如果某些情况下需要隐藏这些字段比如在特定事务中只需要设置screen-invisible 1即可。这种灵活的屏幕控制方式可以根据业务需求随时调整而不用修改底层代码。7. 实际应用中的经验分享经过多个项目的实践我总结出几个实用的经验。首先时间戳字段CREATED_AT/CHANGED_AT最好使用UTC时间这样在跨国企业环境中可以避免时区混乱。其次对于关键业务表建议增加变更日志表记录更详细的操作历史。这可以通过SM30的FORM_BEFORE_SAVE事件实现。另一个常见问题是后台作业修改数据时的审计追踪。由于sy-uname会记录作业用户而非实际发起人我通常会添加一个额外的字段LAST_CHANGED_BY_USER在BAPI或自定义函数中显式传递真实操作人。这种细粒度的审计在合规检查时特别有用。性能方面也要注意如果表数据量很大超过百万条过多的审计字段会影响查询效率。这时可以考虑分区表或者单独的审计日志表。我曾经优化过一个客户的物料主表通过将审计信息移到单独的日志表查询性能提升了40%。

相关文章:

SM30表维护视图:实现审计追踪字段的自动化填充

1. SM30表维护视图与审计追踪的完美结合 每次打开企业级SAP系统,看到那些密密麻麻的数据表,我都会想起十年前刚入行时的手忙脚乱。那时候最头疼的就是要手动记录每条数据的修改人和修改时间,不仅效率低下,还经常出错。直到发现了S…...

3天精通Applite:让macOS软件管理变得像点外卖一样简单

3天精通Applite:让macOS软件管理变得像点外卖一样简单 【免费下载链接】Applite User-friendly GUI macOS application for Homebrew Casks 项目地址: https://gitcode.com/gh_mirrors/ap/Applite 你是否曾经为macOS上的软件安装和管理感到头疼?每…...

Win11下CUDA和cuDNN安装避坑指南:从版本选择到环境变量,一次搞定TensorFlow/PyTorch环境

Win11深度学习环境搭建实战:CUDA与cuDNN精准配置手册 刚拿到新笔记本时,我兴冲冲地准备跑第一个PyTorch模型,却遭遇了"CUDA not available"的暴击。屏幕前的你可能也经历过这种绝望——明明按照教程一步步操作,却卡在环…...

别再只盯着Batch Norm了!PyTorch实战:Group Norm在目标检测模型中的部署与性能对比

别再只盯着Batch Norm了!PyTorch实战:Group Norm在目标检测模型中的部署与性能对比 当你在深夜调试一个目标检测模型时,是否遇到过这样的场景:batch size不得不调小以适应显存限制,却发现模型性能突然大幅下降&#xf…...

告别单线程等待:用xtdata的download_history_data2批量拉取A股全市场历史数据

告别单线程等待:用xtdata的download_history_data2批量拉取A股全市场历史数据 在量化研究的日常工作中,构建本地行情数据库往往是第一步,也是最耗时的一步。传统的数据获取方式通常需要逐只股票请求,不仅效率低下,还容…...

手把手调参:基于海思PID源码,实战调试PMSM电机FOC控制中的电流环

手把手调参:基于海思PID源码实战调试PMSM电机FOC电流环 调试永磁同步电机(PMSM)的磁场定向控制(FOC)系统时,电流环的PID参数整定往往是工程师面临的第一个实战挑战。本文将结合海思开源的PID控制器源码&…...

向量搜索不再绕过ORM?EF Core 10原生向量查询语法全解析,从LINQ to Vector到混合语义+结构化联合检索

第一章:向量搜索不再绕过ORM?EF Core 10原生向量查询语法全解析,从LINQ to Vector到混合语义结构化联合检索EF Core 10 首次将向量搜索能力深度集成至 LINQ 查询管道,彻底终结此前需绕过 ORM、手动拼接 SQL 或调用数据库原生函数的…...

Dify API密钥管理失效?3步强制刷新+5层安全加固,92%开发者忽略的配置断连真相

第一章:Dify API密钥管理失效的根源诊断Dify API密钥管理失效并非孤立现象,而是由认证机制、服务端策略与客户端实践三者耦合失配引发的系统性问题。常见诱因包括密钥硬编码泄露、过期未轮换、作用域(scope)配置越界,以…...

5分钟实现Figma界面全面汉化:设计师必备的中文插件方案

5分钟实现Figma界面全面汉化:设计师必备的中文插件方案 【免费下载链接】figmaCN 中文 Figma 插件,设计师人工翻译校验 项目地址: https://gitcode.com/gh_mirrors/fi/figmaCN 还在为Figma的英文界面而头疼吗?FigmaCN为你提供完美的中…...

Linux设备驱动之V4L2框架与Camera子系统

1. V4L2框架与Camera子系统概述 第一次接触Linux Camera驱动开发时,我被V4L2这个缩写搞得很困惑。后来才知道这是Video for Linux 2的简称,是Linux内核中处理视频设备的通用框架。简单来说,它就像是一个大管家,负责协调摄像头硬件…...

3分钟搞定:抖音批量下载开源工具完全指南

3分钟搞定:抖音批量下载开源工具完全指南 【免费下载链接】douyin-downloader A practical Douyin downloader for both single-item and profile batch downloads, with progress display, retries, SQLite deduplication, and browser fallback support. 抖音批量…...

哨兵2号 vs Landsat 8:10米和30米分辨率下,GEE提取水体结果差异有多大?

哨兵2号与Landsat 8水体提取实战对比:分辨率差异如何影响监测精度? 当我们需要监测湖泊、河流或湿地时,卫星遥感无疑是最经济高效的选择。但在实际操作中,面对哨兵2号的10米分辨率和Landsat 8的30米分辨率,很多研究者都…...

告别明文传输:手把手教你用PGP Desktop给邮件和文件上把‘锁‘(附Outlook配置)

告别明文传输:手把手教你用PGP Desktop给邮件和文件上把"锁" 在数字化办公日益普及的今天,一封未加密的邮件就像一张明信片——所有经手它的人都能看到内容。想象一下,当你发送一份包含客户隐私数据的合同,或是与同事讨…...

从‘看不懂’到‘真香’:用Pandas和Django实战案例,重新理解Python lambda

从‘看不懂’到‘真香’:用Pandas和Django实战案例,重新理解Python lambda 第一次接触Python的lambda表达式时,很多人都会皱起眉头——这种没有名字的函数,看起来像是为了炫技而存在的语法糖。直到我在处理一个紧急的Pandas数据清…...

MoveIt!配置生成后做什么?手把手带你在Gazebo和Rviz中驱动遨博机械臂

MoveIt!配置生成后的实战指南:在Gazebo与Rviz中驱动遨博机械臂 当你终于看到aubo_e5_moveit_config包生成成功的提示时,那种成就感就像拼完乐高最后一块积木。但很快你会发现——这仅仅是开始。真正的魔法发生在让机械臂在虚拟世界中动起来的那一刻。本文…...

3分钟快速上手:FigmaCN中文汉化插件完整指南

3分钟快速上手:FigmaCN中文汉化插件完整指南 【免费下载链接】figmaCN 中文 Figma 插件,设计师人工翻译校验 项目地址: https://gitcode.com/gh_mirrors/fi/figmaCN 还在为Figma的英文界面感到困扰吗?专业术语看不懂,菜单选…...

实战指南:Parse12306 自动化获取全国高速列车数据的3大核心技术解析

实战指南:Parse12306 自动化获取全国高速列车数据的3大核心技术解析 【免费下载链接】Parse12306 分析12306 获取全国列车数据 项目地址: https://gitcode.com/gh_mirrors/pa/Parse12306 Parse12306作为一款高效的开源工具,为开发者和数据分析师提…...

Elasticsearch 核心基石:倒排索引全解析(原理+结构+流程图+实战)

Elasticsearch 核心基石:倒排索引全解析(原理结构流程图实战)一、前言二、基础概念:什么是 Elasticsearch 倒排索引?2.1 核心定义2.2 正排索引 vs 倒排索引(最直观区别)2.2.1 正排索引&#xff…...

如何轻松下载30+文档平台的免费资源?kill-doc浏览器脚本全攻略

如何轻松下载30文档平台的免费资源?kill-doc浏览器脚本全攻略 【免费下载链接】kill-doc 看到经常有小伙伴们需要下载一些免费文档,但是相关网站浏览体验不好各种广告,各种登录验证,需要很多步骤才能下载文档,该脚本就…...

解放双手,游戏自由:《第七史诗》自动化助手E7Helper完全指南

解放双手,游戏自由:《第七史诗》自动化助手E7Helper完全指南 【免费下载链接】e7Helper 【Epic Seven Auto Bot】第七史诗多功能覆盖脚本(刷书签🍃,挂讨伐、后记、祭坛✌️,挂JJC等📛,多服务器支…...

告别ViT的‘算力焦虑’:手把手带你用Swin Transformer搞定图像分类(附PyTorch实战代码)

突破视觉Transformer算力瓶颈:Swin Transformer实战图像分类指南 在计算机视觉领域,Transformer架构正掀起一场革命。但当我们兴奋地将Vision Transformer(ViT)应用到实际项目中时,往往会遇到一个残酷的现实——显存爆…...

RV1126开发板实战:用V4L2抓取MX415摄像头图像(附完整命令解析)

RV1126开发板实战:V4L2图像采集全流程与MX415摄像头深度适配指南 在嵌入式视觉系统开发中,图像采集是构建完整处理流水线的第一步。Rockchip RV1126作为一款专为机器视觉优化的AIoT处理器,其丰富的ISP(图像信号处理)资…...

从GAMES101作业1看光栅化器框架:一个三角形背后的渲染管线全解析

从GAMES101作业1看光栅化器框架:一个三角形背后的渲染管线全解析 在计算机图形学的入门阶段,GAMES101课程作业1往往成为许多学习者接触真实渲染管线的第一道门槛。这个看似简单的任务——在屏幕上绘制一个旋转的三角形——实则蕴含了现代GPU渲染管线的核…...

XUnity.AutoTranslator完整指南:为Unity游戏开启实时翻译新时代

XUnity.AutoTranslator完整指南:为Unity游戏开启实时翻译新时代 【免费下载链接】XUnity.AutoTranslator 项目地址: https://gitcode.com/gh_mirrors/xu/XUnity.AutoTranslator 想要畅玩日系游戏却苦于语言障碍?XUnity.AutoTranslator就是你的终…...

入局AIGC?我劝你先看看这份劝退指南

1. 为什么我不建议普通人盲目入局AIGC 最近两年,AIGC(人工智能生成内容)确实火得一塌糊涂。每天都能看到各种"用AI月入十万"的案例,朋友圈里也总有人在晒AI生成的精美图片或者爆款文案。作为一个在大厂做了8年AI算法的老…...

从零部署到三维感知:ROS与RealSense D435i深度相机实战指南

1. 环境准备与驱动安装 第一次接触RealSense D435i深度相机时,我花了整整两天时间才把驱动装好。现在回想起来,其实只要掌握几个关键步骤就能避免90%的坑。先说说硬件连接:D435i通过USB 3.0接口供电和数据传输,一定要使用原装线材…...

IUV全网元协同排障实战:从无线侧到核心网的典型配置错点解析

1. 从"用户无法接入5G网络"说起:一个典型故障的排查起点 上周遇到个挺有意思的案例:某运营商新建的5G SA网络完成部署后,测试终端始终显示"无服务"状态。这个看似简单的现象背后,其实藏着从无线侧到核心网可能…...

Steam创意工坊下载终极解决方案:WorkshopDL完全指南

Steam创意工坊下载终极解决方案:WorkshopDL完全指南 【免费下载链接】WorkshopDL WorkshopDL - The Best Steam Workshop Downloader 项目地址: https://gitcode.com/gh_mirrors/wo/WorkshopDL 你是否曾在Epic Games Store或GOG平台购买了心爱的游戏&#xf…...

AssetRipper深度解析:Unity资源逆向工程实战指南

AssetRipper深度解析:Unity资源逆向工程实战指南 【免费下载链接】AssetRipper GUI Application to work with engine assets, asset bundles, and serialized files 项目地址: https://gitcode.com/GitHub_Trending/as/AssetRipper 在Unity游戏开发与逆向工…...

3步解锁AMD Ryzen终极性能:SMUDebugTool硬件调试全攻略

3步解锁AMD Ryzen终极性能:SMUDebugTool硬件调试全攻略 【免费下载链接】SMUDebugTool A dedicated tool to help write/read various parameters of Ryzen-based systems, such as manual overclock, SMU, PCI, CPUID, MSR and Power Table. 项目地址: https://g…...