2012-01-20 3 views
1

javascript를 사용하여 CRM 2011 양식의 시스템 리본 = AddNew를 조건부로 비활성화하려는 경우 즉, statusCode가 X 또는 Y이면 리본을 비활성화합니다. 어떻게해야합니까?CRM 2011에서 시스템 리본 해제

리본의 클래스 이름을 비활성으로 변경하기 위해 리본의 ID를 얻으려고했지만 리본이 비동기 적으로로드되기 때문에 Null을 얻었습니다!

답변

3

가 안와르의 대답에 확장하려면이 링크입니다 따르십시오 것이지만, 만약 그렇게된다면 없을 것 리본 DOM을 해킹 할 필요가 있습니다. 아래는 귀하가 취할 수있는 몇 가지 단계입니다.

1) Create a solution with the Application Ribbon included.

2) SDK에 응용 프로그램 리본의 샘플 리본을 찾거나 또는 솔루션이 SDK에 포함 된 사용하여 직접 구축 할 수 있습니다.

\ SDK \ 리소스 \ exportedribbonxml

\ SDK \에 SampleCode \ CS \ 클라이언트 \ 리본 \ exportribbonxml \ exportedribbonxml

3) 응용 프로그램 리본 템플릿에서 찾기 제어 당신은이 경우 엔 엔티티 서브 그리드의 AddNew 버튼에 관심이 있다고 생각합니다. 이 컨트롤의 용도를 CustomAction에 변경하고 CustomAction의 위치를 ​​용도 변경하려는 컨트롤과 같은 이름으로 만듭니다.

<CustomAction Id="YourOrg.SubGrid.{!EntityLogicalName}.AddNewStandard" 
    Location="Mscrm.SubGrid.{!EntityLogicalName}.AddNewStandard"> 
    <CommandUIDefinition> 
    <Button Id="Mscrm.SubGrid.{!EntityLogicalName}.AddNewStandard" 
     Command="Mscrm.AddNewRecordFromSubGridStandard" Sequence="20" 
     LabelText="$Resources(EntityDisplayName):Ribbon.SubGrid.AddNew" 
     Alt="$Resources(EntityDisplayName):Ribbon.SubGrid.AddNew" 
     Image16by16="/_imgs/ribbon/NewRecord_16.png" 
     Image32by32="/_imgs/ribbon/newrecord32.png" TemplateAlias="o1" 
     ToolTipTitle="$Resources(EntityDisplayName):Mscrm_SubGrid_EntityLogicalName_MainTab_Management_AddNewStandard_ToolTipTitle" 
     ToolTipDescription="$Resources(EntityDisplayName):Mscrm_SubGrid_EntityLogicalName_MainTab_Management_AddNewStandard_ToolTipDescription" /> 
    </CommandUIDefinition> 
</CustomAction> 

4) 응용 프로그램 리본 템플릿에이 버튼의 명령의 정의를 찾아 새로운 CommandDefinition의 기초로 정확한 정의를 사용하여,이 경우 (사용자 정의 규칙에 새로운 추가 EnableRule). 안와르의 대답이 들어 오면 여기

<CommandDefinition Id="Mscrm.AddNewRecordFromSubGridStandard"> 
    <EnableRules> 
    <EnableRule Id="Mscrm.AppendToPrimary" /> 
    <EnableRule Id="Mscrm.EntityFormIsEnabled" /> 
    <EnableRule Id="YourOrg.DisableNewStuff" /> <!--your custom rule--> 
    </EnableRules> 
    <DisplayRules> 
    <DisplayRule Id="Mscrm.ShowForOneToManyGrids" /> 
    <DisplayRule Id="Mscrm.AppendToPrimary" /> 
    <DisplayRule Id="Mscrm.CreateSelectedEntityPermission" /> 
    <DisplayRule Id="Mscrm.AppendSelected" /> 
    <DisplayRule Id="Mscrm.HideAddNewForChildEntities" /> 
    </DisplayRules> 
    <Actions> 
    <JavaScriptFunction FunctionName="Mscrm.GridRibbonActions.addNewFromSubGridStandard" 
      Library="/_static/_common/scripts/RibbonActions.js"> 
     <CrmParameter Value="SelectedEntityTypeCode" /> 
     <CrmParameter Value="PrimaryEntityTypeCode" /> 
     <CrmParameter Value="FirstPrimaryItemId" /> 
     <CrmParameter Value="PrimaryControl" /> 
    </JavaScriptFunction> 
    </Actions> 
</CommandDefinition> 

5)이다 : 모두 OrRuleValueRule를 사용하여 개체의 statuscode의 확인하기 위해 EnableRule을 정의합니다. 연결된 데모는 새 리본 버튼과 관련이 있지만 용도 변경된 리본 컨트롤에도 동일한 규칙이 적용됩니다.

완료되면 리본을 모두 설정해야합니다. 내가 얼마나 익숙한 지 잘 모르겠다. RibbonXml, 나는 또한 꽤 많은 도움이되는 Microsoft has some comprehensive walkthroughs을 언급 할 것이다. 당신은 요소 범위의 ID를 얻을 수 있습니다

var statusVal = Xrm.Page.getAttribute("statuscode").getValue(); 
    if (statusVal==4 || statusVal==6) { 
    //Disable delete button 
    var x =top.document.getElementById("invoice|NoRelationship|Form|Mscrm.Form.invoice.Delete-Medium"); 
    x.style.display='none'; 

, 당신은에서 숨길 :

+0

대단히 고맙습니다 :-) – user1160771

0

이 난 상태 코드 형태의 온로드에 따라, 송장 양식에서 삭제 버튼을 숨기는 방법입니다 페이지의 출처.

+0

'top.document.querySelector ("li [title * = '버튼 이름'] ')' – KingRider

관련 문제