Usuário com melhor resposta
[Dynamics CRM 2011] script no Formulário criar novo E-mail

Pergunta
-
Galera,
Preciso criar algumas regras de validações nos campos DE, PARA, ASSUNTO, para quando o usuário preencher o campo estas validações sejam disparadas. Alguém tem um exemplo de como fazer isto?
Por enquanto eu tenho no meu código apenas as regras de obrigatoriedade de preencher os campos.
function OnLoad() {
var FORM_TYPE_CREATE = 1;
var FORM_TYPE_UPDATE = 2;
var formType = Xrm.Page.ui.getFormType();
if (formType == FORM_TYPE_CREATE) {
Xrm.Page.getAttribute("from").setRequiredLevel(“required”);
Xrm.Page.getAttribute("to").setRequiredLevel(“required”);
Xrm.Page.getAttribute("subject").setRequiredLevel(“required” );
Xrm.Page.getAttribute("description").setRequiredLevel(“requi red”);
var remetente = Xrm.Page.getAttribute("from").getValue();
var destinatarios = Xrm.Page.getAttribute("to").getValue();
var assunto = Xrm.Page.getAttribute("subject").getValue();
Xrm.Page.ui.controls.get(regardingobjectid”).setDisabled(tru e);
Um dos problemas que estou no momento é que ao abrir o formulário ele já esta pegando os valores dos campos (DE, PARA e ASSUNTO) que se encontram vazios (ainda nao preenchidos).
Respostas
-
Renan,
Se eu entendi o que disse, precisa colocar suas validações no onchange ou onsave, assim conforme preenche ele valida, ou valida uma única vez no momento que tentamos salvar o registro.
Att,
Tiago Michelini Cardoso MVP - MCC - MCTS
https://tiagomcardoso.wordpress.com/- Marcado como Resposta Renan Albuquerque segunda-feira, 13 de maio de 2013 17:29
-
Claro Renan, precisa de um gatilho, pode adicionar manualmente funções em cada evento onchange dos campos necessários (não recomendado) ou pode adicionar no load da seguinte forma:
function OnLoad() { Xrm.Page.getAttribute('SEU_ATRIBUTO').addOnChange(SUA_FUNCAO_ONCHANGE); } function SUA_FUNCAO_ONCHANGE() { ... }
Tiago Michelini Cardoso MVP - MCC - MCTS
https://tiagomcardoso.wordpress.com/- Marcado como Resposta Renan Albuquerque terça-feira, 14 de maio de 2013 14:00
Todas as Respostas
-
Renan,
Se eu entendi o que disse, precisa colocar suas validações no onchange ou onsave, assim conforme preenche ele valida, ou valida uma única vez no momento que tentamos salvar o registro.
Att,
Tiago Michelini Cardoso MVP - MCC - MCTS
https://tiagomcardoso.wordpress.com/- Marcado como Resposta Renan Albuquerque segunda-feira, 13 de maio de 2013 17:29
-
Opa Tiago,
Obrigado pela atenção. No caso assim que o usuário terminar de preencher um campo e partir para o preenchimento de outro campo. Se caracteriza a validação do primeiro campo como onChange() correto? Ou seja, quando ele sair do campo preenchido o onchange() será acionado para validar o conteúdo!? -
Aproveitando o tópico ainda.
No campo DE: eu preciso que ao abrir o formulário onLoad() ele verifique qual Fila da Equipe a que o usuário pertença. Como consigo recuperar este dado pelo script do formulário?
Em C# eu seguiria estes passos:
Contact resultContact = new Contact();
//Recupera o contato
query = new QueryByAttribute(Contact.EntityLogicalName);
query.ColumnSet = new ColumnSet("firstname", "contactid");
query.AddAttributeValue("emailaddress1", email.Sender);
var retrieved = service.RetrieveMultiple(query);
resultContact = retrieved.Entities[0].ToEntity<Contact>();//Recupera a referencia do contato com a conta.
var queryRecuperaConta = new QueryByAttribute(ava_account_contact.EntityLogicalName);
queryRecuperaConta.ColumnSet = new ColumnSet("contactid", "accountid");
queryRecuperaConta.AddAttributeValue("contactid", resultContact.ContactId);
var resultconta = service.RetrieveMultiple(queryRecuperaConta).Entities[0].ToEntity<ava_account_contact>();
//Recupera a Conta de acordo com a referencia da conta do contatovar queryRecuperaConta2 = new QueryByAttribute(Account.EntityLogicalName);
queryRecuperaConta2.ColumnSet = new ColumnSet("ava_filaid", "name", "accountid");
queryRecuperaConta2.AddAttributeValue("accoutid", resultconta.accountid);
var conta = service.RetrieveMultiple(queryRecuperaConta2).Entities[0].ToEntity<Account>();//Recupera a Fila de acordo com a Conta.
var queryRecuperaFila = new QueryByAttribute(Queue.EntityLogicalName);
queryRecuperaFila.ColumnSet = new ColumnSet { AllColumns = true };
queryRecuperaFila.AddAttributeValue("queueid", conta.ava_filaid);
var resultFila = service.RetrieveMultiple(queryRecuperaConta2).Entities[0].ToEntity<Queue>();// Recupera a Fila da Equipe.
var queryTeam = new QueryByAttribute(Team.EntityLogicalName);
queryTeam.ColumnSet = new ColumnSet { AllColumns = true };
queryTeam.AddAttributeValue("teamid", resultFila.OwnerId);
queryTeam.AddAttributeValue("queueid", resultFila.QueueId);
var resultTeam = service.RetrieveMultiple(queryTeam).Entities[0].ToEntity<Team>();
var FilaPrincipal = resultTeam.QueueId.Name;
Precisaria que o resultado deste codigo fosse retornado para o campo FROM
Xrm.Page.getAttribute("from").setValue(FilaPrincipal);
Qual a melhor forma de obter estas informações pelo script?- Editado Renan Albuquerque segunda-feira, 13 de maio de 2013 14:29
-
Renan,
Isso mesmo no change faça suas validações.
Quanto a fila, se for colocar uma regra de negócio sempre recomendo o uso de plugins, poderá colocá-lo no precreate/preupdate assim valida antes de inserir na base. Agora se tiver que fazer algo do lado client antes de processar o registro, terá que fazer um chamada via activex para o serviço so CRM e obter os dados necessários, assim use a localização avançada do CRM, crie seu fetch e use qualquer biblioteca que consuma fetch do CRM, por exemplo:
http://xrmservicetoolkit.codeplex.com/
Tiago Michelini Cardoso MVP - MCC - MCTS
https://tiagomcardoso.wordpress.com/- Sugerido como Resposta Tiago Michelini CardosoMVP, Moderator segunda-feira, 13 de maio de 2013 15:08
-
Tiago,
Estou tentando utilizar o fuction OnChange(); mas nao estao funcionando. No Onload ele carrega e recupera os valores dos campos que vao estar vazios. Quando o usuário preencher o campo FROM por exemplo, o Onchange não deveria ser acionado?
function OnLoad() {
if(Xrm.Page.ui.getFormType() == 1) {
//Setar campo obrigatório ser preenchido.
Xrm.Page.getAttribute("from").setRequiredLevel("required");
Xrm.Page.getAttribute("to").setRequiredLevel("required");
Xrm.Page.getAttribute("subject").setRequiredLevel("required");
var remetente = Xrm.Page.getAttribute("from").OnChange();
var destinatarios = Xrm.Page.getAttribute("to").OnChange();
var assunto = Xrm.Page.getAttribute("subject").OnChange();
}
function OnChange() {
//Recupera os valores dos campos.
var remetente = Xrm.Page.getAttribute("from").getValue();
var destinatarios = Xrm.Page.getAttribute("to").getValue();
var assunto = Xrm.Page.getAttribute("subject").getValue();
if(remetente != null){
alert("O Valor do campo FROM foi alterado");
}
} -
Claro Renan, precisa de um gatilho, pode adicionar manualmente funções em cada evento onchange dos campos necessários (não recomendado) ou pode adicionar no load da seguinte forma:
function OnLoad() { Xrm.Page.getAttribute('SEU_ATRIBUTO').addOnChange(SUA_FUNCAO_ONCHANGE); } function SUA_FUNCAO_ONCHANGE() { ... }
Tiago Michelini Cardoso MVP - MCC - MCTS
https://tiagomcardoso.wordpress.com/- Marcado como Resposta Renan Albuquerque terça-feira, 14 de maio de 2013 14:00