none
Ex2000→Ex2007のCDOデータ取得の方法 RRS feed

  • 質問

  •  

    現在ASP.netでWebアプリの改修作業を行っています。

    旧環境では

    ASp.net+asp+ex2000で作成されていて

    CDOを使用して予定表情報を取得してきています。

     

    それをex2007にアップデートしたときに不具合が発生致しました。

     

    旧環境の時は

    OutlookをAさんでログインし起動し、会議出席依頼をBさんにかけると(必須出席者)

    Bさんが承諾しないと予定表情報の取得はされず、作成したWebアプリ上表示されませんでした。

    しかし、2007の仕様が大幅に変わった為か同様に取得していきているのに、承諾されていなくても予定情報として取得して

    アプリ上表示されてしまいました。

     

    この回避方法というのはあるのでしょうか?

    取得してくるデータなどに仮予約?されている?みたいなフラグなどのパラメータというのはあるのでしょうか???

     

    詳しい方おられましたら、ご教授ください。

    2008年3月25日 7:35

回答

  • こんにちは、フォーラムオペレータ大久保です。

     

    ずいぶん前のスレッドですみません、こちら状況はいかがでしょうか?

    鈴木のアドバイスもある程度は参考になるものかと思いますので、大変勝手で申し訳ありませんが「回答済み」チェックをつけさせていただきました。

    もしうまく情報を取得することができていらっしゃいましたら、その方法を教えていただけると、他の方の参考になると思いますので、お時間あればで結構なのでよろしくお願いします。

     

    それでは

    • 回答としてマーク ke-wata_ 2016年10月26日 0:49
    2008年12月25日 1:36

