Article

From:
To:
P. Wolters (RAPWare)
Subject:
Re: how to update an appointment
Newsgroup:
rapware.public.easymapi

Re: how to update an appointment

PROBLEM A)

The code that fails A), is at the bottom in this email. newAppt.Send. I have in fact already studied the MsgStoreAppointments example, but it is of cause possible that I have missed something. The problem is that the sample application seems to fail in the exact same way as my function. Running it, I log on, invite a contact, and pressing send. The result is access violation, exactly like in my program. Here is a copy of your example code that fails with access violations:
procedure TFrmAppointment.actSendExecute(Sender: TObject); begin    inherited;    SetMessageProps;    (Msg as IRwMapiAppointment).Send; //Fails, access violation.    Close; end;
PROBLEM B)
New comment. I have observed that my function (at the bottom of this email), did not set the PR_SENDER.. properties properly. Is that required? How does MAPI pick up the sender? The code below should pick the organizer, but it is nothing there...   NewAppt.Body := 'Organisator:'+NewAppt.Organizer+SLineBreak+                          'Mottagere:'+Recipients; //for debug Yesterday I added the following code before that line (just for testing): NewAppt.PropByName(PR_SENDER_EMAIL_ADDRESS).AsString
:='✉hk-data.no';
         NewAppt.PropByName(PR_SENDER_NAME).AsString :='Hans Reier
Sigmond';
PR_SENDER_NAME seems to be the same as organizer. But the attribute
PR_SENDER_ENTRYID is still without a value. Should it be set (by the 
system or by the programmer)?.

Can a misssing PR_SENDER_ENTRYID cause other errors?
PROBLEM C)
I will look at the example before eventually adding more comments. What I do see is that my current code does this completely wrong in many cases.
Reier (I usually use my middle name and not the first one)


Den 28.02.2013 20:01, skrev P. Wolters (RAPWare):
> Hi Hans,
>
> I recommend you take a look a the MsgStoreAppointments example
> application (intermediate examples directory). This application
> demonstrates how to create appointments and how to send meeting
> requests.
>
>
>> 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.
>
> It sounds like the problem is in the code that opens the appointment.
> Do you have a code snippet of that code?
>
>
>> PROBLEM B) I have observed that the organizer is not stored in the
>> recipient table. Should it be?
>
> No. The organizer is retrieved from the person who creates the
> appointment.
>
>
>> PROBLEM C) NewAppt.SaveChanges. In most of the cases the changes are
>
> It looks like you have a name resolve issue.
> I recommend you take a look at the AddrBookNameResolving.dpr example
> application (in the basic examples folder) to see what Name resolving
> is and how it work.
>
> Regards,
>
> Peter.
>
>
>
> Hans Reier Sigmond wrote:
>
>> 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 00:09:16 UTC
Copyright © 2009-2024
HREF Tools Corp.