首页 > 其他分享 >CRM端自定义数据抽取增强为输入值抽取

CRM端自定义数据抽取增强为输入值抽取

时间:2024-03-14 17:24:03浏览次数:19  
标签:抽取 f4 端自 lv lt ls dynpfields smofinicon CRM

因某些原因,导致一些数据没有从ERP传到CRM。

R3AR2中定义客户,物料,或者价格等的请求。

然后修改R3AR4程序:

REPORT zcrm_bdoc_batch_start MESSAGE-ID smof.

INCLUDE smofdirekt.

*---------------------------------------------------------------------
* Table definitions
*---------------------------------------------------------------------
TABLES: smofrqhd,
        smofrqdt,
        smoftables,
        smofreqtab,
        smofreltab,
        smohsiteid.

*---------------------------------------------------------------------
* Selection parameters
*---------------------------------------------------------------------
SELECTION-SCREEN BEGIN OF BLOCK block1 WITH FRAME TITLE text-001.
SELECT-OPTIONS: s_reqnam FOR smofrqhd-reqname OBLIGATORY.
SELECT-OPTIONS:s_para FOR smofrqdt-low.
SELECTION-SCREEN END OF BLOCK block1.

SELECTION-SCREEN BEGIN OF BLOCK block5 WITH
                 FRAME TITLE text-005. "'Dataflow'(005).
SELECT-OPTIONS: s_sname FOR smohsiteid-site_name
                  NO-EXTENSION NO INTERVALS,
                s_dname FOR smohsiteid-site_name
                  NO-EXTENSION NO INTERVALS.

SELECTION-SCREEN END OF BLOCK block5.

PARAMETER p_nodia TYPE c DEFAULT ''."NO-DISPLAY.

*---------------------------------------------------------------------
* Internal tables and variables
*---------------------------------------------------------------------
DATA: lt_reqname    TYPE TABLE OF rsdsselopt,
      ls_reqname    TYPE rsdsselopt,
      lt_dynpfields TYPE TABLE OF dynpread,
      ls_dynpfields TYPE dynpread,
      lt_smofrqhd   TYPE TABLE OF smofrqhd,
      lv_smofrqhd   TYPE smofrqhd,
      lv_smofinicon TYPE smofinicon.

DATA: lv_status    LIKE crm_para-status_ext,
      lv_smofreqhd LIKE smofreqhd,
      lv_sstid     TYPE smo_siteid,
      lv_dstid     TYPE smo_siteid,
      lv_ssttypeid TYPE smw1stid,
      lv_dsttypeid TYPE smw1stid.

INITIALIZATION.
  AUTHORITY-CHECK OBJECT 'CMW_CRMADP'
           ID 'ACTVT' FIELD '03'.
  IF sy-subrc <> 0.
    MESSAGE e172(00) WITH 'R3AR4'.
  ENDIF.




*---------------------------------------------------------------------
* MAIN PROCESSING
*---------------------------------------------------------------------
START-OF-SELECTION.

  AUTHORITY-CHECK OBJECT 'CMW_CRMADP'
         ID 'ACTVT' FIELD '16'.

  IF sy-subrc <> 0.
    MESSAGE e825(01).
  ENDIF.

* initial checks
  IF s_sname IS INITIAL OR
     s_dname IS INITIAL.
    MESSAGE s170(smof).
    RETURN.
  ENDIF.

* for some reason, s_reqnam can have one entry too much
  IF NOT s_reqnam-high IS INITIAL.
    READ TABLE s_reqnam WITH KEY option = 'EQ'.
    IF sy-subrc = 0.
      DELETE s_reqnam INDEX sy-tabix.
    ENDIF.
  ENDIF.

* get SiteID-GUIDs based on Name
  IF lv_sstid IS INITIAL.
    PERFORM lv_tid_determine USING s_sname-low
                             CHANGING lv_sstid
                                      lv_ssttypeid.
  ENDIF.
  IF lv_dstid IS INITIAL.
    PERFORM lv_tid_determine USING s_dname-low
                             CHANGING lv_dstid
                                      lv_dsttypeid.
  ENDIF.

