find program by name.

本文介绍了一个用于SAP系统的程序检索工具,该工具通过输入程序名称来检索相关的程序描述及事务代码,支持按程序名筛选并能显示程序详情,包括程序名称、事务代码和描述。


*selectin text:
*P_SPRSL 语言代码
*S_NAME 程序名
***************************************************************
*  report ztest_program1                                      *
*  write by Qin Li-quan(HP)                                   *
*  Date: 2007-07-10                                           *
*  Description :  Seeking Program by name                     *
***************************************************************

REPORT ZTEST_PROGRAM1 LINE-SIZE 145  LINE-COUNT 65(3) MESSAGE-ID 6G.
INCLUDE <ICON>.


TABLES:  TRDIRT,                         "Program name & description
         TSTC.                           "Transaction Table

DATA:  BEGIN OF V_TRDIRT_ITAB OCCURS 0,
            NAME    LIKE TRDIRT-NAME,             "Program Name
            TEXT    LIKE TRDIRT-TEXT,             "Program description
       END  OF V_TRDIRT_ITAB.

DATA:  BEGIN OF V_TSTC_ITAB OCCURS 0,            "Transaction Table
            TCODE    LIKE TSTC-TCODE,             "Transaction Code
            PGMNA    LIKE TSTC-PGMNA,             "Progran Name
       END  OF V_TSTC_ITAB.

DATA:  BEGIN OF V_PRINT_AREA OCCURS 0,           "Print area
            NAME    LIKE TRDIRT-NAME,             "Program Name
            TCODE   LIKE TSTC-TCODE,              "Transaction Code
            TEXT    LIKE TRDIRT-TEXT,             "Program Description
       END  OF V_PRINT_AREA.

DATA:
 V_RECORD_COUNT(10) TYPE N.                "line_count

SELECTION-SCREEN BEGIN OF BLOCK TABLE_RECORD WITH FRAME TITLE TEXT-001.
SELECT-OPTIONS: S_NAME   FOR  TRDIRT-NAME.    "Program name
PARAMETER:      P_SPRSL LIKE TRDIRT-SPRSL.    "language
SELECTION-SCREEN END OF BLOCK TABLE_RECORD.

INITIALIZATION.
  PERFORM A_INI_010_INITIALIZATION.       "Initialization routine

AT SELECTION-SCREEN.
  PERFORM B_ASS_010_AT_SELECTION_SCREEN.  "Screen

START-OF-SELECTION.
  PERFORM C_SOS_010_RETRIEVE_TRDIRT.      "Retrieve Program table
  PERFORM C_SOS_020_RETRIEVE_TSTC.        "Retrieve Transaction  table

END-OF-SELECTION.
  PERFORM D_EOS_010_MATCH_AND_GET_TRANS.  "Get transaction code
  PERFORM D_EOS_020_PRINT_PROGRAM_TABLE.  "Print structure

AT LINE-SELECTION.
  PERFORM E_ALS_GET_PROGRAM.

TOP-OF-PAGE.
  PERFORM Z_TOP_010_TOP_OF_PAGE.          "Top-of-page


*---------------------------------------------------------------------*
*       FORM a_ini_010_initialization                                 *
*---------------------------------------------------------------------*
*       ........                                                      *
*---------------------------------------------------------------------*
FORM A_INI_010_INITIALIZATION.
  P_SPRSL = SY-LANGU.                             "Initialize to 1
ENDFORM.                                  "a_ini_010_initialization.

*---------------------------------------------------------------------*
*       FORM b_ass_010_at_selection_screen                            *
*---------------------------------------------------------------------*
*       ........                                                      *
*---------------------------------------------------------------------*
FORM B_ASS_010_AT_SELECTION_SCREEN.
  IF S_NAME IS INITIAL.                  "If blank
    MESSAGE E134 .          "enter a value for
  ENDIF.
ENDFORM.                                  "b_ass_010_at_selection_screen

*---------------------------------------------------------------------*
*       FORM c_sos_010_retrieve_trdirt                                *
*---------------------------------------------------------------------*
*       ........                                                      *
*---------------------------------------------------------------------*
FORM C_SOS_010_RETRIEVE_TRDIRT.
  SELECT NAME TEXT FROM TRDIRT             "Retrieve Program description
     INTO  TABLE V_TRDIRT_ITAB
     WHERE SPRSL =  P_SPRSL                "Default language
      AND  NAME  IN S_NAME.                "Program name
  SORT V_TRDIRT_ITAB BY NAME.              "Sort by Program Name
