0

CRMサーバーに保存されているテキストファイルから番号を読み取り、それをCRMフォームの値の1つとして使用し、番号をインクリメントしてからテキストファイルに書き換えるという、(私が思った)単純な呼び出しを実行しようとしています。フォームをロードすると、コールアウトは表面上何も実行せず、サーバー上のイベントビューアから、この役に立たない無効なキャストエラーメッセージが表示されます。私はコードを調べて、さまざまなことを無駄に変更しましたが、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

投稿したコードには、無効なキャスト例外を引き起こすものは何もありません。例外はどの行で発生しますか?

言及すべきことの1つは、投稿したコードはCRM3.0コールアウトではないということです。

CRM 3.0コールアウトクラスはから継承するCrmCalloutBase必要があり、その後、のようなさまざまなイベントメソッドの1つをオーバーライドする必要がありますPostUpdate。他の場所でこれを行い、そこからこのクラスを呼び出していますか?

あなたの2番目のコメントからOK私はあなたが間違っていることを知っています。クラスを正しく設定していません。ある時点で返された文字列を使って何かをしたいと思いますが、今のところそれを無視しており、値は破棄されます。

次のように変更します。

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 に答える