コード例 #1
1
ファイル: Program.cs プロジェクト: barrett2474/CMS2
        private static void Main(string[] args)
        {
            //ExchangeService service = new ExchangeService();

            ExchangeService service = new ExchangeService(ExchangeVersion.Exchange2007_SP1, TimeZoneInfo.Local) { UseDefaultCredentials = true };

            service.AutodiscoverUrl(@"*****@*****.**");

            Task newTask = new Task(service);

            newTask.Contacts.Add("*****@*****.**");
            newTask.DueDate = DateTime.Now.AddDays(1);
            newTask.PercentComplete = 48;
            newTask.StartDate = DateTime.Now;
            newTask.Status = TaskStatus.InProgress;

            //newTask.TotalWork = 50;
            newTask.Body = "Hello";
            newTask.Subject = "Test Issue Task";
            newTask.ReminderDueBy = newTask.DueDate.Value;

            IList<Task> items = new List<Task>();
            items.Add(newTask);

            FolderId id = new FolderId(WellKnownFolderName.Tasks);

            //service.CreateItems(items, id, null, null);
        }
コード例 #2
0
        static IEnumerable <Microsoft.Exchange.WebServices.Data.Task> FindIncompleteTask(ExchangeService service)
        {
            // Specify the folder to search, and limit the properties returned in the result.
            TasksFolder tasksfolder = TasksFolder.Bind(service,
                                                       WellKnownFolderName.Tasks,
                                                       new PropertySet(BasePropertySet.IdOnly, FolderSchema.TotalCount));

            // Set the number of items to the smaller of the number of items in the Contacts folder or 1000.
            int numItems = tasksfolder.TotalCount < 1000 ? tasksfolder.TotalCount : 1000;

            // Instantiate the item view with the number of items to retrieve from the contacts folder.
            ItemView view = new ItemView(numItems);

            // To keep the request smaller, send only the display name.
            view.PropertySet = new PropertySet(BasePropertySet.IdOnly, TaskSchema.Subject, TaskSchema.Status, TaskSchema.StartDate);

            var filter = new SearchFilter.IsGreaterThan(TaskSchema.DateTimeCreated, DateTime.Now.AddYears(-10));

            // Retrieve the items in the Tasks folder with the properties you selected.
            FindItemsResults <Microsoft.Exchange.WebServices.Data.Item> taskItems = service.FindItems(WellKnownFolderName.Tasks, filter, view);

            // If the subject of the task matches only one item, return that task item.
            var results = new List <Microsoft.Exchange.WebServices.Data.Task>();

            foreach (var task in taskItems)
            {
                var result = new Microsoft.Exchange.WebServices.Data.Task(service);
                result = task as Microsoft.Exchange.WebServices.Data.Task;
                results.Add(result);
            }
            return(results);
        }
コード例 #3
0
        /// <summary>
        /// Sets start and due dates for task.
        /// </summary>
        /// <param name="userConnection">User connection.</param>
        /// <param name="startDate">Start date of task.</param>
        /// <param name="dueDate">Due date of task.</param>
        /// <param name="exchangeTask">Exchange task.</param>
        /// <remarks>
        /// When start and due dates are null,start date sets current date and due date sets start date add one day.
        /// When start day is not null and due date is null,due date sets start date add one day.
        /// When due day is not null and start date is null,start date sets due date minus one day.
        /// </remarks>
        public void SetStartAndDueDate(UserConnection userConnection, Exchange.Task exchangeTask,
                                       out DateTime startDate, out DateTime dueDate)
        {
            DateTime?exchangeTaskStartDate = InitExchangeTaskDate(exchangeTask.StartDate, userConnection);
            DateTime?exchangeTaskDueDate   = InitExchangeTaskDate(GetExchangeTaskDueDate(exchangeTask), userConnection);

            if (exchangeTaskStartDate == null)
            {
                if (exchangeTaskDueDate == null)
                {
                    startDate = DateTime.Now.Date;
                }
                else
                {
                    dueDate   = exchangeTaskDueDate.Value.Date;
                    startDate = dueDate.AddDays(-1);
                }
            }
            else
            {
                startDate = exchangeTaskStartDate.Value;
            }
            dueDate = (exchangeTaskDueDate == null)
                                ? startDate.AddDays(1)
                                : exchangeTaskDueDate.Value.Date;
            if (startDate >= dueDate)
            {
                dueDate = startDate.AddDays(1);
            }
        }