* Fill structure lt_reqname for function module call
  SELECT * INTO TABLE lt_smofrqhd FROM smofrqhd       "#EC CI_SGLSELECT
           WHERE reqname IN s_reqnam
           AND inactive = ''.
  IF sy-subrc <> 0.
    MESSAGE s153(smof).
    RETURN.
  ENDIF.

* check, if Sites entered are valid for all objects
  LOOP AT lt_smofrqhd INTO lv_smofrqhd.
    SELECT SINGLE * FROM smofinicon INTO lv_smofinicon
      WHERE objname = lv_smofrqhd-objname
      AND sourcestid = lv_ssttypeid
      AND targetstid = lv_dsttypeid.
    IF sy-subrc <> 0.
      IF lv_smofrqhd-reqname = s_reqnam-low
      OR lv_smofrqhd-reqname = s_reqnam-high.
* No entry found - stop it!
        MESSAGE s170(smof).
        RETURN.
      ELSE.
* exclude this entry since it does not match Sites
        DELETE TABLE lt_smofrqhd FROM lv_smofrqhd.
      ENDIF.
    ENDIF.
  ENDLOOP.
  READ TABLE lt_smofrqhd INTO lv_smofrqhd INDEX 1.
  IF sy-subrc = 0.
    LOOP AT s_para.
      CHECK s_para-low IS NOT INITIAL.
      UPDATE smofrqdt SET low = s_para-low WHERE reqkey = lv_smofrqhd-reqkey.
      COMMIT WORK.
      CALL FUNCTION 'SMOF_START_DOWNLOAD_OR_REQUEST'
        EXPORTING
          i_source_site_id = lv_sstid
          i_target_site_id = lv_dstid
          i_function       = 'R'
          i_no_dialog      = p_nodia
        IMPORTING
          e_status         = lv_status
        TABLES
          t_smofrqhd       = lt_smofrqhd.
    ENDLOOP.

  ENDIF.


* Information messages
  IF NOT lv_status IS INITIAL.
    MESSAGE s024(smof).
  ELSE.
    MESSAGE s031(smof) WITH 'REQUEST'.
  ENDIF.

AT SELECTION-SCREEN ON VALUE-REQUEST FOR s_reqnam-low.
  PERFORM f4_help_object USING 'LOW'.

AT SELECTION-SCREEN ON VALUE-REQUEST FOR s_reqnam-high.
  PERFORM f4_help_object USING 'HIGH'.

AT SELECTION-SCREEN ON VALUE-REQUEST FOR s_sname-low.
  PERFORM s_sname_low_select.

AT SELECTION-SCREEN ON VALUE-REQUEST FOR s_dname-low.
  PERFORM s_dname_low_select.

AT SELECTION-SCREEN ON s_reqnam.
  PERFORM propose_site_ids.

*----------------------------------------------------------------------*
*&      Form  F4_HELP_OBJECT
*&---------------------------------------------------------------------*
FORM f4_help_object USING p_low_or_high.

  DATA: fi          LIKE dfies OCCURS 0 WITH HEADER LINE,
        lt_smofrqhd TYPE TABLE OF smofrqhd,
        ls_smofrqhd TYPE smofrqhd.
  DATA: BEGIN OF int_funcs OCCURS 0,
          reqname  LIKE smofrqhd-reqname,
          objname  LIKE smofrqhd-objname,
          objclass LIKE smofrqhd-objclass,
        END OF int_funcs.
  DATA: ind LIKE sy-index.

  DATA: lt_ddshretval TYPE TABLE OF ddshretval,
        lv_ddshretval TYPE ddshretval.

  DATA: l_charsize TYPE i.

* Key field in F4 help
  CALL FUNCTION 'DDIF_FIELDINFO_GET'
    EXPORTING
      tabname   = 'SMOFRQHD'
    TABLES
      dfies_tab = fi.

