procedure action 사용

bow Rain·2022년 1월 11일
0

개발 관련 정리

목록 보기
18/19
action common_proc2(data : String) returns Boolean;

기본적으로 프로시저를 cds에 선언할때 function으로 사용했었는데
그렇게되면 LargeBinary형식의 데이터나 LargeString 형식 데이터를 HANA DB에 전송함에있어 용량 제약이 있지만 action을 사용하면 POST 방식으로 BODY에 직접 데이터를 담아서 전송하기때문에 문제점을 해결할수있다.

let re = await modules.insert(`srv-api/ga/common_proc2`,{
                      data : JSON.stringify({
                          proc_name: "cswe_proc",
                          arr : [
                            _email,
                            "I",
                            data.cs_we_001_id,
                            data.req_date,
                            data.member_id_cm_004_id,
                            data.cswe_work_type,
                            data.start_date,
                            data.end_date,
                            data.cswe_work_title,
                            data.cswe_work_detail,
                            data.file,
                            data.cswe_work_time,
                            file.name,
                            file.mediatype,
                            file.content
                          ]
                      })
                        });
                      modules.dir(re);

컨트롤러에서 data에 string형식으로 json을 전송

this.on('common_proc2', async (req) => {
        try {
            let i = req.data.data;
            i = JSON.parse(i);
            console.log(i);

            const db = await cds.connect.to('db')
            const dbClass = require("sap-hdbext-promisfied")
            let dbConn = new dbClass(await dbClass.createConnection(db.options.credentials))
            const hdbext = require("@sap/hdbext")
            const sp = await dbConn.loadProcedurePromisified(hdbext, null, i.proc_name)
            // 데이터 넣는 곳
            const output = await dbConn.callProcedurePromisified(sp, i.arr)
            console.log(` =========== ${i.proc_name} output.results ========== `);
            console.log(output.results);
            console.log(` =========== ${i.proc_name} output ========== `);
            console.log(output);
            return output.outputScalar.RESULT
        } catch (error) {
            console.error(error);
            return false
        }
    })

service cds 파일 node js 방식

PROCEDURE "cswe_proc" (
  
EMAIL NVARCHAR(50),
FLAG NVARCHAR(12),
CS_WE_001_ID NVARCHAR(12),
REQ_DATE NVARCHAR(50),
MEMBER_ID_CM_004_ID NVARCHAR(50),
CSWE_WORK_TYPE NVARCHAR(50),
START_DATE NVARCHAR(50),
END_DATE NVARCHAR(50),
CSWE_WORK_TITLE NVARCHAR(50),
CSWE_WORK_DETAIL NCLOB,
FILE NVARCHAR(50),
CSWE_WORK_TIME NVARCHAR(50),
NAME NVARCHAR(50),
MEDIATYPE NVARCHAR(50),
CONTENT NCLOB,
OUT RESULT BOOLEAN
 )
  LANGUAGE SQLSCRIPT
   SQL SECURITY INVOKER
    AS
    BEGIN

예시로 파일 업로드에서 파일을 base64로 인코딩한 바이너리 데이터를 전송하여서
프로시저에서 NCLOB 타입으로 받는것이다.

0개의 댓글