コード例 #4
0
        static IEnumerable<Microsoft.Exchange.WebServices.Data.Task> FindIncompleteTask(ExchangeService service)
        {
            // Specify the folder to search, and limit the properties returned in the result.
            TasksFolder tasksfolder = TasksFolder.Bind(service,
                                                       WellKnownFolderName.Tasks,
                                                       new PropertySet(BasePropertySet.IdOnly, FolderSchema.TotalCount));

            // Set the number of items to the smaller of the number of items in the Contacts folder or 1000.
            int numItems = tasksfolder.TotalCount < 1000 ? tasksfolder.TotalCount : 1000;

            // Instantiate the item view with the number of items to retrieve from the contacts folder.
            ItemView view = new ItemView(numItems);

            // To keep the request smaller, send only the display name.
            view.PropertySet = new PropertySet(BasePropertySet.IdOnly, TaskSchema.Subject, TaskSchema.Status, TaskSchema.StartDate);

            var filter = new SearchFilter.IsGreaterThan(TaskSchema.DateTimeCreated, DateTime.Now.AddYears(-10));

            // Retrieve the items in the Tasks folder with the properties you selected.
            FindItemsResults<Microsoft.Exchange.WebServices.Data.Item> taskItems = service.FindItems(WellKnownFolderName.Tasks, filter, view);

            // If the subject of the task matches only one item, return that task item.
            var results = new List<Microsoft.Exchange.WebServices.Data.Task>();
            foreach (var task in taskItems)
            {
                var result = new Microsoft.Exchange.WebServices.Data.Task(service);
                result = task as Microsoft.Exchange.WebServices.Data.Task;
                results.Add(result);
            }
            return results;
        }
コード例 #5
0
        /// <summary>
        /// Sets<paramref name="exchangeTask"/> properties to <paramref name="activity"/>.
        /// </summary>
        /// <param name="activity">Activity instance.</param>
        /// <param name="exchangeTask"><see cref="Exchange.Task"/> instance.</param>
        /// <param name="context"><see cref="SyncContext"/> instance.</param>
        /// <param name="action">Current synchronization action.</param>
        protected virtual void SetActivityProperties(Entity activity, Exchange.Task exchangeTask, SyncContext context,
                                                     SyncAction action)
        {
            activity.SetColumnValue("ShowInScheduler", false);
            DateTime startDate;
            DateTime dueDate;

            SetStartAndDueDate(context.UserConnection, exchangeTask, out startDate, out dueDate);
            if (action == SyncAction.Update)
            {
                startDate = startDate.Date + activity.GetTypedColumnValue <DateTime>("StartDate").TimeOfDay;
                dueDate   = dueDate.Date + activity.GetTypedColumnValue <DateTime>("DueDate").TimeOfDay;
            }
            activity.SetColumnValue("Title", exchangeTask.Subject);
            activity.SetColumnValue("StartDate", startDate);
            activity.SetColumnValue("DueDate", dueDate);
            activity.SetColumnValue("OwnerId", context.UserConnection.CurrentUser.ContactId);
            activity.SetColumnValue("AuthorId", context.UserConnection.CurrentUser.ContactId);
            activity.SetColumnValue("PriorityId", exchangeTask.Importance.GetActivityPriority());
            activity.SetColumnValue("StatusId", exchangeTask.Status.GetActivityStatus());
            SetActivityRemindToOwner(context, activity, exchangeTask);
            if (activity.GetTypedColumnValue <bool>("RemindToOwner"))
            {
                activity.SetColumnValue("RemindToOwnerDate", exchangeTask.SafeGetValue <DateTime>(
                                            Exchange.TaskSchema.ReminderDueBy).GetUserDateTime(context.UserConnection));
            }
            else
            {
                activity.SetColumnValue("RemindToOwnerDate", null);
            }
            activity.SetColumnValue("Notes", exchangeTask.Body.Text);
        }
コード例 #6
0
 private void SetActivityRemindToOwner(SyncContext context, Entity activity, Exchange.Task exchangeTask)
 {
     try {
         activity.SetColumnValue("RemindToOwner", exchangeTask.IsReminderSet);
     }
     catch (ServiceObjectPropertyException) {
         activity.SetColumnValue("RemindToOwner", false);
         LogError(context, InvalidItemPropertyMessageTemplate, "IsReminderSet");
     }
 }