ENDFORM.                                  "c_sos_010_retrieve_trdirt

*---------------------------------------------------------------------*
*       FORM c_sos_020_retrieve_tstc                                  *
*---------------------------------------------------------------------*
*       ........                                                      *
*---------------------------------------------------------------------*
FORM C_SOS_020_RETRIEVE_TSTC.
  SELECT TCODE PGMNA FROM TSTC             "Retrieve trans description
     INTO  TABLE V_TSTC_ITAB
     WHERE PGMNA IN S_NAME.                "Program Name

  SORT V_TSTC_ITAB BY PGMNA.               "Sort by Program Name
ENDFORM.                                  "c_sos_020_retrieve_tstc

*---------------------------------------------------------------------*
*       FORM d_eos_010_match_and_get_trans                            *
*---------------------------------------------------------------------*
*       ........                                                      *
*---------------------------------------------------------------------*
FORM D_EOS_010_MATCH_AND_GET_TRANS.
  DATA:  I  LIKE SY-TABIX.
*       i2 like sy-tabix.
  I = 1.
  DESCRIBE TABLE V_TRDIRT_ITAB LINES V_RECORD_COUNT. "Record count
  IF V_RECORD_COUNT = 0.                           "no input
    V_TRDIRT_ITAB-NAME  = TEXT-003.               "Program name
    WRITE V_TRDIRT_ITAB-NAME UNDER TEXT-H01.      "structure not defined
    EXIT.                                         "None to print
  ENDIF.
  V_RECORD_COUNT = 0.
  LOOP AT V_TRDIRT_ITAB.                           "TRDIRT
    LOOP AT V_TSTC_ITAB FROM I.                     "TSTC
      IF V_TRDIRT_ITAB-NAME < V_TSTC_ITAB-PGMNA.     "Master low
        V_PRINT_AREA-NAME  = V_TRDIRT_ITAB-NAME.
        V_PRINT_AREA-TCODE = ' '.
        V_PRINT_AREA-TEXT  = V_TRDIRT_ITAB-TEXT.
        I = SY-TABIX.
        APPEND V_PRINT_AREA.
        CLEAR  V_PRINT_AREA.
        EXIT.                                       "Get another TSTC
      ENDIF.
      IF V_TRDIRT_ITAB-NAME > V_TSTC_ITAB-PGMNA.     "Transaction low
        V_PRINT_AREA-TCODE = ' '.
        V_PRINT_AREA-NAME  = ' '.
        V_PRINT_AREA-TEXT  = ' '.
        I = SY-TABIX + 1.
        CONTINUE.                                   "Get another tstc
      ENDIF.
      IF V_TRDIRT_ITAB-NAME = V_TSTC_ITAB-PGMNA.     "Found
        V_PRINT_AREA-TCODE = V_TSTC_ITAB-TCODE.
        V_PRINT_AREA-NAME  = V_TRDIRT_ITAB-NAME.
        V_PRINT_AREA-TEXT  = V_TRDIRT_ITAB-TEXT.
        I = SY-TABIX + 1.
        APPEND V_PRINT_AREA.
        CLEAR  V_PRINT_AREA.
        EXIT.                                       "Get another TSTC
      ENDIF.
    ENDLOOP.                                        "From tstc
  ENDLOOP.                                          "From trdirt
ENDFORM.                                  "d_eos_010_match_and_get_trans

*---------------------------------------------------------------------*
*       FORM d_eos_020_print_program_table                            *
*---------------------------------------------------------------------*
*       ........                                                      *
*---------------------------------------------------------------------*
FORM D_EOS_020_PRINT_PROGRAM_TABLE.
  LOOP  AT V_PRINT_AREA.
    V_RECORD_COUNT = V_RECORD_COUNT + 1.
    WRITE: / V_RECORD_COUNT NO-ZERO,
             V_PRINT_AREA-NAME(31)  UNDER TEXT-H01,  "Program name
             V_PRINT_AREA-TCODE(20) UNDER TEXT-H03,  "Transasction Code
            V_PRINT_AREA-TEXT      UNDER TEXT-H02.  "Program Description
    HIDE:    V_PRINT_AREA-NAME.
    HIDE:    V_PRINT_AREA-TCODE.
  ENDLOOP.
ENDFORM.                                  "d_eos_020_print_program_table

