Cómo Llegar de un LookUp a un BussinessEntity

04/04/2006 - 21:11 por Mario | Informe spam
Cree una entidad (E1) asociada a dos entidades (E2 y E3), lo que me creo una
clase en el WebService llamada E1, luego hice un objecto QueryExpression, que
me devolvió una colección de Bussiness Entities E1 basado en un ID específico
de E2, el problema es que necesito obtener el ID del E3 relacionado, pero el
campo devuelto es de tipo LookUp, y no puedo hacerle el cast a E3 para
obtener el ID, algúien sabe como llegar a la entidad relacionada a partir de
un LookUp ???
 

Leer las respuestas

#1 Mario
05/04/2006 - 16:32 | Informe spam
Esta es la respuesta (la encontré en el foro en ingles):

Mario,

Do you only need the productid from the product entity, or do you want to
access additional properties? If it's only the productid, you can rewrite
your query like
To be more precise, would the following help you?

SELECT
InvoiceDetail.Quantity,
InvoiceDetail.ProductId

FROM
Invoice

inner join InvoiceDetail on
Invoice.InvoiceId = InvoiceDetail.InvoiceId

WHERE
Invoice.InvoiceId = @InvoiceId

This can be expressed with LinkEntites. If you need products to be returned
instead of invoice details, combined with quantity information of the
invoice detail, you have to use FetchXml or SQL queries using the
FilteredViews.



The appropriate QueryExpression for the above SQL query is:



ColumnSet invoiceColumns = new ColumnSet();
invoiceColumns.Attributes = new string[] { "quantity", "productid" };

QueryExpression query = new QueryExpression();
query.ColumnSet = invoiceColumns;
query.EntityName = EntityName.invoicedetail.ToString();

LinkEntity linkInvoiceDetailToInvoice = new LinkEntity();
linkInvoiceDetailToInvoice.LinkFromEntityName =
EntityName.invoicedetail.ToString();
linkInvoiceDetailToInvoice.LinkFromAttributeName = "invoiceid";
linkInvoiceDetailToInvoice.LinkToEntityName = EntityName.invoice.ToString();
linkInvoiceDetailToInvoice.LinkToAttributeName = "invoiceid";

FilterExpression invoiceIdFilter = new FilterExpression();
ConditionExpression invoiceIdCondition = new ConditionExpression();

invoiceIdCondition.AttributeName = "invoiceid";
invoiceIdCondition.Operator = ConditionOperator.Equal;
invoiceIdCondition.Values = new object[] {
"42d38f5c-bebf-da11-9372-001438b86853" }; //Replace with invoice id

invoiceIdFilter.Conditions = new ConditionExpression[] {
invoiceIdCondition };
linkInvoiceDetailToInvoice.LinkCriteria = invoiceIdFilter;
query.LinkEntities = new LinkEntity[] { linkInvoiceDetailToInvoice };

BusinessEntityCollection result = service.RetrieveMultiple(query);

foreach (invoicedetail detail in result.BusinessEntities) {
Guid productId = detail.productid.Value;
decimal quantity = detail.quantity.Value;
}


Michael

http://www.stunnware.com/crm <- Buen sitio sobre CRM. Mario




"Mario" wrote:

Cree una entidad (E1) asociada a dos entidades (E2 y E3), lo que me creo una
clase en el WebService llamada E1, luego hice un objecto QueryExpression, que
me devolvió una colección de Bussiness Entities E1 basado en un ID específico
de E2, el problema es que necesito obtener el ID del E3 relacionado, pero el
campo devuelto es de tipo LookUp, y no puedo hacerle el cast a E3 para
obtener el ID, algúien sabe como llegar a la entidad relacionada a partir de
un LookUp ???

Preguntas similares