如何在不使用InvalidPluginExecutionException的情况下通过插件向用户发送警报?

时间:2013-05-16 17:19:21

标签: c# plugins dynamics-crm-2011 crm

我目前正在使用InvalidPluginExecutionException向用户发送消息,但事实证明该消息为英文"Business Process Error",超出该消息时,按钮"download log file"出现错误框。这不是错误,因为用户正在尝试复制记录,如代码中所示。还有其他方法,而不必使用InvalidPluginExecutionException来显示警报吗?

QueryExpression query1 = new QueryExpression();
query1.ColumnSet = new ColumnSet(true);
query1.EntityName = "new_appraisers";

EntityCollection ec = service.RetrieveMultiple(query1);

if (ec.Entities.Count <= 0)
{
    log.Tb_Log_Create("Appraiser created");
}
else
{
    foreach (Entity app in ec.Entities)
    {
        if (app["fcg_appraiser"].ToString() == name)
        {
            log.Tb_Log_Create("appraiser allready exist");

            throw new InvalidPluginExecutionException("The name allready exists");
        }

        if (app["new_login"].ToString() == login)
        {
            log.Tb_Log_Create("appraiser allready exist");

            throw new InvalidPluginExecutionException("The login allready exists.");
        }
    } 
}

2 个答案:

答案 0 :(得分:8)

从插件向用户显示消息框的唯一方法是使用验证阶段的异常。您可以使用javascript,然后在表单的On_Save事件上执行简单的OData查询,并显示包含您想要的任何信息的警告框,并取消保存表单。

这将允许您显示您想要的任何自定义消息,并保持插件不会触发并显示下载文件对话框。

答案 1 :(得分:1)

我可能会迟到一点,然而,在最近的CRM版本中,有几种可能性可以达到你想要的效果。更好的是:

  1. 商业规则
  2. 使用JS验证并通知用户使用
  3. 我希望微软不会读这个,但是......

    您还可以使用同步插件,并对业务流程错误对话框弹出感到满意。我刚刚发现这个Dialog在某种程度上是可以破解的。只需在Exeptions Message中返回HTML,如下所示:

    throw new InvalidPluginExecutionException(
    @"<img height='16px' src='http://emojione.com/wp-content/uploads/assets/emojis/1f644.svg'> <strong>Oh snap!</strong>
    
    It seems the record can not be saved in its current state.    
    
    ");
    

    导致某事。像这样:

    enter image description here