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>
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.
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.
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.
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();
}
}
If you love us? You can donate to us via Paypal or buy me a coffee so we can maintain and grow! Thank you!
Donate Us With