在C#中设置和更改crm的OptionSetValue

时间:2015-03-12 08:45:47

标签: c#-4.0 asp.net-mvc-5 dynamics-crm-2011

我正在使用dynamic-crm处理mvc-5。在crm中,我有一个带状态代码的optionsetValue,其值为(publish,deactivate,draft)。现在我的第一个问题是如何在我的C#代码中设置这些值,默认情况下它应该是草稿。第二个是如何更改按钮单击时的状态代码值(例如,当我单击“发布”按钮时,状态应该更改为从草稿发布)。 下面是我在模型中的代码

[Microsoft.Xrm.Sdk.AttributeLogicalNameAttribute("statuscode")]
public Microsoft.Xrm.Sdk.OptionSetValue statuscode
{
    get
    {
        return this.GetAttributeValue<Microsoft.Xrm.Sdk.OptionSetValue>("statuscode");
    }
    set
    {

        this.SetAttributeValue("statuscode", value);

    }
}

[DisplayName("Status")]
[Display(Name = "Status")]
public string Status
{
    get
    {
        if(statuscode == null)
        {
            OptionSetValue setValue = new OptionSetValue();
            setValue.Value = 1;
            return Status = "Draft";          
        }

        return Status = statuscode.Value.ToString() == "1" ? "Publish" : "Draft";
    }
    set
    {

    }
}

提前致谢!!

1 个答案:

答案 0 :(得分:1)

Dynamics CRM创建新记录时,我们是否指定。已设置StateCodeStatusCode的默认值。

因此,我们必须明确设置Status(statecode)Status Reason(statuscode)。 以下是我在代码中使用的函数:

public static void SetStatus(string EntityName, Guid Id, int StateCode, int StatusCode)
    {
        try
        {
            if (Service == null)
                throw GRID.CRM.ExceptionHandler.ExceptionUtil.GetException("Connection with CRM is Lost", typeof(Common), "SetStatus");
            SetStateRequest StateRequest = new SetStateRequest();
            StateRequest.EntityMoniker = new EntityReference(EntityName, Id);
            StateRequest.State = new OptionSetValue(StateCode);
            StateRequest.Status = new OptionSetValue(StatusCode);
            SetStateResponse StateResponse = (SetStateResponse)Service.Execute(StateRequest);
        }
        catch (Exception ex)
        {
            throw GRID.CRM.ExceptionHandler.ExceptionUtil.GetException(ex, typeof(Common), "SetStatus");
        }
    }