В коде, который вы опубликовали, нет ничего, что могло бы вызвать недопустимое исключение приведения. На какой строке происходит исключение?
Следует отметить, что опубликованный вами код не является выноской CRM 3.0.
Класс выноски CRM 3.0 должен наследоваться от CrmCalloutBase
, и тогда у вас будет оверид одного из различных методов событий, таких как PostUpdate
. Вы сделали это еще где и вызываете этот класс оттуда?
Хорошо, из вашего второго комментария я знаю, что вы делаете неправильно. Вы не настроили свой класс по своей сути. Я предполагаю, что вы хотите что-то сделать с возвращенной строкой в какой-то момент, но я проигнорировал это на данный момент, и значение будет просто отброшено.
Измените его следующим образом:
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;
}
}
}