1

これはCRM 2016の前提です。子ASP.netページ終了後の親CRMページの更新

CRM 2016のコマンドバーには、javaScript Webリソースを使用して別のサーバーにある外部asp.netページを呼び出すカスタムボタンがあります。この外部ページでは、ユーザーが親ページのサブグリッドの1つに表示されるいくつかのカスタムアクションを実行できます。

CRMボタンが外部ページを開くために使用するjavascriptは次のとおりです。

function openPricingForm() { 

var loc = Xrm.Page.context.getClientUrl(); 
var pl = Xrm.Page.getAttribute('pricelevelid').getValue(); 
var id = Xrm.Page.data.entity.getId(); 
var type = Xrm.Page.data.entity.getEntityName(); 

var url = 'http://app.domain.com/customPage.aspx?pl='+ pl[0].id +'&id='+ id + '&type=' + type + '&loc=' + loc; 

var title = 'Select Products'; 
var w = 500; 
var h = 600; 
var dualScreenLeft = window.screenLeft != undefined ? window.screenLeft : screen.left; 
var dualScreenTop = window.screenTop != undefined ? window.screenTop : screen.top; 
var width = window.innerWidth ? window.innerWidth : document.documentElement.clientWidth ? document.documentElement.clientWidth : screen.width; 
var height = window.innerHeight ? window.innerHeight : document.documentElement.clientHeight ? document.documentElement.clientHeight : screen.height; 

var left = ((width/2) - (w/2)) + dualScreenLeft; 
var top = ((height/2) - (h/2)) + dualScreenTop; 
top = top - (top * 0.25); 
var newWindow = window.open(url, title, 'scrollbars=yes, width=' + w + ', height=' + h + ', top=' + top + ', left=' + left); 

// Puts focus on the newWindow 
if (window.focus) { 
    newWindow.focus(); 
    } 
} 

親CRMページを更新して、asp.netページで加えられた変更を表示できるようにする必要があります。私は親ページのサブグリッドをリフレッシュするのが好きですが、ページ全体をリロードするだけでいいですか?

子ページでjavascript関数を使用してウィンドウアンロードイベントでwindow.opener.location.reload()を呼び出そうとしましたが、親CRMページでは機能しません。私はwindow.opener.parent.refreshParent()も試みました。私は問題は、外部ページがCRMページによって開かれていないので、window.openerに値が含まれていないと思う、それはjavascript関数によって開かれている。

JavaScriptを使ってこの値を渡す方法はありますか?そのため、window.openerに値を設定していますか?

親ページのサブグリッドを特定してリフレッシュコマンドを送信する方法はありますか?

おそらく、私が見逃しているより良い解決策がありますか?私は、これを働かせる方法についての提案には開放されています。

答えて

0

windows.postMessageがWindowsで動作するかどうかわかりませんが、調査することはできます。

別のオプションは、子ウィンドウを新しいウィンドウに読み込む代わりに、iframeオーバーレイに読み込むことです。それからあなたは間違いなくpostMessageを使うことができ、UXはより良くなるでしょう。

+0

返信いただきありがとうございます。私はwindow.postMessageを見て、それが役に立つと考えています。私は、私の子ページをiframeするためのHTMLラッパーを作成しようとしましたが、フォーム上のAJAX更新パネルを壊しました。私はドロップダウンリストを持っています。次に、選択肢のリストボックスのベースと、前のリストボックスの選択肢を表示する2番目のリストボックスが表示されます。 –

関連する問題