메뉴 건너뛰기

넷서버 사용 팁/강좌

강좌 ch 4. 비즈니스오브젝트의 작성-서버

admin 2008.01.24 19:29 조회 수 : 4470

ch 4. 비즈니스오브젝트의 작성-서버

이번장에서는 N-Tier프로그램의 하이라이트인 비즈니스오브젝트의 구현의 예를 구현합니다.

서버상의 비즈니스오브젝트는 ch1에서 만든 서버를 사용하여 제작하기로 합니다.


 

1. ch1에서 만든 서버의 폼에 추가로 TBOManager를 놓고 NetServer.BOManager와 연결한다.

2. BOManager1.BOItems를 클릭하여 새로운 비즈니스오브젝트를 추가한다.

여기서는 ServerStatus와 DBStatus의 두가지 오브젝트를 추가한다.

ServerStatus는 서버의 상태를 보여주는 것이며 DBStatus는 현재의 DB정보를 테이블형태로 보여준다.

3, ServerStatus항목의 OnExecute이벤트를 열고 다음의 내용을 추가한다.

function TForm1.BOManager1BOItems0Execute(Sender: TBOItem; aUser: TnsUser;

  sParams: TStrings; aParams, aResult: TnsParams; var aDataset: TDataSet;

  var AutoFreeDataset: Boolean): Boolean;

var

  f: TNSTable;

begin

  //서버의 상태를 보여준다.

  f := TNsTable.Create(nil);

  f.FieldDefs.Add('TIME', ftDateTime); //서버시간을 보여줄 필드

  f.FieldDefs.Add('USERS', ftInteger); //서버의 현재 접속사용자를 보여줄 필드

  f.FieldDefs.Add('BANNER',ftString, 30); //배너

  f.Open;

  f.Append;

  f['TIME'] := Now;

  f['USERS'] := NetServer1.UserCount;

  f['BANNER'] := NetServer1.ConnectProp.Banner;

  f.Post;

  aDataSet := f;

  result := true;

end;

4. uses에 nsUserBase, nsParams,  db,  NsMemDS, dbTables 를 추가한다.

nsUserBase는 TNsUser, nsparams는 TnsParams가 선언되어 있고 NsMemDS는 임시테이블인 TNsTable이 선언되어 있다.

그리고 dbtables는 다음 5번에서 사용할 TQuery의 클래스원형을 사용하기 위해서 추가한다.

 

5. DBStatus의 OnExecute이벤트에서 다음과 같이 적는다.

function TForm1.BOManager1BOItems1Execute(Sender: TBOItem; aUser: TnsUser;

  sParams: TStrings; aParams, aResult: TnsParams; var aDataset: TDataSet;

  var AutoFreeDataset: Boolean): Boolean;

var

  q: TQuery;

  f: TnsTable;

begin

  //결과를 저장할 임시테이블을 생성한다.

  f := TNsTable.Create(nil);

  with f.FieldDefs do begin

    Add('NAME', ftString, 32);

    Add('RECCOUNT', ftInteger);

  end;

  f.Open;

 

  //aUser의 세션아래에 새로 TQuery를 생성한다.

  //''대신에 직접 SQL문을 적어도 된다.

  q :=  NsBDEDataProvider1.CreateQuery(aUser, '') as TQuery;

 

  //레코드를 추가한다.

  q.SQL.Text := 'select count(*) from customer';

  q.Open;

  f.Append;

  f['NAME'] := 'customer';

  f['RECCOUNT'] := q.Fields[0].AsInteger;

  f.Post;

  q.Close;

  q.SQL.Text := 'select count(*) from customer';

  q.Open;

  f.Append;

  f['NAME'] := 'customer';

  f['RECCOUNT'] := q.Fields[0].AsInteger;

  f.Post;

  q.Close;

  q.SQL.Text := 'select count(*) from orders';

  q.Open;

  f.Append;

  f['NAME'] := 'orders';

  f['RECCOUNT'] := q.Fields[0].AsInteger;

  f.Post;

  q.Close;

  q.SQL.Text := 'select count(*) from parts';

  q.Open;

  f.Append;

  f['NAME'] := 'parts';

  f['RECCOUNT'] := q.Fields[0].AsInteger;

  f.Post;

  q.Close;

 

  q.Free; //다사용하고난 쿼리는 제거

 

  aDataset := f; //결과값반환

  result := true; //제대로수행되었다.

end;

위로