CRM 3.0 texto Explicativo não está funcionando:evento:postcreate, com exceção:Do sistema.InvalidCastException:Conversão especificado não é válido
-
16-09-2020 - |
Pergunta
Apenas a tentar fazer um (eu pensei) simples texto explicativo para ler um número a partir de um arquivo de texto armazenado no servidor do CRM, usá-lo como um dos valores no CRM formulário e incrementar o número e, em seguida, reescreva-o para o arquivo de texto.Quando eu carregar o formulário, o texto explicativo aparentemente não faz nada e o Visualizador de Eventos no servidor dá-me este inútil inválido elenco mensagem de erro.Excedi o código e mudou várias coisas, sem sucesso, mas eu sou novo para tanto CRM textos explicativos e C#, então eu provavelmente estou faltando alguma coisa idiota.Aqui está o código:
using System;
using System.IO;
using Microsoft.Crm.Callout;
namespace IncrementCompetitorNumber
{
public class Increment
{
public string IncrementNumber()
{
string ProjectAutoNumber = "D:\\CRM_Misc\\incrementers\\new_competitornumber.txt";
string AutoNumber = "0";
string ReturnThis = "0";
int i = 0;
lock(this)
{
TextReader tr = new StreamReader(ProjectAutoNumber);
AutoNumber = tr.ReadLine();
tr.Close();
ReturnThis = AutoNumber;
i = Convert.ToInt32(AutoNumber);
i++;
AutoNumber = i.ToString();
TextWriter tw = new StreamWriter(ProjectAutoNumber);
tw.WriteLine(AutoNumber);
tw.Close();
}
return ReturnThis;
}
}
}
Então...alguém sabe o que eu estou fazendo de errado?
Solução
Não há nada no codde você ter postado o iria causar um erro de elenco de excepção, em que a exceção ocorrer?
Uma coisa a mencionar é que o código que você postou não é um CRM 3.0 texto explicativo.
Um CRM 3.0 chamada classe deve herdar de CrmCalloutBase
e você tem então substituir um dos vários métodos de evento como PostUpdate
.Você já fez isso em qualquer outro lugar e está a chamar esta classe de lá?
OK, a partir de seu segundo comentário eu sei o que você está fazendo de errado.Você não tem a configuração de sua classe corectly.Eu suponho que você quer fazer algo com a seqüência de caracteres retornada em algum ponto, mas eu tenho ignorado que, por agora, e o valor só será descartado.
Alterar da seguinte forma:
using System;
using System.IO;
using Microsoft.Crm.Callout;
namespace IncrementCompetitorNumber
{
public class Increment : CrmCalloutBase
{
public override void PostCreate(CalloutUserContext userContext, CalloutEntityContext entityContext, string postImageEntityXml)
{
IncrementNumber();
}
private string IncrementNumber()
{
string ProjectAutoNumber = "D:\\CRM_Misc\\incrementers\\new_competitornumber.txt";
string AutoNumber = "0";
string ReturnThis = "0";
int i = 0;
lock(this)
{
TextReader tr = new StreamReader(ProjectAutoNumber);
AutoNumber = tr.ReadLine();
tr.Close();
ReturnThis = AutoNumber;
i = Convert.ToInt32(AutoNumber);
i++;
AutoNumber = i.ToString();
TextWriter tw = new StreamWriter(ProjectAutoNumber);
tw.WriteLine(AutoNumber);
tw.Close();
}
return ReturnThis;
}
}
}