2011-03-17 9 views
9

Esta pregunta es en relación con un plugin que estoy creando ahora para Dynamics CRM 2011.obtaing el GUID de un EntityReference el uso de plugins en DynamicsCRM

Tengo una entidad que tiene 5 atributos. 1 de estos atributos es una búsqueda a otra entidad.

Lo que trato de hacer con mi Plugin es recuperar el Guid de la entidad de búsqueda. Simple, ¿verdad?

Pero no, me está dando problemas, he intentado docenas de maneras usando EntityReference para obtener el guid pero no puedo. Intenté crear una imagen previa que también falló.

Aquí hay un fragmento del CÓDIGO.

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; 

    } 
    } 

también ocurrió con esta

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

me siguen dando este error

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

ocurrió esta im pensar más estrechas – Calibre2010

+0

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

Respuesta

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(); 
         } 
        } 
Cuestiones relacionadas