Цитата:
Сообщение от
a33ik
Скорее всего я прав. Полный код плагина предоставьте, пожалуйста.
X++:
using System;
using System.Collections.Generic;
using System.Linq;
using System.Text;
using Microsoft.Xrm.Sdk;
using Bum.Survey.CRM.Plugin.BaseLib;
using Microsoft.Xrm.Sdk.Query;
using Microsoft.Xrm.Sdk.Messages;
namespace Bum.Survey.CRM.Plugin
{
public class SurveyTokenAIU : IPlugin
{
public void Execute(IServiceProvider serviceProvider)
{
var process = new SurveyTokenAIUProcess(serviceProvider);
process.LoadEntity();
if (!process.ValidateEntityName("bf_surveytoken")) return;
if (!process.ValidateMessage(MessageName.Create, MessageName.Update, MessageName.Delete)) return;
process.Run();
}
}
class SurveyTokenAIUProcess : bf_PluginProcess
{
public override void Execute()
{
if (TargetEntity.Contains("regardingobjectid"))
{
Entity record = new Entity();
Entity EntityName = (Entity)executionContext.InputParameters["Target"];
if (EntityName.Attributes.Contains("subject"))
EntityName.Attributes["subject"] = EntityName.GetAttributeValue<EntityReference>("regardingobjectid").Name;
if (executionContext.MessageName == MessageName.Update)
{
crmService.Update(EntityName);
}
if (executionContext.MessageName == MessageName.Update)
{
record = crmService.Retrieve(TargetEntity.LogicalName, TargetEntity.Id, new ColumnSet("subject", "regardingobjectid"));
}
else
{
record = TargetEntity;
}
string uniq = "";
int uniqLength = 1024;
if (record.Contains("regardingobjectid"))
{
uniq = record.GetAttributeValue<EntityReference>("regardingobjectid").Name;
RetrieveEntityRequest rerq = new RetrieveEntityRequest
{
LogicalName = record.GetAttributeValue<EntityReference>("regardingobjectid").LogicalName,
RetrieveAsIfPublished = true
};
RetrieveEntityResponse rers = (RetrieveEntityResponse)crmService.Execute(rerq);
uniq = rers.EntityMetadata.DisplayName.UserLocalizedLabel.Label + " " + "[" + uniq + "]";
}
if (!record.Contains("subject") || record["subject"].ToString() != uniq)
{
uniq = string.Format("{0}", uniq.Length > uniqLength ? (uniq.Substring(0, uniqLength - 3) + "...") : uniq);
record["subject"] = uniq;
if (executionContext.MessageName == MessageName.Update)
{
crmService.Update(record);
}
}
}
if (executionContext.MessageName == MessageName.Create)
{
QueryExpression surveyz = new QueryExpression()
{
EntityName = "bf_survey",
ColumnSet = new ColumnSet(true)
};
surveyz.Criteria.AddCondition("bf_surveyid", ConditionOperator.Equal, TargetEntity.GetAttributeValue<EntityReference>("bf_surveytoken_survey").Id);
List<Entity> surveylists = crmService.RetrieveMultiple(surveyz).Entities.ToList();
foreach (var surveylist in surveylists)
{
QueryExpression token = new QueryExpression()
{
EntityName = "bf_surveytoken",
ColumnSet = new ColumnSet(true)
};
token.Criteria.AddCondition("bf_surveytoken_survey", ConditionOperator.Equal, surveylist.Id);
List<Entity> surveyTokens = crmService.RetrieveMultiple(token).Entities.ToList();
QueryExpression tokenstart = new QueryExpression()
{
EntityName = "bf_surveytoken",
ColumnSet = new ColumnSet(true)
};
tokenstart.Criteria.AddCondition("bf_surveytoken_survey", ConditionOperator.Equal, surveylist.Id);
tokenstart.Criteria.AddCondition("bf_surveytoken_sts", ConditionOperator.Equal, 100000001);
List<Entity> surveyStartTokens = crmService.RetrieveMultiple(tokenstart).Entities.ToList();
QueryExpression tokenfinish = new QueryExpression()
{
EntityName = "bf_surveytoken",
ColumnSet = new ColumnSet(true)
};
tokenfinish.Criteria.AddCondition("bf_surveytoken_survey", ConditionOperator.Equal, surveylist.Id);
tokenfinish.Criteria.AddCondition("bf_surveytoken_sts", ConditionOperator.Equal, 100000002);
List<Entity> surveyFinishTokens = crmService.RetrieveMultiple(tokenfinish).Entities.ToList();
surveylist["bf_survey_tkfin"] = surveyStartTokens.Count;
surveylist["bf_survey_tkstart"] = surveyStartTokens.Count;
surveylist["bf_survey_tkcnt"] = surveyTokens.Count + 1;
crmService.Update(surveylist);
}
}
if (executionContext.MessageName == MessageName.Delete)
{
QueryExpression surveyz = new QueryExpression()
{
EntityName = "bf_survey",
ColumnSet = new ColumnSet(true)
};
surveyz.Criteria.AddCondition("bf_surveyid", ConditionOperator.Equal, TargetEntity.GetAttributeValue<EntityReference>("bf_surveytoken_survey").Id);
List<Entity> surveylists = crmService.RetrieveMultiple(surveyz).Entities.ToList();
foreach (var surveylist in surveylists)
{
QueryExpression token = new QueryExpression()
{
EntityName = "bf_surveytoken",
ColumnSet = new ColumnSet(true)
};
token.Criteria.AddCondition("bf_surveytoken_survey", ConditionOperator.Equal, surveylist.Id);
List<Entity> surveyTokens = crmService.RetrieveMultiple(token).Entities.ToList();
surveylist["bf_survey_tkcnt"] = surveyTokens.Count - 1;
crmService.Update(surveylist);
}
}
}
public SurveyTokenAIUProcess(IServiceProvider serviceProvider)
: base(serviceProvider)
{
}
}
}