1

假设我们在Dynamics 365中有一个Account实体,帐户有c5号码和名称属性。当对象上的属性不存在时,Dynamics365 web api中如何处理?

现在我想通过动态365 Web API创建一个新帐户。我使用c5编号创建了一个账户对象,并且我添加了一个aditional属性lastname。 当我发布此帐户对象的Web API,我会得到这样的错误:

"code":"","message":"The property 'lastname' does not exist on type 'Microsoft.Dynamics.CRM.account'. Make sure to only use property names that are defined by the type.","innererror":{ 

    "message":"The property 'lastname' does not exist on type 'Microsoft.Dynamics.CRM.account'. Make sure to only use property names that are defined by the ... 

我真的不uderstand为什么动力学365的Web API只是不能忽视房地产的,它不能使用?

在这个特定的情况下,这意味着如果我们删除账户实体的名称属性,我们所有与Web API交谈的系统都有可能崩溃。

我该如何解决这个问题?无论如何强迫动态365 Web API忽略一些propertys?

+0

你必须要接受最终,应用程序将不得不尝试插入到所请求的数据库列 - 这是正常的行为,这会为不存在的列会失败。至于删除:这只会是自定义属性的情况 - 您不能删除标准/托管属性。 – Filburt

+0

我想知道是否可以使用MetaData服务在运行时查找给定实体的属性,然后过滤“POST”以仅包含您连接的实例中提供的属性。看起来像一个可能的候选人在MSDN的描述 - https://msdn.microsoft.com/en-us/library/mt607522.aspx#Retrieving属性一些[所以答案](https://stackoverflow.com/a/23445922/685760)也展示了如何去做这件事。 –

+0

如果检索实体元数据的开销太大,您可以创建一个包含所有(必需)属性的“默认记录”,并用'new ColumnSet(true)'(SELECT * FROM)检索此记录,这将产生一个实体实例所有有效的属性。将它的ID重置为空,根据需要更新属性并'.Create()'。风险自负。我仍然建议根据实体(逻辑名称)和/或实体元数据来决定触摸属性。 – Filburt

回答

0

Web Api不仅不会忽略未使用的值,而且即使在更新时,它也会更新您发送的所有值,即使它们相同。作为一个步骤可以 - 通过将其设置为非NonSerialized来忽略此值,它将被排除。另外,您可以为类成员定义命名,所以您不必担心它们在代码中的命名方式。

`[Serializable] 
public class Account { 
    [NonSerialized] 
    public string lastname; 

    [JsonProperty("firstname")] 
    public string firstName; 

    [JsonProperty("index")] 
    public int c5; 
} 
相关问题