vue访问完整外部链接数据_SAP 链接外部数据库操作 NATIVE SQL

1. 数据库定义:

17ea3a5a777f68ff5f8ee272ecc105a2.png

DATA:g_conexion LIKE dbcon-con_name VALUE 'mid'.

DATA:exec_ref TYPE REF TO cx_sy_native_sql_error.

2.连接数据库:

55a666cc196ee676f47645fa69dc6a5a.png
851b34b6ef946855008b52de6ddfc8a9.png

代码:

PERFORM frm_database_connect USING lv_msgtx. "连接数据库先注释

FORM frm_database_connect USING p_lv_msgtx.

TRY.

"-- 连接SQL SERVER

EXEC SQL.

CONNECT TO :G_CONEXION

ENDEXEC.

EXEC SQL.

SET CONNECTION :G_CONEXION

ENDEXEC.

CATCH cx_sy_native_sql_error INTO exec_ref.

p_lv_msgtx = exec_ref->get_text( ).

CONCATENATE '无法连接至SQL数据库 连接名:' g_conexion p_lv_msgtx INTO p_lv_msgtx.

ENDTRY.

ENDFORM.

3. 读取对方数据库判断时新增还是修改:

5a39063a83916d95db7c6721a02066b1.png
d62dc6f4feba0649c5f8d91c92d7afdd.png
4299ce65ffb486b07cb8375893b57882.png

代码:

LOOP AT gt_header INTO gs_header.

PERFORM frm_database_get USING gs_header. "数据库操作先注释

CLEAR:gs_header.

ENDLOOP.

FORM frm_database_get USING p_gs_header TYPE gty_header.

CALL FUNCTION 'CONVERSION_EXIT_ALPHA_OUTPUT'

EXPORTING

input = p_gs_header-vbeln

IMPORTING

output = p_gs_header-vbeln

.

TRY.

EXEC SQL PERFORMING loop_output.

SELECT djbh

INTO :gs_sum-vbeln

FROM YW_DDHZ

WHERE djbh = :p_gs_header-vbeln

ENDEXEC.

CATCH cx_sy_native_sql_error INTO exec_ref.

CLEAR:gs_out-msgtx.

gs_out-msgtx = exec_ref->get_text( ).

gs_out-traffic_lights = c_icon_red_light.

CONCATENATE '读取表失败:' gs_out-msgtx INTO gs_out-msgtx.

READ TABLE gt_out INTO gs_out WITH KEY vbeln = p_gs_header-vbeln.

IF sy-suBrc EQ 0.

CALL FUNCTION 'CONVERSION_EXIT_ALPHA_INPUT'

EXPORTING

input = p_gs_header-vbeln

IMPORTING

output = p_gs_header-vbeln

.

MODIFY gt_OUT FROM gs_out TRANSPORTING msgtx t

FORM loop_output .

APPEND gs_sum TO gt_sum.CLEAR: gs_sum.

ENDFORM.

ENDIF.

ENDTRY.

ENDFORM.

M.

FORM loop_output .

APPEND gs_sum TO gt_sum.CLEAR: gs_sum.

ENDFORM.

4.判断是新增还是修改:如果gt_sum有值则为修改,如果没有则为新增。

2512d67a41f770bbf20dbf658f281b6c.png

PERFORM frm_database_update USING gs_header. "数据库操作先注释

FORM frm_database_update USING p_gs_header TYPE gty_header.

DATA: zWADAT TYPE char10.

"传入结算系统的状态

DATA: lv_lifsk TYPE likp-lifsk.

lv_lifsk = '20'.

DATA:lv_time TYPE char8 VALUE '00:00:00'.

DATA:zbmid TYPE string VALUE ''.

DATA:Zywy TYPE string VALUE ''.

DATA:zusername TYPE string VALUE ''.

DATA:zzhiyid TYPE string VALUE ''.

DATA:zhshgje TYPE p VALUE 0.

DATA:zhuikuanfs TYPE string VALUE ''.

DATA:zshe TYPE p VALUE 0.

DATA:zerp_tq TYPE string VALUE ''.

DATA:zkaipiaodjbh TYPE string VALUE ''.

CALL FUNCTION 'CONVERSION_EXIT_ALPHA_OUTPUT'

EXPORTING

input = p_gs_header-vbeln

IMPORTING

output = p_gs_header-vbeln

.

zWADAT = p_gs_header-wadat+0(4) && '-' && p_gs_header-wadat+4(2) && '-' && p_gs_header-wadat+6(2).

"处理姓名:

DATA: lv_department TYPE ad_dprtmnt,

lv_addrnumber TYPE ad_addrnum,

lv_persnumber TYPE ad_persnum,

lv_uname TYPE sy-uname,

lv_name_first TYPE ad_namefir,

lv_name_last TYPE ad_namelas,

lv_name TYPE char20.

SELECT SINGLE persnumber addrnumber INTO

(lv_persnumber, lv_addrnumber)

FROM usr21