コード例 #7
0
        /// <summary>
        /// Checks are the properties of the <paramref name="exchangeTask"/> differ from the properties of
        /// the <paramref name="activity"/>.
        /// </summary>
        /// <param name="exchangeTask"><see cref="Exchange.Task"/> instance.</param>
        /// <param name="activity">Activity instance.</param>
        /// <param name="context"><see cref="SyncContext"/> instance.</param>
        /// <returns><c>True</c> if <paramref name="exchangeTask"/> properties changed. Returns <c>false</c>
        /// otherwise.</returns>
        protected virtual bool IsTaskChanged(Exchange.Task exchangeTask, Entity activity,
                                             SyncContext context)
        {
            var          userConnection  = context.UserConnection;
            string       oldActivityHash = GetActivityHash(activity, userConnection);
            EntitySchema activitySchema  = userConnection.EntitySchemaManager.GetInstanceByName("Activity");
            Entity       newActivity     = activitySchema.CreateEntity(userConnection);

            SetActivityProperties(newActivity, exchangeTask, context, SyncAction.Create);
            string activityHash = GetActivityHash(newActivity, userConnection);

            return(activityHash != oldActivityHash);
        }
コード例 #8
0
 private bool CheckTask(SyncContext context, Exchange.Task exchangeTask)
 {
     if (exchangeTask == null)
     {
         LogError(context, InvalidItemTypeMessageTemplate, Item.Subject);
         return(false);
     }
     if (string.IsNullOrEmpty(exchangeTask.Subject))
     {
         LogError(context, InvalidItemPropertyMessageTemplate, "Subject");
         return(false);
     }
     return(true);
 }
コード例 #9
0
        /// <summary>
        /// <see cref="ExchangeSyncProvider.EnumerateChanges"/>
        /// </summary>
        public override IEnumerable <IRemoteItem> EnumerateChanges(SyncContext context)
        {
            base.EnumerateChanges(context);
            var result = new List <IRemoteItem>();

            if (!UserSettings.ImportActivities)
            {
                return(result);
            }
            var folders = new List <Exchange.Folder>();

            Exchange.FolderId trashFolderId = Exchange.Folder.Bind(
                Service, Exchange.WellKnownFolderName.DeletedItems, Exchange.BasePropertySet.IdOnly).Id;
            if (UserSettings.ImportActivitiesAll)
            {
                Exchange.Folder rootFolder = Exchange.Folder.Bind(Service, Exchange.WellKnownFolderName.MsgFolderRoot);
                folders.GetAllFoldersByFilter(rootFolder);
                folders.Add(rootFolder);
            }
            else
            {
                folders = SafeBindFolders(Service, UserSettings.RemoteFolderUIds.Keys, context);
            }
            Exchange.SearchFilter itemsFilter = GetItemsSearchFilters();
            SyncItemSchema        schema      = FindSchemaBySyncValueName(typeof(ExchangeTask).Name);

            foreach (Exchange.Folder folder in folders)
            {
                if (folder.Id.Equals(trashFolderId))
                {
                    continue;
                }
                var itemView = new Exchange.ItemView(PageItemCount);
                Exchange.FindItemsResults <Exchange.Item> itemCollection;
                do
                {
                    itemCollection = folder.ReadItems(itemsFilter, itemView);
                    foreach (Exchange.Item item in itemCollection)
                    {
                        Exchange.Task task = ExchangeUtility.SafeBindItem <Exchange.Task>(Service, item.Id);
                        if (task != null)
                        {
                            var remoteItem = new ExchangeTask(schema, task, TimeZone);
                            result.Add(remoteItem);
                        }
                    }
                } while (itemCollection.MoreAvailable);
            }
            return(result);
        }
コード例 #10
0
ファイル: Form1.cs プロジェクト: csai38/ProjectTm
        private void button1_Click(object sender, EventArgs e)
        {
            Exchange.ExchangeService eService = new Exchange.ExchangeService(Exchange.ExchangeVersion.Exchange2007_SP1);
            eService.Credentials = new Exchange.WebCredentials("*****@*****.**", "sFx2Dobay");
            eService.Url         = new Uri("https://outlook.office365.com/ews/Exchange.asmx");
            //eService.TimeZone = TimeZoneInfo.Local;
            //eService.ImpersonatedUserId = new Exchange.ImpersonatedUserId(Exchange.ConnectingIdType.SmtpAddress, "*****@*****.**");
            Exchange.Task nTask = new Exchange.Task(eService);

            Exchange.MessageBody messageBody = new Exchange.MessageBody(Exchange.BodyType.HTML, "Необходимо строчно сделать эту работу");

            nTask.Body          = messageBody;
            nTask.Subject       = "Очень важная задача";
            nTask.Importance    = Exchange.Importance.High;
            nTask.StartDate     = DateTime.Today.AddDays(1).AddHours(8);
            nTask.IsReminderSet = true;
            nTask.DueDate       = DateTime.Today.AddDays(3).AddHours(14);
            nTask.Save(new Exchange.FolderId(Exchange.WellKnownFolderName.Tasks, new Exchange.Mailbox("*****@*****.**")));
        }
