전산이야기

지난 글에 이어서 실제 C# 으로 SOAP API를 호출 해 보는 소스를 작성 해 보겠습니다.

일반적으로 웹 서비스 제공업체에서 제공해 주는 기술문서를 참고로 해서 사용되는 함수 및 자료형을 확인해야 합니다.
여기서는 용마에서 제공되는 문서를 바탕으로 작성 되었습니다.

또한 처리방법만을 남길 목적인 테스트용 코드 이므로, 예외 처리등은 하지 않았습니다.
실제 환경에서는 반드시 리턴값 확인 및 예외 처리를 해야 합니다.

(1) define

1. 해당하는 클래스가 정의된 Reference.cs의 namespace 및 Linq를 using에 추가 합니다.

using WindowsFormsApplication1.kr.co.yongmalogis.www;
using System.Xml.Linq;

2. 호출될 메소드를 가지고 있는 객체를 전역변수로 선언 합니다.

TestBPService testBPService;

3. 나중에 사용할 List를 전역변수로 생성 합니다.

List<Dictionary<string, string>> array = new List<Dictionary<string, string>>();

 

(2) 등록번호 추출

간단히 getEDINum() 메소드를 호출하면 string 으로 리턴 됩니다.

private void btngetEDINum_Click(object sender, EventArgs e)
{
    txtgetEDINum.Text = testBPService.getEDINum();
}

 

(3) 반품정보 등록

주어진 기술문서를 참조하여 Key, Value 쌍을 Dictonary에 추가하고, 이를 다시 List에 추가 합니다.

Dictionary<string, string> dic = new Dictionary<string, string>();

dic.Add("regno", txtgetEDINum.Text);
dic.Add("ymd", "20190624");
dic.Add("Cons", "XXXXXX");
dic.Add("Seq", "1");
dic.Add("Ordno", "");
dic.Add("Vencode", "");
dic.Add("Venname", "왕내과");
dic.Add("Zip1", "123");
dic.Add("Zip2", "45");
dic.Add("Addr1", "울릉도 동남쪽 뱃길따라 2백리");
dic.Add("Addr2", "");
dic.Add("Contact", "이사부");
dic.Add("Phone1", "011-123-4567");
dic.Add("Phone2", "");
dic.Add("Descry", "");
dic.Add("Itemcode", "");
dic.Add("Itemname", "");
dic.Add("Qty", "1");
dic.Add("Memo1", "");
dic.Add("Sname", "");
dic.Add("sphone", "");

array.Add(dic);

기술문서에 파라미터 데이터 타입이 XML 문자열로 되어 있어서, List 데이터 전체를 ediInsert() 메소드의 인자로 넘길 XML 문자열로 변환 합니다.

XElement xmlElements = new XElement("TEBLE", array.Select(i => new XElement("item",
                    i.Select(j => new XElement(j.Key, j.Value))
                    )));

실제 SOAP API를 호출 합니다. 

string result = testBPService.ediInsert(xmlElements.ToString());
MessageBox.Show(result);

나머지 반품 확정 및 삭제는 등록번호 추출과 유사한 형태라 생략 합니다.

 

이 글이 도움이 되셨으면 좋아요 눌러 주시거나 댓글을 남겨 주세요.

Comment +0