大家好,在使用自己的数据库表(Z*表)时,SAP为我们提供了一个添加数据或编辑这些表的简单工具。我说的是表维护视图,您可以通过事务SM30调用它。问题是一次只能有一个用户编辑这样的表。对于我的应用程序来说,这是不令人满意的,因为全世界有几个用户不能考虑等到一个用户完成他的更改。我检查了SCN,发现有几个线程处理这个问题。在我自己实现之后,我想和大家分享一下我的知识,把这些信息带到一起,所以首先你需要数据库表,你要生成一个表维护视图,在生成这个视图的时候选择两步维护类型,因为我们要的是一个列表,其中有几个条目是不可编辑的。在"概述"屏幕中,一般情况下没有条目可编辑,大数据好吗,在"详细信息"屏幕中,打开"更改"时,条目可编辑。\n通过SM30进入"表维护"视图时,淘客采集,将设置表级锁定。这把锁得拆了。最简单的方法是删除锁并调用维护视图的报告。这是通过读取所有系统锁来完成的。之后,我们必须通过调用函数模块ENQUE\ u delete来删除相关的锁。现在您可以通过function module™view\u maintenance\u调用调用表维护视图。建议将事务添加到此报表中,因为必须对其进行处理才能删除锁。否则,如果有人通过SM30打开表维护视图,这将不再工作,锁将再次设置。"(代码示例:}-REPORT ztest.""BEGIN of seltab occurses 1.}INCLUDE STRUCTURE vimsellist.DATA:END of seltab,1.1.1.1.1.1.1.1.1.1.1.1.1.1.1.1.1.1.1.1.1.1.1.1.1.1.1.1.3.1.1.1.1.1.1.1.1.1.1.1.1.1.1.1.1.1.1.1.1.1.1.1.1.2.1.1.1.1.1.2.1.1.1.数据:1.数据:1.1.2.1.1.1.1.1.1.1.1.1.1.1.1.数据:1.数据:1.数据:1.数据:1.数据:1.数据:1.部分.部分.部分.部分.部分.部分.部分.部分.部分.部分.部分.部分.部分.部分.部分.部分.部分.部分.部分.部分.部分.部分.部分.部分.部分.部分.部分.部分是的。您可以读取系统中的所有锁。读取系统中的所有锁读取系统中的所有锁。调用函数'ENQUE\u READ2';导出Nclient=semandt.gclient=semandt;nameName=*/BLES=*\u enq\u enq\u read。\n我们将搜索表锁的表级锁的条目。循环在\u enq\u read\u in/enq\u read INTO IIIw lw\u enq\u read WHERE gname EQexplore Iw_enq_read to lw_enq_enq_read to lw_enq_read to lw_enq_read to lw_enq_enq_part.*删除表的锁项。调用函数'ENQUE_Delete'}调用函数'ENQUE_Delete'。(EXPORRTING-check_upd_requests=1.为表导入subrcrcrc square printprint squares.*删除表的锁项调用函数'ENQUE_Delete';EXPORRTING:check_upd_requests=1.这将等于Iv_subrc。我会打电话给功能部的"查看维护"电话。Expornnanance会打电话给功能部的"新维护"电话。它会在那里,它会在那里,它会在那里,它会在那里,它会在那里,它会在那里,它会在那里,它会在那里,它会在那里,它会在那里,它会在那里,它会在那里,它会在那里,它会在那里,它会在那里,它会在那里,它会在那里,财务大数据,它会在那里,它会在那里,它会在那里,它会在那里,它会在那里,它会在那里,淘客服,它会在那里,它会在那里,它会在那里,它会在那里,它会在那里,它会在那里,它会在那里,它会在那里,它会在那里,它会在那里,它会在那里,它会在那里,它会在那里,它会在那里,它会在那里,它会在现在,我们正在编辑的每个条目都必须为其他用户锁定。为了实现这一点,我们需要为表Z\u OURTABLE配置一个锁对象。每次进入详细屏幕时,我们都会检查此项是否已锁定,如果已锁定,则会将所有字段设置为不可编辑。为此,必须修改dynpro的屏幕逻辑。您可以添加一个模块来调用由锁定对象创建的函数模块。不要在括号中翻译关键字(例如ServerName、ServerAdmin等)screen必须生成新的,PBO模块也必须生成新的,PBO模块也必须添加。代码示例:代码示例:Module change\u lock\u locking outpuut.}调用函数'ENQUEUEUE\ueeee ueeeeeeeeeeeeeourtablebleckobleblockkeeeeeboblekobobeeeeeexporting kunnr=zourtable kunnr}EXCEPTIONS}foreign\u lock blobloblobloblo3.IF sy subrc0.message'数据被另一个用户锁定!每次用户打开一条记录时,锁定对象就会锁定它。如果任何用户试图打开同一条记录,所有字段都将显示为灰色增强型。"-我希望这对某些人有用。"-问候Tobias;"嗨,微淘客,Tobias,}-在显示"维护"视图之前,您能解释一下这些出列(锁释放)的目的吗?每次用户进入maintenacne视图时,都会为受影响的表设置这些表锁。如果另一个用户进入同一个mantenacne对话框,则他无法在编辑模式下打开该对话框。因此,我们必须删除全局表锁才能与其他用户一起进入编辑模式。]对于第一个进入维护对话框的用户,这不起作用。]确定。现在明白了。我认为在维护视图中删除表锁本身(由锁所有者出列)是一个更好的方法。不建议使用直接ENQUE\ U DELETE。\n我必须指出,我对整个概念并不满意,尽管我不知道表锁设置的时间。也许你可以通过maintencapne视图中的一个事件来删除它,这样代码就会与它相关……)。为什么锁所有者删除锁会更好,我看不出有什么区别?除此之外,我不喜欢这个概念。即使你可以删除表或系统锁,这也有点奇怪。}标准的出列应该比外部锁干预更好……}嗨,托比亚斯,}我理解你的动机,因为我遵循的是类似的路径。然而,解除并重新锁定条目似乎是一个相当困难的方法。~也许我的方法适合你的需要"我的需求也一样。"-BR-Jörg-Jörg,}谢谢你的推荐,很高兴知道有一个简单快捷的解决方案可以让许多用户使用表维护视图。但是,这在我的场景中不起作用。如果一个字段被设置为只读,并且您希望稍后编辑它怎么办?是否可以向这样的表中添加条目?在我的例子中,我使用了一个由range number对象实现的具有唯一主键号的和viewcluster,这使得无论如何都有必要编辑屏幕,而且也没有可以被合理分组的属性。好吧,我明白为什么会有不同。缺少的grouping属性几乎是使用子集的杀手锏。]