我想将批次/序列号的电子表格上传到“购买收据”屏幕上的“分配”弹出窗口中。我的公司在一个订单中接收1000多个序列号并且通过这个弹出窗口一次一个地输入它们并不罕见。 (我的序列号不是连续的,所以我不能使用Generate工具。)
我在这里找到了相关的帖子,但我无法让源工作。
How to include a dialog for file upload
... begin snippet ...
byte[] filedata = info.BinData;
using (NVExcelReader reader = new NVExcelReader())
{
Dictionary<UInt32, string[]> data = reader.loadWorksheet(filedata);
foreach (string[] textArray in data.Values)
{
// do stuff
}
}
...
代码引用了一个名为NVExcelReader()
的类。这个班级来自哪里?这是Acumatica股票的一部分吗?我一直无法在源代码中找到这个类。我正在使用Acumatica 2017 R2。这个类是否有可能在较新版本中重命名或移动?
有人能指出我正确的方向或解释我如何在Acumatica中重新创建NVExcelReader()
的功能吗?
答案 0 :(得分:1)
NVExcelReader不是Acumatica类,这里的主要思想是使用任何现有的类来读取excel文件。
那么您真正需要做的是:
在aspx文件中声明PXUploadDialog元素
<px:PXUploadDialog ID="ImportPanel" runat="server" Key="NewRevisionPanel" Height="120px" Style="position: static" Width="560px"
Caption="Import XML File (*.xml)" AutoSaveFile="false" RenderCheckIn="false" SessionKey="ImportStatementProtoFile" />
添加按钮委托
public PXSelect<PO.POReceipt> NewRevisionPanel;
public PXAction<PO.POReceipt> ImportAllocations;
[PXUIField(DisplayName = "Import Allocations",
MapEnableRights = PXCacheRights.Update,
MapViewRights = PXCacheRights.Update,
Enabled = true)]
[PXButton()]
public virtual void importAllocations()
{
}
使用PXInfo类获取选定的文件数据
const string PanelSessionKey = "ImportStatementProtoFile";
PX.SM.FileInfo info = PX.Common.PXContext
.SessionTyped<PXSessionStatePXData>()
.FileInfo[PanelSessionKey] as PX.SM.FileInfo;
System.Web.HttpContext.Current.Session.Remove(PanelSessionKey);
if (info != null)
{
// here is your file data in bytes
byte[] filedata = info.BinData;
使用任何现有库以字节为单位读取Excel文件。请注意,此步骤与Acumatica不相关。例如,您可以找到有用的信息here和here
然后将文件中的值设置为Acumatica实体(例如POReceiptLineSplit)
Base.splits.Insert(new PO.POReceiptLineSplit()
{
InventoryID = Base.transactions.Current.InventoryID,
LocationID = Base.transactions.Current.LocationID,
LotSerialNbr = valueFromExcelFile1,
Qty = valueFromExcelFile2
});
答案 1 :(得分:0)
NVExcelReader不是Acumatica框架的一部分。我这样说是因为resharper都没能在Acumatica dll中找到NVExcelReader,也没有在Acumatica目录中搜索字符串能够找到包含NVExcelReader字符串值的任何文件。除了在stackoverflow上引用你的线程之外,Google搜索NVExcelReader类也没有给出任何好的结果。为了在Acumatica中重新创建NVExcelReader,您可以考虑使用可以从excel文件中读取的某些第三方库。从COM接口开始有很多选项,excel的OLE DB和解析xml文件的Aspose库。