0

只是尝试做一个(我认为)简单的标注来从存储在 CRM 服务器上的文本文件中读取一个数字,将其用作 CRM 表单上的值之一,并增加数字,然后将其重写到文本文件中。当我加载表单时,标注表面上什么都不做,服务器上的事件查看器给我这个无用的无效转换错误消息。我已经查看了代码并更改了各种内容但无济于事,但我对 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;
        }
    }
}

所以...有人知道我做错了什么吗?

4

1 回答 1

0

您发布的代码中没有任何内容会导致无效的强制转换异常,异常发生在哪一行?

值得一提的是,您发布的代码不是 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;
        }
    }
}
于 2010-07-15T14:24:55.637 回答