只是尝试做一个(我想)简单的标注来从存储在CRM服务器上的文本文件中读取一个数字,将其用作CRM表单上的一个值,然后递增数字,然后将其重写为文本文件。当我加载表单时,callout表面上什么都不做,服务器上的事件查看器给了我这个无用的无效转换错误消息。我已经完成了代码并改变了各种各样的东西但无济于事,但我对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;
}
}
}
所以......任何人都知道我做错了什么?
答案 0 :(得分: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;
}
}
}