2016-08-18 148 views
0

我有一個方法,允許我從OptionSetValue字段中篩選出某些選項。在業務流程流程OptionSetValue上的過濾選項步驟

它在表單字段上工作正常,但是當該字段位於標題中時,對於業務流程流,它「起作用」,通過調試,我看到清除並重新添加的選項(僅限於那些這應該有),但一旦形式呈現,所有的選項都可見...

這裏的方法:

FilterOptionSetValues: function (fieldName, visibleOptions) { 

      var ctrl = Xrm.Page.getControl(fieldName); 
      var allOptions = ctrl.getOptions(); 

      //clear current options 
      ctrl.clearOptions(); 

      //loop through all options of optionset and if one is found in config element, add it. 
      for (var x = 0; x <= allOptions.length - 1; x++) { 
       if (visibleOptions.availableOptions.indexOf(parseInt(allOptions[x].value)) > -1) { 
        ctrl.addOption(allOptions[x]); 
       } 
      } 
} 

這裏就是我把它叫做:

FilterOptionSetValues('header_process_new_my_optionset_field', { stage: 1, availableOptions: [300000002, 300000003, 300000004] }); 

該代碼在表單加載事件和另一個字段(salesstage)的OnChange事件中調用。

有什麼我失蹤了嗎?好像MS自己的JavaScript是解開我在這裏的工作...

編輯:當我把一個OnChange監聽器header_process_new_my_optionset_field,當我改變在頭業務流程該字段的值沒有任何反應,而是一種onChange監聽器new_my_optionset_field將由表單或標題業務流程流上該字段的更改觸發。

但是,僅在字段new_my_optionset_field上運行上述邏輯,不會爲業務流程中的相同字段執行過濾。

+0

您是否爲該屬性註冊了OnChange處理程序,並重新添加選項? clearOptions()調用onChange事件處理程序。 – dynamicallyCRM

+0

@dynamicallyCRM我編輯了我的問題並指定代碼被調用的位置。 –

+0

嘗試在超時函數中包裝調用並在5秒左右後運行它以排除CRM腳本在表單加載後異步更新它的情況? – dynamicallyCRM

回答

0

通過執行所有窗體控件的名稱(Xrm.Page.ui.getControls().getAll())的console.log,我發現在該過程的每個階段都有該屬性的控件實例,接着是1,2,3等等。業務流程的所有階段都有相同的字段。

所以我改變了上面的代碼爲:

var control = Xrm.Page.getControl(fieldName); 
var allOptions = control.getAttribute().getOptions(); 

//clear current options 
control.clearOptions(); 

//below, same as above... 

並把它稱爲對所有這樣:

FilterOptionSetValues('header_process_new_my_optionset_field', { stage: 1, availableOptions: [300000002, 300000003, 300000004] }); 
FilterOptionSetValues('header_process_new_my_optionset_field1', { stage: 1, availableOptions: [300000002, 300000003, 300000004] }); 
FilterOptionSetValues('header_process_new_my_optionset_field2', { stage: 1, availableOptions: [300000002, 300000003, 300000004] }); 
//and so on... 

它是在第一個工作日,但只能過濾在第一階段的選項流量,這是不活躍的階段,當測試,所以它給人的印象是不工作...

0

每次你改變當前的BPF階段(未選中,但實際上去t他下一個階段)它迫使CRM保存。這可能會刷新您的選項集。添加一個Xrm.Page.data.process.addOnStageChange事件處理程序,然後在其中運行你的過濾器。