コード例 #11
0
        public override IRemoteItem LoadSyncItem(SyncItemSchema schema, string id)
        {
            ExchangeBase remoteItem;

            Exchange.Task task = ExchangeUtility.SafeBindItem <Exchange.Task>(Service, new Exchange.ItemId(id));
            if (task != null)
            {
                remoteItem = new ExchangeTask(schema, task, TimeZone)
                {
                    Action = SyncAction.Update
                };
            }
            else
            {
                task       = new Exchange.Task(Service);
                remoteItem = new ExchangeTask(schema, task, id, TimeZone)
                {
                    State = SyncState.Deleted
                };
            }
            return(remoteItem);
        }
コード例 #12
0
        private void bindTasks(DateTime fromDate, DateTime toDate)
        {
            List <LeadTask> tasks = null;

            Expression <Func <CRM.Data.Entities.Task, bool> > predicate = PredicateBuilder.True <CRM.Data.Entities.Task>();

            if (roleID == (int)UserRole.Administrator)
            {
            }
            else if ((roleID == (int)UserRole.Client || roleID == (int)UserRole.SiteAdministrator) && clientID > 0)
            {
                // load all tasks for client (sort of admin)

                predicate = predicate.And(LeadTask => LeadTask.creator_id == clientID);

                predicate = predicate.And(LeadTask => LeadTask.start_date >= fromDate && LeadTask.end_date <= toDate);

                // get overdue task for client
                predicate = predicate.Or(LeadTask => LeadTask.status_id == 1 && LeadTask.end_date <= toDate && LeadTask.creator_id == clientID);
            }
            else
            {
                // regular users

                predicate = predicate.And(LeadTask => LeadTask.start_date >= fromDate && LeadTask.end_date <= toDate);

                predicate = predicate.And(LeadTask => LeadTask.owner_id == userID);
            }

            tasks = TasksManager.GetLeadTask(predicate, fromDate, toDate);

            if (rbOn.Checked)
            {
                userID = SessionHelper.getUserId();

                CRM.Data.Entities.SecUser secUser = SecUserManager.GetByUserId(userID);
                string emailaddress = secUser.Email;
                string password     = SecurityManager.Decrypt(secUser.emailPassword);
                string url          = "https://" + secUser.emailHost + "/EWS/Exchange.asmx";

                ExchangeService service = new ExchangeService(ExchangeVersion.Exchange2007_SP1);
                service.Credentials = new WebCredentials(emailaddress, password);
                service.Url         = new Uri(url);

                try
                {
                    TasksFolder tasksfolder = TasksFolder.Bind(service, WellKnownFolderName.Tasks);

                    ItemView view = new ItemView(int.MaxValue);
                    FindItemsResults <Item> OutlookTasks = tasksfolder.FindItems(view);

                    CalendarView calView = new CalendarView(fromDate, toDate);

                    FindItemsResults <Item> instanceResults = service.FindItems(WellKnownFolderName.Calendar, calView);

                    foreach (var item in instanceResults)
                    {
                        LeadTask newTask = new LeadTask();
                        Microsoft.Exchange.WebServices.Data.Appointment appointment = item as Microsoft.Exchange.WebServices.Data.Appointment;

                        newTask.creator_id = userID;
                        newTask.details    = appointment.Subject;
                        newTask.end_date   = appointment.End;
                        newTask.isAllDay   = appointment.IsRecurring;
                        newTask.text       = appointment.Subject;

                        newTask.priorityName = appointment.Importance.ToString();
                        newTask.owner_name   = appointment.Organizer.Name;
                        newTask.start_date   = appointment.Start;

                        tasks.Add(newTask);
                    }

                    foreach (var task in OutlookTasks)
                    {
                        task.Load();
                        Microsoft.Exchange.WebServices.Data.Task myTask = task as Microsoft.Exchange.WebServices.Data.Task;

                        LeadTask newTask = new LeadTask();
                        newTask.creator_id   = userID;
                        newTask.details      = ExtractHtmlInnerText(myTask.Body.Text);
                        newTask.end_date     = myTask.DueDate;
                        newTask.isAllDay     = myTask.IsRecurring;
                        newTask.text         = myTask.Subject;
                        newTask.statusName   = myTask.Status.ToString();
                        newTask.priorityName = myTask.Importance.ToString();
                        newTask.owner_name   = myTask.Owner;
                        if (myTask.StartDate == null)
                        {
                            newTask.start_date = myTask.DueDate;
                        }
                        else
                        {
                            newTask.start_date = myTask.StartDate;
                        }

                        tasks.Add(newTask);
                    }
                }
                catch (Exception ex)
                {
                }
            }
            // show tasks
            gvTasks.DataSource = tasks;
            gvTasks.DataBind();
        }
