Observação
O acesso a essa página exige autorização. Você pode tentar entrar ou alterar diretórios.
O acesso a essa página exige autorização. Você pode tentar alterar os diretórios.
Você pode definir relações entre entidades em seu modelo de BDC (Conectividade de Dados Corporativos) criando associações. O Visual Studio gera métodos que fornecem aos consumidores do modelo informações sobre cada associação. Esses métodos podem ser consumidos por web parts, listas ou aplicativos personalizados do SharePoint para exibir relações de dados em uma interface do usuário (IU).
Criar uma associação
Crie uma associação escolhendo o controle Associação na Caixa de Ferramentas do Visual Studio, escolhendo a primeira entidade (chamada de entidade de origem) e escolhendo a segunda entidade (chamada de entidade de destino). Você pode definir os detalhes da associação no Editor de Associação. Para obter mais informações, consulte Como criar uma associação entre entidades.
Métodos de associação
Aplicativos como Web Parts de dados corporativos do SharePoint consomem associações chamando métodos na classe de serviço de uma entidade. Você pode adicionar métodos à classe de serviço de uma entidade selecionando-os no Editor de Associação.
Por padrão, o Editor de Associação adiciona um método de Navegação de Associação às entidades de origem e de destino. Um método de navegação por associações na entidade de origem permite que os consumidores recuperem uma lista de entidades de destino. Um método de Navegação de Associação na entidade de destino permite que os consumidores obtenham a entidade de origem relacionada a uma entidade de destino.
Você deve adicionar o código a cada um desses métodos para retornar as informações apropriadas. Você também pode adicionar outros tipos de métodos para dar suporte a cenários mais avançados. Para obter mais informações sobre cada um desses métodos, consulte Operações com suporte.
Tipos de associações
Você pode criar dois tipos de associações no designer BDC: associações estrangeiras baseadas em chave e associações estrangeiras sem chave.
Associação baseada em chave estrangeira
Você pode criar uma associação baseada em chave estrangeira relacionando um identificador da entidade de origem a descritores de tipo definidos na entidade de destino. Essa relação permite que os consumidores do modelo forneçam uma interface do usuário aprimorada para seus usuários. Por exemplo, um formulário no Outlook que permite que um usuário crie um pedido de vendas que possa exibir clientes em uma lista suspensa; ou uma lista de pedidos de vendas no SharePoint que permite aos usuários abrir uma página de perfil para um cliente.
Para criar uma associação baseada em chave estrangeira, relate identificadores e descritores de tipo que compartilham o mesmo nome e tipo. Por exemplo, você pode criar uma associação baseada em chave estrangeira entre uma Contact entidade e uma SalesOrder entidade. A entidade SalesOrder retorna um descritor de tipo ContactID como parte do parâmetro de retorno dos métodos Localizador ou Localizador Específico. Ambos os descritores de tipo aparecem no Editor de Associação. Para criar uma relação baseada em chave estrangeira entre a entidade Contact e a entidade SalesOrder, escolha o identificador ContactID ao lado de cada um desses campos.
Adicione código ao método Association Navigator da entidade de origem que retorna uma coleção de entidades de destino. O exemplo a seguir retorna os pedidos de vendas de um contato.
public static IEnumerable<SalesOrderHeader> ContactToSalesOrder(int contactID)
{
const string ServerName = "MySQLServerName";
AdventureWorksDataContext dataContext = new AdventureWorksDataContext
("Data Source=" + ServerName + ";" +
"Initial Catalog=AdventureWorks;Integrated Security=True");
IEnumerable<SalesOrderHeader> orderList =
from orders in dataContext.SalesOrderHeaders
where orders.ContactID == contactID
select orders;
return orderList;
}
Adicione código ao método Association Navigator da entidade de destino que retorna uma entidade de origem. O exemplo a seguir retorna o contato relacionado ao pedido de vendas.
public static IEnumerable<Contact> SalesOrderToContact(int salesOrderID)
{
const string ServerName = "MySQLServerName";
AdventureWorksDataContext dataContext = new AdventureWorksDataContext
("Data Source=" + ServerName + ";" +
"Initial Catalog=AdventureWorks;Integrated Security=True");
int TempContactID = (from orders in dataContext.SalesOrderHeaders
where orders.SalesOrderID == salesOrderID
select orders.ContactID).Single();
IEnumerable<Contact> contactList = from contacts in dataContext.Contacts
where contacts.ContactID == TempContactID
select contacts;
return contactList;
}
Associação sem chave estrangeira
Você pode criar uma associação sem mapear identificadores para descritores de tipo de campo. Crie esse tipo de associação quando a entidade de origem não tiver uma relação direta com a entidade de destino. Por exemplo, uma tabela SalesOrderDetail não tem uma chave estrangeira que mapeia para uma chave primária em uma tabela Contact.
Se você quiser exibir informações na tabela SalesOrderDetail que se relacionem a Contact, poderá criar uma associação sem chave estrangeira entre a entidade Contact e a entidade SalesOrderDetail.
No método de Navegação de Associação da Contact entidade, retorne as SalesOrderDetail entidades unindo tabelas ou chamando um procedimento armazenado.
O exemplo a seguir retorna detalhes de todos os pedidos de vendas unindo tabelas.
public static IEnumerable<SalesOrderDetail> ContactToSalesOrderDetail(int contactID)
{
const string ServerName = "MySQLServerName";
AdventureWorksDataContext dataContext = new AdventureWorksDataContext
("Data Source=" + ServerName + ";" +
"Initial Catalog=AdventureWorks;Integrated Security=True");
IEnumerable<SalesOrderDetail> orderList =
from orders in dataContext.SalesOrderHeaders
join orderDetails in dataContext.SalesOrderDetails on
orders.SalesOrderID equals orderDetails.SalesOrderID
where orders.ContactID == contactID
select orderDetails;
return orderList;
}
No método de navegação de associação da entidade SalesOrderDetail, retorne o Contact relacionado. O exemplo a seguir demonstra isso.
public static IEnumerable<Contact> SalesOrderDetailToContact(int salesOrderID, int salesOrderDetailID)
{
const string ServerName = "MySQLServerName";
AdventureWorksDataContext dataContext = new AdventureWorksDataContext
("Data Source=" + ServerName + ";" +
"Initial Catalog=AdventureWorks;Integrated Security=True");
int TempContactID = (from orders in dataContext.SalesOrderHeaders
where orders.SalesOrderID == salesOrderID
select orders.ContactID).Single();
IEnumerable<Contact> contactList = from contacts in dataContext.Contacts
where contacts.ContactID == TempContactID
select contacts;
return contactList;
}