300x250
728x90

# 01. SAP RAP Excel Upload #1에 대해서  


2023.11.16 - [.SAP/..Cloud ABAP(RAP)] - SAP RAP Excel Upload 정리 #1

 

SAP RAP Excel Upload 정리 #1

# 0. Excel Upload 시작하기 전# RAP에서는 Excel Upload을 할 경우에는 Extension을 해야 Excel Upload가 필요로 한다.# 또한 기본적인 CRUD가 되어있는 프로그램이 완성이 되어있어야 한다. # 프로그램에 대한

potato98.tistory.com

 

SAP RAP Excel Upload 정리에서 설정 다 되어야  넘어갈 수 있으니 참고 바란다.

 

 

# 02. SAP BAS 로직 설정 - Template 다운로드


#01. 여기서 변경해야 할 버튼은 [onTempDownload]이다. 

 

#02. 우선 다음과 같이 복사/붙여놓기를 해보자.

        onTempDownload: function (oEvent) {

            var oModel = this.getView().getModel();
            
            var oBuilding = oModel.getServiceMetadata().dataServices.schema[0].entityType.find(x => x.name === 'ZC_SCARR_GJType');

            var propertyList = ['Carrid', 'Carrname', 'Url'];

            var excelColumnList = [];
            var colList = {};

            
            propertyList.forEach((value, index) => {
                let property = oBuilding.property.find(x => x.name === value);
                colList[property.extensions.find(x => x.name === 'label').value] = '';
            });
            excelColumnList.push(colList);
            
            // initialising the excel work sheet
            const ws = XLSX.utils.json_to_sheet(excelColumnList);
            // creating the new excel work book
            const wb = XLSX.utils.book_new();
            // set the file value
            XLSX.utils.book_append_sheet(wb, ws, 'Sheet1');
            // download the created excel file
            XLSX.writeFile(wb, 'RAP - Scarr.xlsx');

            MessageToast.show("Template File Downloading...");
        },

 

#03. 여기서 변경해야 할 것들을 하나하나 변경해 보자.

# 우선 자신의 프로그램에서 Entity Type에 맞게 "..." 변경을 해주어야 한다. 

 

# 여기서 자신의 Entity Type을 알고 싶으면 [LocalService] -> [metadata.xml] 화면으로 가서 보면 다음과 같이 확인할 수 있다. 

 

# 만약 찾기가 어렵다고 하면 [manifest.json]  파일에 가서 EntitySet을 찾아서 [meatadata.xml]에서 찾는 방법도 있다. 

 

#04. Excel File 설정하기 

# 우리가 다량으로 넣을 Excel에 대한 List을 설정해 주면 된다. 

 

#05. 사용자에 따라서 변경하면 된다. 

 

#06. 마지막으로 가장 중요한 Controller 상단에 "xlsx"을 넣어줘야 한다. 

 

#07. 그리고 실행시켜 보면?

 

 

# 03. SAP BAS 로직 설정 - 파일 Upload 로직 설정


#01. onUploadSetComplete 버튼 설정해 보자.

 

#02. 복사/붙여놓기를 해보자. (여기서는 변경할 게 없다)

            var oFileUploader = Fragment.byId("excel_upload", "uploadSet");

            var oFile = oFileUploader.getItems()[0].getFileObject();

            var reader = new FileReader();
            var that = this;
			
            this.excelSheetsData = [];

            reader.onload = (e) => {
                let xlsx_content = e.currentTarget.result;
                let workbook = XLSX.read(xlsx_content, { type: 'binary' });
                var excelData = XLSX.utils.sheet_to_row_object_array(workbook.Sheets["Sheet1"]);
                
                workbook.SheetNames.forEach(function (sheetName) {

                    that.excelSheetsData.push(XLSX.utils.sheet_to_row_object_array(workbook.Sheets[sheetName]));
                });
            };
            reader.readAsBinaryString(oFile);

            MessageToast.show("Upload Successful");

 

#03. 실행을 해서 Template을 사용해서 Upload를 하면 다음과 같이 나오게 된다.

 

 

# 04. SAP BAS 로직 설정 - 파일 Item 삭제


#01. 다음 로직도 복사/붙여놓기를 해보자.

this.excelSheetsData = [];

 

# 05. Excel File -> Table 업데이트( Upload )


#01. onUploadSet을 설정해 보자.

 

#02. 복사/붙여놓기를 해보자. ( 변경 X )

        onUploadSet: function(oEvent) {
            // checking if excel file contains data or not
            if (!this.excelSheetsData.length) {
                MessageToast.show("Select file to Upload");
                return;
            }

            var that = this;
            var oSource = oEvent.getSource();

            // creating a promise as the extension api accepts odata call in form of promise only
            var fnAddMessage = function () {
                return new Promise((fnResolve, fnReject) => {
                    that.callOdata(fnResolve, fnReject);
                });
            };

            var mParameters = {
                sActionLabel: oSource.getText() // or "Your custom text" 
            };
            // calling the oData service using extension api
            this.extensionAPI.securedExecution(fnAddMessage, mParameters);

            this.pDialog.close();

        },

 

#03. 내부 Call 설정( callOdata )

# 위에서 CallOdata을 Call 하는 로직이 있기 때문에 CallOdata를 만들어줘야 한다. 

# 맨 하단에 설정

callOdata: function (fnResolve, fnReject) {

            //  intializing the message manager for displaying the odata response messages
            var oModel = this.getView().getModel();

            var payload = {};

            this.excelSheetsData[0].forEach((value, index) => {
                // setting the payload data
                payload = {
                    "Carrid": value["Carrid"],
                    "Carrname": value["Carrname"],
                    "Url": value["Url"]
                };
                // calling the odata service
                oModel.create("/ZC_SCARR_GJ", payload, {
                    success: (result) => {
                        console.log(result);
                        var oMessageManager = sap.ui.getCore().getMessageManager();
                        var oMessage = new sap.ui.core.message.Message({
                            message: "Carrid Created: " + result.Carrid,
                            persistent: true, // create message as transition message
                            type: sap.ui.core.MessageType.Success
                        });
                        oMessageManager.addMessages(oMessage);
                        fnResolve();
                    },
                    error: fnReject
                });
            });
        }

 

 

#04. 여기서 변경할 것은 Excel에 따른 필드Entity Set변경해줘야 한다.

 

# Entity Set 확인하는 방법은?

- [metadata.xml] 파일로 들어가서 "ENTITYSET"이라고 검색을 해보면 다음과 같이 나오게 된다. 

 

 

# 06. 실행


#01. Upload 버튼을 눌러서 해당 Excel 파일을 넣어보자.

 

#02. 업로드완료가 되면, 실행을 시켜보자. 

 

#03. 그럼 다음과 같이 성공적으로 데이터가 들어가 있는 걸 볼 수 있다.

 

 

 

끝!

도움이 되셨으면 하단에 있는 광고 한 번씩 눌러주세요!!

728x90