본문 바로가기

.NET/MOSS

MOSS =>출.퇴근 체크


MOSS 에서 사용하는 WebPart 로 구현한 것

1. Visual studio로  NEW Project를  WebPart로 만들고.
2. 소스를 코딩후
3. 배포..
4. 배포된 WebPart를 MOSS에서 WebPart 추가로 완결..

 using System;
using System.Runtime.InteropServices;
using System.Web.UI;
using System.Web.UI.WebControls.WebParts;
using System.Xml.Serialization;

using Microsoft.SharePoint;
using Microsoft.SharePoint.WebControls;
using Microsoft.SharePoint.WebPartPages;
using System.Data;
using System.Web.UI.WebControls;
using System.Text;

namespace CheckDay
{
    [Guid("9a6e8ced-5e47-4062-a503-809ed3867d87")]
    public class CheckDay : System.Web.UI.WebControls.WebParts.WebPart
    {       
        private string listName = string.Empty;
        private Button btnStart;
        private Button btnEnd;

        [
        Personalizable(true),
        WebBrowsable(true),
        WebDisplayName("근퇴관리"),
        WebDescription("출근, 퇴근 관리하는 웹파트")
        ]

        public string ListName
        {
            get { return listName; }
            set { listName = value; }
        }

        //moss 페이지에 버튼 생성
        protected override void CreateChildControls()
        {
            base.CreateChildControls();
            this.Controls.Add(btnStart);
            this.Controls.Add(btnEnd);
        }
       
        //버튼 만들어 주기
        public CheckDay()
        {
            this.ExportMode = WebPartExportMode.All;
            btnStart = new Button();
            btnEnd = new Button();

            btnStart.Text = "출근";
            btnEnd.Text = "퇴근";

            btnStart.Click += new EventHandler(btnStart_Click);
            btnEnd.Click += new EventHandler(btnEnd_Click);
        }

        //출근 버튼을 클릭 했을때
        void btnStart_Click(object sender, EventArgs e)
        {
            SPWeb web = SPContext.GetContext(this.Context).Web;

            if (string.IsNullOrEmpty(listName))
                return;

            SPList list = web.Lists[listName];

            SPListItem it = list.Items.Add();
            it["Title"] = "출근";
            it["EventDate"] = DateTime.Now;
            it["EndDate"] = DateTime.Now;           

            web.AllowUnsafeUpdates = true;
            it.Update();
            web.AllowUnsafeUpdates = false;
        }

        //퇴근 버튼을 클릭 했을때
        void btnEnd_Click(object sender, EventArgs e)
        {        
            SPWeb web = SPContext.GetContext(this.Context).Web;
           
            if (string.IsNullOrEmpty(listName))
                return;

            SPList list = web.Lists[listName];

            SPQuery query = new SPQuery();
            StringBuilder stringBuilder = new StringBuilder();
            stringBuilder.Append("  <Where>");
            stringBuilder.Append("    <Eq>");
            stringBuilder.Append("      <FieldRef Name=\"Author\" />");
            stringBuilder.Append("      <Value Type=\"integer\"><UserID /></Value>");
            stringBuilder.Append("    </Eq>");
            stringBuilder.Append("  </Where>");
            stringBuilder.Append("  <OrderBy>");
            stringBuilder.Append("    <FieldRef Name=\"EventDate\" Ascending=\"FALSE\" />");
            stringBuilder.Append("  </OrderBy>");
            query.Query = stringBuilder.ToString();
            query.RowLimit = 1;

            SPListItemCollection items = list.GetItems(query);

            if (items.Count > 0)
            {
                SPListItem it = items[0];

                SPListItem itNew = items.Add();
                itNew["Title"] = "출근";
                itNew["EventDate"] = it["EventDate"];
                itNew["EndDate"] = DateTime.Now;

                items.Delete(0);

                web.AllowUnsafeUpdates = true;

                try { itNew.Update(); }
                catch (SPException ex) { throw ex; }
               
                web.AllowUnsafeUpdates = false;
            }

        }

