【问题标题】:How to add Button for downloading excel file in Acumatica如何在 Acumatica 中添加用于下载 excel 文件的按钮
【发布时间】:2017-10-15 07:57:18
【问题描述】:

我正在尝试将按钮添加到用户维护并单击按钮下载包含一些数据的 excel 文件。我已经创建了 PXAction,它的方法如上:

public PXAction<Users> getUsers;

[PXUIField(DisplayName = "Get Users", MapEnableRights = PXCacheRights.Select, MapViewRights = PXCacheRights.Select,Visible = true), PXButton(CommitChanges = true)]
public IEnumerable GetUsers(PXAdapter adapter)
{
    var accessByRoles = PXSelect<RolesInGraph>.Select(this.Base);
    var usersByRole = PXSelect<UsersInRoles>.Select(this.Base);
    var dt = GetTable();//GetTable returns some DataTable just for test now
    XLWorkbook workbook = new XLWorkbook();
    workbook.Worksheets.Add(dt, "UserAccessRigths");
    using (MemoryStream MyMemoryStream = new MemoryStream())
    {
        workbook.SaveAs(MyMemoryStream);
        HttpContext.Current.Response.Clear();
        HttpContext.Current.Response.ClearContent();
        HttpContext.Current.Response.ClearHeaders();
        HttpContext.Current.Response.AppendHeader("Content-Disposition", "attachment; filename=\"UserAccessRigths.xlsx\"");
        HttpContext.Current.Response.AppendHeader("Content-Length", MyMemoryStream.ToArray().Length.ToString());
        HttpContext.Current.Response.ContentType = "application/vnd.openxmlformats-officedocument.spreadsheetml.sheet";
        HttpContext.Current.Response.BinaryWrite(MyMemoryStream.ToArray());
        HttpContext.Current.Response.Flush();
        HttpContext.Current.Response.End();
    }
    return null;
}

除了必须在浏览器中开始下载的部分外,一切正常。 我收到了 excel 作为响应,但它没有被下载。 这是我在浏览器中得到的响应:

如果有人可以帮助我,我将不胜感激。
提前致谢

【问题讨论】:

    标签: c# asp.net excel webforms acumatica


    【解决方案1】:

    尝试使用 PXRedirectToFileException 将用户浏览器重定向到 Excel 文件。主流浏览器的默认行为是通过扩展检测 Excel mime 类型并启动下载。 PXRedirectToFileException 的第二个参数用于强制下载。

    throw new PXRedirectToFileException(new PX.SM.FileInfo(Guid.NewGuid(),
                                                           "UserAccessRigths.xlsx",
                                                           null,
                                                           MyMemoryStream.ToArray()),
                                        true);
    

    【讨论】:

    • 是的,这正是我所需要的。谢谢。
    • PXRedirectToFileException 找不到,我似乎无法从谷歌找到什么样的库。
    • PXRedirectToFileException 位于 PX.Data 程序集的 PX.Data 命名空间中。这个问题与 Acumatica ERP 框架有关,PXRedirectToFileException 是该框架的一部分。
    猜你喜欢
    • 2022-01-23
    • 1970-01-01
    • 2020-10-15
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多