2011-03-17 3 views
9

Cette question est en relation avec un plug-in que je suis en train de créer pour Dynamics CRM 2011.obtaing le GUID pour un EntityReference en utilisant des plugins dans DynamicsCRM

J'ai une entité qui dispose de 5 attributs. Un de ces attributs est une recherche vers une autre entité. Ce que j'essaye de faire avec mon plugin est de récupérer l'entité Guid of the Lookup. Simple, non?

Mais non, ça me pose problème, j'ai essayé des dizaines de façons en utilisant EntityReference pour obtenir le guid mais je ne peux pas. J'ai essayé de créer un preImage qui a échoué aussi.

Voici un extrait du CODE.

Entity entity = (Entity)context.InputParameters["Target"]; 

    if (entity.LogicalName == "new_producttaxrate") 
    { 
    if (entity.Attributes.Contains("new_product")) 
    { 

    EntityReference ownerLookup = (EntityReference)entity.Attributes["new_product"]; 
     productName = ownerLookup.Name; 
     Guid productId = ownerLookup.Id; 

    } 
    } 

aussi est venu avec cette

 if (entity.Attributes.Contains("new_producttaxrateid")) 
       { 
        Guid myGuid = (Guid)entity.Attributes["new_producttaxrateid"]; 
        EntityReference ownerLookup = new EntityReference("new_product", myGuid); 
        pid = ownerLookup.Id; 
       } 

Je continue à obtenir cette erreur

Unhandled Exception: System.ServiceModel.FaultException`1[[Microsoft.Xrm.Sdk.OrganizationServiceFault, Microsoft.Xrm.Sdk, Version=5.0.0.0, Culture=neutral, PublicKeyToken=31bf3856ad364e35]]: Condition for attribute 'new_producttaxrate.new_product': expected argument(s) of type 'System.Guid' but received 'System.DBNull'.Detail: 
<OrganizationServiceFault xmlns:i="http://www.w3.org/2001/XMLSchema-instance" xmlns="http://schemas.microsoft.com/xrm/2011/Contracts"> 
    <ErrorCode>-2147220989</ErrorCode> 
    <ErrorDetails xmlns:d2p1="http://schemas.datacontract.org/2004/07/System.Collections.Generic"> 
    <KeyValuePairOfstringanyType> 
     <d2p1:key>CallStack</d2p1:key> 
     <d2p1:value xmlns:d4p1="http://www.w3.org/2001/XMLSchema" i:type="d4p1:string"> at Microsoft.Crm.Extensibility.VersionedPluginProxyStepBase.Execute(PipelineExecutionContext context) 
    at Microsoft.Crm.Extensibility.Pipeline.Execute(PipelineExecutionContext context) 
    at Microsoft.Crm.Extensibility.MessageProcessor.Execute(PipelineExecutionContext context) 
    at Microsoft.Crm.Extensibility.InternalMessageDispatcher.Execute(PipelineExecutionContext context) 
    at Microsoft.Crm.Extensibility.ExternalMessageDispatcher.ExecuteInternal(IInProcessOrganizationServiceFactory serviceFactory, IPlatformMessageDispatcherFactory dispatcherFactory, String messageName, String requestName, Int32 primaryObjectTypeCode, Int32 secondaryObjectTypeCode, ParameterCollection fields, CorrelationToken correlationToken, CallerOriginToken originToken, UserAuth userAuth, Guid callerId, Guid transactionContextId, Int32 invocationSource, Nullable`1 requestId, Version endpointVersion) 
    at Microsoft.Crm.Extensibility.OrganizationSdkServiceInternal.ExecuteRequest(OrganizationRequest request, CorrelationToken correlationToken, CallerOriginToken callerOriginToken, WebServiceType serviceType) 
    at Microsoft.Crm.Extensibility.OrganizationSdkServiceInternal.Execute(OrganizationRequest request, CorrelationToken correlationToken, CallerOriginToken callerOriginToken, WebServiceType serviceType)</d2p1:value> 
    </KeyValuePairOfstringanyType> 
    </ErrorDetails> 
    <Message>Condition for attribute 'new_producttaxrate.new_product': expected argument(s) of type 'System.Guid' but received 'System.DBNull'.</Message> 
    <Timestamp>2011-03-17T13:21:04.6999035Z</Timestamp> 
    <InnerFault i:nil="true" /> 
    <TraceText> 

[VATPlugin2: VATPlugin2.TaxRateValidation] 
[4b0b7f5c-9950-e011-849d-000c292be099: VATPlugin2.TaxRateValidation: Create of new_producttaxrate] 


</TraceText> 
</OrganizationServiceFault> 
+0

est venu avec cette – Calibre2010

+0

pense im plus près si (entity.Attributes.Contains (» new_producttaxrateid ")) { Guid myGuid = (Guid) entity.Attributes [" nouveau_produit ttaxrateid "]; EntityReference ownerLookup = new EntityReference ("nouveau_produit", myGuid); // EntityReference ownerLookup = (EntityReference) entity.Attributes ["new_producttaxrateid"]; pid = ownerLookup.Id; } – Calibre2010

Répondre

13
 if (entity.Attributes.Contains("new_product")) 
        { 

         productGUID = ((EntityReference)entity["new_product"]).Id; 
         Entity member = service.Retrieve("product", ((EntityReference)entity["new_product"]).Id, new ColumnSet(true)); 
         if (member.Attributes.Contains("name")) 
         { 
          productName = member.Attributes["name"].ToString(); 
         } 
        } 
Questions connexes