簡體   English   中英

Dynamics CRM 365 - 無法訪問HTML Web資源中的Xrm.Page.entity

[英]Dynamics CRM 365 - Cannot access Xrm.Page.entity in HTML web ressource

我在我的聯系表單中添加了一個html資源,其中只包含一個小圖片,以便將它放在聯系人字段旁邊。 當用戶點擊它時,它會啟動一個javascript函數,我想在其中獲取表單特定字段的值。 該字段是聯系實體的屬性。 這是HTML Web資源:

<html>
<head>
    <style type="text/css">
        body 
        {
         margin: 0;
         padding: 0;
         }
     </style>
    <script type="text/javascript">
        function call() {
            var phoneNumber = window.parent.Xrm.Page.getAttribute("mobilephone").getValue();
        }
    </script>
<meta>
</head>
<body style="word-wrap: break-word;">
    <img onmouseover="this.style.cursor='pointer';" src="/webresources/new_/image/image.png" onclick="call()">
</body>
</html>

我也嘗試過獲取如下數據:

window.parent.Xrm.Page.data.entity.attributes.get("telephone1").getValue()

但它也不起作用: 無法讀取null的實體

問題是getAttribut返回null,盡管我想要的實體字段。 它總是未定義有人有想法嗎?

GetGlobalContext函數和ClientGlobalContext.js.aspx(客戶端引用)

在使用Web資源進行編程時,請使用GetGlobalContext函數來訪問上下文信息。 要在HTML Web資源中獲取GetGlobalContext函數,請包含對ClientGlobalContext.js.aspx的引用。

當您包含對位於Web資源目錄根目錄的ClientGlobalContext.js.aspx頁面的引用時,可以使用GetGlobalContext函數。


結合更多建議:

網頁(HTML)網絡資源

嘗試從window.parent.Xrm.Page刪除window

添加到表單的HTML Web資源不能使用由表單中加載的JavaScript庫定義的全局對象。 HTML Web資源可以使用parent.Xrm.Page或parent.Xrm.Utility與表單中的Xrm.Page或Xrm.Utility對象進行交互 ,但是使用父表單無法訪問由表單腳本定義的全局對象。 您應該在HTML Web資源中加載HTML Web資源所需的任何庫,這樣它們就不依賴於表單中加載的腳本。

在表單上使用IFRAME和Web資源控件

嘗試從表單腳本傳遞輸入。

對於網頁(HTML)Web資源,請使用setSrc方法直接操作querystring參數。

在HTML頁面中,可以使用JavaScript中的window.location.search屬性訪問這些參數。

示例:通過data參數將多個值傳遞給Web資源

如果你不能采取優秀的詹姆斯伍德解決方案嘗試:

1.您必須檢查您的商品是否在iframe中

您可以從以下腳本中獲得靈感:

Xrm.Page.ui.controls.get('id_iframe').getObject().onload= function() {
    var element = Xrm.Page.ui.controls.get('id_iframe').getObject().contentWindow.document.getElementById('id_element_inside_iframe');
    console.log(element);
};

Xrm.Page.ui.controls.get('id_iframe')。getObject():返回HTML對象iFrame

你可能會遇到一個叫做問題的事件。

您可以從以下腳本中獲得靈感:

<HTML>
  <BODY onload="SetupEvents()">
    <label id="myLabel" >Click me</label>
  </BODY>
  <SCRIPT>
      function DoTheThing() {  alert('thing was done');   }
      function SetupEvents() {
          addEvent( document.getElementById('myLabel'),'click', function () { DoTheThing(); });
      }

        function addEvent(element, evnt, funct){
            if (element.attachEvent)
            return element.attachEvent('on'+evnt, funct);
            else
            return element.addEventListener(evnt, funct, false);
        }
</SCRIPT>
</HTML>

我認為這是一個Turbo Forms問題,因為Turbo Forms並行加載Javascript並加載ClientGlobalContext.js.aspx作為最后一項。 IFrame包含OnReadyStateCompleted事件,我建議您在該事件下添加以下代碼。

function call() {
            var phoneNumber = window.parent.Xrm.Page.getAttribute("mobilephone").getValue();
        }

見下圖 ReadyStateComplete

假設您的webresource位於根標簽處...然后您必須首先添加ClientGlobalContext引用

<script src="ClientGlobalContext.js.aspx" type="text/javascript"></script>

完成后,您應該能夠通過首先刪除"window"部分來獲取函數的屬性值

<script type="text/javascript">
    function call() {
        var phoneNumber = parent.Xrm.Page.getAttribute("mobilephone").getValue();
    }
</script>

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM