Как программно добавить на сервер события Outlook для нескольких пользователей? - PullRequest
0 голосов
/ 10 сентября 2009

Мы должны добавить и обновить календарь событий Outlook для нескольких пользователей. (различные события назначений для каждого пользователя) под управлением программы (VB или Рубин). Серверное решение, не требующее действий отдельных пользователей, предпочтительным. Простая технология на базе ICAL, кажется, не поддерживает обновление существующих событий (т.е. изменения расписания).

Любые указатели (фрагменты, документы API приветствуются)

Кстати: не серверное решение, где каждый пользователь должен запустить скрипт что-то похожее на следующее:

# Loosely based on http://snippets.dzone.com/posts/show/4301

require 'delegate_to'
require 'win32ole'

# Simple DSL wrapper out Outlook API
class OutlookCalendar < Array
    CALENDAR_FOLDER=9
    OUTLOOK=WIN32OLE.new 'Outlook.Application'

    class Event
        def initialize &block
            @_=OutlookCalendar::OUTLOOK.CreateItem 1
            instance_eval(&block) if block_given?
        end
        def subject *arg
            @_.subject=arg.first unless arg.empty?
            @_.Subject
        end
        def start *arg
            @_.Start=arg.first unless arg.empty?
            @_.Start
        end
        def duration *arg
            @_.Duration=arg.first unless arg.empty?
            @_.Duration
        end
        def body *arg
            @_.Body=arg.first unless arg.empty?
            @_.Body
        end
        def location *arg
            @_.Location=arg.first unless arg.empty?
            @_.location
        end
        def reminder *arg
            @_.ReminderMinutesBeforeStart=arg.first unless arg.empty?
            @_.ReminderSet=true
            @_.ReminderMinutesBeforeStart
        end

        delegate_to :_
    end


    def initialize
        super
        refresh
        each{|_| yield _} if block_given?
    end

    def refresh
        mapi=OutlookCalendar::OUTLOOK.GetNameSpace 'MAPI'
        @calendar=mapi.GetDefaultFolder CALENDAR_FOLDER
        entries=[] #  [ Subject Location Start End Body ]
        @calendar.Items.each{|_| entries << _} # can't use collect
        self.replace entries.sort_by{|_| _.Start}
        self
    end

    def << event
        event.save
    end
end

# Sample Usage:
if $0==__FILE__

    class OutlookCalendar
        def show
            each{|_| puts '%s - %s : %s' % [ _.Start,_.End,_.Subject ]}
        end
    end

    Calendar=OutlookCalendar.new

    # Show original events
    Calendar.show

    # Delete possible previous events       
    Calendar.each{|_| _.Delete if /^S3W:/.match _.Subject}

    # Add updated event
    Calendar << OutlookCalendar::Event.new do
        start '7/29/2007 11:00 AM'
        duration 300
        subject 'S3W: Hall of Fame Induction'
        body 'Tony Gwynn and Cal Ripken Jr.'
        location 'Cooperstown, NY'
        reminder 15
    end

    # Show updated list of events
    puts '-'*50
    Calendar.refresh.show

end    

1 Ответ

0 голосов
/ 10 сентября 2009

Outlook, Exchange и WebDav.

  • Как создать календарь Outlook папка с помощью WebDAV в Visual C #
  • Как работать с предметами в Exchange 2000 с использованием WebDAV в Visual Basic .NET
...