Есть ли способ отличить, является ли одно событие последовательного назначения первым, средним или последним событием?

#c# #outlook #outlook-addin

#c# #перспективы #outlook-addin

Вопрос:

В настоящее время все встречи, одиночные и повторяющиеся, отправляются в сценарий, где они сохраняются в базе данных со значениями ‘DateFrom’ и ‘DateTo’.

Эти значения не должны изменяться, если вы открываете одно назначение серии в Outlook, которое не является первым или последним. Они должны измениться, только если вы явно нажмете на первое или последнее назначение и измените дату или время.

Проблема: как только я редактирую любое событие, дата начала и окончания этого единственного события сохраняется в БД как дата начала и окончания серийного назначения в целом.

Если есть способ отличить, является ли событие начальным, средним или конечным событием, я мог бы сделать обходной путь для каждого случая.

Мой код, который обновляет значения и впоследствии отправляет их в сценарий, выглядит следующим образом:

 public static IRestResponse PutMeeting(Users users, Users.User user, AppointmentItem appointmentItem, UserProperty roomName, UserProperty roomPassword, UserProperty hostPassword) {

        var client = new RestClient(users.OrchestraURL);
        var req = new RestRequest("Schedule?", Method.POST);

        req.AddOrUpdateParameter("username", user.UserName, ParameterType.QueryString);
        req.AddOrUpdateParameter("password", user.GetPasswordEncrypted(), ParameterType.QueryString);

        if (appointmentItem.IsRecurring) {
            RecurrencePattern pattern = appointmentItem.GetRecurrencePattern();
            req.AddOrUpdateParameter("dateFrom", pattern.PatternStartDate.ToString("yyyyMMdd")   pattern.StartTime.ToString("HHmm"), ParameterType.QueryString);
            req.AddOrUpdateParameter("dateTo", pattern.PatternEndDate.ToString("yyyyMMdd")   pattern.EndTime.ToString("HHmm"), ParameterType.QueryString);
            req.AddOrUpdateParameter("recurringFlag", true, ParameterType.QueryString);
        }
        else {
            req.AddOrUpdateParameter("dateFrom", appointmentItem.Start.ToString("yyyyMMddHHmm"), ParameterType.QueryString);
            req.AddOrUpdateParameter("dateTo", appointmentItem.End.ToString("yyyyMMddHHmm"), ParameterType.QueryString);
            req.AddOrUpdateParameter("recurringFlag", false, ParameterType.QueryString);
        }
        req.AddOrUpdateParameter("spaceName", roomName.Value, ParameterType.QueryString);
        req.AddOrUpdateParameter("deleteFlag", false, ParameterType.QueryString);
        req.AddOrUpdateParameter("wishedPassword", roomPassword.Value, ParameterType.QueryString);
        if (appointmentItem.Subject == null) {
            req.AddParameter("subject", resourceDefaultLanguage.meetingSubject, ParameterType.QueryString);
        }
        else {
            req.AddParameter("subject", appointmentItem.Subject, ParameterType.QueryString);
        }

        req.AddOrUpdateParameter("hostPassword", hostPassword.Value, ParameterType.QueryString);
        req.AddHeader("Content-Type", "application/x-www-form-urlencoded");

        var response = client.Post(req);

        return response;
    }
  

«шаблон.PatternStartDate .toString(«ггггММдд») pattern.startTime.startTime.toString(«HHmm»)» должно было быть объединено, потому что в противном случае оно возвращает бессмыслицу.

Комментарии:

1. Шаблон GetRecurrence должен быть тем, что вы хотите, — и он у вас уже есть. Вы бы сравнили их, чтобы определить, было ли это событие началом или концом. Ваш код выглядит как строка — но я не вижу ничего, что отличало бы серию или встречу в вашем коде, кроме isRecurring. Вы храните как серию, так И собрания, составляющие серию, в БД?

2. Да, в этом случае единственным способом отличия было повторение. Буквально невозможно было достичь того, чего хотели мои коллеги и я. Итак, в конце мы обработали это в обработчике Java. Дата и время каждого назначения теперь проверяются в обработчике и обрабатываются соответствующим образом и правильно сохраняются в базе данных 🙂