ABAP 工单状态筛选(参考COOIS)

2024-02-15 18:08

本文主要是介绍ABAP 工单状态筛选(参考COOIS),希望对大家解决编程问题提供一定的参考价值,需要的开发者们随着小编来一起学习吧!

如果想在自开发的报表中使用类似COOIS的状态来筛选工单可以参考其源码,

主要包含以下几个代码段:

1.定义屏幕元素,由于表TJ02T不含搜索帮助,所以要手工添加:

屏幕元素:

SELECTION-SCREEN BEGIN OF LINE.
SELECTION-SCREEN:
  COMMENT 1(20TEXT-SYS FOR FIELD P_SYST1    MODIF ID C1,
  POSITION 33.
PARAMETERS:
  P_SYST1 LIKE TJ02T-TXT04                    MODIF ID C1,
  P_SYSH1 LIKE JEST-STAT                      NO-DISPLAY.
SELECTION-SCREEN
  POSITION 46.
PARAMETERS:
  P_EXCL1   LIKE RCOSA-EXCL1                  MODIF ID C1.
SELECTION-SCREEN:
  COMMENT 40(5TEXT-EXC FOR FIELD P_EXCL1    MODIF ID C1,
  COMMENT 52(3TEXT-AND FOR FIELD P_SYST2    MODIF ID C1,
    POSITION 58.
PARAMETERS:
  P_SYST2 LIKE TJ02T-TXT04                    MODIF ID C1,
  P_SYSH2 LIKE JEST-STAT                      NO-DISPLAY.
SELECTION-SCREEN
    POSITION 71.
PARAMETERS:
  P_EXCL2   LIKE RCOSA-EXCL1                  MODIF ID C1.
SELECTION-SCREEN:
    COMMENT 65(5TEXT-EXC FOR FIELD P_EXCL2  MODIF ID C1.
SELECTION-SCREEN END   OF LINE.
PARAMETERS:
  P_SELID  LIKE TJ48T-SELID                   NO-DISPLAY.

 

搜索帮助:

AT SELECTION-SCREEN ON VALUE-REQUEST FOR P_SYST1.
  PERFORM VAL_REQ_STATUS USING 'P_SYST1' CHANGING P_SYST1 P_SYSH1.

AT SELECTION-SCREEN ON VALUE-REQUEST FOR P_SYST2.
  PERFORM VAL_REQ_STATUS USING 'P_SYST2' CHANGING P_SYST2 P_SYSH2.

*&---------------------------------------------------------------------*
*&      Form  val_req_status
*&---------------------------------------------------------------------*
*       F4-Help to select system status by text, providing also code
*----------------------------------------------------------------------*
*      -->I_DYNPF    Name of dynpro field
*      -->C_TXT04    Status short text
*      -->C_STAT     Status code
*----------------------------------------------------------------------*
FORM VAL_REQ_STATUS USING    I_DYNPF
                    
CHANGING C_TXT04 LIKE TJ02T-TXT04
                             C_STAT  
LIKE JEST-STAT.

  TYPESBEGIN OF TY_VALUE,
           ISTAT TYPE J_ISTAT,
           TXT04 TYPE J_TXT04,
           TXT30 TYPE J_TXT30,
         END OF TY_VALUE.

  DATAL_VALUE   TYPE DYNFIELDVALUE,
        L_REPID   TYPE SY-REPID,
        LS_DYNP   TYPE DYNPREAD,
        LS_TJ02   TYPE TJ02,
        LS_VALUE  TYPE TJ02T,
        LS_RETURN TYPE DDSHRETVAL,
        LT_DYNP   TYPE STANDARD TABLE OF DYNPREAD,
        LT_TJ02   TYPE STANDARD TABLE OF TJ02,
        LT_VALUE  TYPE STANDARD TABLE OF TJ02T,
        LT_RETURN TYPE STANDARD TABLE OF DDSHRETVAL.

* personal value key
  DATAL_PVALKEY TYPE DDSHPVKEY.

* Get current value from screen
  LS_DYNP-FIELDNAME I_DYNPF.
  APPEND LS_DYNP TO LT_DYNP.
  CALL FUNCTION 'DYNP_VALUES_READ'
    EXPORTING
      DYNAME     SY-REPID
      DYNUMB     
SY-DYNNR
    
TABLES
      DYNPFIELDS LT_DYNP
    
EXCEPTIONS
      OTHERS     0.
  READ TABLE LT_DYNP INTO LS_DYNP INDEX 1.

* Get all possible values
  SELECT FROM TJ02 INTO TABLE LT_TJ02
                     
WHERE NODIS SPACE.
  IF LT_TJ02 IS NOT INITIAL.
    SELECT FROM TJ02T INTO TABLE LT_VALUE
                      
FOR ALL ENTRIES IN LT_TJ02
                      
WHERE ISTAT LT_TJ02-ISTAT
                        
AND SPRAS SY-LANGU.
  ENDIF.
  IF LINESLT_TJ02 <> LINESLT_VALUE ).
*   Not all status available in current language, try in german
*   as in FORM value_state(saplcoss)
    LOOP AT LT_TJ02 INTO LS_TJ02.
      READ TABLE LT_VALUE INTO LS_VALUE WITH KEY ISTAT LS_TJ02-ISTAT.
      CHECK SY-SUBRC <> 0.
      SELECT SINGLE FROM TJ02T INTO LS_VALUE
                          
WHERE ISTAT LS_TJ02-ISTAT
                            
AND SPRAS 'D'.
      IF SY-SUBRC 0.
        APPEND LS_VALUE TO LT_VALUE.
      ENDIF.
    ENDLOOP.
  ENDIF.
  SORT LT_VALUE BY ISTAT.

* Call own F4-help, not showing internal status number
  L_VALUE LS_DYNP-FIELDVALUE.
  L_REPID 'PPIO_ENTRY'.
* fill key for personal value list
  L_PVALKEY SY-UNAME.
  CALL FUNCTION 'F4IF_INT_TABLE_VALUE_REQUEST'
    EXPORTING
      DDIC_STRUCTURE   'TJ02T'
      RETFIELD         'TXT04'
      PVALKEY          L_PVALKEY
      
VALUE            L_VALUE
      VALUE_ORG        
'S'
      CALLBACK_PROGRAM L_REPID
      CALLBACK_FORM    
'VAL_REQ_STATUS_CALLBACK'
    TABLES
      VALUE_TAB        LT_VALUE
      RETURN_TAB       
LT_RETURN.

* Get selectect value and internal status number
  READ TABLE LT_RETURN INTO LS_RETURN WITH KEY FIELDNAME 'ISTAT'.
  IF SY-SUBRC 0.
    READ TABLE LT_VALUE WITH KEY ISTAT LS_RETURN-FIELDVAL
                        
INTO LS_VALUE.
    CHECK SY-SUBRC 0.
    C_TXT04 LS_VALUE-TXT04.
    C_STAT  LS_VALUE-ISTAT.
  ELSE.
    CLEARC_TXT04C_STAT.
  ENDIF.

ENDFORM.                    "val_req_status

 

2.工单校验:

DATABEGIN OF STATUS_TMP OCCURS 0,
        STAT LIKE JEST-STAT,
        EXCL LIKE RC27X-FLG_SEL,
      END   OF STATUS_TMP.
DATASTATUS_HDR_TAB LIKE STATUS_TMP OCCURS WITH HEADER LINE,
      STATUS_OPR_TAB LIKE STATUS_TMP OCCURS WITH HEADER LINE,
      STATUS_CMP_TAB LIKE STATUS_TMP OCCURS WITH HEADER LINE.
TYPES:
  BEGIN OF TYP_S_AUFNR,
    AUFNR TYPE AUFNR,
  END OF TYP_S_AUFNR,
  TYP_TS_AUFNR TYPE SORTED TABLE OF TYP_S_AUFNR
               
WITH NON-UNIQUE KEY AUFNR,
  BEGIN OF TYP_S_OBJNR,
    AUFNR TYPE AUFNR,
    AUFPL TYPE CO_AUFPL,
    APLFL TYPE PLNFOLGE,
    PLNFL TYPE PLNFOLGE,
    OBJNR TYPE J_OBJNR,
  END OF TYP_S_OBJNR,
  TYP_TS_AUFNR_OBJNR TYPE SORTED TABLE OF TYP_S_OBJNR
                     
WITH NON-UNIQUE KEY AUFNR OBJNR,
  TYP_TS_AUFPL_OBJNR TYPE SORTED TABLE OF TYP_S_OBJNR
                     
WITH NON-UNIQUE KEY AUFPL OBJNR,
  TYP_TS_OBJNR       TYPE SORTED TABLE OF TYP_S_OBJNR,
  BEGIN OF TYP_S_VBELN,
    VBELN TYPE VBELN,
  END OF TYP_S_VBELN,
  TYP_TS_VBELN TYPE SORTED TABLE OF TYP_S_VBELN
               
WITH NON-UNIQUE KEY VBELN.

DATAYX VALUE 'X'.

  DATA:LTS_OBJNR TYPE TYP_TS_AUFNR_OBJNR.

* APPEND STATUS TO IMPORTED TABLE FOR HEADER SELECTION
  PERFORM FILL_STATUS_TABLE
          
TABLES STATUS_HDR_TAB
          
USING  P_SYST1
                 P_SYSH1
                 P_EXCL1
                 P_SYST2
                 P_SYSH2
                 P_EXCL2
.

  IF STATUS_HDR_TAB[] IS NOT INITIAL.
    CLEAR LTS_OBJNR[] .
    SELECT AUFNR OBJNR FROM AUFK
           
INTO CORRESPONDING FIELDS OF TABLE LTS_OBJNR[]
             
WHERE WERKS  P_PWERK
               
AND AUFNR IN S_AUFNR
              
.

    PERFORM REDUCE_AUFNR_OBJNR_BY_STATUS
            
TABLES STATUS_HDR_TAB
            
USING  P_SELID
            
CHANGING LTS_OBJNR[].
  ENDIF.

*&---------------------------------------------------------------------*
*&      Form  FILL_STATUS_TABLE
*&---------------------------------------------------------------------*
FORM FILL_STATUS_TABLE TABLES   STATUS_TAB STRUCTURE STATUS_HDR_TAB
                       
USING    SYST1      LIKE TJ02T-TXT04
                                SYSH1      
LIKE JEST-STAT
                                EXCL1      
LIKE RCOSA-EXCL1
                                SYST2      
LIKE TJ02T-TXT04
                                SYSH2      
LIKE JEST-STAT
                                EXCL2      
LIKE RCOSA-EXCL1.
  DATA STATUS_TMP LIKE STATUS_HDR_TAB.

* Append status from selection screen to imported status table
  IF NOT SYSH1 IS INITIAL.
    STATUS_TMP-STAT SYSH1.
    STATUS_TMP-EXCL EXCL1.
    COLLECT STATUS_TMP INTO STATUS_TAB.
  ELSEIF NOT SYST1 IS INITIAL.
    CALL FUNCTION 'STATUS_TEXT_CONVERSION'
      EXPORTING
        LANGUAGE           SY-LANGU
        TXT04              
SYST1
      
IMPORTING
        STATUS_NUMBER      STATUS_TMP-STAT
      
EXCEPTIONS
        INSUFFICIENT_INPUT 1
        NOT_FOUND          2
        OBJECT_NOT_FOUND   3
        WRONG_MODE         4
        OTHERS             5.
    IF SY-SUBRC EQ 0.
      STATUS_TMP-EXCL EXCL1.
      COLLECT STATUS_TMP INTO STATUS_TAB.
    ENDIF.
  ENDIF.
  IF NOT SYSH2 IS INITIAL.
    STATUS_TMP-STAT SYSH2.
    STATUS_TMP-EXCL EXCL2.
    COLLECT STATUS_TMP INTO STATUS_TAB.
  ELSEIF NOT SYST2 IS INITIAL.
    CALL FUNCTION 'STATUS_TEXT_CONVERSION'
      EXPORTING
        LANGUAGE           SY-LANGU
        TXT04              
SYST2
      
IMPORTING
        STATUS_NUMBER      STATUS_TMP-STAT
      
EXCEPTIONS
        INSUFFICIENT_INPUT 1
        NOT_FOUND          2
        OBJECT_NOT_FOUND   3
        WRONG_MODE         4
        OTHERS             5.
    IF SY-SUBRC EQ 0.
      STATUS_TMP-EXCL EXCL2.
      COLLECT STATUS_TMP INTO STATUS_TAB.
    ENDIF.
  ENDIF.
ENDFORM.                               " FILL_STATUS_TABLE
*&---------------------------------------------------------------------*
*&      Form  REDUCE_AUFNR_OBJNR_BY_STATUS
*&---------------------------------------------------------------------*
FORM REDUCE_AUFNR_OBJNR_BY_STATUS
     
TABLES   STATUS_TAB STRUCTURE STATUS_HDR_TAB
     
USING    SELID      LIKE P_SELID
     
CHANGING CTS_OBJNR  TYPE TYP_TS_OBJNR.

* Statusobjekte
  DATA:
    OBJNR_TAB LIKE JSTO_PRE OCCURS WITH HEADER LINE.
  FIELD-SYMBOLS:
    <LS_OBJNR> TYPE TYP_S_OBJNR.

  CHECK NOT SELID        IS INITIAL
  OR    NOT STATUS_TAB[] IS INITIAL.
* preread
  LOOP AT CTS_OBJNR[] ASSIGNING <LS_OBJNR>.
    OBJNR_TAB-OBJNR <LS_OBJNR>-OBJNR.
    APPEND OBJNR_TAB.
  ENDLOOP.
  CALL FUNCTION 'STATUS_PRE_READ'
    TABLES
      JSTO_PRE_TAB OBJNR_TAB.

  DATA OBJECTS_DELETED.
  PERFORM REDUCE_OBJNR_BY_STATUS
          
TABLES   OBJNR_TAB
                   STATUS_TAB
          
USING    SELID
          
CHANGING OBJECTS_DELETED.

  IF OBJECTS_DELETED YX.
* Alle Aufträge entfernen, deren OBJNR nicht mehr in der Tabelle
* OBJNR_TAB enthalten ist.
    IF OBJNR_TAB[] IS INITIAL.
      REFRESH CTS_OBJNR[].
    ELSE.
      SORT OBJNR_TAB BY OBJNR.
      LOOP AT CTS_OBJNR[] ASSIGNING <LS_OBJNR>.
        READ TABLE OBJNR_TAB
             
WITH KEY OBJNR <LS_OBJNR>-OBJNR
             
BINARY SEARCH.
        IF SY-SUBRC <> 0.
          DELETE CTS_OBJNR[].
        ENDIF.
      ENDLOOP.
    ENDIF.
  ENDIF.
ENDFORM.                               " REDUCE_AUFNR_OBJNR_BY_STATUS
*&---------------------------------------------------------------------*
*&      Form  REDUCE_OBJNR_BY_STATUS
*&---------------------------------------------------------------------*
FORM REDUCE_OBJNR_BY_STATUS
     
TABLES   OBJNR_TAB  STRUCTURE OBJNR_TAB
              STATUS_TAB 
STRUCTURE STATUS_HDR_TAB
     
USING    SELID      LIKE P_SELID
     
CHANGING OBJECTS_DELETED.
  DATA OBJNR_CNT LIKE SY-DBCNT.

  CLEAR OBJECTS_DELETED.
  CHECK NOT OBJNR_TAB[]  IS INITIAL.
  DESCRIBE TABLE OBJNR_TAB LINES OBJNR_CNT.
* Statusprüfung gegen Status in Statustabelle
  LOOP AT STATUS_TAB.
    IF OBJNR_TAB[] IS INITIAL.
      EXIT.
    ELSE.
* Alle Objektnummern, bei denen der geforderte Status (nicht) sitzt,
* werden aus der Tabelle OBJNR_TAB gelöscht.
      CALL FUNCTION 'STATUS_CHECK_MULTI'
        EXPORTING
          STATUS      STATUS_TAB-STAT
          FLG_EXCLUDE 
STATUS_TAB-EXCL
        
TABLES
          OBJECTS     OBJNR_TAB.
    ENDIF.
  ENDLOOP.
* Statusprüfung gegen das Selektionsschema
  IF NOT SELID IS INITIAL.
    LOOP AT OBJNR_TAB.
      DATA FLG_STATUS_OK TYPE C.       "Statusprüfung OK
      CALL FUNCTION 'STATUS_CHECK_BY_SELSCHEM'
        EXPORTING
          OBJNR          OBJNR_TAB-OBJNR
          SELID          
SELID
        
IMPORTING
          FULLFILL       FLG_STATUS_OK
        
EXCEPTIONS
          NO_STAT_SCHEME 01
          NO_STAT_TAB    02.
      IF  SY-SUBRC      IS INITIAL
      AND FLG_STATUS_OK IS INITIAL.
        DELETE OBJNR_TAB.
      ENDIF.
    ENDLOOP.
  ENDIF.

  DESCRIBE TABLE OBJNR_TAB LINES SY-DBCNT.
  IF SY-DBCNT <> OBJNR_CNT.
    OBJECTS_DELETED YX.
  ENDIF.
ENDFORM.                               " REDUCE_OBJNR_BY_STATUS

执行FORM REDUCE_AUFNR_OBJNR_BY_STATUS 后 表LTS_OBJNR[]中剩余的工单即为通过状态筛选的工单,可以通过 FOR ALL ENTRIES IN 将 LTS_OBJNR[]作为条件

这篇关于ABAP 工单状态筛选(参考COOIS)的文章就介绍到这儿,希望我们推荐的文章对编程师们有所帮助!



http://www.chinasem.cn/article/712131

相关文章

大模型研发全揭秘:客服工单数据标注的完整攻略

在人工智能(AI)领域,数据标注是模型训练过程中至关重要的一步。无论你是新手还是有经验的从业者,掌握数据标注的技术细节和常见问题的解决方案都能为你的AI项目增添不少价值。在电信运营商的客服系统中,工单数据是客户问题和解决方案的重要记录。通过对这些工单数据进行有效标注,不仅能够帮助提升客服自动化系统的智能化水平,还能优化客户服务流程,提高客户满意度。本文将详细介绍如何在电信运营商客服工单的背景下进行

hdu1043(八数码问题,广搜 + hash(实现状态压缩) )

利用康拓展开将一个排列映射成一个自然数,然后就变成了普通的广搜题。 #include<iostream>#include<algorithm>#include<string>#include<stack>#include<queue>#include<map>#include<stdio.h>#include<stdlib.h>#include<ctype.h>#inclu

hdu1565(状态压缩)

本人第一道ac的状态压缩dp,这题的数据非常水,很容易过 题意:在n*n的矩阵中选数字使得不存在任意两个数字相邻,求最大值 解题思路: 一、因为在1<<20中有很多状态是无效的,所以第一步是选择有效状态,存到cnt[]数组中 二、dp[i][j]表示到第i行的状态cnt[j]所能得到的最大值,状态转移方程dp[i][j] = max(dp[i][j],dp[i-1][k]) ,其中k满足c

状态dp总结

zoj 3631  N 个数中选若干数和(只能选一次)<=M 的最大值 const int Max_N = 38 ;int a[1<<16] , b[1<<16] , x[Max_N] , e[Max_N] ;void GetNum(int g[] , int n , int s[] , int &m){ int i , j , t ;m = 0 ;for(i = 0 ;

hdu3006状态dp

给你n个集合。集合中均为数字且数字的范围在[1,m]内。m<=14。现在问用这些集合能组成多少个集合自己本身也算。 import java.io.BufferedInputStream;import java.io.BufferedReader;import java.io.IOException;import java.io.InputStream;import java.io.Inp

从状态管理到性能优化:全面解析 Android Compose

文章目录 引言一、Android Compose基本概念1.1 什么是Android Compose?1.2 Compose的优势1.3 如何在项目中使用Compose 二、Compose中的状态管理2.1 状态管理的重要性2.2 Compose中的状态和数据流2.3 使用State和MutableState处理状态2.4 通过ViewModel进行状态管理 三、Compose中的列表和滚动

实例:如何统计当前主机的连接状态和连接数

统计当前主机的连接状态和连接数 在 Linux 中,可使用 ss 命令来查看主机的网络连接状态。以下是统计当前主机连接状态和连接主机数量的具体操作。 1. 统计当前主机的连接状态 使用 ss 命令结合 grep、cut、sort 和 uniq 命令来统计当前主机的 TCP 连接状态。 ss -nta | grep -v '^State' | cut -d " " -f 1 | sort |

状态模式state

学习笔记,原文链接 https://refactoringguru.cn/design-patterns/state 在一个对象的内部状态变化时改变其行为, 使其看上去就像改变了自身所属的类一样。 在状态模式中,player.getState()获取的是player的当前状态,通常是一个实现了状态接口的对象。 onPlay()是状态模式中定义的一个方法,不同状态下(例如“正在播放”、“暂停

基于SpringBoot的宠物服务系统+uniapp小程序+LW参考示例

系列文章目录 1.基于SSM的洗衣房管理系统+原生微信小程序+LW参考示例 2.基于SpringBoot的宠物摄影网站管理系统+LW参考示例 3.基于SpringBoot+Vue的企业人事管理系统+LW参考示例 4.基于SSM的高校实验室管理系统+LW参考示例 5.基于SpringBoot的二手数码回收系统+原生微信小程序+LW参考示例 6.基于SSM的民宿预订管理系统+LW参考示例 7.基于

qml states 状态

states 状态 在QML中,states用于定义对象在不同状态下的属性变化。每个状态可以包含一组属性设置,当状态改变时,这些属性设置会被应用到对象上。 import QtQuick 2.15import QtQuick.Controls 2.15// 定义应用程序的主窗口ApplicationWindow {visible: true // 使窗口可见width: 640 /