現在、.NET Rally コードを SOAP から REST .NET API に移植中です。これまでのところ、Rally ワークスペースでワーク プロダクトのカスタム フィールドが変更されるたびに WSDL を壊す必要がないため、REST API の方が高速で使いやすいようです。
ただし、添付ファイルをアップロードする機能を複製しようとしているときに、1 つの問題があります。この投稿で概説されている手順と非常によく似た手順に従っています。
Rally SOAP API - 階層要件に添付ファイルを追加する方法
これにより、イメージが System.Drawing.Image に読み込まれます。ImageToByteArray 関数を使用して、イメージをバイト配列に変換し、最初に作成された AttachmentContent に割り当てます。
次に、Attachment が作成され、AttachmentContent と HierarchicalRequirement の両方に接続されます。
すべての作成イベントはうまく機能します。コンテンツ オブジェクトが正常に作成されます。次に、「Image.png」という新しい添付ファイルが作成され、ストーリーにリンクされます。しかし、結果の添付ファイルを Rally からダウンロードすると、Image.png のバイト数は 0 バイトです。さまざまな画像、JPEG、PNG などでこれを試してみましたが、すべて同じ結果が得られました。
プロセスを示すコードの抜粋を以下に示します。私が行方不明であることは明らかですか?前もって感謝します。
// .... Read content into a System.Drawing.Image called imageObject ....
// Convert Image to byte array
byte[] imageBytes = ImageToByteArray(imageObject, System.Drawing.Imaging.ImageFormat.Png);
var imageLength = imageBytes.Length;
// AttachmentContent
DynamicJsonObject attachmentContent = new DynamicJsonObject();
attachmentContent["Content"] = imageBytes ;
CreateResult cr = restApi.Create("AttachmentContent", myAttachmentContent);
String contentRef = cr.Reference;
Console.WriteLine("Created: " + contentRef);
// Set up attachment
DynamicJsonObject newAttachment = new DynamicJsonObject();
newAttachment["Artifact"] = story;
newAttachment["Content"] = attachmentContent;
newAttachment["Name"] = "Image.png";
newAttachment["ContentType"] = "image/png";
newAttachment["Size"] = imageLength;
newAttachment["User"] = user;
// Create the attachment in Rally
cr = restApi.Create("Attachment", newAttachment);
String attachRef = cr.Reference;
Console.WriteLine("Created: " + attachRef);
}
public static byte[] ImageToByteArray(Image image, System.Drawing.Imaging.ImageFormat format)
{
using (MemoryStream ms = new MemoryStream())
{
image.Save(ms, format);
// Convert Image to byte[]
byte[] imageBytes = ms.ToArray();
return imageBytes;
}
}