Acumatica 如何在采购收据弹出窗口中上载批次/序列分配?

Acumatica 如何在采购收据弹出窗口中上载批次/序列分配?,acumatica,Acumatica,我想将批次/序列号的电子表格上传到采购收据屏幕上的分配弹出窗口中。我的公司在订单中收到1000多个序列号并不少见,通过这个弹出窗口一次输入一个序列号太麻烦了。(我的序列号不是按顺序排列的,因此无法使用“生成”工具。) 我在这里找到了一个相关的帖子,但我无法使源代码正常工作 。。。开始片段。。。 字节[]filedata=info.BinData; 使用(NVExcelReader=new NVExcelReader()) { 字典数据=reader.loadWorksheet(filedat

我想将批次/序列号的电子表格上传到采购收据屏幕上的分配弹出窗口中。我的公司在订单中收到1000多个序列号并不少见,通过这个弹出窗口一次输入一个序列号太麻烦了。(我的序列号不是按顺序排列的,因此无法使用“生成”工具。)

我在这里找到了一个相关的帖子,但我无法使源代码正常工作

。。。开始片段。。。
字节[]filedata=info.BinData;
使用(NVExcelReader=new NVExcelReader())
{
字典数据=reader.loadWorksheet(filedata);
foreach(data.Values中的字符串[]textArray)
{
//做事
}
}
...
代码引用了一个名为
NVExcelReader()
的类。这个班是从哪里来的?这是针灸的一部分吗?我在源代码中找不到此类。我用的是Acumatica 2017 R2。是否可能在较新版本中重命名或移动了此类


有人能给我指出正确的方向或解释一下我如何在Acumatica中重新创建
NVExcelReader()
的功能吗?

NVExcelReader不是Acumatica框架的一部分。我这样说是因为resharper既不能在Acumatica DLL中找到NVExcelReader,也不能在Acumatica目录中搜索字符串来找到任何包含NVExcelReader字符串值的文件。此外,Google search for NVExcelReader类除了在stackoverflow上引用您的线程外,不会给出任何好的结果。为了在Acumatica中重新创建NVExcel读取器,可以考虑使用一些可以从Excel文件读取的第三方库。从COM接口、用于excel的OLE DB和用于解析xml文件的Aspose库开始,有很多选项。

nExcelReader不是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" />

谢谢,埃夫根尼。我会试试这个,然后回来汇报。
 <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()
{

}
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;
Base.splits.Insert(new PO.POReceiptLineSplit()
{
    InventoryID = Base.transactions.Current.InventoryID,
    LocationID = Base.transactions.Current.LocationID,
    LotSerialNbr = valueFromExcelFile1,
    Qty = valueFromExcelFile2
});