Usuário com melhor resposta
Deletando registros

Pergunta
-
Respostas
-
Ola Gilberto...
Consegui resolver de outra maneira, nao sei se é assim o certo, mas deu certo...
Exclui o registro das duas filhas e depois o do pai, segue exemplo de uma das entidade que deletei:
SqlConnection conn_Lyceum = new SqlConnection(conexao);
SqlCommand cmd3 = new SqlCommand("select ContactId from Contact where DeletionStateCode = 0", conn_Lyceum);
cmd3.CommandType = System.Data.CommandType.Text;
conn_Lyceum.Open();
SqlDataReader dr3;
dr3 = cmd3.ExecuteReader();
while (dr3.Read())
{//deleta contato
excluiContato((dr3["ContactId"].ToString()));
}
----------------------------------------------
protected void excluiContato(string id_crm)
{
CrmAuthenticationToken token = new CrmAuthenticationToken();
token.AuthenticationType = 0;
token.OrganizationName = "XXX";
CrmService crm = new CrmService();
crm.CrmAuthenticationTokenValue = token;
crm.Credentials = System.Net.CredentialCache.DefaultCredentials;
Guid contactGuid = new Guid(id_crm);try
{
crm.Delete(EntityName.contact.ToString(), contactGuid);
}
catch (System.Web.Services.Protocols.SoapException ex)
{
lbldetalhe.Text = ex.Detail.InnerText;
}}
- Marcado como Resposta Rafael.Moreno quinta-feira, 23 de abril de 2009 16:52
-
Rafasax,
Que bom que funcionou. Apenas dê uma olhada depois no processo do CRM para exclusão em massa (Bulk Delete) que é bem interessate. Por exemplo, se eu quiser excluir todas as Contas e Contatos, posso fazer através de um único [Request] para o CRM:
Exemplo:
CrmAuthenticationToken token = new CrmAuthenticationToken();
token.AuthenticationType = 0;
token.OrganizationName = "AdventureWorksCycle";CrmService service = new CrmService();
service.Url = "http://<servername>:<port>/mscrmservices/2007/crmservice.asmx";
service.CrmAuthenticationTokenValue = token;
service.Credentials = System.Net.CredentialCache.DefaultCredentials;// Query Expression para retornar todas as contas
QueryExpression accountsQuery = new QueryExpression();
accountsQuery.EntityName = EntityName.account.ToString();
accountsQuery.ColumnSet = new AllColumns();// Query Expression para retornar todas os contatos
QueryExpression contactsQuery = new QueryExpression();
contactsQuery.EntityName = EntityName.contact.ToString();
contactsQuery.ColumnSet = new AllColumns();BulkDeleteRequest request = new BulkDeleteRequest();
request.JobName = "Exclui todas as CONTAS e CONTATOS";
request.QuerySet = new QueryBase[] { accountsQuery, contactsQuery };
request.SendEmailNotification = false;
request.ToRecipients = new Guid[0];
request.CCRecipients = new Guid[0];
request.RecurrencePattern = string.Empty;
request.StartDateTime = new CrmDateTime();
request.StartDateTime.Value = DateTime.Now.ToString("s");BulkDeleteResponse response = (BulkDeleteResponse)service.Execute(request);
Guid jobId = response.JobId;
[]s
Gilberto Tezini - MCP ASP.NET (C#/VB.NET) / MCP CRM - (http://gtezini.blogspot.com)- Marcado como Resposta Rafael.Moreno quinta-feira, 23 de abril de 2009 18:14
Todas as Respostas
-
Olá Rafasax,
Exclusão em massa pela próprio produto existe somente na versão [OnLine] do CRM. Provavelmente a sua é [On-Premisse]. Portanto, para excluir os registros de uma vez terá que desenvolver (no vs.net), via SDK do CRM, o processo chamado [Bulk Delete], conforme mostra o help do SDK - http://msdn.microsoft.com/en-us/library/cc151198.aspx.
[]
Gilberto Tezini - MCP ASP.NET (C#/VB.NET) / MCP CRM - (http://gtezini.blogspot.com) -
-
Ola Gilberto...
Consegui resolver de outra maneira, nao sei se é assim o certo, mas deu certo...
Exclui o registro das duas filhas e depois o do pai, segue exemplo de uma das entidade que deletei:
SqlConnection conn_Lyceum = new SqlConnection(conexao);
SqlCommand cmd3 = new SqlCommand("select ContactId from Contact where DeletionStateCode = 0", conn_Lyceum);
cmd3.CommandType = System.Data.CommandType.Text;
conn_Lyceum.Open();
SqlDataReader dr3;
dr3 = cmd3.ExecuteReader();
while (dr3.Read())
{//deleta contato
excluiContato((dr3["ContactId"].ToString()));
}
----------------------------------------------
protected void excluiContato(string id_crm)
{
CrmAuthenticationToken token = new CrmAuthenticationToken();
token.AuthenticationType = 0;
token.OrganizationName = "XXX";
CrmService crm = new CrmService();
crm.CrmAuthenticationTokenValue = token;
crm.Credentials = System.Net.CredentialCache.DefaultCredentials;
Guid contactGuid = new Guid(id_crm);try
{
crm.Delete(EntityName.contact.ToString(), contactGuid);
}
catch (System.Web.Services.Protocols.SoapException ex)
{
lbldetalhe.Text = ex.Detail.InnerText;
}}
- Marcado como Resposta Rafael.Moreno quinta-feira, 23 de abril de 2009 16:52
-
Rafasax,
Que bom que funcionou. Apenas dê uma olhada depois no processo do CRM para exclusão em massa (Bulk Delete) que é bem interessate. Por exemplo, se eu quiser excluir todas as Contas e Contatos, posso fazer através de um único [Request] para o CRM:
Exemplo:
CrmAuthenticationToken token = new CrmAuthenticationToken();
token.AuthenticationType = 0;
token.OrganizationName = "AdventureWorksCycle";CrmService service = new CrmService();
service.Url = "http://<servername>:<port>/mscrmservices/2007/crmservice.asmx";
service.CrmAuthenticationTokenValue = token;
service.Credentials = System.Net.CredentialCache.DefaultCredentials;// Query Expression para retornar todas as contas
QueryExpression accountsQuery = new QueryExpression();
accountsQuery.EntityName = EntityName.account.ToString();
accountsQuery.ColumnSet = new AllColumns();// Query Expression para retornar todas os contatos
QueryExpression contactsQuery = new QueryExpression();
contactsQuery.EntityName = EntityName.contact.ToString();
contactsQuery.ColumnSet = new AllColumns();BulkDeleteRequest request = new BulkDeleteRequest();
request.JobName = "Exclui todas as CONTAS e CONTATOS";
request.QuerySet = new QueryBase[] { accountsQuery, contactsQuery };
request.SendEmailNotification = false;
request.ToRecipients = new Guid[0];
request.CCRecipients = new Guid[0];
request.RecurrencePattern = string.Empty;
request.StartDateTime = new CrmDateTime();
request.StartDateTime.Value = DateTime.Now.ToString("s");BulkDeleteResponse response = (BulkDeleteResponse)service.Execute(request);
Guid jobId = response.JobId;
[]s
Gilberto Tezini - MCP ASP.NET (C#/VB.NET) / MCP CRM - (http://gtezini.blogspot.com)- Marcado como Resposta Rafael.Moreno quinta-feira, 23 de abril de 2009 18:14
-
-
Giberto,
Usei o codigo que vc passou e nao da erro nenhum, ele executa... mas quando entro no CRM para ver meus contatos nao excluiu nenhum...
segue o codigo:
CrmAuthenticationToken token = new CrmAuthenticationToken();
token.AuthenticationType = 0;
token.OrganizationName =
"SPD";
CrmService service = new CrmService();
service.CrmAuthenticationTokenValue = token;
service.Credentials = System.Net.
CredentialCache.DefaultCredentials;
// Query Expression para retornar todas as contas
QueryExpression inscQuery = new QueryExpression();
inscQuery.EntityName =
EntityName.un_inscricaovestibular.ToString();
inscQuery.ColumnSet =
new AllColumns();
// Query Expression para retornar todas as contas
QueryExpression regQuery = new QueryExpression();
regQuery.EntityName =
EntityName.un_registroacademico.ToString();
regQuery.ColumnSet =
new AllColumns();
// Query Expression para retornar todas os contatos
QueryExpression contactsQuery = new QueryExpression();
contactsQuery.EntityName =
EntityName.contact.ToString();
contactsQuery.ColumnSet =
new AllColumns();
BulkDeleteRequest request = new BulkDeleteRequest();
request.JobName =
"Exclui todas as CONTAS e CONTATOS";
request.QuerySet =
new QueryBase[] { contactsQuery, inscQuery, regQuery };
request.SendEmailNotification =
false;
request.ToRecipients =
new Guid[0];
request.CCRecipients =
new Guid[0];
request.RecurrencePattern =
string.Empty;
request.StartDateTime =
new CrmDateTime();
request.StartDateTime.Value =
DateTime.Now.ToString("s");
BulkDeleteResponse response = (BulkDeleteResponse)service.Execute(request);
Guid jobId = response.JobId;
-
Rafasax,
Note que ele cria Jobs no CRM. Verifique qual o status do Job que vc criou (Configurações -> Gerenciamento de Dados -> Exclusão em Massa de Registros).
Gilberto Tezini - MCP ASP.NET (C#/VB.NET) / MCP CRM - (http://gtezini.blogspot.com) -
-
-
Deu certinho!!!
Tenho uma duvida, nao sei se pode fazer aki mesmo ou abrir outra discusao... mas é o seguinte, sou novo nessa parte de CRM e estou meio que aprendendo sozinho, olhando na internet, qual a diferenca dos dois web services: CRMSERVICE e METADATASERVICE ???
CRMSERVICE ele mexe com os registros e METADATASERVICE com a estrutura???
FalO!!! -
Resumidamente é isto!
CRMService para acesso aos DADOS do CRM.
Metadataservice para acesso a todo Metadado do CRM. Por exemplo, vc pode acessar este WS para buscar os valores de um Picklist da Conta no CRM.
Recomendo tirar um tempo (bom tempo!) para ler o SDK do CRM. Vai te esclarecer muitas dúvidas.
[]
Gilberto Tezini - MCP ASP.NET (C#/VB.NET) / MCP CRM - (http://gtezini.blogspot.com)