*---------------------------------------------------------------------*
*       FORM e_als_get_program                                        *
*---------------------------------------------------------------------*
*       ........                                                      *
*---------------------------------------------------------------------*
FORM E_ALS_GET_PROGRAM.
  DATA V_CURSORFIELD(50).
  GET CURSOR FIELD V_CURSORFIELD.
  CASE V_CURSORFIELD.
    WHEN 'V_PRINT_AREA-NAME'.
      SET PARAMETER ID 'RID' FIELD SY-LISEL+11(40).
      CALL TRANSACTION 'SE38' AND SKIP FIRST SCREEN.
    WHEN 'V_PRINT_AREA-TCODE'.
      SET PARAMETER ID 'RID' FIELD SY-LISEL+53(30).
      CALL TRANSACTION V_PRINT_AREA-TCODE.
  ENDCASE.
ENDFORM.

*---------------------------------------------------------------------*
*       FORM z_top_010_top_of_page                                    *
*---------------------------------------------------------------------*
*       ........                                                      *
*---------------------------------------------------------------------*
FORM Z_TOP_010_TOP_OF_PAGE.
*  skip 1.
*  WRITE  3 ICON_GIS_PAN AS ICON .
*  write: 6 text-004.
*  WRITE /3 ICON_DEFECT AS ICON .
*  WRITE  6 text-005 .
*
*  skip 2.
  WRITE:  /008 TEXT-002,                  "No.
           013 TEXT-H01,                  "Program name
           054 TEXT-H03,                  "Transaction Code
           075 TEXT-H02.                  "Program Description
  ULINE.
ENDFORM.                                  "z_top_010_top_of_page. 

