1

Office JavaScript API を使用して、Excel 用のタスク ペイン アプリを作成しています。このアプリでは、他のサーバーからデータを要求し、このデータを Excel ワークシートに表示します。ワークシートの変更もサーバーにアップロードできます。リクエストは、プロキシへの単純な ajax 呼び出しです。プロキシはこのリクエストをサーバーに転送します。これはこれまでのところうまくいきます。

ただし、要求は Excel アプリのどこかにキャッシュされます。変更後、更新後もワークシートに変更されていないデータが表示されます。ただし、データはサーバー側で変更されます。新しいリクエストはプロキシに送信されないため、アプリにキャッシュされます。Chrome と Firefox でアプリを呼び出すと、問題なく動作します。ここには何もキャッシュされません。

Office アプリでキャッシュを回避する可能性はありますか? または、キャッシュの無効化/クリアを手動でトリガーできますか?

編集:

変更されていないデータとはどういう意味ですか: Excel テーブルで何かを変更し、このデータをサーバーにアップロードします。ここで Excel シートのデータを更新すると、変更前のデータが表示されます。これは、最初の要求からのデータがどこかにキャッシュされて使用されているためです。変更された値を含むデータを取得するためにサーバーを再度呼び出すことはありません。この説明がお役に立てば幸いです。

ここにいくつかのコード例を追加できますが、大きな助けになるとは思いません。

ajax呼び出しでデータを取得するメソッド。このメソッドは引き続き呼び出され、コールバックをスローして実行されますが、Excel アプリでデータを更新すると、要求はプロキシ サーバーに到達しません。

_downloadPeriods: function _downloadPeriods(sParameters) {
        var oController = this;

        ...

        var url = '/Proxy/RequestHandler.ashx/MaintainPeriodsExcelSet' + sParameters;
        // ajax request to load the data from the sap backend server via the proxy
        $.ajax({
            type: 'GET',
            url: url,
            dataType: 'json',
            success: function success(oData) {
                // create a material collection from the data
                oController.resetMaterialCollection();
                var oMaterialCollection = oController.getMaterialCollection();
                oMaterialCollection.updateData(oData.d.results);
                // insert data into the excel worksheet
                try {
                    oController._updateExcelTable(oMaterialCollection);
                } catch (e) {
                    // error handling
                }
                fnCallback();
            },
            error: function error(oErr) {
                // error handling
            }
        });
    },

既にプロキシにキャッシュ ヘッダーを設定していますが、まだ Excel アプリのどこかにキャッシュされています。

...
context.Response.Headers["cache-control"] = "private, max-age=0, no-cache";
...
4

1 に答える 1