2017-10-17 9 views
0

je le code suivant:Ajout DynamicPropertyInstance ne marque pas la SalesOrderDetail comme valide

var propertyInstance = new DynamicPropertyInstance() 
{ 
    DynamicPropertyId = new EntityReference(DynamicProperty.EntityLogicalName, Guid.Parse("0ceedfcc-68b2-e711-8168-e0071b658ea1")), 
    ValueString = jobId.ToString(), 
    RegardingObjectId = line.ToEntityReference(), 
}; 

crmContext.AddObject(dynamicPropertyInstance); 
crmContext.SaveChanges(); 

Il ajoute avec succès un DynamicPropertyInstance à un SalesOrderLine, mais lors de l'affichage de l'Ordre dans l'interface utilisateur CRM ne passe pas validation (car c'est une propriété obligatoire). Je n'ai pas réussi à trouver un moyen de rendre cette propriété valide. La modification de la propriété que j'ai ajoutée dans l'interface utilisateur (réinitialisation de la valeur) ne permet pas non plus de marquer l'instance comme valide. Si vous ajoutez exactement la même propriété via l'interface utilisateur , la marque comme valide.

L'ID de DynamicProperty est correct, comme vérifié en chargeant les 2 enregistrements d'instance via le SDK et en comparant les propriétés. Assez étrangement, quand je charge les 2 enregistrements via le SDK celui que j'ai créé dans le code a un validationstatus de vrai (même si ce n'est pas le cas) et celui que j'ai créé dans l'IU a un validationstatus de faux et ValueString renvoie null (ce qui est faux). Toutes les autres propriétés correspondent ou ont des valeurs pertinentes (telles que les dates, les ID d'objet, etc.)

Je manque probablement un appel de méthode pour recalculer si l'instance est valide ou non, mais je ne trouve rien dans la documentation pour soutenir cela. A défaut, il est peut-être un bogue dans CRM

Répondre

0

a soumis un cas avec le soutien de Microsoft, et a reçu un code de contournement:

//Get DynamicPropertyInstance 

UpdateProductPropertiesRequest UpdateRequest = new UpdateProductPropertiesRequest(); 
UpdateRequest.PropertyInstanceList = new EntityCollection(); 
UpdateRequest.PropertyInstanceList.EntityName = DynamicPropertyInstance.EntityLogicalName; 
Entity dpInstance = new Entity(DynamicPropertyInstance.EntityLogicalName, Dpi.Id); 
dpInstance.Attributes.Add(nameof(Dpi.ValueString).ToLower(), "Blarg"); 
dpInstance.Attributes.Add(nameof(Dpi.DynamicPropertyInstanceid).ToLower(), Dpi.Id); 
dpInstance.Attributes.Add(nameof(Dpi.RegardingObjectId).ToLower(), new EntityReference(SalesOrderDetail.EntityLogicalName, line.Id)); 
dpInstance.Attributes.Add(nameof(Dpi.DynamicPropertyId).ToLower(), new EntityReference(DynamicProperty.EntityLogicalName, dpId)); 

UpdateRequest.PropertyInstanceList.Entities.Add(dpInstance); 

crmContext.Execute(UpdateRequest); 

Fondamentalement, il semble que vous avez à nouveau définir ou refixer la entités pour CRM à ramasser, donc c'est une solution de contournement pour un bug dans le CRM