如何在Notes实体字段上应用REQUIRED FIELD验证?

时间:2016-10-14 09:24:09

标签: javascript c# asp.net dynamics-crm dynamics-crm-online

我们试图通过应用表单验证来强制notes (with file upload)字段。

我们尝试使用的选项是client side javascripting。到目前为止,这么好......

问题是在“事件处理程序”选项卡下:

Event Handlers tab

Notes实体未在控制项目中列出

Notes entity is not listed amongst the Control items

因此很明显,Notes实体没有客户端事件。

如何在Notes实体字段上应用必需的字段验证?

2 个答案:

答案 0 :(得分:2)

无法在父记录中执行您要执行的验证。它必须在注释表单中进行验证,但我们已经讨论过注释实体不能完全自定义,我们还必须牢记社交窗格及其特殊性。

我认为验证这一点的最佳方法是在注释的创建事件(预验证阶段)中创建一个插件,以检查正在创建的注释是否已完成所需的字段。

快速示例(我尚未测试过):

public class ValidateNote : IPlugin
{
    public void Execute(IServiceProvider serviceProvider)
    {
        IPluginExecutionContext context = (IPluginExecutionContext)serviceProvider.GetService(typeof(IPluginExecutionContext));
        IOrganizationServiceFactory serviceFactory = (IOrganizationServiceFactory)serviceProvider.GetService(typeof(IOrganizationServiceFactory));
        IOrganizationService service = serviceFactory.CreateOrganizationService(context.UserId);

        if (context.InputParameters.Contains("Target") && context.InputParameters["Target"] is Entity) {

            Entity note = (Entity)context.InputParameters["Target"];

            // you can also use "subject" instead of "description"
            if (string.IsNullOrEmpty(note.GetAttributeValue<string>("description")) || string.IsNullOrEmpty(note.GetAttributeValue<string>("filename")))
            {
                throw new InvalidPluginExecutionException("Please add an attachment and description");
            }

        }

    }
}

答案 1 :(得分:1)

Notes关系是1:N关系。默认情况下,您可以关联至少零注释。

要应用Javascript验证,您需要有效的查找字段。由于您无法为备注创建字段,因此您可以使用插件来强制执行此验证。

插件逻辑:

        var pluginContext = localContext.PluginExecutionContext;
        if (!pluginContext.InputParameters.Contains("Target") ||
            !(pluginContext.InputParameters["Target"] is Entity)) return;

        var target = pluginContext["Target"] as Entity;

        var annotationQuery = new QueryExpression
        {
            EntityName = "annotation",
            ColumnSet = new ColumnSet(true),
            Criteria =
            {
                Conditions =
                {
                    new ConditionExpression("objectid", ConditionOperator.Equal, target.Id)
                }
            }
        };

        var response = localContext.OrganizationService.RetrieveMultiple(annotationQuery);
        if (!response.Entities.Any()) 
            throw new InvalidPluginExecutionException("No Notes were found for the entity");
         //Further checks against content...

如果插件的消息为Pre-ValidationPre-Operation并且用户必须将注释与实体关联

,则抛出异常会中断操作