CRM 3.0 texto Explicativo não está funcionando:evento:postcreate, com exceção:Do sistema.InvalidCastException:Conversão especificado não é válido

StackOverflow https://stackoverflow.com/questions/3256341

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?

Foi útil?

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;
        }
    }
}
Licenciado em: CC-BY-SA com atribuição
Não afiliado a StackOverflow
scroll top