* Unicode system?
  CALL FUNCTION 'CRM_UC_SYSTEM_CHECK'
    IMPORTING
*     E_IS_UC_SYSTEM       =
      e_charsize = l_charsize.

  LOOP AT fi.
    CASE fi-fieldname.
      WHEN 'REQNAME'.
        fi-offset = 0 * l_charsize.
        MODIFY fi.
      WHEN 'OBJNAME'.
        fi-offset = 15 * l_charsize.
        MODIFY fi.
      WHEN 'OBJCLASS'.
        fi-offset = 30 * l_charsize.
        MODIFY fi.
      WHEN OTHERS.
        DELETE fi.
    ENDCASE.
  ENDLOOP.

  IF p_low_or_high = 'LOW'.
    ls_dynpfields-fieldname = 'S_REQNAM-LOW'.
  ELSE.
    ls_dynpfields-fieldname = 'S_REQNAM-HIGH'.
  ENDIF.
  APPEND ls_dynpfields TO lt_dynpfields.

  CALL FUNCTION 'DYNP_VALUES_READ'
    EXPORTING
      dyname     = sy-cprog
      dynumb     = sy-dynnr
    TABLES
      dynpfields = lt_dynpfields
    EXCEPTIONS
      OTHERS     = 1.

  READ TABLE lt_dynpfields INTO ls_dynpfields INDEX 1.
  REFRESH lt_dynpfields.

  IF ls_dynpfields-fieldvalue CA '*+'.
    REPLACE ALL OCCURRENCES OF '*'
      IN ls_dynpfields-fieldvalue WITH '%'.
    REPLACE ALL OCCURRENCES OF '+'
      IN ls_dynpfields-fieldvalue WITH '_'.
  ENDIF.
  SET LOCALE LANGUAGE sy-langu.                          "#EC TRANSLANG
  TRANSLATE ls_dynpfields-fieldvalue TO UPPER CASE.

  IF NOT ls_dynpfields-fieldvalue IS INITIAL.
* select Object from SMOFOJBECT
    SELECT * INTO TABLE lt_smofrqhd                   "#EC CI_SGLSELECT
             FROM smofrqhd
           WHERE reqname LIKE ls_dynpfields-fieldvalue
           AND inactive = ''.
  ELSE.
* select Object from SMOFOJBECT
    SELECT * INTO TABLE lt_smofrqhd                   "#EC CI_SGLSELECT
           FROM smofrqhd
           WHERE inactive = ''.
  ENDIF.
  LOOP AT lt_smofrqhd INTO ls_smofrqhd.
    int_funcs-reqname = ls_smofrqhd-reqname.
    int_funcs-objname = ls_smofrqhd-objname.
    int_funcs-objclass = ls_smofrqhd-objclass.
    COLLECT int_funcs.
  ENDLOOP.


  CALL FUNCTION 'F4IF_INT_TABLE_VALUE_REQUEST'
    EXPORTING
      retfield        = 'REQNAME'
      value_org       = 'S'
    TABLES
      value_tab       = int_funcs
      field_tab       = fi
      return_tab      = lt_ddshretval
    EXCEPTIONS
      parameter_error = 1
      no_values_found = 2
      OTHERS          = 3.
  IF sy-subrc <> 0.
  ENDIF.

  READ TABLE lt_ddshretval INTO lv_ddshretval INDEX 1.

  CLEAR lt_dynpfields.
  IF p_low_or_high = 'LOW'.
    MOVE 'S_REQNAM-LOW' TO ls_dynpfields-fieldname.
  ELSE.
    MOVE 'S_REQNAM-HIGH' TO ls_dynpfields-fieldname.
  ENDIF.
  MOVE lv_ddshretval-fieldval TO ls_dynpfields-fieldvalue.
  APPEND ls_dynpfields TO  lt_dynpfields.

  CALL FUNCTION 'DYNP_VALUES_UPDATE'
    EXPORTING
      dyname               = sy-cprog
      dynumb               = sy-dynnr
    TABLES
      dynpfields           = lt_dynpfields
    EXCEPTIONS
      invalid_abapworkarea = 1
      invalid_dynprofield  = 2
      invalid_dynproname   = 3
      invalid_dynpronummer = 4
      invalid_request      = 5
      no_fielddescription  = 6
      undefind_error       = 7
      OTHERS               = 8.

