【问题标题】:Add an attachment to Bugzilla using XML-RPC in VBA在 VBA 中使用 XML-RPC 将附件添加到 Bugzilla
【发布时间】:2012-11-11 02:30:16
【问题描述】:

我目前正在开发一个 Excel 宏,它允许在 Bugzilla 实例中创建错误。 经过一些试验和错误,现在证明可以正常工作。 我想增强客户端,以便可以将屏幕截图添加到新创建的错误中。

我使用的环境有点棘手: 我必须使用 MS Excel 来完成我的任务。 由于 Excel 不理解 XML-RPC,我下载了一个接口 DLL(来自 xml-rpc.net 的 CookComputing.XmlRpcV2.dll),它使 XML-RPC 接口可以从 .NET 访问。 然后我创建了一个额外的 DLL,它可以从 Excel 宏中调用(使用 COM 互操作)。

如前所述,这适用于浏览或添加新错误等任务。 但是在给bug添加附件时,必须将图片转换成base64数据类型。尽管这似乎工作正常,并且虽然创建屏幕截图似乎成功,但图像似乎已损坏并且无法显示。

这是我添加图像的操作: Bugzilla add_attachment 方法接受一个结构体作为输入: http://www.bugzilla.org/docs/4.0/en/html/api/Bugzilla/WebService/Bug.html#add_attachment。 此类型在 C# 中定义,在 VBA 中也可见。

这是结构定义:

[ClassInterface(ClassInterfaceType.AutoDual)]
public class TAttachmentInputData
{
    public string[] ids;
    public string data; // base64-encoded data
    public string file_name;
    public string summary;
    public string content_type;
    public string comment;
    public bool is_patch;
    public bool is_private;

    public void addId(int id)
    {
        ids = new string[1];
        ids[0] = id.ToString();
    }

    public void addData(string strData)
    {
        try
        {
            byte[] encData_byte = new byte[strData.Length];
            encData_byte = System.Text.Encoding.ASCII.GetBytes(strData);
            string encodedData = Convert.ToBase64String(encData_byte);
            data = new Byte[System.Text.Encoding.ASCII.GetBytes(encodedData).Length];
            data = System.Text.Encoding.ASCII.GetBytes(encodedData);
        }
        catch (Exception e)
        {
            throw new Exception("Error in base64Encode" + e.Message);
        }
    }

这是我的宏中我要添加附件的部分:

    Dim attachmentsStruct As New TAttachmentInputData
    fname = attachmentFileName

    attachmentsStruct.file_name = GetFilenameFromPath(fname)
    attachmentsStruct.is_patch = False
    attachmentsStruct.is_private = False
    'multiple other definitions

    Open fname For Binary As #1
    attachmentsStruct.addData (Input(LOF(1), #1))
    Close #1
    attachmentsStruct.file_name = GetFilenameFromPath(fname)
    Call BugzillaClass.add_attachment(attachmentsStruct)

BugzillaClass 是从我的 DLL 向 Excel VBA 公开的接口。 方法add_attachment引用XML-RPC方法add_attachment

我认为我的问题是从二进制文件转换为 base64。 这是使用我的 C# DLL 中的addData 方法完成的。 转换是否在那里正确完成? 知道为什么图像损坏了吗?

【问题讨论】:

  • 你解决了这个“add_attachment”方法的问题了吗?我不确定这是否是内部 API 的问题,但我在 Bugzilla 中写了一个评论#33,他们在其中编写了这个 API 的方法。 bugzilla.mozilla.org/show_bug.cgi?id=412074

标签: c# vba com-interop xml-rpc bugzilla


【解决方案1】:

我认为问题在于您正在宏中读取二进制数据,但 addData 方法需要一个字符串。尝试将 addData 中的参数声明为 byte[]。

【讨论】:

  • 但是如何将 byte[] 参数从宏传递给 C# addData 方法?
  • 即使在我知道如何传递字节数组之后,我仍然遇到同样的问题。截图无法显示。
  • 你能尝试不同的方法吗? IE。将文件写入磁盘并传递路径。
  • 没那么容易。我想让图像由 bugzilla 控制,以使备份或清理等任务更容易。
  • 是的,我的意思是通过路径将文件传递给您的 DLL,然后将它们放入 Bugzilla。只是试图消除通过参数传递二进制文件的尝试。
猜你喜欢
  • 2012-09-21
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 2012-10-06
  • 2018-07-24
  • 1970-01-01
  • 2019-11-07
相关资源
最近更新 更多