WHERE bname = p_gs_header-ernam.

IF sy-subrc = 0.

SELECT SINGLE name_first name_last INTO (lv_name_first,lv_name_last)

FROM adrp

WHERE persnumber = lv_persnumber.

IF sy-subrc = 0.

CONCATENATE lv_name_last lv_name_first INTO lv_name.

CONDENSE lv_name NO-GAPS.

ENDIF.

ENDIF.

TRY .

EXEC SQL.

UPDATE YW_DDHZ

SET djbh = :p_gs_header-VBELN,

djbs = :p_gs_header-Z_djbs,

ontime = :LV_TIME,

bmid = :zbmid,

ywy = :zywy,

USERNAME = :ZUSERNAME,

ZHIYID = :zZHIYID,

MX_COUNT = :LV_SUM,

HSHGJE = :ZHSHGJE,

HUIKUANFS = :ZHUIKUANFS,

SHE = :ZSHE,

ERP_TQ = :ZERP_TQ,

KAIPIAODJBH = :ZKAIPIAODJBH,

rq = :ZWADAT,

wldwid = :p_gs_header-KUNAG,

fhdusername = :LV_NAME,

jigid = :p_gs_header-Z_jigid,

bmname = :p_gs_header-ZZVKBUR,

djlx = :p_gs_header-Z_djlx,

ddusername = :p_gs_header-ZERNAM,

quyufl = :p_gs_header-ZBZIRK,

shengfen = :p_gs_header-ZVKGRP,

fukuanfs = :p_gs_header-ZKONDA,

ywyid = :p_gs_header-KUNNR,

beizhu = :p_gs_header-TEXT_0001,

xinyye = :p_gs_header-UKM_NET,

xgdjbh = :p_gs_header-BSTKD,

shenhe = :LV_LIFSK

WHERE djbh = :p_gs_header-VBELN

ENDEXEC.

IF sy-subrc = 0.

Gs_out-traffic_lights = c_icon_green_light.

Gs_out-msgtx = '处理成功!'.

"将字段更新到SAP 系统

ELSEIF sy-subrc <> 0.

Gs_out-traffic_lights = c_icon_red_light.

Gs_out-msgtx = '更新抬头表YW_DDHZ失败!'.

ENDIF.

CATCH cx_sy_native_sql_error INTO exec_ref.

CLEAR:Gs_out-msgtx.

Gs_out-msgtx = exec_ref->get_text( ).

Gs_out-traffic_lights = c_icon_red_light.

CONCATENATE '更新抬头表YW_DDHZ表失败:' Gs_out-msgtx INTO Gs_out-msgtx.

ENDTRY.

CALL FUNCTION 'CONVERSION_EXIT_ALPHA_INPUT'

EXPORTING

input = p_gs_header-vbeln

IMPORTING

output = p_gs_header-vbeln

.

MODIFY gt_out FROM gs_out TRANSPORTING msgtx traffic_lights WHERE vbeln = p_gs_header-vbeln.

CLEAR:lv_lifsk,zWADAT,lv_name,lv_persnumber,lv_addrnumber,lv_name_last,lv_name_last,lv_time,zbmid,zywy,zusername,zZHIYID,lv_sum

,zhshgje,zhuikuanf

FORM frm_database_insert USING p_gs_header TYPE gty_header.

DATA: zWADAT TYPE char10.

"传入结算系统的状态

DATA: lv_lifsk TYPE likp-lifsk.

lv_lifsk = '20'.

DATA:lv_time TYPE char8 VALUE '00:00:00'.

DATA:zbmid TYPE string VALUE ''.

DATA:zywy TYPE string VALUE ''.

DATA:zusername TYPE string VALUE ''.

DATA:zZHIYID TYPE string VALUE ''.

DATA:zhshgje TYPE p VALUE 0.

DATA:zhuikuanfs TYPE string VALUE ''.

DATA:zshe TYPE p VALUE 0.

DATA:zerp_tq TYPE string VALUE ''.

DATA:zkaipiaodjbh TYPE string VALUE ''.

CALL FUNCTION 'CONVERSION_EXIT_ALPHA_OUTPUT'

EXPORTING

input = p_gs_header-vbeln

IMPORTING

output = p_gs_header-vbeln

.

zWADAT = p_gs_header-wadat+0(4) && '-' && p_gs_header-wadat+4(2) && '-' && p_gs_header-wadat+6(2).

TRY .

EXEC SQL.

INSERT INTO YW_DDHZ

(djbh,

djbs,

ontime,

bmid,

ywy,

USERNAME,

ZHIYID,

MX_COUNT,

HSHGJE,

HUIKUANFS,

SHE,

ERP_TQ,

KAIPIAODJBH,

rq,

wldwid,

fhdusername,

jigid,

bmname,

djlx,

ddusername,

quyufl,

shengfen,

fukuanfs,

ywyid,

beizhu,

xinyye,

xgdjbh,

shenhe

)

VALUES

