Значение списка выбора CRM 4.0 обновляется через рабочий процесс, но старое значение все еще отображается в форме до обновления - PullRequest
1 голос
/ 30 марта 2010

Я написал плагин для Dynamics 4.0, чтобы изменить значение списка выбора при повторном открытии объекта возможности. Значение списка выбора корректно обновляется, но форма не показывает его, пока форма не будет закрыта и снова открыта.

Вот мой плагин:

    public void Execute(IPluginExecutionContext context)
    {
        if (context.InputParameters.Properties.Contains("Target") &&
                context.InputParameters.Properties["Target"] is DynamicEntity)
        {
            ICrmService service = context.CreateCrmService(false);
            DynamicEntity entity = (DynamicEntity)context.InputParameters.Properties["Target"];
            Key key = (Key)entity.Properties["opportunityid"];

            DynamicEntity DynamicOpportunity = GetOpportunity(service, key.Value);
            Picklist StageCodePicklist = (Picklist)DynamicOpportunity.Properties["salesstagecode"];
            StageCodePicklist.IsNull = false;
            StageCodePicklist.IsNullSpecified = false;
            StageCodePicklist.name = "Advocating - Advanced (90%)";
            StageCodePicklist.Value = 200004;

            DynamicOpportunity.Properties["salesstagecode"] = StageCodePicklist;
            service.Update(DynamicOpportunity);
        }
    }

Информация, которую я назначаю для свойств в StageCodePicklist, была получена из следующего запроса к базе данных:

select * from stringmap where attributename='salesstagecode'

Чтобы повторить, я снова открываю возможность, и код salesstage правильно обновляется , но в форме отображается старое значение. Закрытие формы и ее повторное открытие для той же возможности показывает, что новое значение действительно было в базе данных.

Мне почти интересно, является ли это ошибкой в ​​CRM - конечно, форма должна отображать обновленное значение без необходимости закрывать и открывать форму. Но кроме этого, есть ли что-нибудь, что я могу сделать, чтобы пользователи могли не делать это, чтобы увидеть обновленное значение, а не старое значение?

Ответы [ 2 ]

2 голосов
/ 31 марта 2010

Независимо от того, зарегистрировали ли вы это на предварительном или последующем этапе, это должно быть отражено при перезагрузке формы. Единственное, что может задержать обновление, - это если вы зарегистрировали плагин для асинхронной работы, и в этом случае он работает в фоновом режиме Async Service.

В каком режиме вы регистрируете шаг плагина как? (1 = асинхронный, 0 = синхронный).

Кроме того, если вы зарегистрируете свой плагин для запуска на предварительном этапе и синхронно, вы можете избавиться от большого количества кода, просто обновив целевой входной параметр.

public void Execute(IPluginExecutionContext context)
{
    if (context.InputParameters.Properties.Contains("Target") &&
        context.InputParameters.Properties["Target"] is DynamicEntity)
    {
        DynamicEntity opp = (DynamicEntity)context.InputParameters["Target"];
        opp["salesstagecode"] = new Picklist(200004);
    }
}

Надеюсь, это поможет!

1 голос
/ 30 марта 2010

Вы зарегистрировали это на стадии до или после?

...