0

我试图使用以下代码将合同状态从 Active 设置为 Draft:

SetStateRequest setState = new SetStateRequest();
setState.EntityMoniker = new EntityReference();
setState.EntityMoniker.Id = contractId;
setState.EntityMoniker.Name = "Contract";
setState.EntityMoniker.LogicalName = "contract";
setState.State = new OptionSetValue(0);
setState.Status = new OptionSetValue(1);
SetStateResponse setStateResponse = (SetStateResponse)service.Execute(setState);

我的目标是更新一个活跃的合同,但要做到这一点,我需要让它处于草稿状态以更新它,然后在更新时将其放回活跃状态。如果有人能在这里帮助我,我将不胜感激。

插件现在正在触发以下错误:“目标状态无效。目标状态可能不存在或系统不允许从当前状态更改为目标状态。请查看有关此状态更改请求的文档”

4

1 回答 1

0

编辑:似乎您必须先为合同开具发票,然后才能取消它-也许无法将合同状态设置为从某些状态草稿?请参阅此处的 MSDN 示例:

http://msdn.microsoft.com/en-us/library/gg328503.aspx

如果您只关心状态(而不是状态),您可以将“-1”作为选项集值传递,在执行请求时将被忽略。为了停用产品记录,我做了一些非常相似的事情。

/// <summary>
/// Deactivate the specified entity.
/// </summary>
/// <param name="entityRef">Entity to deactivate.</param>
/// <param name="service">Organisation service.</param>
/// <param name="status">Optional status code.</param>
private static void DeactivateEntity(EntityReference entityRef, IOrganizationService service, int status = -1)
{
    service.Execute(new SetStateRequest
        {
            EntityMoniker = entityRef,
            State = new OptionSetValue(1),
            Status = new OptionSetValue(status)
        });
}
于 2013-01-23T16:16:16.703 回答