ENDFORM.                    "F4_HELP_OBJECT

*&---------------------------------------------------------------------*
*&      Form  possible_dataflows_for_initdnl
*&---------------------------------------------------------------------*
FORM possible_dataflows_for_initdnl
               TABLES pto_smofinicon STRUCTURE smofinicon.
  DATA lv_msa_active TYPE cmwcdt_smwact.

  CALL FUNCTION 'SMOF_READ_SMOFAPPL'
    EXPORTING
      i_check_active_sync_appl = 'X'
    IMPORTING
      e_sync_active            = lv_msa_active.
  REFRESH pto_smofinicon.
  SELECT * FROM smofinicon INTO TABLE pto_smofinicon.
  IF lv_msa_active IS INITIAL.
    DELETE pto_smofinicon WHERE sourcestid EQ 'CDB'.
    DELETE pto_smofinicon WHERE targetstid EQ 'CDB'.
  ENDIF.

ENDFORM.                    " possible_dataflows_for_initdnlFORM

*&---------------------------------------------------------------------*
*&      Form  f4_choose_siteid
*&---------------------------------------------------------------------*
FORM f4_choose_siteid USING pu_selopt LIKE rsdsselopt
                            VALUE(pu_fieldname)
                            pv_sstid TYPE smo_siteid
                            pv_dstid TYPE smo_siteid
                            pv_sstype TYPE smw1stid
                            pv_dstype TYPE smw1stid.

  DATA: lt_f4_fields     LIKE help_value OCCURS 0 WITH HEADER LINE,
        lt_smofinicon    LIKE smofinicon OCCURS 0 WITH HEADER LINE,
        lv_index         LIKE sy-index,
        lv_fieldname(30) TYPE c,
        lt_dynpfields    LIKE dynpread OCCURS 0 WITH HEADER LINE.

  TYPES: BEGIN OF f4_values,
           site_id    LIKE siteselect-site_id,
           site_name  LIKE siteselect-site_name,
           sitetypeid LIKE siteselect-sitetypeid,
         END OF f4_values,

         BEGIN OF f4_values_display,
           site_name  LIKE siteselect-site_name,
           sitetypeid LIKE siteselect-sitetypeid,
         END OF f4_values_display.

  DATA: lt_f4_values         TYPE TABLE OF f4_values,
        ls_f4_values         TYPE f4_values,
        lt_f4_values_display TYPE TABLE OF f4_values_display,
        ls_f4_values_display TYPE f4_values_display.

* Key field in F4 help
  REFRESH lt_f4_fields.
  lt_f4_fields-selectflag = 'X'.
  lt_f4_fields-tabname = 'SITESELECT'.
  lt_f4_fields-fieldname = 'SITE_NAME'.
  APPEND lt_f4_fields.

* select possible data flows
  PERFORM possible_dataflows_for_initdnl
         TABLES lt_smofinicon.

  SHIFT pu_selopt LEFT DELETING LEADING space.
  IF pu_selopt CA '*+'.
    REPLACE ALL OCCURRENCES OF '*' IN pu_selopt WITH '%'.
    REPLACE ALL OCCURRENCES OF '+' IN pu_selopt WITH '_'.
  ENDIF.
  SET LOCALE LANGUAGE sy-langu.
  TRANSLATE pu_selopt TO UPPER CASE.                     "#EC TRANSLANG

