Ich habe auf die anderen Beispiele auf dieser Website verwiesen, aber einen großen Unterschied in meiner Methode gefunden. (Bitte haben Sie Geduld)Rally C#: Wie kann eine Sammlung von Anhängen hochgeladen und mit einer User Story verknüpft werden?
Ich versuche, über ein Verzeichnis von Dateien zu iterieren und jede Datei als Anhang hochzuladen und mit einer User Story zu verknüpfen. Ich kann jetzt nur eine Datei für eine User Story anhängen. Ich sehe, dass jede Anlage zu einer Basis 64 Zeichenfolge codiert werden muss und eine Größe in Bytes haben muss.
Hier ist mein Code so weit:
public void createUsWithAttachmentList(string workspace, string project, string userStoryName, string userStoryDescription)
{
//authentication
this.EnsureRallyIsAuthenticated();
//DynamicJSONObject for AttachmentContent
DynamicJsonObject myAttachmentContent = new DynamicJsonObject();
//Length calculated from Base64String converted back
int imageNumberBytes = 0;
//Userstory setup
DynamicJsonObject toCreate = new DynamicJsonObject();
toCreate["Workspace"] = workspace;
toCreate["Project"] = project;
toCreate["Name"] = userStoryName;
toCreate["Description"] = userStoryDescription;
//Trying to get a list of all the file paths within a given directory, this directory would contain .png files that need to be associated to a user story.
string[] attachmentPath = Directory.GetFiles("C:\\Users\\user\\Desktop\\RallyAttachments");
Diese foreach-Schleife verwirrend ist. Ich versuche, über jede Datei im Verzeichnis zu iterieren, um es in eine Base64-Zeichenfolge zu konvertieren, und gleichzeitig die Anzahl der Bytes für jede Datei als ein int zu erhalten.
foreach (string fileName in attachmentPath)
{
Image myImage = Image.FromFile(fileName);
string imageBase64String = imageToBase64(myImage, System.Drawing.Imaging.ImageFormat.Png);
imageNumberBytes = Convert.FromBase64String(imageBase64String).Length;
//I am stuck here to be exact because there are multiple imageBase64Strings due to the collection of files located inside the directory. AND the below line is wrong because I have a list of imageBase64Strings that were generated from iterating through the string[] attachmentPath.
myAttachmentContent[RallyField.content] = imageBase64String;
}
try
{
//create user story
CreateResult createUserStory = _api.Create(RallyField.attachmentContent, myAttachmentContent);
//create attachment
CreateResult myAttachmentContentCreateResult = _api.Create(RallyField.attachmentContent, myAttachmentContent);
String myAttachmentContentRef = myAttachmentContentCreateResult.Reference;
//DynamicJSONObject for Attachment Container
//I assume I would need a separate container for each file in my directory containing the attachments.
DynamicJsonObject myAttachment = new DynamicJsonObject();
myAttachment["Artifact"] = createUserStory.Reference;
myAttachment["Content"] = myAttachmentContentRef;
myAttachment["Name"] = "AttachmentFromREST.png";
myAttachment["Description"] = "Email Attachment";
myAttachment["ContentType"] = "image/png";
myAttachment["Size"] = imageNumberBytes;
//create & associate the attachment
CreateResult myAttachmentCreateResult = _api.Create(RallyField.attachment, myAttachment);
Console.WriteLine("Created User Story: " + createUserStory.Reference);
}
catch (WebException e)
{
Console.WriteLine(e.Message);
}
}
Anmerkung: Ich plane, diese Methode auf der Erweiterung entsprechend mehrere Dateitypen, und ich, was ich würde brauchen, um den Dateityp jeder Datei im Verzeichnis und gehen Sie zu unterstützen. Irgendwelche Ideen, wie man das schreibt?
Ist es möglich, ein gezipptes Verzeichnis in Rally als Anhang zu schieben. Wenn ja, können Sie irgendwelche Hinweise geben. Ich fange an zu denken, dass es in Base 64 String codiert werden muss. –
Eine ZIP-Datei ist ein gültiger Anhangstyp. Du hast Recht - der Inhalt muss basis4-kodiert sein. –