04.02.2009, 12:34 | #32 |
Участник
|
Артем, спасибо за совет.
А реализовал след. образом: X++: XmlDocument configDoc; public AccountRetrieveMultipleHandler(string unsecureConfig, string secureConfig) { configDoc = new XmlDocument(); configDoc.LoadXml(unsecureConfig); } #region IPlugin Members public void Execute(IPluginExecutionContext context) { if (context.Depth > 1) return; XmlDocument inDoc = new XmlDocument(); inDoc.LoadXml((string)context.InputParameters.Properties["FetchXml"]); string enityName = inDoc.SelectSingleNode("fetch/entity/@name").InnerText; if (enityName == "account") { ICrmService serv = context.CreateCrmService(true); // Create a QueryExpression. QueryExpression qe = new QueryExpression(); qe.EntityName = "role"; qe.ColumnSet = new AllColumns(); // Set up the join between the role entity // and the intersect table systemuserroles. LinkEntity le = new LinkEntity(); le.LinkFromEntityName = "role"; le.LinkFromAttributeName = "roleid"; le.LinkToEntityName = "systemuserroles"; le.LinkToAttributeName = "roleid"; // Set up the join between the intersect table // systemuserroles and the systemuser entity. LinkEntity le2 = new LinkEntity(); le2.LinkFromEntityName = "systemuserroles"; le2.LinkFromAttributeName = "systemuserid"; le2.LinkToEntityName = "systemuser"; le2.LinkToAttributeName = "systemuserid"; // The condition is to find the user ID. //Microsoft.Crm.Sdk.Query.c ConditionExpression ce = new ConditionExpression(); ce.AttributeName = "systemuserid"; ce.Operator = ConditionOperator.Equal; ce.Values = new object[] { context.UserId }; FilterExpression fe = new FilterExpression(); fe.AddCondition(ce); le2.LinkCriteria = fe; le.LinkEntities.Add(le2); qe.LinkEntities.Add(le); // Execute the query. BusinessEntityCollection bec = serv.RetrieveMultiple(qe); string rolename = configDoc.SelectSingleNode("PluginConfig/Entity/Filter/condition/@securityrole").InnerText;//"Системный администратор"; bool roleFound = false; if (bec.BusinessEntities.Count > 0) { for (int i = 0; i < bec.BusinessEntities.Count; i++) { if (rolename == ((role)bec.BusinessEntities[i]).name) roleFound = true; } } if (!roleFound) { XmlElement conditionElem; XmlAttribute conditionAttr; conditionElem = inDoc.CreateElement("condition"); conditionAttr = inDoc.CreateAttribute("attribute"); conditionAttr.InnerText = configDoc.SelectSingleNode("PluginConfig/Entity/Filter/condition/@attribute").InnerText;//"customertypecode"; conditionElem.Attributes.Append(conditionAttr); conditionAttr = inDoc.CreateAttribute("operator"); conditionAttr.InnerText = configDoc.SelectSingleNode("PluginConfig/Entity/Filter/condition/@operator").InnerText;//"ne"; conditionElem.Attributes.Append(conditionAttr); conditionAttr = inDoc.CreateAttribute("value"); conditionAttr.InnerText = configDoc.SelectSingleNode("PluginConfig/Entity/Filter/condition/@value").InnerText;//"3"; conditionElem.Attributes.Append(conditionAttr); inDoc.SelectSingleNode("fetch/entity/filter").AppendChild(conditionElem); context.InputParameters.Properties["FetchXml"] = inDoc.OuterXml; } } } #endregion |
|