【问题标题】:Change Contract State From Active To Draft将合同状态从活动更改为草稿
【发布时间】:2013-01-23 15:00:13
【问题描述】:

我试图使用以下代码将合同状态从 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);

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

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

【问题讨论】:

    标签: dynamics-crm-2011 crm dynamics-crm-4 dynamics-crm-online


    【解决方案1】:

    编辑:您似乎必须先为合同开具发票,然后才能取消它 - 也许无法将合同状态设置为从某些状态草稿?请参阅此处的 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)
            });
    }
    

    【讨论】:

    • 嗨,Alec 感谢您的回复,但这样可以让我更新我的合同吗?此外,在您的代码中,状态为 1(合同上是发票),所以在这里您不能更新合同……您可以在停用时更新实体吗?
    • 您应该能够针对已停用的实体运行更新,是的。此代码是为产品编写的,其代码为 0 表示 Active,1 表示 Inactive,这与您正确说的 Contract 不同;你需要在我给你的代码中改变它,否则它应该可以工作。
    • 谢谢,我的问题仍然存在,因为合同不能被停用...
    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2019-04-13
    • 2020-01-30
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多