/// <summary> /// Auto increment custom control numbers. /// </summary> public static void Run() { Debug.WriteLine("******************************"); Debug.WriteLine(MethodBase.GetCurrentMethod().Name); Debug.WriteLine("******************************"); var edi = File.OpenRead(Directory.GetCurrentDirectory() + @"\..\..\..\Files\X12\PurchaseOrder.txt"); int isaControlNumber = 28; int gsControlNumber = 35; Debug.WriteLine("Start interchange control number: {0}", isaControlNumber); Debug.WriteLine("Start group control number: {0}", gsControlNumber); var settings = new AckSettings { AckHandler = (s, a) => { var tsTa1 = a.Message as TSTA1; var ts997 = a.Message as TS997; if (tsTa1 != null) { // a.Message is TA1 } if (ts997 != null) { var ack = AckBuilders.BuildAck(a.InterchangeHeader, a.GroupHeader, ts997, AckVersion.X12_997, ++isaControlNumber, ++gsControlNumber); Debug.Write(ack); } }, MessageHandler = (s, a) => { if (!a.ErrorContext.HasErrors) { // do something with the message a.Message Debug.WriteLine("Message {0} with control number {1} is valid.", a.ErrorContext.Name, a.ErrorContext.ControlNumber); } }, AckVersion = AckVersion.X12_997 }; using (var ackMan = new Plugins.Acknowledgments.X12.AckMan(settings)) { using (var ediReader = new X12Reader(edi, "EdiFabric.Templates.X12")) { while (ediReader.Read()) { ackMan.Publish(ediReader.Item); } } } Debug.WriteLine("Last interchange control number: {0}", isaControlNumber); Debug.WriteLine("Last group control number: {0}", gsControlNumber); }
/// <summary> /// Detect duplicate messages. /// </summary> public static void Run() { Debug.WriteLine("******************************"); Debug.WriteLine(MethodBase.GetCurrentMethod().Name); Debug.WriteLine("******************************"); var edi = File.OpenRead(Directory.GetCurrentDirectory() + @"\..\..\..\Files\X12\DuplicateMessage.txt"); var settings = new AckSettings { AckHandler = (s, a) => { var tsTa1 = a.Message as TSTA1; var ts997 = a.Message as TS997; if (tsTa1 != null) { // a.Message is TA1 } if (ts997 != null) { // Inspect the acknowledgment var ackCode = ts997.AK9.FunctionalGroupAcknowledgeCode_01; var ack = AckBuilders.BuildAck(a.InterchangeHeader, a.GroupHeader, ts997, AckVersion.X12_997); Debug.Write(ack); } }, MessageHandler = (s, a) => { if (a.ErrorContext.HasErrors) { Debug.WriteLine("Message {0} with control number {1} is invalid: {2}.", a.ErrorContext.Name, a.ErrorContext.ControlNumber, a.ErrorContext.Codes.FirstOrDefault()); } }, AckVersion = AckVersion.X12_997, // Turn off AK2 for valid messages to reduce size GenerateForValidMessages = false, // Check for message duplicates TransactionSetDuplicates = true }; using (var ackMan = new Plugins.Acknowledgments.X12.AckMan(settings)) { using (var ediReader = new X12Reader(edi, "EdiFabric.Examples.X12.Templates.V4010")) { while (ediReader.Read()) { ackMan.Publish(ediReader.Item); } } } }
/// <summary> /// Generate custom 999. /// </summary> public static void GenerateCustom999() { Debug.WriteLine("******************************"); Debug.WriteLine(MethodBase.GetCurrentMethod().Name); Debug.WriteLine("******************************"); var edi = File.OpenRead(Directory.GetCurrentDirectory() + @"\..\..\..\Files.X12\PurchaseOrder.txt"); var settings = new AckSettings { AckHandler = (s, a) => { var ts999 = a.Message as TS999; if (a.AckType == AckType.Technical) { // a.Message is TA1 } if (ts999 != null) { var custom999 = new TS999Custom1 { AK1Loops = new List <TS999_AK1Loop>() }; var ak1Loop = new TS999_AK1Loop(); // Build the custom acknowledgment custom999.ST = ts999.ST; ak1Loop.AK1 = ts999.AK1; ak1Loop.AK2Loop1 = ts999.AK2Loop1; ak1Loop.AK9 = ts999.AK9; custom999.AK1Loops.Add(ak1Loop); var ack = AckBuilders.BuildAck(a.InterchangeHeader, a.GroupHeader, custom999, AckVersion.Hipaa_999); Debug.Write(ack); } }, AckVersion = AckVersion.Hipaa_999, TechnicalAck = TechnicalAck.Enforce }; using (var ackMan = new Plugins.Acknowledgments.X12.AckMan(settings)) { using (var ediReader = new X12Reader(edi, TemplateFactory.FullTemplateFactory)) { while (ediReader.Read()) { ackMan.Publish(ediReader.Item); } } } }
/// <summary> /// Detect duplicate interchanges. /// </summary> public static void Run() { Debug.WriteLine("******************************"); Debug.WriteLine(MethodBase.GetCurrentMethod().Name); Debug.WriteLine("******************************"); var edi = File.OpenRead(Directory.GetCurrentDirectory() + @"\..\..\..\Files\X12\DuplicateInterchange.txt"); var settings = new AckSettings { AckHandler = (s, a) => { var tsTa1 = a.Message as TSTA1; var ts997 = a.Message as TS997; if (tsTa1 != null) { // a.Message is TA1 } if (ts997 != null) { var ack = AckBuilders.BuildAck(a.InterchangeHeader, a.GroupHeader, ts997, AckVersion.X12_997); Debug.Write(ack); } }, MessageHandler = (s, a) => { if (a.InDuplicateInterchange) { Debug.WriteLine(string.Format("Interchange with control number {0}", a.InterchangeHeader.InterchangeControlNumber_13)); Debug.WriteLine(string.Format("Group with control number {0}", a.GroupHeader.GroupControlNumber_6)); Debug.WriteLine("Message {0} with control number {1}", a.Message.Name, a.Message.ErrorContext.ControlNumber); Debug.WriteLine("Is in duplicate interchange: {0}", a.InDuplicateInterchange); // reject message } }, AckVersion = AckVersion.X12_997, // Turn off AK2 for valid messages to reduce size GenerateForValidMessages = false, // Check for interchange duplicates InterchangeDuplicates = IsDuplicate }; using (var ackMan = new Plugins.Acknowledgments.X12.AckMan(settings)) { using (var ediReader = new X12Reader(edi, "EdiFabric.Templates.X12")) { while (ediReader.Read()) { ackMan.Publish(ediReader.Item); } } } }
/// <summary> /// Detect duplicate groups. /// </summary> public static void GenerateContrlWithDuplicateGroup() { Debug.WriteLine("******************************"); Debug.WriteLine(MethodBase.GetCurrentMethod().Name); Debug.WriteLine("******************************"); var edi = File.OpenRead(Directory.GetCurrentDirectory() + @"\..\..\..\Files.Edifact\DuplicateGroup.txt"); var settings = new AckSettings { AckHandler = (s, a) => { var contrl = a.Message as TSCONTRL; if (contrl != null && a.AckType == AckType.Technical) { // a.Message is technical acknowledgment } if (contrl != null && a.AckType == AckType.Functional) { var ack = AckBuilders.BuildAck(a.InterchangeHeader, a.GroupHeader, contrl); Debug.Write(ack); } }, MessageHandler = (s, a) => { if (!a.ErrorContext.HasErrors) { if (a.InDuplicateGroup) { Debug.WriteLine(string.Format("Interchange with control number {0}", a.InterchangeHeader.InterchangeControlReference_5)); Debug.WriteLine(string.Format("Group with control number {0}", a.GroupHeader.GroupReferenceNumber_5)); Debug.WriteLine("Message {0} with control number {1}", a.Message.Name, a.Message.GetTransactionContext().HeaderControlNumber); Debug.WriteLine("Is in duplicate group: {0}", a.InDuplicateGroup); // reject message } } }, // Turn on UCM for valid messages GenerateForValidMessages = true, GroupDuplicates = true }; using (var ackMan = new Plugins.Acknowledgments.Edifact.AckMan(settings)) { using (var ediReader = new EdifactReader(edi, TemplateFactory.FullTemplateFactory)) { while (ediReader.Read()) { ackMan.Publish(ediReader.Item); } } } }
/// <summary> /// Auto increment custom control numbers. /// </summary> public static void GenerateContrlWithControlNumbers() { Debug.WriteLine("******************************"); Debug.WriteLine(MethodBase.GetCurrentMethod().Name); Debug.WriteLine("******************************"); var edi = File.OpenRead(Directory.GetCurrentDirectory() + @"\..\..\..\Files.Edifact\PurchaseOrder.txt"); int unbControlNumber = 28; int ungControlNumber = 35; Debug.WriteLine("Start interchange control number: {0}", unbControlNumber); Debug.WriteLine("Start group control number: {0}", ungControlNumber); var settings = new AckSettings { AckHandler = (s, a) => { var contrl = a.Message as TSCONTRL; if (contrl != null && a.AckType == AckType.Technical) { // a.Message is technical acknowledgment } if (contrl != null && a.AckType == AckType.Functional) { var ack = AckBuilders.BuildAck(a.InterchangeHeader, a.GroupHeader, contrl, ++unbControlNumber, ++ungControlNumber); Debug.Write(ack); } }, MessageHandler = (s, a) => { if (!a.ErrorContext.HasErrors) { // do something with the message a.Message Debug.WriteLine("Message {0} with control number {1} is valid.", a.ErrorContext.Name, a.ErrorContext.ControlNumber); } }, }; using (var ackMan = new Plugins.Acknowledgments.Edifact.AckMan(settings)) { using (var ediReader = new EdifactReader(edi, TemplateFactory.FullTemplateFactory)) { while (ediReader.Read()) { ackMan.Publish(ediReader.Item); } } } Debug.WriteLine("Last interchange control number: {0}", unbControlNumber); Debug.WriteLine("Last group control number: {0}", ungControlNumber); }
/// <summary> /// Auto increments non default control numbers. /// </summary> public static void Generate997WithControlNumbers() { Debug.WriteLine("******************************"); Debug.WriteLine(MethodBase.GetCurrentMethod().Name); Debug.WriteLine("******************************"); var edi = Assembly.GetExecutingAssembly().GetManifestResourceStream("EdiFabric.Sdk.X12.Edi.PurchaseOrder.txt"); int isaControlNumber = 28; int gsControlNumber = 35; Debug.WriteLine("Start interchange control number: {0}", isaControlNumber); Debug.WriteLine("Start group control number: {0}", gsControlNumber); var settings = new AckSettings { AckHandler = (s, a) => { if (a.Message.Name == "TA1") { // a.AckInterchange is TA1 } if (a.Message.Name == "997") { var ack = Helpers.BuildAck(a.InterchangeHeader, a.GroupHeader, a.Message, AckVersion.X12_997, ++isaControlNumber, ++gsControlNumber); Debug.Write(ack); } }, MessageHandler = (s, a) => { if (!a.ErrorContext.HasErrors) { // do something with the message a.Message Debug.WriteLine("Message {0} with control number {1} is valid.", a.ErrorContext.Name, a.ErrorContext.ControlNumber); } }, AckVersion = AckVersion.X12_997, }; var ackMan = new Plugins.Acknowledgments.X12.AckMan(settings); using (var ediReader = new X12Reader(edi, "EdiFabric.Sdk.X12")) { while (ediReader.Read()) { ackMan.Publish(ediReader.Item); } } ackMan.Complete(); Debug.WriteLine("Last interchange control number: {0}", isaControlNumber); Debug.WriteLine("Last group control number: {0}", gsControlNumber); }
/// <summary> /// Detects duplicate groups. /// </summary> public static void GenerateContrlWithDuplicateGroup() { Debug.WriteLine("******************************"); Debug.WriteLine(MethodBase.GetCurrentMethod().Name); Debug.WriteLine("******************************"); var edi = Assembly.GetExecutingAssembly().GetManifestResourceStream("EdiFabric.Sdk.Edifact.Edi.DetectDuplicateGroup.txt"); var settings = new AckSettings { AckHandler = (s, a) => { if (a.Message.Name == "CONTRL" && a.AckType == AckType.Technical) { // a.AckInterchange is technical acknowledgment } if (a.Message.Name == "CONTRL" && a.AckType == AckType.Functional) { var ack = BuildAck(a.InterchangeHeader, a.GroupHeader, a.Message); Debug.Write(ack); } }, MessageHandler = (s, a) => { if (!a.ErrorContext.HasErrors) { if (a.InDuplicateGroup) { Debug.WriteLine(string.Format("Interchange with control number {0}", a.InterchangeHeader.InterchangeControlReference_5)); Debug.WriteLine(string.Format("Group with control number {0}", a.GroupHeader.GroupReferenceNumber_5)); Debug.WriteLine("Message {0} with control number {1}", a.Message.Name, a.Message.GetTransactionContext().HeaderControlNumber); Debug.WriteLine("Is in duplicate group: {0}", a.InDuplicateGroup); // reject message } } }, // Turn on UCM for valid messages GenerateForValidMessages = true, GroupDuplicates = true }; var ackMan = new Plugins.Acknowledgments.Edifact.AckMan(settings); using (var ediReader = new EdifactReader(edi, "EdiFabric.Sdk.Edifact")) { while (ediReader.Read()) { ackMan.Publish(ediReader.Item); } } ackMan.Complete(); }
/// <summary> /// Generate a 997 for a valid message. /// </summary> public static void Generate997ForValid() { Debug.WriteLine("******************************"); Debug.WriteLine(MethodBase.GetCurrentMethod().Name); Debug.WriteLine("******************************"); var edi = File.OpenRead(Directory.GetCurrentDirectory() + @"\..\..\..\Files.X12\PurchaseOrder.txt"); var settings = new AckSettings { AckHandler = (s, a) => { var tsTa1 = a.Message as TSTA1; var ts997 = a.Message as TS997; if (tsTa1 != null) { // a.Message is TA1 } if (ts997 != null) { // Inspect the acknowledgment var ackCode = ts997.AK9.FunctionalGroupAcknowledgeCode_01; var ack = AckBuilders.BuildAck(a.InterchangeHeader, a.GroupHeader, ts997, AckVersion.X12_997); Debug.Write(ack); } }, MessageHandler = (s, a) => { if (!a.ErrorContext.HasErrors) { // do something with the message a.Message Debug.WriteLine("Message {0} with control number {1} is valid.", a.ErrorContext.Name, a.ErrorContext.ControlNumber); } }, AckVersion = AckVersion.X12_997, // Turn off AK2 for valid messages to reduce size GenerateForValidMessages = false }; using (var ackMan = new Plugins.Acknowledgments.X12.AckMan(settings)) { using (var ediReader = new X12Reader(edi, TemplateFactory.FullTemplateFactory)) { while (ediReader.Read()) { ackMan.Publish(ediReader.Item); } } } }
/// <summary> /// Detects duplicate interchanges with external method. /// </summary> public static void Generate997WithDuplicateInterchange() { Debug.WriteLine("******************************"); Debug.WriteLine(MethodBase.GetCurrentMethod().Name); Debug.WriteLine("******************************"); var edi = Assembly.GetExecutingAssembly().GetManifestResourceStream("EdiFabric.Sdk.X12.Edi.DetectDuplicateInterchange.txt"); var settings = new AckSettings { AckHandler = (s, a) => { if (a.Message.Name == "TA1") { // a.AckInterchange is TA1 } if (a.Message.Name == "997") { var ack = Helpers.BuildAck(a.InterchangeHeader, a.GroupHeader, a.Message, AckVersion.X12_997); Debug.Write(ack); } }, MessageHandler = (s, a) => { if (a.InDuplicateInterchange) { Debug.WriteLine(string.Format("Interchange with control number {0}", a.InterchangeHeader.InterchangeControlNumber_13)); Debug.WriteLine(string.Format("Group with control number {0}", a.GroupHeader.GroupControlNumber_6)); Debug.WriteLine("Message {0} with control number {1}", a.Message.Name, a.Message.GetTransactionContext().HeaderControlNumber); Debug.WriteLine("Is in duplicate interchange: {0}", a.InDuplicateInterchange); // reject message } }, AckVersion = AckVersion.X12_997, // Turn off AK2 for valid messages to reduce size GenerateForValidMessages = false, // Check for interchange duplicates InterchangeDuplicates = IsDuplicate }; var ackMan = new Plugins.Acknowledgments.X12.AckMan(settings); using (var ediReader = new X12Reader(edi, "EdiFabric.Sdk.X12")) { while (ediReader.Read()) { ackMan.Publish(ediReader.Item); } } ackMan.Complete(); }
/// <summary> /// Auto increments non default control numbers. /// </summary> public static void GenerateContrlWithControlNumbers() { Debug.WriteLine("******************************"); Debug.WriteLine(MethodBase.GetCurrentMethod().Name); Debug.WriteLine("******************************"); var edi = Assembly.GetExecutingAssembly().GetManifestResourceStream("EdiFabric.Sdk.Edifact.Edi.PurchaseOrder.txt"); int unbControlNumber = 28; int ungControlNumber = 35; Debug.WriteLine("Start interchange control number: {0}", unbControlNumber); Debug.WriteLine("Start group control number: {0}", ungControlNumber); var settings = new AckSettings { AckHandler = (s, a) => { if (a.Message.Name == "CONTRL" && a.AckType == AckType.Technical) { // a.AckInterchange is technical acknowledgment } if (a.Message.Name == "CONTRL" && a.AckType == AckType.Functional) { var ack = BuildAck(a.InterchangeHeader, a.GroupHeader, a.Message, ++unbControlNumber, ++ungControlNumber); Debug.Write(ack); } }, MessageHandler = (s, a) => { if (!a.ErrorContext.HasErrors) { // do something with the message a.Message Debug.WriteLine("Message {0} with control number {1} is valid.", a.ErrorContext.Name, a.ErrorContext.ControlNumber); } }, }; var ackMan = new Plugins.Acknowledgments.Edifact.AckMan(settings); using (var ediReader = new EdifactReader(edi, "EdiFabric.Sdk.Edifact")) { while (ediReader.Read()) { ackMan.Publish(ediReader.Item); } } ackMan.Complete(); Debug.WriteLine("Last interchange control number: {0}", unbControlNumber); Debug.WriteLine("Last group control number: {0}", ungControlNumber); }
/// <summary> /// Generate CONTRL for a valid message. /// </summary> public static void GenerateContrlForValid() { Debug.WriteLine("******************************"); Debug.WriteLine(MethodBase.GetCurrentMethod().Name); Debug.WriteLine("******************************"); var edi = File.OpenRead(Directory.GetCurrentDirectory() + @"\..\..\..\Files.Edifact\PurchaseOrder.txt"); var settings = new AckSettings { AckHandler = (s, a) => { var contrl = a.Message as TSCONTRL; if (contrl != null && a.AckType == AckType.Technical) { // a.Message is technical acknowledgment } if (contrl != null && a.AckType == AckType.Functional) { // Inspect the acknowledgment var ackCode = contrl.UCI.Actioncoded_04; var ack = AckBuilders.BuildAck(a.InterchangeHeader, a.GroupHeader, contrl); Debug.Write(ack); } }, MessageHandler = (s, a) => { if (!a.ErrorContext.HasErrors) { // do something with the message a.Message Debug.WriteLine("Message {0} with control number {1} is valid.", a.ErrorContext.Name, a.ErrorContext.ControlNumber); } }, // Turn on UCM for valid messages GenerateForValidMessages = true }; using (var ackMan = new Plugins.Acknowledgments.Edifact.AckMan(settings)) { using (var ediReader = new EdifactReader(edi, TemplateFactory.FullTemplateFactory)) { while (ediReader.Read()) { ackMan.Publish(ediReader.Item); } } } }
/// <summary> /// Detect duplicate messages. /// </summary> public static void Run() { Debug.WriteLine("******************************"); Debug.WriteLine(MethodBase.GetCurrentMethod().Name); Debug.WriteLine("******************************"); var edi = File.OpenRead(Directory.GetCurrentDirectory() + @"\..\..\..\Files\Edifact\DuplicateMessage.txt"); var settings = new AckSettings { AckHandler = (s, a) => { var contrl = a.Message as TSCONTRL; if (contrl != null && a.AckType == AckType.Technical) { // a.Message is technical acknowledgment } if (contrl != null && a.AckType == AckType.Functional) { var ack = AckBuilders.BuildAck(a.InterchangeHeader, a.GroupHeader, contrl); Debug.Write(ack); } }, MessageHandler = (s, a) => { if (a.ErrorContext.HasErrors && a.ErrorContext.Codes.Any(c => c == Core.ErrorCodes.MessageErrorCode.DuplicateMessageControlNumber)) { // do something with the message a.Message Debug.WriteLine("Message {0} with control number {1} is duplicate.", a.ErrorContext.Name, a.ErrorContext.ControlNumber); } }, // Turn on UCM for valid messages GenerateForValidMessages = true, TransactionSetDuplicates = true, TechnicalAck = TechnicalAck.Enforce }; using (var ackMan = new Plugins.Acknowledgments.Edifact.AckMan(settings)) { using (var ediReader = new EdifactReader(edi, "EdiFabric.Examples.EDIFACT.Templates.D96A")) { while (ediReader.Read()) { ackMan.Publish(ediReader.Item); } } } }
/// <summary> /// Detects duplicate messages. /// </summary> public static void Generate997WithDuplicateMessage() { Debug.WriteLine("******************************"); Debug.WriteLine(MethodBase.GetCurrentMethod().Name); Debug.WriteLine("******************************"); var edi = Assembly.GetExecutingAssembly().GetManifestResourceStream("EdiFabric.Sdk.X12.Edi.DuplicateMessage.txt"); var settings = new AckSettings { AckHandler = (s, a) => { if (a.Message.Name == "TA1") { // a.AckInterchange is TA1 } if (a.Message.Name == "997") { var ack = Helpers.BuildAck(a.InterchangeHeader, a.GroupHeader, a.Message, AckVersion.X12_997); Debug.Write(ack); } }, MessageHandler = (s, a) => { if (a.ErrorContext.HasErrors) { Debug.WriteLine("Message {0} with control number {1} is invalid: {2}.", a.ErrorContext.Name, a.ErrorContext.ControlNumber, a.ErrorContext.Codes.FirstOrDefault()); } }, AckVersion = AckVersion.X12_997, // Turn off AK2 for valid messages to reduce size GenerateForValidMessages = false, // Check for message duplicates TransactionSetDuplicates = true }; var ackMan = new Plugins.Acknowledgments.X12.AckMan(settings); using (var ediReader = new X12Reader(edi, "EdiFabric.Sdk.X12")) { while (ediReader.Read()) { ackMan.Publish(ediReader.Item); } } ackMan.Complete(); }
/// <summary> /// Detects duplicate messages. /// </summary> public static void GenerateContrlWithDuplicateMessage() { Debug.WriteLine("******************************"); Debug.WriteLine(MethodBase.GetCurrentMethod().Name); Debug.WriteLine("******************************"); var edi = Assembly.GetExecutingAssembly().GetManifestResourceStream("EdiFabric.Sdk.Edifact.Edi.DuplicateMessage.txt"); var settings = new AckSettings { AckHandler = (s, a) => { if (a.Message.Name == "CONTRL" && a.AckType == AckType.Technical) { // a.AckInterchange is technical acknowledgment } if (a.Message.Name == "CONTRL" && a.AckType == AckType.Functional) { var ack = BuildAck(a.InterchangeHeader, a.GroupHeader, a.Message); Debug.Write(ack); } }, MessageHandler = (s, a) => { if (a.ErrorContext.HasErrors && a.ErrorContext.Codes.Any(c => c == Core.ErrorCodes.MessageErrorCode.DuplicateMessageControlNumber)) { // do something with the message a.Message Debug.WriteLine("Message {0} with control number {1} is duplicate.", a.ErrorContext.Name, a.ErrorContext.ControlNumber); } }, // Turn on UCM for valid messages GenerateForValidMessages = true, TransactionSetDuplicates = true }; var ackMan = new Plugins.Acknowledgments.Edifact.AckMan(settings); using (var ediReader = new EdifactReader(edi, "EdiFabric.Sdk.Edifact")) { while (ediReader.Read()) { ackMan.Publish(ediReader.Item); } } ackMan.Complete(); }
/// <summary> /// Generate a 997 for an invalid purchase order. /// </summary> public static void Generate999ForInvalid() { Debug.WriteLine("******************************"); Debug.WriteLine(MethodBase.GetCurrentMethod().Name); Debug.WriteLine("******************************"); var edi = Assembly.GetExecutingAssembly().GetManifestResourceStream("EdiFabric.Sdk.X12.Edi.PurchaseOrderInvalid.txt"); var processedMessages = new ConcurrentBag <string>(); var settings = new AckSettings { AckHandler = (s, a) => { if (a.Message.Name == "TA1") { // a.AckInterchange is TA1 } if (a.Message.Name == "999") { var ack999 = a.Message as TS999; var allFailed = ack999.AK2Loop1.Where(f => f.IK5.TransactionSetAcknowledgmentCode_01 == "R").ToList(); var allAccepted = ack999.AK2Loop1.Where(f => f.IK5.TransactionSetAcknowledgmentCode_01 == "A").ToList(); foreach (var failedMessage in allFailed) { if (processedMessages.Contains(failedMessage.AK2.TransactionSetControlNumber_02)) { failedMessage.IK5.TransactionSetAcknowledgmentCode_01 = "E"; } } var ack = Helpers.BuildAck(a.InterchangeHeader, a.GroupHeader, a.Message, AckVersion.Hipaa_999); Debug.Write(ack); } }, MessageHandler = (s, a) => { if (a.ErrorContext.HasErrors) { // In case we decide to process the message anyway, preserve the control number processedMessages.Add(a.Message.GetTransactionContext().HeaderControlNumber); // Process the invalid message // Reject message // Log/report it // Inspect MessageErrorContext for the validation errors var errors = a.ErrorContext.Flatten(); Debug.WriteLine("Message {0} with control number {1} is invalid with errors:", a.ErrorContext.Name, a.ErrorContext.ControlNumber); foreach (var error in errors) { Debug.WriteLine(error); } } }, AckVersion = AckVersion.Hipaa_999, // Turn off AK2 for valid messages to reduce size GenerateForValidMessages = false }; var ackMan = new Plugins.Acknowledgments.X12.AckMan(settings); using (var ediReader = new X12Reader(edi, "EdiFabric.Sdk.X12")) { while (ediReader.Read()) { ackMan.Publish(ediReader.Item); } } ackMan.Complete(); }
public static void TranslateX12(string ediSourcePath, string translatedFolderPath, Assembly templateAssembly, string fileNameFilter = null, bool withAcknowlegment = false) { var settings = new AckSettings { AckHandler = (s, a) => { var tsTa1 = a.Message as TSTA1; var ts997 = a.Message as TS997; // ts997.AK1.FunctionalIdentifierCode_01 = "A"; ts997.AK9.FunctionalGroupAcknowledgeCode_01 = "A"; ts997.AK9.NumberofAcceptedTransactionSets_04 = ts997.AK9.NumberofReceivedTransactionSets_03; foreach (var aa in ts997.AK2Loop1) { aa.AK5.TransactionSetAcknowledgmentCode_01 = "A"; aa.AK3Loop1 = null; } if (tsTa1 != null) { // a.Message is TA1 } if (ts997 != null) { // Inspect the acknowledgment var ackCode = ts997.AK9.FunctionalGroupAcknowledgeCode_01; var ack = AckBuilders.BuildAck(a.InterchangeHeader, a.GroupHeader, ts997, AckVersion.X12_997); Debug.Write(ack); } }, MessageHandler = (s, a) => { if (!a.ErrorContext.HasErrors) { // do something with the message a.Message Debug.WriteLine("Message {0} with control number {1} is valid.", a.ErrorContext.Name, a.ErrorContext.ControlNumber); } a.ErrorContext.Errors.Clear(); a.ErrorContext.HasErrors = false; }, AckVersion = AckVersion.X12_997, // Turn off AK2 for valid messages to reduce size GenerateForValidMessages = false }; foreach (var fileName in Directory.EnumerateFiles(ediSourcePath, fileNameFilter ?? "*")) { var ackMan = withAcknowlegment ? new EdiFabric.Plugins.Acknowledgments.X12.AckMan(settings) : null; try { using (X12Reader reader = new X12Reader(new FileStream(fileName, FileMode.Open), mc => { // return Assembly.GetAssembly(typeof(EdiFabric.Templates.EdifactD96A.ADR)); return(templateAssembly); })) { var ediItems = reader.ReadToEnd().ToList(); Console.WriteLine(Path.GetFileName(fileName)); foreach (var ediItem in ediItems) { if (withAcknowlegment) { ackMan.Publish(ediItem); } var resultFileName = Path.Combine(translatedFolderPath, Path.GetFileNameWithoutExtension(fileName) + ".txt"); if (ediItem is TS856) { var asn = (TS856)ediItem; using (var writer = new FieldWriter(File.CreateText(resultFileName))) { WriteLowesAsn(asn, writer); } } } } } finally { ackMan?.Dispose(); } } }
/// <summary> /// Generate 997 for an invalid message. /// </summary> public static void Run() { Debug.WriteLine("******************************"); Debug.WriteLine(MethodBase.GetCurrentMethod().Name); Debug.WriteLine("******************************"); var edi = File.OpenRead(Directory.GetCurrentDirectory() + @"\..\..\..\Files\X12\PurchaseOrderInvalid.txt"); var processedMessages = new ConcurrentBag <string>(); var settings = new AckSettings { AckHandler = (s, a) => { var tsTa1 = a.Message as TSTA1; var ts997 = a.Message as TS997; if (tsTa1 != null) { // a.Message is TA1 } if (ts997 != null) { var allFailed = ts997.AK2Loop1.Where(f => f.AK5.TransactionSetAcknowledgmentCode_01 == "R").ToList(); var allAccepted = ts997.AK2Loop1.Where(f => f.AK5.TransactionSetAcknowledgmentCode_01 == "A").ToList(); foreach (var failedMessage in allFailed) { if (processedMessages.Contains(failedMessage.AK2.TransactionSetControlNumber_02)) { failedMessage.AK5.TransactionSetAcknowledgmentCode_01 = "E"; } } var ack = AckBuilders.BuildAck(a.InterchangeHeader, a.GroupHeader, ts997, AckVersion.X12_997); Debug.Write(ack); } }, MessageHandler = (s, a) => { if (a.ErrorContext.HasErrors) { // In case we decide to process the message anyway, preserve the control number processedMessages.Add(a.Message.ErrorContext.ControlNumber); // Process the invalid message // Reject message // Log/report it // Inspect MessageErrorContext for the validation errors var errors = a.ErrorContext.Flatten(); Debug.WriteLine("Message {0} with control number {1} is invalid with errors:", a.ErrorContext.Name, a.ErrorContext.ControlNumber); foreach (var error in errors) { Debug.WriteLine(error); } } }, AckVersion = AckVersion.X12_997, // Turn off AK2 for valid messages to reduce size GenerateForValidMessages = false }; using (var ackMan = new Plugins.Acknowledgments.X12.AckMan(settings)) { using (var ediReader = new X12Reader(edi, "EdiFabric.Templates.X12")) { while (ediReader.Read()) { ackMan.Publish(ediReader.Item); } } } }