1: class MessageFilter
2: { 3: CrmService _svc;
4: Dictionary<string, Guid> _msgByName;
5: Dictionary<Guid, string> _msgById;
6:
7: public MessageFilter(CrmService Service)
8: { 9: _svc = Service;
10: _msgByName = new Dictionary<string, Guid>();
11: _msgById = new Dictionary<Guid, string>();
12: QueryExpression qe = new QueryBLOCKED EXPRESSION;
13: qe.EntityName = EntityName.sdkmessage.ToString();
14: qe.ColumnSet = new AllColumns();
15: BusinessEntityCollection bec = _svc.RetrieveMultiple(qe);
16: foreach (sdkmessage msg in bec.BusinessEntities)
17: { 18: _msgByName.Add(msg.name, msg.sdkmessageid.Value);
19: _msgById.Add(msg.sdkmessageid.Value, msg.name);
20: }
21: }
22: public FilterDetails[] GetAllFiltersForChildPipeline(FilterDetails FilterTemplate)
23: { 24: FilterDetails[] allFilters = GetAllFilters(FilterTemplate);
25: Queue<FilterDetails> q = new Queue<FilterDetails>();
26: foreach (FilterDetails fd in allFilters)
27: { 28: if (fd.MessageName == "Create" || fd.MessageName == "Delete" || fd.MessageName == "Update" || fd.MessageName == "RetrieveExchangeRate") // Hard-coded restriction on child pipeline messages
29: q.Enqueue(fd);
30: }
31: FilterDetails[] ret = new FilterDetails[q.Count];
32: q.CopyTo(ret, 0);
33: return ret;
34: }
35: public FilterDetails[] GetAllFilters(FilterDetails FilterTemplate)
36: { 37: FilterDetails[] ret = new FilterDetails[0];
38: QueryExpression qe = new QueryBLOCKED EXPRESSION;
39: qe.EntityName = EntityName.sdkmessagefilter.ToString();
40: qe.ColumnSet = new AllColumns();
41: Queue<ConditionExpression> q = new Queue<ConditionExpression>();
42: q.Enqueue(SimpleCondition("iscustomprocessingstepallowed", true)); 43: if (FilterTemplate.SupportedDeployment != FilterDetails.DefaultInt)
44: { 45: q.Enqueue(SimpleCondition("availability", FilterTemplate.SupportedDeployment)); 46: }
47: if (!String.IsNullOrEmpty(FilterTemplate.PrimaryEntityName))
48: { 49: q.Enqueue(SimpleCondition("primaryobjecttypecode", FilterTemplate.PrimaryEntityName)); 50: }
51: if (!String.IsNullOrEmpty(FilterTemplate.SecondaryEntityName))
52: { 53: q.Enqueue(SimpleCondition("secondaryobjecttypecode", FilterTemplate.SecondaryEntityName)); 54: }
55: if (!String.IsNullOrEmpty(FilterTemplate.MessageName))
56: { 57: if (_msgByName.ContainsKey(FilterTemplate.MessageName))
58: { 59: q.Enqueue(SimpleCondition("sdkmessageid", _msgByName[FilterTemplate.MessageName])); 60: }
61: }
62: qe.Criteria = new FilterBLOCKED EXPRESSION;
63: qe.Criteria.Conditions = new ConditionExpression[q.Count];
64: q.CopyTo(qe.Criteria.Conditions, 0);
65: LinkEntity le = new LinkEntity();
66: le.LinkToAttributeName = "sdkmessageid";
67: le.LinkToEntityName = "sdkmessage";
68: le.LinkFromAttributeName = "sdkmessageid";
69: le.LinkFromEntityName = "sdkmessagefilter";
70: le.LinkCriteria = new FilterBLOCKED EXPRESSION;
71: le.LinkCriteria.Conditions = new ConditionExpression[] { SimpleCondition("isprivate", false) }; 72: qe.LinkEntities = new LinkEntity[] { le }; 73: BusinessEntityCollection bec = _svc.RetrieveMultiple(qe);
74: ret = new FilterDetails[bec.BusinessEntities.Length];
75: for (int i = 0; i < bec.BusinessEntities.Length; i++ )
76: { 77: sdkmessagefilter filt = (sdkmessagefilter)bec.BusinessEntities[i];
78: FilterDetails fd = new FilterDetails();
79: fd.MessageName = _msgById[filt.sdkmessageid.Value];
80: if (filt.primaryobjecttypecode != null && !filt.primaryobjecttypecode.IsNull)
81: fd.PrimaryEntityName = filt.primaryobjecttypecode.Value;
82: if (filt.secondaryobjecttypecode != null && !filt.secondaryobjecttypecode.IsNull)
83: fd.SecondaryEntityName = filt.secondaryobjecttypecode.Value;
84: fd.SupportedDeployment = filt.availability.Value;
85: ret[i] = fd;
86: }
87: return ret;
88: }
89: private ConditionExpression SimpleCondition(string Name, object Value)
90: { 91: ConditionExpression ret = new ConditionBLOCKED EXPRESSION;
92: ret.AttributeName = Name;
93: ret.Operator = ConditionOperator.Equal;
94: ret.Values = new object[] { Value }; 95: return ret;
96: }
97: }
98:
99: class FilterDetails
100: { 101: public const int DefaultInt = 999;
102: public string MessageName;
103: public string PrimaryEntityName;
104: public string SecondaryEntityName;
105: public int SupportedDeployment = DefaultInt;
106: }