Сбор ответов на события с помощью Microsoft Exchange APIC#

Место общения программистов C#
Ответить
Anonymous
 Сбор ответов на события с помощью Microsoft Exchange API

Сообщение Anonymous »

У меня есть устаревшая программа, которую мне нужно добавить. Он сканирует таблицу базы данных каждый заданный интервал и создает приглашения Outlook на основе информации из таблицы. Эта программа использует API C# Microsoft Exchange, и мне нужно добавить новую функцию. Что мне нужно сделать, так это принять ответы пользователей на события и создать новые записи в базе данных для их регистрации. Я не хочу сканировать папку «Входящие», создавшую события, потому что не все пользователи ответят по электронной почте, и я не хочу сканировать все события из базы данных, потому что в день добавляются тысячи событий, и это займет слишком много времени.< /p>
Может ли кто-нибудь помочь мне найти способ получать ответы пользователей по мере их появления, чтобы я мог динамически обновлять таблицу, когда люди отвечают на приглашения?
Я пробовал сканировать все встречи, но это слишком дорого

///
/// Get all appointments that haven't occured yet and check invitee status
///
private static void checkInviteeStatusAllAppointments()
{
//ENTER ELON QUERY TO SELECT RELEVANT APPOINTMENT IDs
List appointmentIDs = new List();
int numAppointments = appointmentIDs.Count;
writeToLog($"found {} appointment IDs", MESSAGE);
//---------------

//DateTime endDate = Convert.ToDateTime(TABLE_END_DATE);
//DateTime now = Convert.ToDateTime(DateTime.Now);
//string selectQuery = $"select * from {TABLE_NAME} where {TABLE_END_DATE} {now}";
//writeToLog($"query: {selectQuery}", MESSAGE);

//m_TableRows = mSqlConnect.GetFromDB(selectQuery);
//writeToLog($"found {m_TableRows.Count} rows", MESSAGE);

if (m_TableRows.Count > 0)
{
initExchangeService();
writeToLog("----------------------------------------------", MESSAGE);

// Iterating rows
foreach (var row in m_TableRows)
{
try
{
string appointmentType = row[TABLE_TYPE];
writeToLog($"working on new line with {TABLE_ID} {row[TABLE_ID]}, type: {appointmentType}", MESSAGE);

switch (appointmentType.ToUpper())
{
case INSERT_APPOINTMENT_LETTER:
createAppointment(row);
break;
case UPDATE_APPOINTMENT_LETTER:
updateAppointment(row);
break;
case CANCEL_APPOINTMENT_LETTER:
deleteAppointment(row);
break;
default:
updateTableOnError(row[TABLE_ID], "Not a valid type");
throw new Exception("Not a valid type");
}
}
catch (Exception ex)
{
writeToLog(ex.Message, ERROR_MESSAGE);
}
finally
{
writeToLog("----------------------------------------------", MESSAGE);
}
}
}
}

///
/// Captures the responses of invitees for an appointment given the row denoting it.
///
/// The row representing the appointment
private static void CaptureInviteeResponses(Dictionary row)
{
string appointmentId = row[TABLE_APPOINTMENT_ID];
try
{
if (string.IsNullOrEmpty(appointmentId))
{
throw new Exception(message: $"Error. No ID for row {row}.");
}

Appointment appointment = Appointment.Bind(m_ExchangeService, appointmentId);

writeToLog($"Successfully bound to appointment with ID: {appointmentId}", MESSAGE);

ThreadPool.QueueUserWorkItem(new WaitCallback(logAttendeeResponses), appointment);

}
catch (Exception ex)
{
writeToLog($"Error capturing responses for appointment ID {appointmentId}: {ex.Message}", ERROR_MESSAGE);
}
}

///
/// Iterate all invitees of an appointment and log their responses to the invitation.
///
/// The appointment to be examined
private static void logAttendeeResponses(object i_appointment)
{
Appointment appointment = (Appointment)i_appointment;

// Retrieve the responses of required attendees
foreach (Attendee attendee in appointment.RequiredAttendees)
{
string response = attendee.ResponseType == MeetingResponseType.NoResponseReceived ? "No response received" : attendee.ResponseType.ToString();
writeToLog($"Required Attendee: {attendee.Address}, Response: {response}", MESSAGE);
}

// Retrieve the responses of optional attendees
foreach (Attendee attendee in appointment.OptionalAttendees)
{
string response = attendee.ResponseType == MeetingResponseType.NoResponseReceived ? "No response received" : attendee.ResponseType.ToString();
writeToLog($"Optional Attendee: {attendee.Address}, Response: {response}", MESSAGE);
}
}



Подробнее здесь: https://stackoverflow.com/questions/785 ... change-api
Ответить

Быстрый ответ

Изменение регистра текста: 
Смайлики
:) :( :oops: :roll: :wink: :muza: :clever: :sorry: :angel: :read: *x)
Ещё смайлики…
   
К этому ответу прикреплено по крайней мере одно вложение.

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

Максимально разрешённый размер вложения: 15 МБ.

Вернуться в «C#»