コード例 #13
0
        public string crearTareaE(string asunto, string fechaInicio, string fechaLimite, string cuerpoTarea, string correoDestino)
        {
            string errorTask = "";
            try
            {
                ExchangeService service = new ExchangeService(ExchangeVersion.Exchange2010);
                service.UseDefaultCredentials = true;
                service.Credentials = new WebCredentials("xxxxxxxxxxx", "xxxxxx", "xxxx");
                service.AutodiscoverUrl("xxxxxxxxxxxxxxx");

                Task taskItem = new Task(service);
                taskItem.Subject = asunto;
                taskItem.Body = new MessageBody(cuerpoTarea);
                taskItem.StartDate = Convert.ToDateTime(fechaInicio);
                taskItem.DueDate = Convert.ToDateTime(fechaLimite);
                //Aqui no se como agregar el correo destino, aun no encuentro el metodo para hacer eso.......
                //taskItem.Save();
                taskItem.Save();

                return errorTask;
            }
            catch(Exception e)
            {
                errorTask = e.Message;
                return errorTask;
            }
        }
コード例 #14
0
 public ExchangeTaskSyncData(Task exchangeTask)
 {
     ExchangeTask = exchangeTask;
     IsFromDefault = true;
 }
コード例 #15
0
        private ExchangeTask CreateExchangeTask(string subject, string body, DateTime dueTime, TaskStatus status)
        {
            var userCredential = GetExchangeUserCredential();
            var exchangeService = _microsoftExchangeServiceProvider.GetMicrosoftExchangeService(userCredential);

            ExchangeTask task = new ExchangeTask(exchangeService);

            task.Subject = subject;
            task.Body = new MessageBody(BodyType.Text, body);
            task.DueDate = dueTime;
            task.Status = status;
            task.Importance = Importance.High;

            task.Save();

            task = GetExchangeTask(task.Id.UniqueId);

            return task;
        }
コード例 #16
0
        private void AssertTaskAndExchangeTaskAreEqual(CooperTask cooperTask, ExchangeTask exchangeTask)
        {
            MicrosoftAssert.AreEqual(cooperTask.Subject, exchangeTask.Subject);
            MicrosoftAssert.AreEqual(cooperTask.Body, exchangeTask.Body.Text);
            MicrosoftAssert.AreEqual(cooperTask.DueTime, exchangeTask.DueDate);
            if (cooperTask.IsCompleted)
            {
                MicrosoftAssert.AreEqual(TaskStatus.Completed, exchangeTask.Status);
            }
            else
            {
                MicrosoftAssert.AreEqual(TaskStatus.InProgress, exchangeTask.Status);
            }

            MicrosoftAssert.AreEqual(cooperTask.Priority, ConvertToTaskPriority(exchangeTask.Importance));
            MicrosoftAssert.AreEqual(FormatTime(cooperTask.LastUpdateTime), FormatTime(exchangeTask.LastModifiedTime));
        }
コード例 #17
0
 private DateTime?GetExchangeTaskDueDate(Exchange.Task exchangeTask)
 {
     return((exchangeTask.Status == Exchange.TaskStatus.Completed)
                         ? exchangeTask.CompleteDate
                         : exchangeTask.DueDate);
 }
コード例 #18
0
 private void setExchangeTaskExtendedProperty(Exchange.Task exchangeTask, string activityId)
 {
     exchangeTask.SetExtendedProperty(ExchangeUtilityImpl.LocalIdProperty, activityId);
     exchangeTask.Update(Exchange.ConflictResolutionMode.AlwaysOverwrite);
 }
コード例 #19
0
 /// <summary>
 /// Calls <see cref="Exchange.Item.Load(Exchange.PropertySet)"/> method for <paramref name="exchangeTask"/>.
 /// </summary>
 /// <param name="exchangeTask"><see cref="Exchange.Task"/> instance.</param>
 /// <remarks>
 /// External dependency allocation.
 /// </remarks>
 protected virtual void LoadItemProperties(Exchange.Task exchangeTask)
 {
     exchangeTask.Load(_propertySet);
 }