如何在 Acumatica 中添加用于下载 excel 文件的按钮
How to add Button for downloading excel file in Acumatica
我正在尝试将按钮添加到“用户维护”,然后点击按钮下载 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 作为响应,但未下载。
这是我在浏览器中得到的响应:
如果有人能帮助我,我将不胜感激。
提前致谢
尝试 PXRedirectToFileException 将用户浏览器重定向到 Excel 文件。主流浏览器的默认行为是通过扩展检测 Excel mime 类型并启动下载。 PXRedirectToFileException 的第二个参数用于强制下载。
throw new PXRedirectToFileException(new PX.SM.FileInfo(Guid.NewGuid(),
"UserAccessRigths.xlsx",
null,
MyMemoryStream.ToArray()),
true);
我正在尝试将按钮添加到“用户维护”,然后点击按钮下载 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 作为响应,但未下载。
这是我在浏览器中得到的响应:
如果有人能帮助我,我将不胜感激。
提前致谢
尝试 PXRedirectToFileException 将用户浏览器重定向到 Excel 文件。主流浏览器的默认行为是通过扩展检测 Excel mime 类型并启动下载。 PXRedirectToFileException 的第二个参数用于强制下载。
throw new PXRedirectToFileException(new PX.SM.FileInfo(Guid.NewGuid(),
"UserAccessRigths.xlsx",
null,
MyMemoryStream.ToArray()),
true);