* Select possible Sites (dependend on possible data flows)
  IF pu_fieldname EQ 'S_SNAME'.
    IF NOT pu_selopt IS INITIAL.
      SELECT site_id site_name sitetypeid FROM siteselect
        INTO CORRESPONDING FIELDS OF TABLE lt_f4_values
        FOR ALL ENTRIES IN lt_smofinicon
        WHERE sitetypeid EQ lt_smofinicon-sourcestid
        AND site_name LIKE pu_selopt.
    ELSE.
      SELECT site_id site_name sitetypeid FROM siteselect
        INTO CORRESPONDING FIELDS OF TABLE lt_f4_values
        FOR ALL ENTRIES IN lt_smofinicon
        WHERE sitetypeid EQ lt_smofinicon-sourcestid.
    ENDIF.
  ELSE.
    IF NOT pu_selopt IS INITIAL.
      SELECT site_id site_name sitetypeid FROM all_sites
        INTO CORRESPONDING FIELDS OF TABLE lt_f4_values
        FOR ALL ENTRIES IN lt_smofinicon
        WHERE sitetypeid EQ lt_smofinicon-targetstid
        AND site_name LIKE pu_selopt.
    ELSE.
      SELECT site_id site_name sitetypeid FROM all_sites
        INTO CORRESPONDING FIELDS OF TABLE lt_f4_values
        FOR ALL ENTRIES IN lt_smofinicon
        WHERE sitetypeid EQ lt_smofinicon-targetstid.
    ENDIF.
  ENDIF.

* prepare display-table
  LOOP AT lt_f4_values INTO ls_f4_values.
    MOVE-CORRESPONDING ls_f4_values TO ls_f4_values_display.
    APPEND ls_f4_values_display TO lt_f4_values_display.
  ENDLOOP.

* Display help dialog
  CALL FUNCTION 'HELP_VALUES_GET_NO_DD_NAME'
    EXPORTING
      selectfield                  = 'SITE_NAME'
    IMPORTING
      ind                          = lv_index
    TABLES
      fields                       = lt_f4_fields
      full_table                   = lt_f4_values_display
    EXCEPTIONS
      full_table_empty             = 1
      no_tablestructure_given      = 2
      no_tablefields_in_dictionary = 3
      more_then_one_selectfield    = 4
      no_selectfield               = 5
      OTHERS                       = 6.

* Fill report parameter fields
  READ TABLE lt_f4_values INTO ls_f4_values INDEX lv_index.
  CLEAR lt_dynpfields.
  REFRESH lt_dynpfields.
  MOVE pu_fieldname TO lv_fieldname.
  CONCATENATE lv_fieldname '-LOW' INTO lv_fieldname.
  MOVE lv_fieldname TO lt_dynpfields-fieldname.
  MOVE ls_f4_values-site_name TO lt_dynpfields-fieldvalue.
  APPEND lt_dynpfields.

  IF pu_fieldname EQ 'S_SNAME'.
    MOVE 'S_SSTID-LOW' TO lt_dynpfields-fieldname.
    MOVE ls_f4_values-site_id TO pv_sstid.
    MOVE ls_f4_values-site_name TO s_sname-low.
    MOVE ls_f4_values-sitetypeid TO pv_sstype.
  ELSE.
    MOVE 'S_DSTID-LOW' TO lt_dynpfields-fieldname.
    MOVE ls_f4_values-site_id TO pv_dstid.
    MOVE ls_f4_values-site_name TO s_dname-low.
    MOVE ls_f4_values-sitetypeid TO pv_dstype.
  ENDIF.
  APPEND lt_dynpfields.

  CALL FUNCTION 'DYNP_VALUES_UPDATE'
    EXPORTING
      dyname               = sy-cprog
      dynumb               = sy-dynnr
    TABLES
      dynpfields           = lt_dynpfields
    EXCEPTIONS
      invalid_abapworkarea = 1
      invalid_dynprofield  = 2
      invalid_dynproname   = 3
      invalid_dynpronummer = 4
      invalid_request      = 5
      no_fielddescription  = 6
      undefind_error       = 7
      OTHERS               = 8.
