В настоящее время я работаю над одним из пользовательских решений в стиле CRM (EF / Winforms / OData WebApi), и мне интересно, как реализовать довольно простое требование:
Допустим, существует простая Project
сущность. На него можно назначить Tasks
. В Project.
определено DefaultTaskResponsible
. При создании Task
в качестве Task.Responsible
используется Project
DefaultTaskResponsible
. Но возможно изменить Task.Responsible
и даже установить его на ноль.
Итак, в «нормальном» мире программирования я бы использовал конструктор Task
, принимающий Project
, и установил там Responsible
:
public class Task {
public Task(Project p) {
this.Responsible = p.DefaultTaskResponsible;
...
}
}
Но как мне реализовать нечто подобное в мире CRM с представлениями Lookup? В Dynamics CRM (или в моем собственном решении) есть представление Task
с полем поиска Project
. Не имеет смысла использовать пользовательский конструктор Task
.
Может быть, есть возможность использовать бизнес-правила в Dynamics CRM и обновлять Ответственный при каждом изменении проекта (не уверен) ?! Но как мне работать с клиентом WebApi / OData?
Если я получаю сообщение на конечную точку Task
без Responsible
, я хотел бы использовать DefaultTaskResponsible
, например.
POST [Organization URI]/api/data/tasks
{
"project@odata.bind":"[Organization URI]/api/data/projects(xxx-1)"
}.
Нет Responsible
было отправлено (возможно, потому что это более старый клиент), поэтому используйте по умолчанию. Но если установлено Responsible
, вместо него следует использовать переданное значение, например,
POST [Organization URI]/api/data/tasks
{
"project@odata.bind":"[Organization URI]/api/data/projects(xxx-1)",
"responsible@odata.bind": null
}.
В моем TaskController
я вижу только модель Task
с Responsible
равной нулю, но я не знаю, является ли она нулевой, потому что она была задана явно или не была отправлена в запросе.
Что-то не так с моими идеями / концепциями? Я думаю, что довольно часто инициализировать свойства, основанные на других объектах / свойствах, не так ли?