在(Dynamics)CRM

时间:2019-06-06 09:26:17

标签: c# oop dynamics-crm crm

我目前正在开发一个自定义CRM样式的解决方案(EF / Winforms / OData WebApi),我想知道如何实现一个非常简单的要求:

假设有一个简单的Project实体。可以为其分配TasksDefaultTaskResponsible中定义了一个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发送请求。 我的想法/概念有问题吗?我认为基于其他对象/属性初始化属性是很普遍的,不是吗?

1 个答案:

答案 0 :(得分:0)

这个问题可能不在这个论坛的讨论范围之内,但这是我感兴趣的主题。一些想法:

“任务”是一种通用构造,传统上可以与许多不同类型的实体相关联。例如,您可能不仅具有与项目关联的任务,而且还与客户记录和销售记录关联。要运行您的代码示例,它看起来像:

public Task(Entity parent) {}

然后,您必须确定负责方的默认设置是否特定于项目,还是针对具有任务的所有实体通用。如果是后者,那么我们的概念如下所示:

public Task(ITaskEntity parent) 
{
     this.Responsible = parent.DefaultResponsible; //A property of ITaskEntity
}

此逻辑应在数据库“操作前”级别强制执行,即,当您的CRM应用程序收到创建任务的请求时,应进行此计算,然后将任务持久保存到数据库中。这建议您应该有一个数据库执行管道,可以在数据库操作发生之前或之后执行操作。一个标准的简单执行管道如下所示:

验证->操作前->操作(CRUD)->操作后

除非您这样做是为了娱乐,否则我建议放弃该项目并使用现有的CRM系统。