*
ENDFORM.                    "f4_choose_siteid
*&---------------------------------------------------------------------*
*&      Form  lv_tid_determine
*&---------------------------------------------------------------------*
FORM lv_tid_determine USING pv_sname
                      CHANGING pv_sstid
                               pv_ssttypeid.

  DATA: lt_siteselect TYPE TABLE OF all_sites,
        ls_siteselect TYPE all_sites.

  SELECT * INTO TABLE lt_siteselect FROM all_sites
           WHERE site_name = pv_sname.

  READ TABLE lt_siteselect INTO ls_siteselect INDEX 1.
  IF sy-subrc = 0.
    pv_sstid = ls_siteselect-site_id.
    pv_ssttypeid = ls_siteselect-sitetypeid.
  ELSE.
    CLEAR: pv_sstid.
  ENDIF.

ENDFORM.                    "lv_tid_determine
*&---------------------------------------------------------------------*
*&      Form  s_sname_low_select
*&---------------------------------------------------------------------*
FORM s_sname_low_select .

  DATA lv_selopt LIKE rsdsselopt VALUE IS INITIAL.

  REFRESH lt_dynpfields.
  CLEAR: ls_dynpfields.
  MOVE 'S_SNAME-LOW' TO ls_dynpfields-fieldname.
  APPEND ls_dynpfields TO lt_dynpfields.

  CALL FUNCTION 'DYNP_VALUES_READ'
    EXPORTING
      dyname               = sy-cprog
      dynumb               = sy-dynnr
    TABLES
      dynpfields           = lt_dynpfields
    EXCEPTIONS
      invalid_abapworkarea = 1
      invalid_dynprofield  = 2
      invalid_dynproname   = 3
      invalid_dynpronummer = 4
      invalid_request      = 5
      no_fielddescription  = 6
      invalid_parameter    = 7
      undefind_error       = 8
      double_conversion    = 9
      OTHERS               = 10.

  READ TABLE lt_dynpfields INTO ls_dynpfields INDEX 1.
  lv_selopt-low = ls_dynpfields-fieldvalue.
  PERFORM f4_choose_siteid USING lv_selopt
                                 'S_SNAME'
                                 lv_sstid
                                 lv_dstid
                                 lv_ssttypeid
                                 lv_dsttypeid.

ENDFORM.                    " s_sname_low_select
*&---------------------------------------------------------------------*
*&      Form  s_dname_low_select
*&---------------------------------------------------------------------*
FORM s_dname_low_select .

  DATA lv_selopt LIKE rsdsselopt VALUE IS INITIAL.

  REFRESH lt_dynpfields.
  CLEAR   lt_dynpfields.
  MOVE 'S_DNAME-LOW' TO ls_dynpfields-fieldname.
  APPEND ls_dynpfields TO lt_dynpfields.
  CALL FUNCTION 'DYNP_VALUES_READ'
    EXPORTING
      dyname               = sy-cprog
      dynumb               = sy-dynnr
    TABLES
      dynpfields           = lt_dynpfields
    EXCEPTIONS
      invalid_abapworkarea = 1
      invalid_dynprofield  = 2
      invalid_dynproname   = 3
      invalid_dynpronummer = 4
      invalid_request      = 5
      no_fielddescription  = 6
      invalid_parameter    = 7
      undefind_error       = 8
      double_conversion    = 9
      OTHERS               = 10.

  READ TABLE lt_dynpfields INTO ls_dynpfields INDEX 1.
  lv_selopt-low = ls_dynpfields-fieldvalue.
  PERFORM f4_choose_siteid USING lv_selopt
                                 'S_DNAME'
                                 lv_sstid
                                 lv_dstid
                                 lv_ssttypeid
                                 lv_dsttypeid.


