繁体   English   中英

SAP .Net Connector 3.0 RfC返回不正确的值

[英]SAP .Net Connector 3.0 RfC return incorrect values

我编写了一个自定义RFC,该RFC从BKPF读取特定数据并将其返回。

当我在SAP Gui中进行测试时,功能模块运行得很好,但是当我通过.Net Connector 3.0驱动程序从.Net应用程序中使用它时,在BUKRS中得到的是“ I”值(带有3个空格),而不是“ IP01”。

我在连接参数中尝试了几个代码页,但没有任何变化。

    FUNCTION ZONW_IMPORT_ECRM.
    *"----------------------------------------------------------------------
    *"*"Interface locale :
    *"  IMPORTING
    *"     VALUE(MAX_ROWS) TYPE  I DEFAULT 0
    *"     VALUE(WHERE_TAB) TYPE  WHERECONDS OPTIONAL
    *"     VALUE(COMPANYCODE) TYPE  BKPF-BUKRS DEFAULT 'IP01'
    *"     VALUE(CURRY) TYPE  BSEG-GJAHR DEFAULT SY-DATUM
    *"  EXPORTING
    *"     VALUE(RETURN_CODE) TYPE  I
    *"  TABLES
    *"      RETURN_TABLE STRUCTURE  BKPF
    *"----------------------------------------------------------------------

     CLEAR RETURN_TABLE.    REFRESH RETURN_TABLE.

    ****** Creation du type de la table ECRM

      TYPES: TT_ECRM TYPE STANDARD TABLE OF BKPF.

    ****** Creation d'une table interne

      DATA: IT_ECRM TYPE  TT_ECRM,
            CURRM   TYPE  BKPF-MONAT,
            PREVM   TYPE  BKPF-MONAT,
            PREVY   TYPE  BKPF-GJAHR.

    ****** Initialisation des variables

      IF CURRY IS INITIAL.
        CALL FUNCTION 'GET_CURRENT_YEAR'
        EXPORTING
          BUKRS = COMPANYCODE
        IMPORTING
           CURRM         = currm    " Current Fiscal Month
           CURRY         = curry    " Current Fiscal Year
           PREVM         = prevm    " Previous Fiscal Month
           PREVY         = prevy.   " Previous Fiscal Year
      ENDIF.


    ****** Récupération des données


      " La requete de sélection
          SELECT  BUKRS
                  BELNR
                  GJAHR
                  BLART
                  BLDAT
                  BUDAT
                  CPUDT
                  CPUTM
                  AEDAT
                  USNAM
                  XBLNR
                  DBBLG
                  STBLG
                  BKTXT
                  HWAER
                  BSTAT
            UP TO MAX_ROWS ROWS
          INTO CORRESPONDING FIELDS OF TABLE IT_ECRM
          FROM  BKPF
          WHERE BUKRS = COMPANYCODE
          AND   GJAHR = CURRY
          AND   (WHERE_TAB).



    RETURN_TABLE[] = IT_ECRM[].
    ENDFUNCTION.

如前所述,它是函数主体,它从表BKPF返回一些行,并且在SAP Gui中进行测试时可以正常工作,但是当通过.Net Connector调用时,BUKRS的值返回“ I”而不是“ IP01”

在查看了BKPF的结构之后,似乎在SAP中发现的结构(MANDT,BUKRS,)与我在查看表时得到的结构有所不同.NET中的table.Metadata.LineType

