CS01/CS02 通过BAPI 写入抬头“可选长文本” ,写入成功可以通过BAP读取,但无法在前台显示

创建BOM的抬头“可选长文本”成功,可以通过BAPI正常读取,但无法在CS02或CS03显示。

可选长文本文本名:STKO前5个字段拼接 MANDT+STLTY+STLNR+STLAL+STKOZ

如:300M000000371600000102

读取测试

目前发现一种不是很好但是可以解决此问题的方法:

维护长文本完成之后必须强制更新表STKO-ltxsp字段值,对应的值是维护长文本的语言码。

如下示例

  CALL FUNCTION 'CREATE_TEXT'
    EXPORTING
      fid         = 'MKO'
      flanguage   = '1'
      fname       = lv_tdname
      fobject     = 'BOM'
      save_direct = 'X'
    TABLES
      flines      = lt_lines
    EXCEPTIONS
      no_init     = 1
      no_save     = 2
      OTHERS      = 3.


  IF sy-subrc = 0.
    UPDATE stko SET ltxsp = '1'
                WHERE stlty = 'M'
                AND   stlnr = lv_stlnr
                AND   stlal = pv_stlal
                AND   stkoz = lv_stkoz.
    COMMIT WORK.
  ENDIF.

 

 

 

 

 

 

  • 2
    点赞
  • 2
    收藏
    觉得还不错? 一键收藏
  • 打赏
    打赏
  • 0
    评论
