0

私は最近、この 1 年間で C# を使い始めたので、これには少し慣れていませんが、通常は多少の努力で物事をハックすることができますが、これは私を逃れています。当社では、開発バグ/問題追跡に TestTrack を使用しています。部門の 1 つで TestTrack のフロントエンドとなるカスタム Windows フォーム アプリを作成しました。SOAP を使用して接続します。私は WPF/WCF を使用しておらず、そのルートに行きたくありません。PDF である添付ファイルを正しくエンコードする方法の例を見つけるのに苦労しています。以下のコードは実際には TestTrack で既存の問題への添付ファイルを作成しますが、TestTrack でそれを開こうとすると、「画像のデータが不十分です」というエラー メッセージが表示されます。以下の例は、SOAP を使用して TestTrack にテキスト ファイルを追加する場合に機能します。PDF ファイルを TestTrack に取り込んで、上記のエラーなしで TestTrack アプリケーションで開くことができるように、以下で何を変更する必要があるかを知りたいです。ご意見/ご協力をよろしくお願いします。

    public void getAttachments(long lSession, CDefect def)
    {
        ttsoapcgi cgiengine = new ttsoapcgi();

        // Lock the defect for edit.
        CDefect lockedDefect = cgiengine.editDefect(lSession, def.recordid, "", false);

        string attachment = "c:\\TEST\\TEST_PDF.PDF";

        CFileAttachment file = new CFileAttachment();
        file.mstrFileName = Path.GetFileName(attachment);

        System.Text.ASCIIEncoding enc = new System.Text.ASCIIEncoding();

        StreamReader reader = new StreamReader(attachment);
        file.mstrFileName = Path.GetFileName(attachment);
        file.mpFileData = enc.GetBytes(reader.ReadToEnd());
        reader.Close();

        CReportedByRecord reprec = lockedDefect.reportedbylist[0];
        CFileAttachment[] afile = reprec.attachmentlist;
            if (afile == null)
            {
                lockedDefect.reportedbylist[0].attachmentlist = new CFileAttachment[1];
                lockedDefect.reportedbylist[0].attachmentlist[0] = file;
            }

            // Save our changes.
            cgiengine.saveDefect(lSession, lockedDefect);
    }
}
4

1 に答える 1

0

以下は、PDF を SOAP に添付し、課題への添付ファイルとして TestTrack に取り込むことができるように変更されたメソッドです。

        public void getAttachments(long lSession, CDefect def)
    {
        ttsoapcgi cgiengine = new ttsoapcgi();

        // Lock the defect for edit.
        CDefect lockedDefect = cgiengine.editDefect(lSession, def.recordid, "", false);

        string attachment = "c:\\TEST\\TEST_PDF.PDF";

        CFileAttachment file = new CFileAttachment();

        file.mpFileData = File.ReadAllBytes(attachment);
        file.mstrFileName = Path.GetFileName(attachment);

        CReportedByRecord reprec = lockedDefect.reportedbylist[0];
        CFileAttachment[] afile = reprec.attachmentlist;
            if (afile == null)
            {
                lockedDefect.reportedbylist[0].attachmentlist = new CFileAttachment[1];
                lockedDefect.reportedbylist[0].attachmentlist[0] = file;
            }

            // Save our changes.
            cgiengine.saveDefect(lSession, lockedDefect);
    }
于 2013-01-24T13:37:46.010 に答える