2016-05-19 30 views
0

我有一個ribon規則來顯示或隱藏賬戶的停用按鈕。訪問JavaScript ribon /命令欄規則中的網絡資源

這是非常簡單的

if (typeof (XTC) == "undefined") 
{ XTC= { __namespace: true }; } 

XTC.RibbonRules = (function() { 

    AccountRules = { 


     //see if user has roles specified to have the Deactivate button enabled. 
     IsDeactivateEnabled: function() { 


      var orgName = Xrm.Page.context.getOrgUniqueName(); 
      var validGuids; 
      var allowedRoles = []; 

      /* 
       put all roles needed to show Account Deactivate button here. 

      */ 
      allowedRoles.push('System Administrator'); 
      allowedRoles.push('XTC Admin'); 

      var userRoles = Xrm.Page.context.getUserRoles(); 

      //user has no assigned roles... 
      if (userRoles.length < 1) 
       return false; 

      var matchingRoles = AccountRules.returnMatchingRoles(userRoles); 

      for (var x = 0; x < matchingRoles.length; x++) { 
       if ($.inArray(matchingRoles[x].Name, allowedRoles) != -1) 
        return true; 
      } 

      return false; 
     }, 
     returnMatchingRoles: function (roles) { 


      var matches; 
      var serverUrl = location.protocol + '//' + location.host + '/' + Xrm.Page.context.getOrgUniqueName(); 
      var queryUrl = serverUrl + '/XRMServices/2011/OrganizationData.svc/' + 'RoleSet?$filter='; 

      for (var x = 0; x < roles.length; x++) { 

       if (x == roles.length - 1) { 
        queryUrl += "RoleId eq guid'" + roles[x] + "'"; 
       } 
       else { 
        queryUrl += "RoleId eq guid'" + roles[x] + "' or "; 
       } 
      } 

      $.ajax({ 
       url: queryUrl, 
       type: "GET", 
       async: false, 
       contentType: "application/json; charset=utf-8", 
       datatype: "json", 
       beforeSend: function (XMLHttpRequest) { XMLHttpRequest.setRequestHeader("Accept", "application/json"); }, 
       success: function (data, textStatus, XmlHttpRequest) { 
       matches = data.d; 
       }, 
       error: function (XmlHttpRequest, textStatus, errorThrown) { 
        alert('OData Select Failed: ' + textStatus + errorThrown + odataSelect); 
       } 
      }); 

      return (matches.results.length > 0) ? matches.results : null; 

     } 

    }; 

    return { AccountRules: AccountRules }; 

})(); 

因此,如果用戶沒有一個角色要麼兩個,按鈕被停用。

我的問題是,這不是在表單的上下文中運行,因此包括表單配置中的網絡資源不起作用。

出於某種原因,我無法弄清楚,從那裏,我有權訪問jQuery(2.1.1),但沒有其他資源。

有沒有一種方法可以將系統範圍內的Web資源包含進來,以便它可以在此代碼中使用,就像jQuery似乎是一樣?

回答

3

可以包括由使您的命令庫是這樣的:「isNaN」爲FunctionName的

<CommandDefinition Id="new.incident.Home.ValidateAndResolve.Command"> 
    <EnableRules> 
    <EnableRule Id="Mscrm.SelectionCountAtLeastOne" /> 
    </EnableRules> 
    <DisplayRules /> 
    <Actions> 
    <JavaScriptFunction FunctionName="isNaN" Library="$webresource:xyz_/Scripts/Common/helpers.js" /> 
    <JavaScriptFunction FunctionName="incidentribbon.validateAndResolve" Library="$webresource:xyz_/Scripts/Ribbon/incident.js" /> 
    </Actions> 
</CommandDefinition> 

注意價值。 isNaN只是一個全球可用的JavaScript函數,如果您不傳遞任何參數,它將不會執行任何操作。這就是你如何獲得功能區來加載你的庫,而不用調用庫中的任何函數。

另請注意,您可以手動編輯命令或使用類似卓越的Ribbon Workbench之類的工具。

+0

謝謝,我以前見過這個,但我的ribon XML非常龐大,我擔心手動編輯它。我想知道是否有其他方式來做到這一點。看起來不像。 –

+0

您可以使用Ribbon Workbench來添加庫,您不必手動編輯。請注意,如果工作臺不允許您選擇庫,因爲它不在下載的解決方案中,您仍然可以手動輸入它,只需確保包含$ webresource:前綴。 – Polshgiant

+0

@Polshgiant 2016 beta版刪除了必須將適用的JS文件添加到功能區解決方案的要求。 ;) – Daryl