我目前正在开发一个自定义CRM样式的解决方案(EF / Winforms / OData WebApi),我想知道如何实现一个非常简单的要求:
假设有一个简单的Project
实体。可以为其分配Tasks
。 DefaultTaskResponsible
中定义了一个Project.
,只要创建了Task
,就将Project
的{{1}}用作DefaultTaskResponsible
。但是可以更改Task.Responsible
甚至将其设置为null。
因此,在“正常”的编程世界中,我将使用接受Task.Responsible
的{{1}}构造函数并在那里设置Task
:
Project
但是我应该如何在具有Lookup视图的CRM世界中实现类似的功能?在Dynamics CRM中(或在我的自定义解决方案中),有一个Responsible
视图和一个public class Task {
public Task(Project p) {
this.Responsible = p.DefaultTaskResponsible;
...
}
}
查找字段。使用自定义Task
构造函数没有任何意义。
也许只要项目发生更改(不确定),就可以在Dynamics CRM中使用业务规则并更新负责人?!但是我应该如何处理WebApi / OData客户端?
如果我收到的Project
端点没有Task
的帖子,我想使用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
模型,但是我不知道它是否为空,因为它是显式设置的,或者是因为它不是' t发送请求。
我的想法/概念有问题吗?我认为基于其他对象/属性初始化属性是很普遍的,不是吗?
答案 0 :(得分:0)
这个问题可能不在这个论坛的讨论范围之内,但这是我感兴趣的主题。一些想法:
“任务”是一种通用构造,传统上可以与许多不同类型的实体相关联。例如,您可能不仅具有与项目关联的任务,而且还与客户记录和销售记录关联。要运行您的代码示例,它看起来像:
public Task(Entity parent) {}
然后,您必须确定负责方的默认设置是否特定于项目,还是针对具有任务的所有实体通用。如果是后者,那么我们的概念如下所示:
public Task(ITaskEntity parent)
{
this.Responsible = parent.DefaultResponsible; //A property of ITaskEntity
}
此逻辑应在数据库“操作前”级别强制执行,即,当您的CRM应用程序收到创建任务的请求时,应进行此计算,然后将任务持久保存到数据库中。这建议您应该有一个数据库执行管道,可以在数据库操作发生之前或之后执行操作。一个标准的简单执行管道如下所示:
验证->操作前->操作(CRUD)->操作后
除非您这样做是为了娱乐,否则我建议放弃该项目并使用现有的CRM系统。