ENDFORM.                    " s_dname_low_select
*&---------------------------------------------------------------------*
*&      Form  propose_site_ids
*&---------------------------------------------------------------------*
FORM propose_site_ids .

  DATA: lt_smofinicon      TYPE TABLE OF smofinicon,
        lt_smofinicon_copy TYPE TABLE OF smofinicon,
        ls_smofinicon      TYPE smofinicon,
        ls_siteselect      TYPE siteselect,
        lt_smofrqhd        TYPE TABLE OF smofrqhd,
        ls_smofrqhd        TYPE smofrqhd,
        lv_lines           TYPE sytabix,
        lv_msa_active      TYPE cmwcdt_smwact.

* initial checks - Proposal makes only sense if one request object is
* entered
  DESCRIBE TABLE s_reqnam LINES lv_lines.
  CHECK lv_lines = 1.
  CHECK s_reqnam-option = 'EQ' AND
        s_reqnam-high = space.

* first determine object name
  SELECT * INTO TABLE lt_smofrqhd FROM smofrqhd       "#EC CI_SGLSELECT
           WHERE reqname IN s_reqnam
           AND inactive = ''.
  IF sy-subrc <> 0.
    MESSAGE s153(smof).
  ENDIF.
  DESCRIBE TABLE lt_smofrqhd LINES lv_lines.
  CHECK lv_lines = 1.
  READ TABLE lt_smofrqhd INTO ls_smofrqhd
             INDEX 1.

* Based on object name read flow context
  SELECT * INTO TABLE lt_smofinicon_copy FROM smofinicon
           WHERE objname = ls_smofrqhd-objname.
  CALL FUNCTION 'SMOF_READ_SMOFAPPL'
    EXPORTING
      i_check_active_sync_appl = 'X'
    IMPORTING
      e_sync_active            = lv_msa_active.
  IF lv_msa_active IS INITIAL.
    DELETE lt_smofinicon WHERE sourcestid EQ 'CDB'.
    DELETE lt_smofinicon WHERE targetstid EQ 'CDB'.
  ENDIF.

* Automatic fill of source site name
  IF s_sname-low IS INITIAL.
    lt_smofinicon[] = lt_smofinicon_copy[].
    " How many objects are still possible ?

    SORT lt_smofinicon BY sourcestid.
    DELETE ADJACENT DUPLICATES FROM lt_smofinicon COMPARING sourcestid.

    DESCRIBE TABLE lt_smofinicon LINES lv_lines.
    IF lv_lines EQ 1.
      " take over the only possibility
      READ TABLE lt_smofinicon INTO ls_smofinicon INDEX 1.
      SELECT * FROM siteselect
               INTO ls_siteselect
               WHERE sitetypeid EQ ls_smofinicon-sourcestid.
      ENDSELECT.
      IF sy-dbcnt EQ 1.
        MOVE ls_siteselect-site_name TO s_sname-low.
      ENDIF.
    ENDIF.
  ENDIF.

* Automatic fill of destination site name
  IF s_dname-low IS INITIAL .
    lt_smofinicon[] = lt_smofinicon_copy[].

    SORT lt_smofinicon BY sourcestid.
    DELETE ADJACENT DUPLICATES FROM lt_smofinicon COMPARING targetstid.

    DESCRIBE TABLE lt_smofinicon LINES lv_lines.
    IF lv_lines EQ 1.
      " take over the only possibility
      READ TABLE lt_smofinicon INTO ls_smofinicon INDEX 1.
      SELECT * FROM siteselect
               INTO ls_siteselect
               WHERE sitetypeid EQ ls_smofinicon-targetstid.
      ENDSELECT.
      IF sy-dbcnt EQ 1.
        MOVE ls_siteselect-site_name TO s_dname-low.
      ENDIF.
    ENDIF.
  ENDIF.

ENDFORM.                    " propose_site_ids
ZCRM_BDOC_BATCH_START

运行程序时,先选择请求名称,然后输入批量的客户编码,物料号等。

 SMW01查看结果:

 

