2012-01-27 90 views
2

我创建了应该只能在Mobile Express(ME)中查看的自定义活动实体。我可以调整CRM Online中所有视图的查询,以排除与我的自定义实体类型相同的实体,但这是一项乏味的工作。为Microsoft Dynamics CRM 2011移动快车中的字段选择值

是否有另一种方法可以在更高级别上设置排除该自定义实体的全部内容活动 views?

回答

0

如果我理解正确的话你的问题,要排除自定义activity,包括您在Activity视图的所有其他activity解决的唯一途径是改变观点基本fetchXml,手动或通过SavedQuery实体循环(见下文),以确保视图不参考activity。没有任何标志可以阻止您的自定义activity显示在任何特定的activity视图中;你需要修改所有的意见,以反映(除非,当然,您的自定义entity根本不是activity)。

//using System.Xml.Linq; 
//your list of activity entities excluding the special custom activity 
string activityList = "<condition attribute=\"activitytypecode\" operator=\"in\"><value>4401</value><value>4204</value><value>10058</value></condition>"; 
XElement newFilter = XElement.Parse(activityList); 

var sq = from q in xsc.SavedQuerySet 
     where q.ReturnedTypeCode == ActivityPointer.EntityLogicalName 
     select new 
     { 
      fetchXml = q.FetchXml 
      , queryId = q.SavedQueryId 
      , queryName = q.Name 
     }; 

foreach (var q in sq) 
{ 
    //do your xml parsing 
    XElement xml = XElement.Parse(q.fetchXml); 

    if (!xml.Elements("entity") 
      .Elements("filter").Where(x => x.Attributes("type").Single().Value == "and").Any()) 
    { 
     xml.Elements("entity").Single().Add(XElement.Parse("<filter type=\"and\"></filter>"));  
    } 

    //some level of validation 
    if (!xml.Elements("entity") 
      .Elements("filter") 
      .Where(x => x.Attributes("type").Single().Value == "and") 
      .Single().Elements("condition") 
      .Where(x => x.Attributes("attribute") 
      .Single().Value == "activitytypecode") 
      .Where(x => x.Attributes("operator") 
      .Single().Value == "in").Any()) 
    { 
     xml.Elements("entity") 
      .Elements("filter") 
      .Where(x => x.Attributes("type") 
      .Single().Value == "and") 
      .Single().Add(newFilter); 

     SavedQuery query = new SavedQuery(); 
     query.SavedQueryId = q.queryId; 
     query.FetchXml = xml.ToString(); 
     service.Update(query); 
    } 
} 

您需要在此之后发布以查看您的更改条。

相关问题