D365 CSV导入
class KKC_ImportTestData extends RunBase { str gMessage; str fileUrl; FileName gFileName; Dialog dialog; DialogField gDialogFile; public Object dialog() { FormBuildButtonControl buttonControl; DialogGroup dlgGroup; FormBuildGroupControl buttonGroup; ; dialog = super(); dlgGroup = dialog.addGroup(''); buttonGroup = dialog.formBuildDesign().control(dlgGroup.formBuildGroup().id()); buttonControl = buttonGroup.addControl(FormControlType::Button, 'Upload'); buttonControl.text("@KKC00160"); buttonControl.registerOverrideMethod(methodStr(FormButtonControl, clicked), methodStr(KKC_ImportTestData, uploadClickedEvent), this); return dialog; } private void uploadClickedEvent(FormButtonControl _formButtonControl) { FileUploadTemporaryStorageResult result = File::GetFileFromUser() as FileUploadTemporaryStorageResult; if (result && result.getUploadStatus()) { result.getFileContentType(); fileUrl = result.getDownloadUrl(); } } public static KKC_ImportTestData construct() { return new KKC_ImportTestData(); } public static void main(Args _args) { KKC_ImportTestData testData = KKC_ImportTestData::construct(); if (testData.prompt()) { testData.run(); } } public void run() { KKC_IFPostDataTable postDataTable; KKC_PostingStatus postingStatus; KKC_TransType transType; KKC_Partner partner; container conFields; CommaTextStreamIo localStream; int i, first; #File ; localStream = CommaTextStreamIo::constructForRead(File::UseFileFromURL(fileUrl)); if (localStream.status() == IO_Status::Ok) { localStream.inFieldDelimiter("\,"); localStream.inRecordDelimiter(#delimiterCRLF); conFields = localStream.read(); if (first == 0) { conFields = localStream.read(); first++; } if (conFields != conNull()) { while(conFields) { postDataTable.clear(); postDataTable.PurchId = conPeek(conFields, 1); postDataTable.TransType = str2Enum(transType, conPeek(conFields, 2)); postDataTable.Partner = conPeek(conFields, 3); postDataTable.Quantity = str2Num(conPeek(conFields, 4)); postDataTable.InventBatchExpDate = str2Date(conPeek(conFields, 5), DateSeparator::Slash); postDataTable.insert(); conFields = localStream.read(); } } } } public static Container textIO2Con(FilePath _filePath, boolean _includeTitle = false, str _fieldDelimiter = '\t', str _recordDelimiter = '\r\n') { TextIo textIO; container conFile, conLine; int i, j; #File ; textIO = new textIO(_filePath, "r"); textIO.inFieldDelimiter(_fieldDelimiter);//#delimiterTab); textIO.inRecordDelimiter(_recordDelimiter);//#delimiterCRLF); conFile = conNull(); while (textIO.status() == IO_Status::Ok) { i++; conLine = textIO.read(); if (!_includeTitle && i == 1) { continue; } if (conLine != conNull()) { j++; conFile = conIns(conFile, j, conLine); } } return conFile; } }
【推荐】国内首个AI IDE,深度理解中文开发场景,立即下载体验Trae
【推荐】编程新体验,更懂你的AI,立即体验豆包MarsCode编程助手
【推荐】抖音旗下AI助手豆包,你的智能百科全书,全免费不限次数
【推荐】轻量又高性能的 SSH 工具 IShell:AI 加持,快人一步
· Linux系列:如何用 C#调用 C方法造成内存泄露
· AI与.NET技术实操系列(二):开始使用ML.NET
· 记一次.NET内存居高不下排查解决与启示
· 探究高空视频全景AR技术的实现原理
· 理解Rust引用及其生命周期标识(上)
· DeepSeek 开源周回顾「GitHub 热点速览」
· 物流快递公司核心技术能力-地址解析分单基础技术分享
· .NET 10首个预览版发布:重大改进与新特性概览!
· AI与.NET技术实操系列(二):开始使用ML.NET
· 单线程的Redis速度为什么快?