{STRUCTURE BKPF{BUKRS:CHAR4, MANDT:CHAR3, BELNR:CHAR10, GJAHR:NUM(4), BLART:CHAR2, BLDAT:DATE, BUDAT:DATE, MONAT:NUM(2), CPUDT:DATE, CPUTM:TIME, AEDAT:DATE, UPDDT:DATE, WWERT:DATE, USNAM:CHAR12, TCODE:CHAR20, BVORG:CHAR16, XBLNR:CHAR16, DBBLG:CHAR10, STBLG:CHAR10, STJAH:NUM(4), BKTXT:CHAR25, WAERS:CHAR5, KURSF:BCD[5:5], KZWRS:CHAR5, KZKRS:BCD[5:5], BSTAT:CHAR1, XNETB:CHAR1, FRATH:BCD[7:2], XRUEB:CHAR1, GLVOR:CHAR4, GRPID:CHAR12, DOKID:CHAR40, ARCID:CHAR10, IBLAR:CHAR2, AWTYP:CHAR5, AWKEY:CHAR20, FIKRS:CHAR4, HWAER:CHAR5, HWAE2:CHAR5, HWAE3:CHAR5, KURS2:BCD[5:5], KURS3:BCD[5:5], BASW2:CHAR1, BASW3:CHAR1, UMRD2:CHAR1, UMRD3:CHAR1, XSTOV:CHAR1, STODT:DATE, XMWST:CHAR1, CURT2:CHAR2, CURT3:CHAR2, KUTY2:CHAR4, KUTY3:CHAR4, XSNET:CHAR1, AUSBK:CHAR4, XUSVR:CHAR1, DUEFL:CHAR1, AWSYS:CHAR10, TXKRS:BCD[5:5], LOTKZ:CHAR10, XWVOF:CHAR1, STGRD:CHAR2, PPNAM:CHAR12, BRNCH:CHAR4, NUMPG:NUM(3), ADISC:CHAR1, XREF1_HD:CHAR20, XREF2_HD:CHAR20, XREVERSAL:CHAR1, REINDAT:DATE, RLDNR:CHAR2, LDGRP:CHAR4, PROPMANO:CHAR13, XBLNR_ALT:CHAR26, VATDATE:DATE, XSPLIT:CHAR1, PSOTY:CHAR2, PSOAK:CHAR10, PSOKS:CHAR10, PSOSG:CHAR1, PSOFN:CHAR30, INTFORM:CHAR4, INTDATE:DATE, PSOBT:DATE, PSOZL:CHAR1, PSODT:DATE, PSOTM:TIME, FM_UMART:CHAR1, CCINS:CHAR4, CCNUM:CHAR25, SSBLK:CHAR1, BATCH:CHAR10, SNAME:CHAR12, SAMPLED:CHAR1, EXCLUDE_FLAG:CHAR1, BLIND:CHAR1, OFFSET_STATUS:CHAR2, OFFSET_REFER_DAT:DATE, PENRC:CHAR2, KNUMV:CHAR10}}

您正在使用表BKPF作为输出结构。 该表在第一个位置具有用于客户处理的关键字段MANDT 您尚未向我们展示用于访问功能模块的代码,但是我怀疑您以某种方式“忘记”了一个客户字段。 您的功能模块将客户字段留空(三个空格),因此问题似乎是这样的:

   what you want to get
    |
   /--\
MMMBBBB
AAAUUUU
NNNKKKK
DDDRRRR
TTTSSSS
\--/
 |
what you really get

第一步,在Level4激活NCo跟踪,并查看数据通过导线传输后的样子。

确保在您的测试调用中,FM仅返回少量行,因为否则数据将被压缩,那么您将看不到任何内容... :)

同样有趣的是查看您的连接参数。 这看起来确实确实像是Unicode-非-Unicode不匹配。 (如果意外将数据解释为1字节非Unicode字符,则将2字节Unicode字符的后半部分“误解”为终止零。)

通常,您不需要弄乱CODEPAGE参数,因为NCo会自动将其正确设置...(如果您明确设置了CODEPAGE而又不真正知道自己的操作,则只会造成损害。)

我只是尝试使用基础系统中存在的另一个依赖于客户端的表:HRH1222。 在这种情况下,DDIF_FIELDINFO_GET返回所有11个字段,包括位置0001的MANDT字段。因此,这里的一切正常。 NCo 3.0使用DDIF_FIELDINFO_GET的输出来构造其结构信息。

一个可能的解释是您的问题可能是什么:我听说某家咨询公司(Tata Consulting?)在一些客户项目中修改了标准SAP功能模块DDIF_FIELDINFO_GET,以抑制“不需要的”字段。 在这些字段中,可以包含密码的字段以及MANDT字段!

如果您在后端进行了这样的修改,那就可以解释我们在这里看到的行为...

暂无
暂无

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM