第1页共25页18TechniquesforLocatingtheUnderlyingDataofaScreenField18种根据屏幕字段查找潜在数据的技巧DennisBarrett/翻译:强晟qiangsheng@gmail.comPicturethis.AnOperationsManagerwantsaspecialreportofherserviceorders.Shegivesyouasketchofwhatshewantsittolooklike(columns,rows,headings,grouping,subtotals,totals,andthelike),andpointstofieldsontheServiceManagementtransactionscreensthathavethedatashewantsyoutoshowinthereport.想象一下这样的情景。一个业务经理希望得到一个关于她的服务订单的专用报表,她给了你一个报表的草图(包括列、行、标题、分组、小计、合计等等),而“服务管理”事务屏幕中的字段就包含了她希望你在报表中显示的数据。DennisBarrettisanapplicationsconsultantwithSAPAmericawhofocusesonServiceManagement/CustomerServiceandtheServiceProvidersolution.Hehasbeenconsultingincomputersforover15years,alwaysblendingapplicationsandprogramming.HeisacertifiedABAPprogrammer,andisalsotheauthorof“SAPR/3ABAP/4CommandReference.”丹尼斯·巴雷特是SAP美国的应用顾问,致力于服务管理/客户服务和服务提供解决方案。他已经在计算机行业从事顾问工作15年,是认证ABAP程序员,也是《SAPR/3APAP/4命令参考》一书的作者。(completebioappearsonpage18)(关于他的完整简历请见25页)第2页共25页Whatdoyoudo?Mostlikely,youwouldchecktofindanyexistingreportsdeliveredwiththesystem(oralreadywrittenforthisclient)thatprovidetheinformationtheOperationsManagerwants,orthatcanbecopiedandrevisedtofitherneeds.Ifyoudon’tfindany,youmightthenlookintotheappropriatereportingsystem—inthiscase,thePlantMaintenanceInformationSystem(PMIS)—toseeifyoucanadaptit.Inthiscase,however,youcan’tfindthereport,andyoucan’tcobbleonetogetherfromexistingones.YoumustwriteareportoranABAPQuerytofulfilltherequirements.你该怎么做?通常的,你会检查系统中运行的,能够提供这个业务经理所需信息的现存报表(或者是已经为这个client写过的),或者可以复制和修改后能符合需要的报表。如果没有找到,你也许会在适当的报表系统——例如,工厂维护信息系统(PMIS)——中看看是否能找到合适的。即使这样,你仍然无法找到报表,或者无法从现存报表中找到可修改的,那只能写一个报表或者一个ABAP查询来实现这个需求。Now,supposetheOperationsManagerasksifyoucansomehowaddjustonemorelittlefunctiontoherCreateMeasurementDocumentstransaction:pastetheassociatedsalesordernumberintotheMDoctextfield.Thisscenariorequiresyoutocreateanenhancement.Inboththefirstandsecondscenario,you’llneedaccesstospecificdatafromthedatabasetables.Howdoyoufindthatdatawithjustthescreenfieldsasyourguide?Weallknowtheinformationassociatedwithatransactionisstoredinseveral(sometimesmany)relatedtables.So,whenyouneedseveralfieldsfromatransactionforareportoranenhancement,youmayneedtofindmanyofthetransaction’stablesandestablishthelinksamongthem.Thoselinksareoftennotobvious.现在,设想一下业务经理问你是否以某种方式在《创建计量单位文档事务》中增加一个小小的功能:向MDoc文本字段中粘贴相关销售订单号。这个要求需要你创建一个增强功能。在前面两个情形中,你都需要访问数据库表中的特定数据。你怎么以屏幕字段做指导来找到这些数据?我们都知道与一个事务关联的信息都存储在几个(偶尔还会是很多个)相关的表里。这样,当你需要在报表或增强功能中使用一个事务中的几个字段时,你需要找出许多事务的表并在它们之间建立关联。这些关联通常都不会很明显。I’vecomeacrosstheseverysituationsonnumerousoccasionswhileworkingforseveralclientswiththeSD,MM,IM,WM,andServiceManagement(nowcalledCustomerService)modules.OvertimeIhavegatheredsuggestionsfromcolleaguesanddevelopedsometechniquesmyselftofindthedataIneeded.Iwillsharethesetechniques—18oftheminall—withyounow.我曾经在众多场合遇到这些情况,有时需要同时在SD、MM、IM、WM和服务管理(现在叫客户服务)等模块对多个client进行工作。随着时间推移,我收集了同事和自己在开发中寻找需要数据的建议。我现在来跟你分享这些技巧——共18种。第3页共25页TheStartingGateandFinishLine起跑线和终点线Iwillbepresentingawidevarietyoftechniquesforreachingthe“finishline”ofthisexercise—namely,locatingthetableandfieldthatstorestheunderlyingdataofascreenfield.You’reunlikelytoneedallofthem;you’llprobablybesuccessfulwithinthefirstfourtechniques.Iincludetheremainingtechniquesbecausesomefieldscanbeveryhardtochasedown,andanyoneoftheseothertoolsjustmightdothetrick.我将会介绍达成本练习“终点线”的各种各样的技巧——也就是说,定位那些在屏幕字段中存储潜在数据的表和字段。你未必需要所有这些方法,一般来说,前四种技巧已经足够了。我之所以写其他的技巧是因为有些字段非常难以追踪,而这些工具或许可以解决问题。TheStartingPoint起点ThestartingpointforthissetoftechniquesisalwaystheTechnicalInformationscreen,becauseitisherethatyoulearnthescreenfield’sname,andcandiscernwhetherornottheunderlyingdataobjectisastructure,view,ortable.这套技巧的起点通常是技术信息屏幕,因为你可以从这里知道屏幕字段的名字,并且辨别出这个潜在数据对象是不是一个结构、视图或者表。Iftheunderlyingdataobjectisatable,yoursearchisover.ThefieldnameshownontheTechnicalInformationscreen,plusthistablename,armsyouwiththedetailsyouneed.Ifthedataobjectisaview,justonemoreclickandyou’vegotthattablename.Ifthedataobjectisastructure,youstillhavetounearththenameofthetable.如果潜在数据对象是一个表,你的查找就结束了。字段名称显示在技术信息屏幕中,还包括了表名称,都是你需要的细节。如果数据对象是一个视图,只需要再点击一下就能得到表名称。如果数据对象是个结构,你还不得不需要继续发掘表的名称。第4页共25页Technique#1:ChecktheTechnicalInformationScreen技巧一:检查技术信息屏幕IalwaysstartmysearchfortheunderlyingdataobjectbygettingthenamesofthefieldandDataDictionaryobjectfromthetransactionscreen.CalluptheTechnicalInformationscreenbypositioningyourcursorinthetargetscreenfieldandthenpressingF1orclickingonthe?button.ThiswillbringuptheinitialHelpscreen.FromwithintheHelpscreen,pressF9orclickontheTechnicalinfobutton.我通常从事务屏幕中开始搜寻潜在数据对象——如字段和数据字典对象的名字。如果想调出技术信息屏幕,首先将光标定位在目标屏幕字段上,然后按F1或者点击按钮图标,这将打开初始帮助屏幕,在这个帮助屏幕中,按F9或者点击技术信息按钮。Figure1TheRelease4.0BTechnicalInformationScreenforthe“Sold-toparty”Field图1在发行版4.0B中关于“售达方”字段的技术信息屏幕TakealooknowatFigure1.ItshowstheTechnicalInformationscreenfortheSold-topartyfieldintheCreateStandard(Sales)OrderscreenforRelease4.0B.Youseeinthe“Fielddata”blockthattheTablenameisKUAGVandtheFieldnameisKUNNR1.InReleases4.0Bandbelow,thisscreencallstheassociatedobjecta“table”,whetherit’satable,view,orstructure.Notice