Вызов CRM 3.0 не работает: событие: postcreate, исключение: System.InvalidCastException: указанное приведение недопустимо - PullRequest
0 голосов
/ 15 июля 2010

Просто пытаюсь сделать (я думал) простой вызов, чтобы прочитать число из текстового файла, хранящегося на сервере CRM, использовать его в качестве одного из значений в форме CRM, увеличить число и затем переписать его втекстовый файл.Когда я загружаю форму, выноска якобы ничего не делает, и Event Viewer на сервере выдает мне это бесполезное недействительное сообщение об ошибке приведения.Я просмотрел код и изменил разные вещи безрезультатно, но я новичок в обоих вызовах CRM и C #, так что я, вероятно, упускаю что-то глупое.Вот код:

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;
        }
    }
}

Итак ... кто-нибудь знает, что я делаю не так?

1 Ответ

0 голосов
/ 15 июля 2010

В коде, который вы опубликовали, нет ничего, что могло бы вызвать недопустимое исключение приведения. На какой строке происходит исключение?

Следует отметить, что опубликованный вами код не является выноской 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;
        }
    }
}
...