标签:抽取,f4,端自,lv,lt,ls,dynpfields,smofinicon,CRM
From: https://www.cnblogs.com/sapSB/p/18073339

相关文章

  • FineReport移动端CRM报表体系搭建
    ***数据均为虚构********考勤页面**********拜访页面**********下单页面**********客户页面**********客户看板页面*****......
  • Dynamics CRM 2013 常用SQL查询基础数据
    获取实体SELECT*FROMEntityWHERELogicalName='EntityName'获取字段名称SELECTdistinctA.nameAS字段名,L.labelAS显示名,AT.descriptionAS类型,L.ObjectColumnNameAS形式,A.IsNullableAScodefromattributeAINNERJOINlocalizedlabelLONA.Attributei......
  • Dynamics CRM 2013 常用JS脚本
    Xrm.Page.data获取记录的主键Id的值(getId)varId=Xrm.Page.data.entity.getId();获取记录的表的逻辑名称(getEntityName)varentityName=Xrm.Page.data.entity.getEntityName();获取引用记录的查找值(getEntityReference)varerEntity=Xrm.Page.data.entity.getEnt......
  • 数据抽取平台pydatax介绍--实现和项目使用
      数据抽取平台pydatax实现过程中,有2个关键点:  1、是否能在python3中调用执行datax任务,自己测试了一下可以,代码如下:  这个str1就是配置的shell文件   try:result=os.popen(str1).read()exceptExceptionase:print(e)2、是否能获取datax执行后......
  • 艾思-定制化ERP/CRM/OA软件,助力企业高效管理
    在当今快速发展的商业环境中,企业对于高效、灵活的管理系统的需求日益增长。为了满足这一需求,艾思软件公司专注于为企业提供定制化的ERP(企业资源计划)、CRM(客户关系管理)和OA(办公自动化)软件解决方案,帮助企业实现更高效、更精准的管理和运营。艾思软件的ERP系统针对企业的生产、财务......
  • 控制ERP物料主数据通过Middleware传往CRM
    先说一下优化过滤的必要性。CRM物料主数据一百多万。感谢MDM或者相关的系统,每天通过接口更新的不知道什么东西,每天数百万的物料更新队列进入CRM。CRM系统被搞死了好几次。然后各种优化报表,程序。。。最后有几个链接缓慢的自开发接口,背锅了。。。好吧,先不管那些了。现在在ERP......
  • 数据抽取平台pydatax介绍
      缘起一:     公司现有数据仓库,是通过kettle从mysql抽取到目标库,运行多年,主要有以下问题,      1,效率低:kettle抽取行数少       2,容错性差:一个表抽取出错就导致后续计算会出问题,      3,扩展性差:对多库多表等支持不好  ......
  • 使用Java将视频中某一帧抽取为封面图片
    由于业务需求需将视频中的某帧进行截取作为该视频封面,网上太多教程过于复杂麻烦,经本人研究发现可以使用Java调用FFmpeg来进行处理。/***获取指定的视频文件后进行封面截图为png并保存到指定目录**@paramvideoFile视频媒体文件*@paramfileName文件名*/publicS......
  • PCMag评选“小企业优选CRM软件”——Zoho Bigin上榜
     当我们谈论企业怎样选择CRM管理系统时,大型企业、中型企业以及小型或初创等不同规模的企业需求各不相同,很难用一套软件来适配所有公司。以小企业为例,大多面临预算紧张、没有专业的IT部门或支持团队、暂时用不到高级定制功能等现状。基于这个原因,PCMag发起了一项【小企业适合什......
  • CRM管理系统针对客户跟进有哪些功能?如何实现精准跟进客户?
      客户跟进是任何成功企业的命脉,它是从初始联系到转化、从培育到购买之间的桥梁。然而,客户们每天都被各种信息轰炸,很难将注意力集中在任何一个事情上。因此,企业想要在客户中脱颖而出,就必须能够吸引并维持他们的注意力。CRM管理系统应运而生,它能赋予各种规模的企业构建个性化、......