Filtering lookup data in CRM 4 |
现在我们都知道当微软说“不支持”的时候,他们常常/有时不是真的,例如,在CRM3.0中颇受欢迎的过滤lookup字段的定制方法,一直到4.0之前工作的很好。但不是说这种方法在4.0里边就丢失了,其实我们可以用一个新的不支持的方式去让Filter lookup data在CRM4.0里同样工作。
例如,在一个Account的对象(记录)里,如果只想在Primary contact lookup中显示该account的contact时, 需要如下的customizations:
下边的脚本看起来和原来的几乎一样,除了一个很重要的修改:我们必须传递一段Fetch XML并且用服务器可以识别的参数。注意:如果这个参数不是服务器可识别的,就将会抛出一个Exception. 这里我们将Fetch XML传递给Search value parameter但却禁止了search 功能。
Form OnLoad Script |
var field = crmForm.all.primarycontactid; |
Field Properties |
上述的脚本是将以一段Fetch XML传递给Primary Contact作为Search Value Parameter来实现filter功能的。值得注意的是如果这个字段的Automatic Resolution功能被打开的话,用户在Lookup的TextBox中输入字符时,它会自动调用Web Service而忽略我们传递的Fetch XML.换句话说: 用户可以将这个字段的值设置为数据库中任意存在的Contact通过输入这个Contact的Name. 为了让我们上述的脚本正常工作不受打扰,关闭字段的Automatic Resolution就可以解决了。
Lookup Dialog |
<script runat="server"> protected override void OnLoad( EventArgs e ) void crmgrid_PreRender( object sender , EventArgs e ) // searchvalue needs to be removed as it's typically set to a wildcard '*' // Icing on a cake - ensure that user cannot create new contact outside of the account </script> |