홈 · 개발 참고자료

개발 참고자료

[파워빌더] 금융결제원(CMS관련) EI13파일-증빙자료-바이너리로 변경 질문 드립니다.

작성자
왕희복
작성일
2016-06-28
조회
11813
분류
파워빌더
// 전 아래소스로 금융결제원 검정 통과했습니다 참고하세요.


//설명 : 동의파일을 DB에 이진파일로 저장하여 불러옮니다. DB저장할때 사이즈 체크하기때문에


// EI13파일 생성시 파일사이즈 체크부분이 빠져있습니다


// 이거때문에 금융결제원이랑 하루쟁일 통화하고 수정하고했네요...



Long ll_Rtn , I, R, J, li_Space, ll_Seq, ll_Filler, ll_BlobLen
String ls_File_Name
blob ib_FileContents, bModifiedTemp ,bPhoto
integer li_FileNo, li_Row
String ls_Rec


dw_c.AcceptText()



dw_list.dataobject ='d_ml720cms_ei13'


dw_list.settransobject(sqlca)
dw_list.retrieve(0,0,99999)


SetPointer (Arrow!)
ls_File_Name = dw_list.GetitemString( 1,'File_Nm')



ls_File_Name = "C:\CMS\9924213944\EI13\" +ls_File_Name
li_FileNo = FileOpen(ls_File_Name, StreamMode!, Write!, LockReadWrite!, Replace!)



If li_FileNo < 0 Then
messagebox('파일 생성 실패', '파일 생성 실패 했습니다.')
Return
end if


li_Row = dw_list.RowCount()


For R = 1 To li_Row
ll_Seq = dw_list.GetItemNumber(R, 'seq_id')
ls_Rec = dw_list.GetItemString(R, 'memberreg')
li_space = dw_list.GetItemNumber(R,'filler') // 해당로의 필러값을 계산하여 넘어오게되어있음

IF ll_Seq = 0 Then // 해드와 테일일경우 ll_Seq가 0으로 넘어오게 sp에서 코딩되어있습니다.
FileWrite(li_FileNo, ls_Rec+space(li_space)) // + space(li_space)
Else
FileWrite(li_FileNo, Left(ls_Rec,119))

Selectblob JData //동의 파일 이진값
INTO :bPhoto
From TB_XXXX
Where Seq_ID = :ll_Seq ;

ll_BlobLen = Len(bPhoto)

FileRead(li_FileNo, bPhoto)


//Blob을 32765단위로 나눠서 Setting
For i = 1 to ll_Bloblen <-- 이부분은 무조건 1번 실행합니다. 금융결제원파일이 300k 이하임
j = i + 32764
If j > ll_Bloblen Then
j = ll_Bloblen
End If
bModifiedTemp = BlobMid(bPhoto, i , j)

IF FileWrite(li_FileNo, bModifiedTemp) < 0 Then
MessageBox('확인', "증빙 Write시 Error 발생")
FileClose(li_FileNo)
Return ll_Rtn
End IF

i = i + 32764
Next

if li_space <> 0 Then
FileWrite(li_FileNo, space(li_space)) // 필러값 스페이스
End IF

End IF
Next


FileClose(li_FileNo)


messagebox('파일 생성 완료', ls_File_Name + '을 생성 했습니다.')
Return




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


-- 이진 파일 DB 저장 방법입니다. 참고하세요


-----------------------------------------------------------------------------------
// 동의서 파일 찾기
if GetFileOpenName("찾기", ls_file, ls_filename, "JPG", "Select Files (jpg/gif/mp3/wav),*.*")=1 then

ll_filelen = FileLength(ls_file)
li_filenum = FileOpen(ls_file, StreamMode!, Read!, LockRead!)

if li_filenum <> -1 then
if ll_filelen > 32765 then
if mod(ll_filelen, 32765) = 0 then
li_loop = ll_filelen / 32765
else
li_loop = (ll_filelen / 32765) + 1
end if
else
li_loop = 1
end if
end if

For li_index = 1 to li_loop
FileRead(li_filenum, blob_temp)
blob_tot = blob_tot + blob_temp
Next

li_len = len(blob_tot)
FileClose(li_filenum)


ls_Ext = Right(ls_filename,3)

IF Upper(ls_Ext) = 'JPG' or Upper(ls_Ext) = 'GIF' Then
li_Gubun = 1
ElseIF Upper(ls_Ext) = 'WAV' or Upper(ls_Ext) = 'MP3' Then
li_Gubun = 4
Else
MessageBox('알림', '고객동의 파일은(JPG/GIF/WAV/MP3) 파일로 등록되어야합니다.')
Return 0
End IF

IF li_Gubun = 1 And li_len > 307200 Then
MessageBox('알림', '서면동의 파일의 크기는 300Kbyte를 초과할 수 없습니다!')
Return 0
Elseif li_Gubun = 4 And li_len > 204800 Then
MessageBox('알림', '녹취동의 파일의 크기는 200Kbyte를 초과할 수 없습니다!')
Return 0
End IF

if li_Row > 0 then
Update TB_XXXX
Set Jgubun = :li_Gubun, // 동의서 구분(서면, 녹취)
JSize = :li_len, // 파일사이즈
Ext = :ls_Ext, // 확장자
error_code =''
Where Seq_ID = :ll_Seq_ID;

UpdateBlob TB_XXXX
set JData = :blob_tot // 고객 동의서 또는 녹취 이진DATA
where Seq_ID = :ll_Seq_ID ;

end if

if sqlca.sqlcode = 0 then
commit using sqlca ;

messagebox('알림', '고객 동의서를 저장하였습니다.')
else
rollback using sqlca ;

messagebox('알림', '저장이 실패하였습니다 !')
end if


[출처] 금융결제원(CMS관련) EI13파일-증빙자료-바이너리로 변경 질문 드립니다. (파워빌더 커뮤니티(PBExpertClub)) |작성자 행복한소식까치