优化这段代码:if (icbcDtlRsp.getBillSta().equals("CS01") && icbcDtlRsp.getRangeStage().equals("TF0101")) { //CS01已出票 & TFO101待收票---010004出票已登记 ecdsDrftInf.setDrftSndStat(getValueOrDefault(ECDSConstants.DRAFT_STATUS_CPYDJ, ecdsDrftInf.getDrftSndStat())); // 票据发送人状态 ecdsDrftInf.setDrftRcvStat(getValueOrDefault(ECDSConstants.DRAFT_STATUS_CPYDJ, ecdsDrftInf.getDrftRcvStat())); // 票据接收人状态 ecdsDrftInf.setDrftCurrStat(getValueOrDefault(ECDSConstants.DRAFT_STATUS_CPYDJ, ecdsDrftInf.getDrftCurrStat())); // 人行当前状态 } else if (ecdsDrftInf.getDrftOrgStat().equals(ECDSConstants.DRAFT_STATUS_CPYDJ) && icbcDtlRsp.getBillSta().equals("CS01") && icbcDtlRsp.getRangeStage().equals("TF0302")) { //CS01已出票 & TF0302已锁定--- 020001承兑待签收 ecdsDrftInf.setDrftSndStat(getValueOrDefault(ECDSConstants.DRAFT_STATUS_TSCDDQS, ecdsDrftInf.getDrftSndStat())); // 票据发送人状态 ecdsDrftInf.setDrftRcvStat(getValueOrDefault(ECDSConstants.DRAFT_STATUS_TSCDDQS, ecdsDrftInf.getDrftRcvStat())); // 票据接收人状态 ecdsDrftInf.setDrftCurrStat(getValueOrDefault(ECDSConstants.DRAFT_STATUS_TSCDDQS, ecdsDrftInf.getDrftCurrStat())); // 人行当前状态 } else if (ecdsDrftInf.getDrftOrgStat().equals(ECDSConstants.DRAFT_STATUS_CPYDJ) && icbcDtlRsp.getBillSta().equals("CS02") && icbcDtlRsp.getRangeStage().equals("TFO101")) { //CS02已承兑 & TFO101待收票---020006承兑已签收 ecdsDrftInf.setDrftSndStat(getValueOrDefault(ECDSConstants.DRAFT_STATUS_TSCDYQS, ecdsDrftInf.getDrftSndStat())); // 票据发送人状态 ecdsDrftInf.setDrftRcvStat(getValueOrDefault(ECDSConstants.DRAFT_STATUS_TSCDYQS, ecdsDrftInf.getDrftRcvStat())); // 票据接收人状态 ecdsDrftInf.setDrftCurrStat(getValueOrDefault(ECDSConstants.DRAFT_STATUS_TSCDYQS, ecdsDrftInf.getDrftCurrStat())); // 人行当前状态 }
06-01
可以将常量提取出来,避免多次调用 getValueOrDefault() 方法,可以使用一个 Map 存储常量值,然后根据条件直接获取即可。同时,可以将多个 if/else if 语句转换为一个 switch 语句,使代码更加简洁易读。优化后的代码如下: ``` private static final Map<String, String> DRAFT_STATUS_MAP = new HashMap<>(); static { DRAFT_STATUS_MAP.put(ECDSConstants.DRAFT_STATUS_CPYDJ, ECDSConstants.DRAFT_STATUS_TSCDDQS); DRAFT_STATUS_MAP.put(ECDSConstants.DRAFT_STATUS_TSCDDQS, ECDSConstants.DRAFT_STATUS_TSCDDQS); DRAFT_STATUS_MAP.put(ECDSConstants.DRAFT_STATUS_TSCDYQS, ECDSConstants.DRAFT_STATUS_TSCDYQS); } // ... switch (icbcDtlRsp.getBillSta() + icbcDtlRsp.getRangeStage()) { case "CS01TF0101": // CS01已出票 & TFO101待收票---010004出票已登记 ecdsDrftInf.setDrftSndStat(DRAFT_STATUS_MAP.getOrDefault(ecdsDrftInf.getDrftSndStat(), ECDSConstants.DRAFT_STATUS_CPYDJ)); ecdsDrftInf.setDrftRcvStat(DRAFT_STATUS_MAP.getOrDefault(ecdsDrftInf.getDrftRcvStat(), ECDSConstants.DRAFT_STATUS_CPYDJ)); ecdsDrftInf.setDrftCurrStat(DRAFT_STATUS_MAP.getOrDefault(ecdsDrftInf.getDrftCurrStat(), ECDSConstants.DRAFT_STATUS_CPYDJ)); break; case "CS01TF0302": // CS01已出票 & TF0302已锁定--- 020001承兑待签收 if (ecdsDrftInf.getDrftOrgStat().equals(ECDSConstants.DRAFT_STATUS_CPYDJ)) { ecdsDrftInf.setDrftSndStat(DRAFT_STATUS_MAP.getOrDefault(ecdsDrftInf.getDrftSndStat(), ECDSConstants.DRAFT_STATUS_TSCDDQS)); ecdsDrftInf.setDrftRcvStat(DRAFT_STATUS_MAP.getOrDefault(ecdsDrftInf.getDrftRcvStat(), ECDSConstants.DRAFT_STATUS_TSCDDQS)); ecdsDrftInf.setDrftCurrStat(DRAFT_STATUS_MAP.getOrDefault(ecdsDrftInf.getDrftCurrStat(), ECDSConstants.DRAFT_STATUS_TSCDDQS)); } break; case "CS02TFO101": // CS02已承兑 & TFO101待收票---020006承兑已签收 if (ecdsDrftInf.getDrftOrgStat().equals(ECDSConstants.DRAFT_STATUS_CPYDJ)) { ecdsDrftInf.setDrftSndStat(DRAFT_STATUS_MAP.getOrDefault(ecdsDrftInf.getDrftSndStat(), ECDSConstants.DRAFT_STATUS_TSCDYQS)); ecdsDrftInf.setDrftRcvStat(DRAFT_STATUS_MAP.getOrDefault(ecdsDrftInf.getDrftRcvStat(), ECDSConstants.DRAFT_STATUS_TSCDYQS)); ecdsDrftInf.setDrftCurrStat(DRAFT_STATUS_MAP.getOrDefault(ecdsDrftInf.getDrftCurrStat(), ECDSConstants.DRAFT_STATUS_TSCDYQS)); } break; default: break; } ```
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包

打赏作者

王小磊

你的鼓励将是我创作的最大动力

¥1 ¥2 ¥4 ¥6 ¥10 ¥20
扫码支付:¥1
获取中
扫码支付

您的余额不足,请更换扫码支付或充值

打赏作者

实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

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

余额充值