1

使用 ActiveX 技术从 Web 应用程序自动执行 Outlook 是一种标准做法吗?这与 Telerik 的 RadScheduler + Telik 的 Exchange Provider 这样的 Web 调度程序相比如何从 Web 应用程序本身安排约会?

谢谢,
森希尔

4

2 回答 2

2

您将需要提供有关您要完成的工作的更多详细信息,而不仅仅是在 Web 应用程序中说明 Outlook 的自动化。我这么说的原因是因为它真的取决于你想要做什么。如果您要做的只是创建约会,那么不,您不需要activex。

这是您可以研究或调查的内容。立即进入 Outlook,创建约会。然后转到文件菜单并执行“另存为”并将约会保存到您的桌面上。您会注意到该文件存储为 .ics 文件。您实际上可以在记事本或 word 中打开此文件并查看其内容。

例如,这里是它在记事本中的样例:

开始:VCALENDAR
产品:-//Microsoft Corporation//Outlook 12.0 MIMEDIR//EN
版本:2.0
方法:发布
X-MS-OLK-FORCEINSPECTOROPEN:真
开始:事件
类别:公共
创建:20091028T125325Z
描述:测试\n
DTEND:20091028T133000Z
DTSTAMP:20091028T125325Z
DTSTART:20091028T130000Z
最后修改:20091028T125325Z
优先级:5
序列:0
摘要;LANGUAGE=en-us:test
传输:不透明
UID:040000008200E00074C5B7101A82E008000000005062431CAC57CA01000000000000000
    0100000003E756880D89B504BBA9FF0FDC7D16F43
X-ALT-DESC;FMTTYPE=文本/html:\n\n\n\n\n\n\n\n\n测试

\n\n\n X-MICROSOFT-CDO-BUSYSTATUS:BUSY X-MICROSOFT-CDO-重要性:1 X-MICROSOFT-DISALLOW-COUNTER:FALSE X-MS-OLK-ALLOWEXTERNCHECK:TRUE X-MS-OLK-CONFTYPE:0 开始:VALARM 触发器:-PT15M 动作:显示 描述:提醒 结束:VALARM 结束:事件 结束:VCALENDAR

所以现在想一想,你可以使用 asp.net / asp 来生成约会,因为你可以访问一个 StreamWriter 和一个内存流。这究竟是什么意思,这意味着您可以像这样生成一个文本文件,并猜测如果您生成这样一个文本文件,那么您刚刚创建了一个约会。这是我为日历项目编写的示例,我编写了一个工具来跟踪我工作的公司的假期/休假请求。经理想要的功能之一是将员工请求添加到经理日历的方法。由于经理们总是在 Outlook 内部,他们想快速浏览一下 Outlook 日历,看看谁在办公室,谁不在办公室。当然,他们可以手动创建 Outlook 日历项目,但过多的手动工作并不理想。

所以我使用了一个 StreamWriter 和一个内存流来生成一个 Outlook 日历项。

这是一个例子:

<%@ Page Language="vb" ContentType="text/html" ResponseEncoding="iso-8859-1" Debug="True" trace="False"%>
<%@ import Namespace="System.IO" %>

