Вот некоторый код, который я использую, чтобы помочь показать все параметры, которые получает плагин при регистрации для данного сообщения и целевого объекта, используйте его, чтобы узнать, какие ключи присутствуют .
Если вы менее склонны копаться в документации, чтобы увидеть, что «должно» быть, чем просто попытаться увидеть, что на самом деле происходит, просто вставьте это в свой плагин, зарегистрируйте шаг, который вы намереваетесь использовать, и он покажет вам какие именно параметры были предоставлены для этого шага.
var propertiesList = String.Join("\n",
context.InputParameters.Select((p,i)=>ParamSelector(p,i,"Input")).Union(
context.InputParameters.Select((p,i)=>ParamSelector(p,i,"Output"))));
//send the list to the tracing service.
context.Trace("Listing Inputput and Output Parameters for the plugin.\n" + propertiesList);
// throw an exception to see the trace values pop-up (in a synchronous plugin).
throw new InvalidPluginExecutionException("Check the trace for a listing of parameters.");
поддержка делегатов для форматирования:
private string ParamSelector(KeyValuePair<string, object> p, int index, string inOut)
{
return String.Format("{2} \tKey:'{0}'\tValue:{1}\n{3}", p.Key, p.Value, inOut, EntityToTraceStrings(p.Value as Entity));
}
private string EntityToTraceStrings(Entity entity)
{
return entity == null ? String.Empty : String.Concat(
String.Format("- Entity: {0} Id: {1}\n\t", entity.LogicalName, entity.Id),
String.Join("\n\t", entity.FormattedValues.Select((p, j) => String.Format("Attribute: {0} \t Value: {1}", p.Key, p.Value))));
}