        private string IsChecked(bool p)
        {
            string sCheck = string.Empty;
            string title = string.Empty;
            string date = DateTime.Now.ToShortDateString(); // 2007-09-18           

            SPWeb web = SPContext.GetContext(this.Context).Web;

            if (string.IsNullOrEmpty(listName))
                return sCheck;

            SPList list = web.Lists[listName];

            //SPListItem itm = list.Items[0];
            //SPUser user = (SPUser)itm["Author"];

            title = (p) ? "출근" : "퇴근";

            SPQuery query = new SPQuery();

            StringBuilder stringBuilder = new StringBuilder();

            stringBuilder.Append("  <Where>");
            stringBuilder.Append("    <Eq>");
            stringBuilder.Append("      <FieldRef Name=\"Author\" />");
            stringBuilder.Append("      <Value Type=\"Integer\"><UserID /></Value>");
            stringBuilder.Append("    </Eq>");
            stringBuilder.Append("  </Where>");
            stringBuilder.Append("  <OrderBy>");
            stringBuilder.Append("    <FieldRef Name=\"EventDate\" Ascending=\"FALSE\" />");
            stringBuilder.Append("  </OrderBy>");

            query.Query = stringBuilder.ToString();
            query.RowLimit = 1;

            SPListItemCollection items = list.GetItems(query);
           
            if (items.Count > 0)
            {
                using (DataTable dt = items.GetDataTable())
                {
                    DataRow dr = dt.Rows[0];

                    if (
                        p == true // 출근모드
                        && dr["EventDate"].ToString().Split(' ').GetValue(0).ToString().Trim() == date // 날자가 오늘날자와 같은가?
                        )
                    {
                        sCheck = dr["EventDate"].ToString(); // 이미 출근 체크하였다
                    }
                    else if (
                        p == false
                        && dr["EndDate"].ToString( ) != dr["EventDate"].ToString() // 퇴근을 체크했는가?
                        && dr["EventDate"].ToString().Split(' ').GetValue(0).ToString().Trim() == date // 날자가 오늘날자와 같은가?
                        )
                    {
                        // 퇴근모드
                        sCheck = dr["EndDate"].ToString();
                    }
                    string a = dr["EndDate"].ToString().Split(' ').GetValue(0).ToString().Trim();
                    string b = dr["EventDate"].ToString().Split(' ').GetValue(0).ToString().Trim();
                }
            }

            return sCheck;
        }

        protected override void Render(HtmlTextWriter writer)
        {           
            string date = string.Empty;
            SPWeb web = SPContext.GetContext(this.Context).Web;

            if (string.IsNullOrEmpty(listName))
            {
                writer.Write("웹파트 설정에서 '일정' 형태의 목록을 만들어 추가로 설정해 주시기 바랍니다.");
                return;
            }

            SPList list = web.Lists[listName];

            writer.Write("출근 : ");

            if (string.IsNullOrEmpty(date = IsChecked(true)) == false)
            {
                // 출근을 이미 찍었을 경우
                writer.WriteLine(date);
            }

            else
            {
                // 출근을 아직 찍지 않은 경우
                btnStart.RenderControl(writer);
            }

            writer.Write("<br />");
            writer.Write("퇴근 : ");

            if (string.IsNullOrEmpty(date = IsChecked(false)) == false)
            {
                // 퇴근을 이미 찍었을 경우
                writer.WriteLine(date);
            }

            else
            {
                // 퇴근을 아직 찍지 않은 경우
                btnEnd.RenderControl(writer);
            }
           
        }

    }

}

'.NET > MOSS' 카테고리의 다른 글

Microsoft Office SharePoint Server 2007  (0) 2007.10.23
MOSS 개발 환경  (0) 2007.10.08
MOSS =>출.퇴근 체크  (2) 2007.10.04
MOSS => WebPart  (1) 2007.10.04
InfoPath 개발자를 위한 새로운 기능  (1) 2007.09.19
InfoPath 2007  (0) 2007.09.13