(:p_gs_header-VBELN,

:p_gs_header-Z_djbs,

:LV_TIME,

:zbmid,

:zywy,

:zUSERNAME,

:zZHIYID,

:LV_SUM,

:ZHSHGJE,

:ZHUIKUANFS,

:ZSHE,

:ZERP_TQ,

:ZKAIPIAODJBH,

:ZWADAT,

:p_gs_header-KUNAG,

:p_gs_header-ERNAM,

:p_gs_header-Z_jigid,

:p_gs_header-ZZVKBUR,

:p_gs_header-Z_djlx,

:p_gs_header-ZERNAM,

:p_gs_header-ZBZIRK,

:p_gs_header-ZVKGRP,

:p_gs_header-ZKONDA,

:p_gs_header-KUNNR,

:p_gs_header-TEXT_0001,

:p_gs_header-UKM_NET,

:p_gs_header-BSTKD,

:LV_LIFSK

)

ENDEXEC.

IF sy-subrc = 0.

Gs_out-traffic_lights = c_icon_green_light.

Gs_out-msgtx = '处理成功!'.

ELSEIF sy-subrc <> 0.

Gs_out-traffic_lights = c_icon_red_light.

Gs_out-msgtx = '插入抬头表YW_DDHZ失败!'.

ENDIF.

CATCH cx_sy_native_sql_error INTO exec_ref.

CLEAR:Gs_out-msgtx.

Gs_out-msgtx = exec_ref->get_text( ).

Gs_out-traffic_lights = c_icon_red_light.

CONCATENATE '插入抬头表YW_DDHZ表失败:' Gs_out-msgtx INTO Gs_out-msgtx.

ENDTRY.

CALL FUNCTION 'CONVERSION_EXIT_ALPHA_INPUT'

EXPORTING

input = p_gs_header-vbeln

IMPORTING

output = p_gs_header-vbeln

.

MODIFY gt_out FROM gs_out TRANSPORTING msgtx traffic_lights WHERE vbeln = p_gs_header-vbeln.

CLEAR:zWADAT,lv_lifsk,lv_time,zbmid,zywy,zUSERNAME,zZHIYID,lv_sum,zhshgje,zhuikuanfs,zshe,

zerp_tq,zkaipiaodjbh.

ENDFORM.

sk,lv_time,zbmid,zywy,zUSERNAME,zZHIYID,lv_sum,zhshgje,zhuikuanfs,zshe,

zerp_tq,zkaipiaodjbh.

ENDFORM.

5.commit数据库:

66f72dca181e2979ff18ed9b3d635b3b.png

FORM frm_database_commit USING p_lv_msgtx.

TRY .

EXEC SQL.

COMMIT

ENDEXEC.

CATCH cx_sy_native_sql_error INTO exec_ref.

p_lv_msgtx = exec_ref->get_text( ).

CONCATENATE 'SQL数据库COMMIT失败:' g_conexion p_lv_msgtx INTO p_lv_msgtx.

ENDTRY.

ENDFORM.

6. 关闭数据库:

7e7e741f8590e1abc9a409d1a2ac927a.png

PERFORM frm_database_close USING lv_msgtx. "数据库操作先注释

FORM frm_database_close USING p_lv_msgtx.

TRY .

EXEC SQL.

DISCONNECT :G_CONEXION

ENDEXEC.

CATCH cx_sy_native_sql_error INTO exec_ref.

p_lv_msgtx = exec_ref->get_text( ).

ENDTRY.

ENDFORM.

7.删除的语法:

440aba8d95920cce4acb6189af27a1a2.png

FORM frm_database_delete_item .

TYPES: BEGIN OF gty_vbeln,

vbeln TYPE lips-vbeln,

END OF gty_vbeln.

DATA:gt_vbeln_temp TYPE TABLE OF gty_vbeln,

gs_vbeln_temp TYPE gty_vbeln.

MOVE-CORRESPONDING gt_sum1 TO gt_vbeln_temp.

SORT gt_vbeln_temp.DELETE ADJACENT DUPLICATES FROM gt_vbeln_temp COMPARING ALL FIELDS.

"--------------------------------------------------------------------------------删除

READ TABLE gt_vbeln_temp INTO gs_vbeln_temp INDEX 1.

IF sy-subrc EQ 0.

TRY .

EXEC SQL.

DELETE YW_DDMX

WHERE djbh = :gs_vbeln_temp-vbeln

ENDEXEC.

IF sy-subrc = 0.

Gs_out-traffic_lights = c_icon_green_light.

Gs_out-msgtx = '处理成功!'.

"将字段更新到SAP 系统

ELSEIF sy-subrc <> 0.

Gs_out-traffic_lights = c_icon_red_light.

Gs_out-msgtx = '删除行项目YW_DDMX失败!'.

ENDIF.

------------------------------------------------------------------------------------------------

作者:杨斌

日期:20200817

创作不易转载请备注作者,谢谢

------------------------------------------------------------------------------------------------

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值