<html xmlns="http://www.w3.org/1999/xhtml">
<head>
<title></title></head>
<body>
<script runat="server"> 
Sub Page_Load(Sender As Object, E As EventArgs) 

 'PARAMETERS
    Dim beginDate as Date
    Dim endDate as Date  

    Dim VType as String = Request.QueryString("vtype")
        Dim h As Double = Request.QueryString("hours")

        If h = 8 Then
            beginDate = Request.QueryString("vdate") & " 7:00 AM"
            endDate = Request.QueryString("vdate") & " 4:00 PM"
        ElseIf h = 4 Then
            beginDate = Request.QueryString("vdate") & " 7:00 AM"
            endDate = Request.QueryString("vdate") & " 12:00 PM"
        ElseIf h = 1 Then
            beginDate = Request.QueryString("vdate") & " 7:00 AM"
            endDate = Request.QueryString("vdate") & " 8:00 AM"
        ElseIf h = 2 Then
            beginDate = Request.QueryString("vdate") & " 7:00 AM"
            endDate = Request.QueryString("vdate") & " 9:00 AM"
        ElseIf h = 3 Then
            beginDate = Request.QueryString("vdate") & " 7:00 AM"
            endDate = Request.QueryString("vdate") & " 10:00 AM"
        ElseIf h = 5 Then
            beginDate = Request.QueryString("vdate") & " 7:00 AM"
            endDate = Request.QueryString("vdate") & " 12:00 PM"
        ElseIf h = 6 Then
            beginDate = Request.QueryString("vdate") & " 7:00 AM"
            endDate = Request.QueryString("vdate") & " 1:00 PM"
        ElseIf h = 7 Then
            beginDate = Request.QueryString("vdate") & " 7:00 AM"
            endDate = Request.QueryString("vdate") & " 2:00 PM"
        ElseIf h = 9 Then
            beginDate = Request.QueryString("vdate") & " 7:00 AM"
            endDate = Request.QueryString("vdate") & " 5:00 PM"
        ElseIf h = 10 Then
            beginDate = Request.QueryString("vdate") & " 7:00 AM"
            endDate = Request.QueryString("vdate") & " 6:00 PM"
        ElseIf h = 11 Then
            beginDate = Request.QueryString("vdate") & " 7:00 AM"
            endDate = Request.QueryString("vdate") & " 7:00 PM"
        ElseIf h = 12 Then
            beginDate = Request.QueryString("vdate") & " 7:00 AM"
            endDate = Request.QueryString("vdate") & " 8:00 PM"
        ElseIf h = 13 Then
            beginDate = Request.QueryString("vdate") & " 7:00 AM"
            endDate = Request.QueryString("vdate") & " 9:00 PM"
        ElseIf h = 14 Then
            beginDate = Request.QueryString("vdate") & " 7:00 AM"
            endDate = Request.QueryString("vdate") & " 10:00 PM"
        Else
            beginDate = Request.QueryString("vdate") & " 7:00 AM"
            endDate = Request.QueryString("vdate") & " 12:00 AM"
        End If

    Dim myLocation as String = Request.QueryString("location")
    Dim mySubject as String = Request.QueryString("subject")
    Dim myDescription as String = Request.QueryString("Description") 

    'INITIALIZATION
    Dim mStream As new MemoryStream()
    Dim writer As new StreamWriter(mStream)

    writer.AutoFlush = true 

    'HEADER
    writer.WriteLine("BEGIN:VCALENDAR")
    writer.WriteLine("PRODID:-//Flo Inc.//FloSoft//EN")
    writer.WriteLine("BEGIN:VEVENT") 

    'BODY
    writer.WriteLine("DTSTART:" & beginDate.ToUniversalTime.ToString("yyyyMMdd\THHmmss\Z") )
    writer.WriteLine("DTEND:" & endDate.ToUniversalTime.ToString("yyyyMMdd\THHmmss\Z") )
    writer.WriteLine("LOCATION:" & myLocation)
    writer.WriteLine("DESCRIPTION;ENCODING=QUOTED-PRINTABLE:" & myDescription)
        writer.WriteLine("SUMMARY:" & mySubject)
        writer.WriteLine("X-MICROSOFT-CDO-BUSYSTATUS:FREE")

    'FOOTER
    writer.WriteLine("PRIORITY:5")
    writer.WriteLine("END:VEVENT")
    writer.WriteLine("END:VCALENDAR") 

    'MAKE IT DOWNLOADABLE
    Response.Clear() 'clears the current output content from the buffer
    Response.AppendHeader("Content-Disposition", "attachment; filename=Add2Calendar.vcs")
    Response.AppendHeader("Content-Length", mStream.Length.ToString())
    Response.ContentType = "application/download"
    Response.BinaryWrite(mStream.ToArray())
    Response.End() 
    End Sub
</script>
</body>
</html>
于 2009-10-28T13:00:56.993 回答
0

有一些方法可以让您从 asp.net 应用程序自动化 MS Office,但这样做需要您自担风险。如果我没记错的话,您很可能需要使用模拟来使 dcom 正常运行,这样做可能会在您的 Web 应用程序中留下一个很大的安全漏洞。

我建议使用Open Office XML,因为 MS 不推荐也不支持从 Web 应用程序中自动化 Office。

于 2009-10-28T13:11:21.623 回答