Logo Questions Linux Laravel Mysql Ubuntu Git Menu
 

obtaing the GUID for an EntityReference using Plugins in DynamicsCRM

This question is in relation to a Plugin which I am now creating for Dynamics CRM 2011.

I have an entity which has 5 attributes. 1 of these attributes is a Lookup to another entity.

What I am trying to do with my Plugin is to retreive the Guid of the Lookup entity. Simple, right?

But no, It is giving me trouble, I have tried dozens of ways using EntityReference to obtain the guid but cannot. I have tried creating a preImage which failed too.

Here is a snippet of the 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;

    }
  }

also came up with this

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

I keep getting this 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>
like image 904
Calibre2010 Avatar asked Mar 17 '11 11:03

Calibre2010


People also ask

How do I get an EntityReference entity?

What you need to do is get the Entity Name and Entity Id from the Entity Reference and call the Retrieve method of the Organization Service. In your case it seems like you are trying to get the data from the User Entity. EntityReference entref = (EntityReference)entity.

What information can we get from plugin context?

Defines the contextual information passed to a plug-in at run-time. Contains information that describes the run-time environment that the plug-in is executing in, information related to the execution pipeline, and entity business information.

What is impersonation in plugin?

Impersonation is used to execute business logic (custom code) on behalf of a Dynamics 365 Customer Engagement (on-premises) system user to provide a desired feature or service for that user.


1 Answers

     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();
                       }
                   }
like image 148
Calibre2010 Avatar answered Sep 25 '22 05:09

Calibre2010