すべての返信

  • 追記

    一応作成したときのPGを一部記載しておきます。

     

    PG上では

     

    Private Function GetinboxList_Detail_CDO( _
                ByRef InOutDataXML As Xml.XmlDocument, _
                ByVal inUser As String, _
                ByVal inYMD As Date, _
                ByVal outYMD As Date _
            ) As Boolean

            Dim objDataXML As Xml.XmlDocument       '予定表xml(キャッシュ用)
            Dim objConn As ADODB.Connection
            Dim objRs As ADODB.Recordset
            Dim objStm As ADODB.Stream
            Dim objError As ADODB.Error
            Dim strSQL As String
            Dim sTrgUrl As String
            Dim strError As String

            GetinboxList_Detail_CDO = True

            'ターゲットURLの作成
            sTrgUrl = "http://" & SERVER_NAME & "/exchange/" & inUser & "/予定表"

            objConn = New ADODB.Connection()

            Try
                objConn.Provider = "ExOLEDB.DataSource"
                objConn.Open(sTrgUrl)

                'SQLクエリの作成
                strSQL = "SELECT " & _
                    """DAV:href"", " & _
                    """urnTongue Tiedchemas:httpmailTongue Tiedubject"", " & _
                    """urnTongue Tiedchemas:httpmail:textdescription"", " & _
                    """urnTongue Tiedchemas:calendar:uid"", " & _
                    """urnTongue Tiedchemas:calendar:alldayevent"", " & _
                    """urnTongue Tiedchemas:calendar:location"", " & _
                    """urnTongue Tiedchemas:calendarBig Smiletstart"", " & _
                    """urnTongue Tiedchemas:calendarBig Smiletend"", " & _
                    """urnTongue Tiedchemas:calendar:lastmodified"", " & _
                    """urnTongue Tiedchemas:mailheaderTongue Tiedensitivity"" " & _
                    "FROM SCOPE('SHALLOW TRAVERSAL of """ & sTrgUrl & """') " & _
                    "WHERE ((""urnTongue Tiedchemas:calendarBig Smiletstart"" >= CAST(""" & inYMD.ToUniversalTime.ToString("s") & "Z" & """ as ""dateTime"") " & _
                    "AND ""urnTongue Tiedchemas:calendarBig Smiletstart"" <= CAST(""" & outYMD.ToUniversalTime.ToString("s") & "Z" & """ as ""dateTime"")) " & _
                    "Or (""urnTongue Tiedchemas:calendarBig Smiletend"" >= CAST(""" & inYMD.ToUniversalTime.ToString("s") & "Z" & """ as ""dateTime"") " & _
                    "AND ""urnTongue Tiedchemas:calendarBig Smiletend"" <= CAST(""" & outYMD.ToUniversalTime.ToString("s") & "Z" & """ as ""dateTime"")) " & _
                    "Or (""urnTongue Tiedchemas:calendarBig Smiletstart"" <= CAST(""" & inYMD.ToUniversalTime.ToString("s") & "Z" & """ as ""dateTime"") " & _
                    "AND ""urnTongue Tiedchemas:calendarBig Smiletend"" >= CAST(""" & outYMD.ToUniversalTime.ToString("s") & "Z" & """ as ""dateTime""))) " & _
                    "AND ""urnTongue Tiedchemas:calendar:instancetype"" != 1 " & _
                    "ORDER BY ""urnTongue Tiedchemas:calendarBig Smiletstart"" ASC,""urnTongue Tiedchemas:calendar:lastmodified"" ASC"

                objRs = New ADODB.Recordset()
                objStm = New ADODB.Stream()
                objRs.Open(strSQL, objConn)
                objRs.Save(objStm, ADODB.PersistFormatEnum.adPersistXML)
                objDataXML = New Xml.XmlDocument()     '予定表xml(キャッシュ用)
                objDataXML.LoadXml(objStm.ReadText())
                UserXml_set2(InOutDataXML, inUser, objDataXML)

            Catch objException As Exception
                If objConn.Errors.Count > 0 Then
                    For Each objError In objConn.Errors
                        strError = strError & objError.Source & ": " & objError.Description & vbCrLf
                    Next
                    ErrMsgXML_Set(InOutDataXML, inUser, strError, "Connection接続エラー")

                Else
                    ErrMsgXML_Set(InOutDataXML, inUser, objException.StackTrace.ToString, objException.Message.ToString)

                    'エラー発生時、イベントログへ記述
                    Dim objErr As New gps_DataGetErr()
                    objErr.ErrorLogWrite(objException, Server, Context)
                    objErr = Nothing

                End If
                GetinboxList_Detail_CDO = False
                Exit Function
            End Try

            objDataXML = Nothing
            objConn = Nothing
            objRs = Nothing
            objStm = Nothing

        End Function

     

    このように取得してきています。

    このとき、承諾していない人の予定には予定を取得してきたくないので

    それを判別する項目はないでしょうか?

    2008年3月26日 3:00
  • 調査後

     

    meetingstatusというのとbusystatusというのを見つけ色々試してみました。

    AがBに会議出席依頼をかけると

    Aの情報取得の時

    meetingstatus=confirmed

    busystatus=busy(予定あり)等

    ではいりますが、

    Bの情報取得のとき

    上記のSQLだと取得すらしてきません。

     

    Ex2007の新規バージョン上で動かすと

    Bの情報も同様に情報取得してきています。

     

    何が違うのかよくわかりません。。。

     

    例えば、その出席依頼を承諾した、しないのパラメータってあるのでしょうか?

    依頼をかけた本人の予定には情報取得し、

    承諾をしていない人は情報を取得してきたくないとおもっています。

    2008年3月28日 1:06
  • ke-wata@ さん、こんにちは。
    フォーラム オペレータの鈴木裕子です

     

    ご投稿の動作で、
    Exchange 2000 と 2007 でどのように違うのか?という点は、
    調べてみましたが、
    残念ながら情報が見つかりませんでした・・・

     

    2007 上で動かした時に、
    B の情報がどのようなステータスで戻ってきているのかな?という点は気になったのですが、
    ご希望を実現する方法としては、
    たとえばmeetingstatus  が confirmed の人だけ情報を取得するとか、
    busystatus がtentative の人ははじくとか、
    そういった方法になるのではないかなとは思います・・・・

     

    ただ、私は Exchange についてはあまり詳しくないので、
    的外れな考えかもしれません(ごめんなさい!)
    どなたか詳しい方にコメントいただけるとありがたいです。
    よろしくお願いします!

     

    ※次回、コードを記述いただく時は、コードブロックを使用してくださいね!
    (一部が絵文字になってしまって見づらいので、よろしくお願いします)

     

    • 回答としてマークされていない ke-wata_ 2009年3月6日 8:01
    2008年4月3日 9:54
    モデレータ
  • こんにちは、フォーラムオペレータ大久保です。

     

    ずいぶん前のスレッドですみません、こちら状況はいかがでしょうか?

    鈴木のアドバイスもある程度は参考になるものかと思いますので、大変勝手で申し訳ありませんが「回答済み」チェックをつけさせていただきました。

    もしうまく情報を取得することができていらっしゃいましたら、その方法を教えていただけると、他の方の参考になると思いますので、お時間あればで結構なのでよろしくお願いします。

     

    それでは

    • 回答としてマーク ke-wata_ 2016年10月26日 0:49
    2008年12月25日 1:36