gpt4 book ai didi

plugins - CRM 2011 插件 - 检查 OptionSet 是否不为空

转载 作者:行者123 更新时间:2023-12-02 22:09:28 24 4
gpt4 key购买 nike

我正在编写一个插件,我在其中检查字段的特定值、选项集是否等于特定值,如果是,则执行某些操作。

现在,在插件 C# 代码中,我如何检查 Option Set 字段是否不为空 - 即设置为默认值?

我所做的(显然,那是错误的)因为它从未通过 Null 检查语句。而且,如果我没有支票,则会收到此错误消息

错误:

Unexpected exception from plug-in (Execute): CRM.AppStateHandler.Plugins.PostApplicationCreate: System.NullReferenceException: Object reference not set to an instance of an object.

代码:

application applicationEntity = entity.ToEntity<new_application>();
if (new_applicationEntity.new_Applicationstatus != null)
{
var applicationStatus = applicationEntity.new_Applicationstatus.Value;
if (applicationStatus == CRMConstants.EntityApplication.Attributes.ApplicationStatusOptions.Applying)
{
//my logic
}
}

文件constants.cs有以下内容

class CRMConstants
{
public struct EntityApplication
{
public struct Attributes
{
public struct ApplicationStatusOptions
{
// More before this
public const int Applying = 100000006;
// More to come
}
}
}

最佳答案

我认为 SergeyS 可以解决您的问题,但我会添加一些其他(希望如此)有用的评论。

不要为您的选项集值自定义创建结构。使用 CrmSrvcUtil自动为您创建枚举。

我对必须检查 OptionSetValues 是否为空感到恼火,所以我使用这些扩展方法让我的生活更轻松:

/// <summary>
/// Returns the value of the OptionSetValue, or int.MinValue if it is null
/// </summary>
/// <param name="osv"></param>
/// <param name="value"></param>
/// <returns></returns>
public static int GetValueOrDefault(this OptionSetValue osv)
{
return GetValueOrDefault(osv, int.MinValue);
}

/// <summary>
/// Returns the value of the OptionSetValue, or int.MinValue if it is null
/// </summary>
/// <param name="osv"></param>
/// <param name="value"></param>
/// <returns></returns>
public static int GetValueOrDefault(this OptionSetValue osv, int defaultValue)
{
if (osv == null)
{
return defaultValue;
}
else
{
return osv.Value;
}
}

/// <summary>
/// Allows for Null safe Equals Comparison for more concise code. ie.
/// if(contact.GenderCode.NullSafeEquals(1))
/// vs.
/// if(contact.GenderCode != null && contact.gendercode.Value == 1)
/// </summary>
/// <param name="osv"></param>
/// <param name="value"></param>
/// <returns></returns>
public static bool NullSafeEquals(this OptionSetValue osv, int value)
{
if (osv == null)
{
return false;
}
else
{
return osv.Value == value;
}
}

/// <summary>
/// Allows for Null safe Equals Comparison for more concise code. ie.
/// if(contact.GenderCode.NullSafeEquals(new OptionSet(1)))
/// vs.
/// if(contact.GenderCode != null && contact.gendercode.Value == new OptionSet(1))
/// </summary>
/// <param name="osv"></param>
/// <param name="value"></param>
/// <returns></returns>
public static bool NullSafeEquals(this OptionSetValue osv, OptionSetValue value)
{
if (osv == null)
{
return osv == value;
}
else
{
return osv.Equals(value);
}
}

有两个方法,每个方法都有一个重载:

  • GetValueOrDefault - 这等同于 Nullable.GetValueOrDefault()。一个区别是我没有默认为 0,而是默认为 int.MinValue 以确保我不会意外匹配 0 选项集值。重载允许您根据需要指定默认值。

  • NullSafeEquals - 这是您在代码中使用的不必检查 null 的方法

application applicationEntity = entity.ToEntity<new_application>();
if (applicationEntity.new_Applicationstatus.NullSafeEquals(CRMConstants.EntityApplication.Attributes.ApplicationStatusOptions.Applying))
{
//my logic
}

关于plugins - CRM 2011 插件 - 检查 OptionSet 是否不为空,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/15571108/

24 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com