<think>我们之前遇到了一个Scala编译错误:"expectedclassorobjectdefinition",这个问题已经通过将代码放入object中解决。现在用户遇到了新的问题:在运行Flink程序时出现"WordCountclassnotfoundinjar",这可能与Maven构建或Scala编译配置有关。分析问题:1.之前的编译问题已经解决,生成了jar包,但运行时找不到类。2.可能原因:a.打包时没有包含WordCount类(因为之前编译错误,导致没有正确编译)b.打包时指定的主类名称错误c.Maven打包插件配置问题(比如没有指定主类)d.Scala编译插件版本与Flink版本不兼容解决方案:1.确保Maven的pom.xml文件正确配置了主类(如果使用maven-assembly-plugin或maven-shade-plugin)2.检查打包后的jar中是否包含WordCountBatch.class(位于正确的包路径下)3.确认运行命令中指定的主类全名是否正确(包括包名)具体步骤:步骤1:在pom.xml中配置主类如果使用maven-shade-plugin,需要指定主类:```xml<build><plugins><plugin><groupId>org.apache.maven.plugins</groupId><artifactId>maven-shade-plugin</artifactId><version>3.2.4</version><executions><execution><phase>package</phase><goals><goal>shade</goal></goals><configuration><transformers><transformerimplementation="org.apache.maven.plugins.shade.resource.ManifestResourceTransformer"><mainClass>WordCountBatch</mainClass><!--注意:如果该类在包中,需要全限定名--></transformer></transformers></configuration></execution></executions></plugin></plugins></build>```注意:如果WordCountBatch在包中,比如包名为com.example,则mainClass应写为com.example.WordCountBatch。步骤2:检查项目结构确保源代码在正确的目录下:src/main/scala/WordCount.scala,并且文件开头声明了包(如果有包的话):```scalapackagecom.example//如果有包,则运行命令需要指定全限定名objectWordCountBatch{//...}```步骤3:检查打包后的jar使用以下命令查看jar包内容:```jartftarget/your-jar-name.jar```应该能看到类似:```com/example/WordCountBatch$.classcom/example/WordCountBatch.class```步骤4:运行jar包如果主类在包中,使用全限定名:```flinkrun-ccom.example.WordCountBatchtarget/your-jar-name.jar```步骤5:确保Scala版本兼容性在pom.xml中检查scala-maven-plugin和scala-library版本是否与Flink使用的Scala版本匹配。Flink通常支持特定Scala版本(如2.11或2.12)。例如:```xml<properties><scala.version>2.11.12</scala.version><!--根据Flink版本选择--></properties><dependencies><dependency><groupId>org.apache.flink</groupId><artifactId>flink-scala_2.11</artifactId><version>1.11.0</version><!--Flink版本--></dependency><dependency><groupId>org.scala-lang</groupId><artifactId>scala-library</artifactId><version>${scala.version}</version></dependency></dependencies><build><plugins><plugin><groupId>net.alchim31.maven</groupId><artifactId>scala-maven-plugin</artifactId><version>3.2.0</version><executions><execution><goals><goal>compile</goal><goal>testCompile</goal></goals></execution></executions></plugin></plugins></build>```重要:Flink版本与Scala版本的对应关系[^1]:-Flink1.8~1.12:支持Scala2.11和2.12(需选择对应依赖)-Flink1.13+:默认只支持Scala2.12(但部分版本仍提供2.11)步骤6:如果使用IDE运行,确保编译并正确打包。如果上述步骤无法解决,请提供以下信息以便进一步排查:-完整的pom.xml-项目结构-打包命令和运行命令-错误日志全文§§相关问题§§1.如何解决Maven打包时依赖冲突导致的NoSuchMethodError[^1]?2.Flink任务提交时如何指定TaskManager的数量和内存[^2]?3.在Maven多模块项目中如何配置Flink程序的打包[^1]?</think> ### 解决 Flink WordCount 类未找到问题的全面方案 针对您遇到的 "WordCount class not found in jar" 错误和 Scala 编译问题,这通常是类定义、打包配置和依赖管理的综合问题。以下是完整解决方案: #### 1. 类定义规范与编译问题 在 Scala 中必须使用 `object` 而不是 `class` 作为程序入口: ```scala // 正确入口结构 object WordCountBatch { // 必须用 object def main(args: Array[String]): Unit = { // Flink代码... } } ``` **编译要求**: - 文件名必须与对象名一致:`WordCountBatch.scala` - 禁用 `public` 修饰符(Scala不支持) - 确保所有代码都在对象内部 #### 2. Maven 配置关键点 在 `pom.xml` 中添加/修正以下配置: ```xml <properties> <scala.version>2.12.15</scala.version> <!-- 匹配Flink版本 --> <flink.version>1.15.2</flink.version> <!-- 您使用的Flink版本 --> </properties> <build> <plugins> <!-- Scala编译插件 --> <plugin> <groupId>net.alchim31.maven</groupId> <artifactId>scala-maven-plugin</artifactId> <version>3.2.0</version> <executions> <execution> <goals> <goal>compile</goal> <goal>testCompile</goal> </goals> </execution> </executions> </plugin> <!-- 包含主类的打包配置 --> <plugin> <groupId>org.apache.maven.plugins</groupId> <artifactId>maven-shade-plugin</artifactId> <version>3.2.4</version> <executions> <execution> <phase>package</phase> <goals> <goal>shade</goal> </goals> <configuration> <transformers> <transformer implementation="org.apache.maven.plugins.shade.resource.ManifestResourceTransformer"> <mainClass>WordCountBatch</mainClass> </transformer> </transformers> </configuration> </execution> </executions> </plugin> </plugins> </build> ``` #### 3. 依赖项配置 Flink 核心依赖必须匹配 Scala 版本: ```xml <dependencies> <!-- Scala 2.12版本 --> <dependency> <groupId>org.apache.flink</groupId> <artifactId>flink-streaming-scala_2.12</artifactId> <version>${flink.version}</version> </dependency> <dependency> <groupId>org.apache.flink</groupId> <artifactId>flink-clients_2.12</artifactId> <version>${flink.version}</version> </dependency> </dependencies> ``` #### 4. 验证打包结果 使用以下命令检查 JAR 内容: ```bash # 查看JAR包内容 jar tf target/your-app.jar | grep WordCount # 检查MANIFEST.MF unzip -p target/your-app.jar META-INF/MANIFEST.MF | grep Main-Class ``` 正确结果应包含: ``` Main-Class: WordCountBatch ``` #### 5. 提交任务命令 **集群部署**: ```bash flink run -m yarn-cluster -c WordCountBatch target/your-app.jar ``` **本地调试**: ```bash flink run -c WordCountBatch target/your-app.jar ``` #### 常见问题矩阵 | 问题现象 | 解决方案 | |---------|---------| | `java.lang.ClassNotFoundException` | 检查`<mainClass>`是否匹配对象名 | | `NoSuchMethodError` | 确认Flink和Scala版本兼容性[^1] | | `scala-maven-plugin`编译失败 | 添加`scala-library`依赖 | | 打包后缺少依赖 | 使用`maven-shade-plugin`替代`maven-assembly-plugin` | #### 版本兼容性参考 Flink/Scala 兼容性矩阵: $$ \begin{array}{|c|c|} \hline \text{Flink 版本} & \text{Scala 版本} \\ \hline 1.11-1.13 & 2.11/2.12 \\ 1.14+ & 2.12+ \\ \hline \end{array} $$ 建议使用长期支持版本组合:**Flink 1.15 + Scala 2.12**
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值