Array
(
)

return exception in alert javascript

João Viana
   - 29 jan 2016

Bom dia a todos.
Estou tendo problemas para retornar a mensagem de exceção ocorrida em requisição ajax em um alert do javascript.
Só consigo ver o erro no modo debbug, pois o retorno no alert é [object: object]
#Código

public JsonResult CancelarVenda(string pArr)
{
            try
            {
                string strRet = "", strUsuario = Session["Login_Id"].ToString();
                int iQtd = 0;
                string[] str = pArr.Split(',');

                Intraflex01.Models.VendasCompos20 vendas = new Models.VendasCompos20();

                for (int i = 0; i < str.Length; i++)
                {
                    strRet = str[i].Replace("[", "").Replace("\"", "").Replace("]", "");
                    var query = string.Format(@"INSERT INTO SGV.dbo.VendasCompos20Canc(idVendasCompos20) VALUES({0})", strRet);
                    Intraflex01.Models.SqlCommands.ExecuteNonQuery(query, null, Intraflex01.Models.SqlCommands.Conexao.SGV);

                    try
                    {
                        if (vendas.CancelaSAP(strRet, strUsuario))
                        {
                            iQtd++;
                        }
                    }
                    catch
                    {
                        query = string.Format(@"DELETE FROM SGV.dbo.VendasCompos20Canc WHERE idVendasCompos20 = {0}", strRet);
                        Intraflex01.Models.SqlCommands.ExecuteNonQuery(query, null, Intraflex01.Models.SqlCommands.Conexao.SGV);
                        throw;
                    }
                }

                return Json(iQtd, JsonRequestBehavior.AllowGet);
            }
            catch (Exception ex)
            {
                throw ex;
            }

        }

#Código
      $.ajax({
                    type: "POST",
                    dataType: "json",
                    url: "/VendasCompos20/CancelarVenda/",
                    data: { pArr: JSON.stringify(arr) },
                    success: function (data) {
                        alert("Processo realizado com sucesso. Quantidade cancelada: " + data);
                        window.location.reload();
                    },
                    error: function (error) {
                        alert("Error ao realizar o processo: " + error);
                    }
                });

após isso fiz um teste incluindo o try catch
#Código
try {

      $.ajax({
                    type: "POST",
                    dataType: "json",
                    url: "/VendasCompos20/CancelarVenda/",
                    data: { pArr: JSON.stringify(arr) },
                    success: function (data) {
                        alert("Processo realizado com sucesso. Quantidade cancelada: " + data);
                        window.location.reload();
                    },
                    error: function (error) {
                        alert("Error ao realizar o processo: " + error);
                    }
                });

} catch (e) {
            var message = e.message;
            alert("Erro ao executar: " + message);
        }


mesmo assim continua retornando o erro genérico, alguém poderia me ajudar a resolver ?

Jothaz
   - 29 jan 2016

Não entendi!

Você quer exibir a mensagem de erro da Exception em alert no JavaScript?

João Viana
   - 29 jan 2016

Sim isso mesmo Jothaz.
Estou tentando retornar a mensagem de erro para exibir para o usuário, porém retorna um erro genérico e não a mensagem correta.

Jothaz
   - 29 jan 2016

Não é usual retornar mensagens de Exception para o usuário final, pois as mensagens são complexas e para o usuário mais complica que esclarece.

É mais profissional, elegante e produtivo você cria um log de erros e retornar mensagens genéricas para o usuário. Para o usuário o que importa é somente que ocorreu o erro e nada mais. A mensagem pode até descrever qual funcionalidade para facilitar o suporte. Mas os detalhes do erro deve ser gravado em um arquivo de log.

O .net possui alguns componentes free para este controle de log tipo log4net e nLog. São muito simples de usar e lhe dará um controle total sobre tudo que retornar erro.

João Viana
   - 29 jan 2016

Sim. é que na funcionalidade que estou utilizando faço uma chamada WCF, cuja algumas situação tem o retorno com um new Exception.

#Código

 
 if (wsRetorno.Erro)
       return true;
else
        throw new Exception("Produto não cadastrado, Verifique.");


E preciso retornar essa mensagem

Jothaz
   - 29 jan 2016

É muito difícil sugerir algo sem conhecer todo o cenário.

O problema é que o retorno é objeto e então você deve converter para string.

Tente:

#Código

String(object)


object.toString()



Se o retorno for JSON:

#Código
JSON.stringify(object);


Ou tente usar a função:

#Código
function objToString (obj) {
    var str = '';
    for (var p in obj) {
        if (obj.hasOwnProperty(p)) {
            str += p + '::' + obj[p] + '\n';
        }
    }
    return str;
}