2016-12-15 35 views
0

にiManageの制限を回避するためにどのように我々は、WebサーバーからExcelシートを引っ張るExcelのVSTOアドインを開発し、ユーザーがシート上のデータを操作することを可能にしています。それはファイルのローカルコピーで動作しますが、私たちはそのコピーを気にしません。しかし、私たちのクライアントの中には、 "iManage Integration for Office"もインストールされており、これらのクライアントは奇妙な動作を経験します。この環境では、Closeイベントをキャンセルすることはできません。ユーザーは、当社のいずれかのファイルを開き、変更を行う場合は、Excel VSTOアドイン

は具体的には、それから、ファイルを閉じ、当社のイベントハンドラ火災や(サーバー上のデータへの)変更を保存するためにそれらを求められます。彼らがキャンセルを選択した場合、または保存を選択して何らかの理由で保存が失敗した場合、ファイルを開いたままにするために、キャンセル= trueを設定します。通常、これは完全に機能します。 iManageとそれらのクライアントのために

、ファイルがとにかく閉じます。私たちのコードがファイルのローカルコピーを保存していれば、ファイルはただ閉じます。ローカルコピーが保存されていない場合、iManageのプロンプトが表示された後、ファイルを保存するかどうかを尋ねるプロンプトが表示されます。ここから、ユーザーは[キャンセル]をクリックしてファイルを開いたままにできます。しかし、ユーザーは最初にキャンセルをクリックした後に2番目のプロンプトが表示されるのが混乱していると報告しています。そして、彼らはiManageアドインを無効にするつもりはありません。できればiManageプロンプトが表示されないように、ファイルを開いたままにしたいと考えています。クライアントは私のために設定したテスト環境(エクセル2010)での作業

は、私はいくつか試してみました:

  • 私はワークブックレベルBeforeCloseやアプリケーションレベルWorkbookBeforeCloseにキャンセル設定しようとしたが、どちらも、私はWorkbookBeforeCloseのための私のハンドラは、ブックレベルのイベントハンドラでそれを登録することで、最後に登録されていることを確認してみました(iManageが有効になっている時はいつでもファイルがまだクローズ)
  • を働きました。何の変化
  • 私は手動ですべての作業を行いローカルモードに切り替えるためにiManageリボンを使用することはできませんが、私は/どのように私はコードをその変更を行うことができるかどうかわかりません。
  • 私はGlobals.ThisAddIn.Application.COMAddInsにiManageアドインを見つけることができます。私はConnect = falseを設定しようとしましたが、管理者だけがaddinを接続/切断できるというエラーが発生します。
  • 閉じるイベント中にローカルファイルを保存し、次にSaveAsを実行して2番目のコピーを作成します。 2番目のコピーがアクティブになり、iManageがそれを閉じます。元のローカルファイルを再度開きます。ユーザーにとってはかなりいいようですが、古いファイルのセルに対するCOM参照の束があります。これらはすべてゴミです。私はおそらくループし、それらをシリアル化し、新しいファイルで再作成することができますが、それはコード化と実行に時間がかかりますので、まず他のアイデアを探しています。

私は、ユーザーが余分な何かをせずに、開いているファイルを保つことができる方法はありますか?

UPDATE

iManage 9.3.0.0およびExcel 2010を使用して、私は職場の統合インタフェース・ライブラリー(実施例)を参照してVBAマクロを作成しました。イベントは発生しますが、ファイルはまだ閉じます。 Savedプロパティを設定せずグリッドに入力すると、保存するかどうかを尋ねるメッセージがiManageから常に表示されます。

Private WithEvents oWS As iManageExtensibility 

Private Sub oWS_DocumentBeforeClose2(ByVal Doc As Variant, IgnoreIManageClose As Boolean, Cancel As Boolean) 
    IgnoreIManageClose = True 
    Cancel = True 
End Sub 

Private Sub Workbook_BeforeClose(Cancel As Boolean) 
    Set oWS = Application.COMAddIns("WorkSiteOffice2007Addins.Connect").Object 
    Cancel = True 
    ActiveWorkbook.Saved = True 
End Sub 

答えて

1

OfficeのiManage統合アドインを無効にする必要はありません。アプリケーションがiManageインテグレーションアドインの存在を検出し、そのアドイン自体の同等のCloseイベントを処理する必要があります

これを行うには、まずExcel Application.COMAddinsコレクションを調べてiManageアドインのインスタンスを取得しますWorkSiteOffice2003Addins.Connect(Excel 2003以前)またはWorkSiteOffice2007Addins.Connect(Excel 2007またはそれ以降)のいずれかのProgIDを使用してCOMアドインインスタンスを取得します。

また実際には、「後方互換性」アドインがインストールされ、ProgIDがoUR02k.Connectに登録されている必要があります。再度、インストールされているかどうかは、マシンにインストールされているFileSite/DeskSiteのバージョンによって異なります。

アドインが何年にもわたって変わってきたので、すべてが混乱しているようですが、iManageクライアント(つまりFileSite、DeskSite)の年数や、再ターゲティングコード内の異なるExcel/iManageクライアントのバージョンを補う必要があるかもしれません。

適切なCOMアドインリファレンスを取得したら、COMAddin.Objectプロパティを調べます。この値は、iManage Officeとの統合のインスタンスを表しアドイン

そこからあなたがiManageExtensibility

の強く型付けされたCOMインターフェイスにそのオブジェクトをキャストすることができますあなたは、そのすべてのOfficeアプリケーションのイベントにフックすることができますiManageは(あなたのアプリケーションでやったように)ハイジャックし、ネイティブのExcelのイベントではなく、そのイベントに応答します。

あなたのケースでは、DocumentBeforeClose2イベントを監視する必要があります。末尾に「2」という文字があることに注意してください。そこDocumentBeforeCloseという名前のレガシーイベントもあるが、DocumentBeforeClose2新しいは、以下のメソッドシグネチャを持っていますcloseイベントおよび/またはiManage closeイベントをキャンセルするビジネスロジックを追加するには、DocumentBeforeClose2イベントハンドラで、

DocumentBeforeClose2(object doc, ref bool ignoreimanageclose, ref bool cancel)

最後に。 ignoreimanagecloseおよび/またはcancelブール値を必要に応じて真/偽に設定することでそれを行います。この場合のdocパラメータはExcelワークブックのインスタンスになりますので、ご希望の場合はExcel.Workbookインターフェイスにキャストしても問題ありません。

PS:iManage APIを開発しており、サポートが必要な場合は、iManage SDK 。 SDKにはさまざまなAPI、コードサンプルのヘルプが含まれており、重要な開発サポートへのアクセスが可能になると私は信じています。

+0

この詳細な回答はありがとうございます。私はすぐにそれを試してみます。 – Mishelle

+0

これは機能しませんでした。私はDocumentBeforeClose2のイベントハンドラをCOMアドインオブジェクトに追加し、ファイルを閉じると起動します。これらの変数のいずれかをtrueに設定しても効果はありませんでした。保存されていない変更があると、iManageプロンプトが表示されます。そうでなければファイルが閉じます。 – Mishelle

+0

私は自分のdev環境を話すことができません。 DocumentBeforeClose2イベントを処理し、保存されていないドキュメントを閉じ、イベントシグニチャのIgnoreIManageCloseおよびCancelパラメータをプログラムでTrueに設定します。その結果、文書が閉じることはありません。同じテストを2度実行しました。最初はOffice 2016 + FileSite 9.3.1ビルド、次にOffice 2013 + FileSite 9.0.6ビルドでした。おそらくあなたのテストハーネスにあなたの動作のいくつかを示しますか? – fivetoniner

関連する問題