考虑以下插件...为简洁省略了基础设施构建。
protected override void Execute()
{
//Not all Targets are of entity so let's check first
if (Context.InputParameters.Contains("Target") && Context.InputParameters["Target"] is Entity)
{
if (Message == EMessage.Create)
{
throw new InvalidPluginExecutionException("InCreate");
}
else if (Message == EMessage.Update)
{
//I don't think this is right way to do this.
if (PreEntityImage.GetAttributeValue<OptionSetValue>("componentstate").Value == new OptionSetValue(0).Value)
{
throw new InvalidPluginExecutionException("UpdatePublishedMessage");
}
else
{
throw new InvalidPluginExecutionException("UpdateMessageOnly");
}
}
}
}
此插件已注册为Create&amp;在webresource上更新消息。
因此,当创建webresource时,我的插件将触发并分支到Create message部分。
当更新网络资源时,我将分支到更新部分 AND ,直接进入componentstate ==已发布部分!! ??
我认为在我选择发布或发布之前,任何更改都会被标记为未发布?
可能相关的其他一些细节:
我正在使用的网络资源是一个js文件。也许这不是其他webresource类型的行为,如png?
我在更新网络资源时采取的步骤是:
开放测试解决方案 打开webresource js文件 用文本编辑器打开 做编辑 单击OK ---然后插件触发。
思想,提示,edjumakation等非常感谢
谢谢
答案 0 :(得分:0)
保存并不发布后,Crm会在webresources表中创建另一条记录。因此,对于未发布的资源,您有两个条目:一个记录的componentstate = 0,另一个记录的componentstate = 1.
我猜插件适用于0值的插件。您可以尝试使用查询表来检查是否存在值为1以确定是否已发布。或者查看传递给插件的任何内容。