2017-07-06 8 views
0

Outlookフォルダを変更するユーティリティスクリプトを作成しています。このため私はRedemption v5.14をCOMインターフェイス(Windowsスクリプトホスト/ JScript)を使用しています。RDOFolderオブジェクトのパフォーマンスが遅い

// enumerate all subfolders of an RDOFolder 
function getFolderList(rdoFolder) { 
    if (!rdoFolder) return; 

    return foldersToArray(rdoFolder.Folders).map(getFolderDetails); 
} 

// pull out some details about a single RDOFolder 
function getFolderDetails(rdoFolder) { 
    if (!rdoFolder) return; 

    return { 
     name: rdoFolder.Name, 
     entryID: rdoFolder.EntryID, 
     defaultMessageClass: rdoFolder.DefaultMessageClass, 
     folderCount: rdoFolder.Folders.Count 
    }; 
} 

foldersToArray()はちょうどJS配列にFoldersコレクションを列挙します:

私はRDOFolderのすべてのサブフォルダのために私にいくつかの情報の配列を取得これらの2つの機能を持ちます。

これは大きなサブフォルダリストのかなりの時間を要する - 40個のサブフォルダの12秒の順に。

私はあまり情報を取得するものに最後の機能を削減する場合:

// pull out some details about a single RDOFolder 
function getFolderDetails(rdoFolder) { 
    if (!rdoFolder) return; 

    return { 
     folderCount: rdoFolder.Folders.Count 
    }; 
} 

、パフォーマンスが(40個のサブフォルダのカップルの十ミリ秒)良いです。

しかし、どういうわけかさえRDOFolderのNameプロパティ(またはその他)にアクセスするには、特別なオーバーヘッドを追加します。

は、なぜこの出来事で、それを改善する方法はありますか? IMAPISession::OpenEntryを呼び出してRDOFolderを初期化するための任意のプロパティ力の償還へのアクセス -

答えて

1

RDOFolderは怠惰な初期化を使用しています。基になるMAPIフォルダを開かないようにするには、ExecSQL(RDOFolder.Folders.MAPITable.ExecSQL)を使用してPR_DISPLAY_NAME_W, PR_ENTRYID, PR_CONTAINER_CLASS_W, PR_SUBFOLDERSのプロパティを取得することができます。http://www.dimastr.com/redemption/mapitable.htm#ExecSQL

+0

を参照してください。ありがとう!私が理解できない唯一のことは、これが私に与えるEntryIDのフォーマットです。これはRDOFolderの 'EntryID'プロパティから得たものとは異なり、' RDOStore.GetFolderFromID() 'はそれを気に入らないようです。 – Tomalak

+0

'PR_LONGTERM_ENTRYID_FROM_TABLE'(DASL' "http://schemas.microsoft.com/mapi/proptag/0x66700102" ')のリクエストは正しい値を得ます。再度、感謝します。 – Tomalak

関連する問題