EDI.Net icon indicating copy to clipboard operation
EDI.Net copied to clipboard

EdiCondition not working to RFF+CR

Open sukleinkauf opened this issue 10 months ago • 1 comments

Thank you for putting in the work and making this library available.

I am trying to parse an EDIFACT 01B file and I am having troubles in constructing my custom classes to read an EDIFACT file. I am trying to map the RFF+CR with no success. I am brand new on EDIFACT, so possible I am doing something wrong here.

LIN+00010++000000000060325004:IN'
IMD+++:::VALVE,TEST,FULLPORT,1IN,SS,FLG'
QTY+21:9.000'
DTM+50:20240422:102'
DTM+2:20240422:102'
MOA+203:81'
GIN+BN+FG125'
PRI+INF'
CUX+2:AUD:9'
RFF+CR:S/F, P4, TEST'
RFF+AEU:TEST_Exw W AUS-S/F'
RFF+WS:MAIN'
PAC+++EA'
TDT+20++G4'
LIN+00020++000000000060367095:IN'
IMD+++:::VALVE,GATE,KNIFE,200MM,CS,WAFER'
QTY+21:11.000'
DTM+50:20240819:102'
DTM+2:20240819:102'
MOA+203:44'
GIN+BN+200NB ANSI150'
PRI+INF'
CUX+2:AUD:9'
RFF+CR:TEST,TEST,s/f,p4'
RFF+AEU:Test_Exw W AUS-S/F'
RFF+WS:MAIN'
PAC+++EA'
TDT+20++G4'

My code:

      [EdiSegment, EdiSegmentGroup("LIN", SequenceEnd = "TDT")]
      public class LineItem
      {
          [EdiValue("X(1)", Path = "LIN/0/0")]
          public string LineNumber { get; set; }

          [EdiValue("9(3)", Path = "QTY/0/1")]
          public string Qty { get; set; }

          [EdiValue("9(3)", Path = "LIN/1/0")]
          public string Code { get; set; }

          [EdiValue("9(3)", Path = "LIN/2/0")]
          public string Unit { get; set; }

          [EdiValue("9(3)", Path = "LIN/2/1")]
          public string Type { get; set; }

          [EdiCondition("2", Path = "DTM/0/0")]
          public Date ActualDeliveryData { get; set; } //ATA

          [EdiCondition("50", Path = "DTM/0/0")]
          public Date ExpectedShipDate { get; set; } //ETD

          public PriceDetails Prices { get; set; }

          [EdiValue("X(256)", Path = "IMD/2/3")]
          public string ItemDescription { get; set; }

          [EdiCondition("CR", Path = "RFF/0")]
          public Reference OtherReferences { get; set; }


      }

Thank you

sukleinkauf avatar Apr 10 '24 08:04 sukleinkauf

Hi @sukleinkauf it seems to me you are using the simple version of defining a segment group. The one with sequence end would not work well in your scenario (actually its not recommended for most cases). It usually works for simplistic quick deserialization scenarios. These usually map only few component values flat on the segment group class (In your case that would be LIN).

That said you should go with the explicit declaration of the SegmentGroups attribute by specifying all segment tags involved in the group on the same level (Segment groups can also be nested).

Check these other questions regarding segment groups https://github.com/indice-co/EDI.Net/issues/214

Also you can find interesting examples in the tests project

cleftheris avatar Jun 03 '24 09:06 cleftheris