Article

From:
To:
All
Subject:
how to update an appointment
Newsgroup:
rapware.public.easymapi

how to update an appointment

I have written a small Delphi function that can add a new appointment 
and update the same apointment. There are several problems with this 
routine that I so far are unable to solve. I suspect that it is my 
understanding of MAPI that is not good enough to solve this.

To your information: We are currently not using an exchange server, can this cause problems? We are going to do this, but have not installed it yet.
PROBLEM A) NewAppt.Send. This works OK for a new appointment. When I try to open an existing appointment by EntryId, I always get access violation.I have tried to display the various access rights set for folders and appointments (MAPI parameters), but I cannot figure out anything wrong. I suspect this is a MAPI issue. I have also tries to set various MAPI parameters, but with no success so far. Has anyone got an idea of what the problem can be?
PROBLEM B) I have observed that the organizer is not stored in the recipient table. Should it be? The name of the organizer is empty. Can this small problem be connected with PROBLEM A). I am still able to define a new appointment, invite recipients and the result appears in outlook, but the name of the organizer is empty. Where does MAPI fetch this information?
PROBLEM C) NewAppt.SaveChanges. In most of the cases the changes are saved as expected, but not always. The recipient list is e.g. entered like this: Hans Reier Sigmond; Per Arne Trillerud; ..., all the names separated by semicolons in the Recipients string. The AddRecipients method looks in the Outlook contacts and other places in Outlook and will map these names into email address if it can find it.
When the NewAppt.SaveChanges are run, a popup dialog appears and I am able to select from the contact list if the receipient is not found. Fine so far... But when I e.g. look at the created appointment, outlook in many cases mixes up the email adresses (e.g. picks the email address of Per Arne Trillerud and not mine). But it is not only the email address that get mixed up, sometimes it also picks the wrong recipient and displays in outlook. And I am unable to correct this manually since it is the automatic mapping that is wrong, and not the one where I am asked to search for the appropriate contact.
best regards from Hans Reier Sigmond
I am currently evaluating easyMapi. Problem C) is for our company quite serious, since the response is unpredictable.
(Search in the below code for "PROBLEM .." where the problems occurs).
Here us the code:
function TOutlookForm.CreateAppointment(Subject, Location: String; Start, Finish: TDateTime;    Recipients: string; EntryId: TRwMapiEntryId): TRwMapiEntryId; var    NewAppt: IRwMapiAppointment;    Invited: IRwMapiRecipientTable;    MsgStore: IRwMapiMsgStore;    Organizer : TRwMapiEntryId; begin    try      try        // MapiSession.LogonInfo.ProfileName := '';        MapiSession.LogonInfo.ProfileRequired := False; //No logon dialog is shown        MapiSession.LogonInfo.ShowLogonDialog := True; //Why this?       //MapiSession.LogonInfo.ShowPasswordDialog := true;
       MapiSession.LogonInfo.UseExtendedMapi := True;        MapiSession.Active := false;
       if not(MapiSession).Active then        begin          MapiSession.Logon; //Eventually show logon dialog, log on!        end;
       if (EntryId <>null) then        begin          ShowMessage('Ã…pner eksisterende avtale');          MsgStore := MapiSession.OpenDefaultMsgStore;          NewAppt := MsgStore.OpenMessage(EntryId) as IrwMapiAppointment;          //NewAppt.DisplayProperties;          NewAppt.Recipients.DisplayFields;        end else        begin          NewAppt := MapiSession.CreateMessage(ftAppointment) as IRwMapiAppointment;          NewAppt.Recipients.AddRecipients(Recipients, rtTo, true);        end;

       NewAppt.Subject := Subject;        NewAppt.Location := Location;        NewAppt.SetDateRange(false, Start, Finish, true );        NewAppt.ReminderMinutesBeforeStart := 15;        NewAppt.ReminderSet := true;        NewAppt.BusyStatus := 0;        NewAppt.Body := ''; //No comments, not allowed        NewAppt.Body := 'Organisator:'+NewAppt.Organizer+SLineBreak+                          'Mottagere:'+Recipients; //for debug PROBLEM B)        NewAppt.IsPrivate := false;        NewAppt.PropByName(NPR_SEND_INVITATIONS_AND_UPDATES).AsBoolean := true;        NewAppt.Categories := 'Rusdata';
       NewAppt.SaveChanges(smKeepOpenReadWrite); //PROBLEM C)        NewAppt.MeetingRequestSent := false;
       NewAppt.Send; //Send to recipients PROBLEM A        Result := NewAppt.EntryID;      except        on E: EOleException do ;        else raise;      end;    finally      MapiSession.Logoff;      MapiSession.Active := false;    end; end;
FYI: Phrase searches are enclosed in either single or double quotes
 
 
Originally created by
Tamarack Associates
Fri, 01 Nov 2024 04:40:20 UTC
Copyright © 2009-2024
HREF Tools Corp.