【问题标题】:Filehelpers - Complex record layout assistanceFilehelpers - 复杂的记录布局帮助
【发布时间】:2014-06-11 14:28:15
【问题描述】:

我们正在尝试将文件帮助程序用于一些专门处理 EDI 的文件接口项目。下面的示例定义使用了 EDI 858 规范。像大多数接口规范一样,每个供应商都有自己的风格。您可以找到示例 858 EDI 规范 here

我们的供应商有自己的风格;这是我们目前在转换之前使用的示例记录定义:

H1_Record_type      As String ' * 8  EDI858FF
H2_TRANS_DATE       As String ' * 8 yyyyMMdd
H3_Trans_type       As String ' * 2 00 = New, 01 = Cancel Carrier, 03 = Delete, 04 = Change
H4_Pay_type         As String ' * 2 PP = Prepaid, CC = Collect, TP = Third Party (our default is PP)
H5_Load             As String ' * 30 Authorization
H6_Load_Ready_date  As String ' * 12 yyyyMMddHHmm
H7_Commodity        As String ' * 10
H8_Customer_HQ_ID   As String ' * 20 hard coded '0000000001'
H9_Customer         As String
H10_Mill_ID         As String ' * 20 Shipping Perdue Location or Destination Perdue Location
H11_Tender_Method   As String ' * 10 blank for now
H12_Carrier_ID      As String ' * 10 blank for now
H13_Weight          As String ' * 7 estimated total load weight
H14_Weight_Qualifier As String ' * 2 blank for now
H15_Total_Miles     As String ' * 7 zero for now
H16_Total_quantity  As String ' * 7 blank for now
H17_Weight_Unit     As String ' * 1 L = pounds, K = Kilograms, L=default
H18_REF             As String ' * 3 REF
            HR1_Ref_qualifier   As String ' * 3 CO = Deliv Dest ref., P8 = Deliv Orig Ref.
            HR2_Ref_value       As String ' * 80
H19_END_REF                 As String ' * 7 END REF
H20_SPEC_INSTRUCTION        As String ' * 16 SPEC INSTRUCTION
            HS1_Qualifier           As String ' * 3  1 = Credit Hold, 7T = Export Order, HM = Hazmat, L = Load ready for pickup
                                ' PTS = Tarp, RO = Hot Load, TAR = Full Tarp, WTV = Weight Verification, DDN = Driver needs TWIC
                                ' PR = Prohibited
H21_END_SPEC                As String ' * 20 END SPEC INSTRUCTION
H22_NOTE                    As String ' * 4 NOTE
             HN1_Note_Qualifier      As String ' * 3 SPH = Special Handling, PRI = Load Priority, DEL = Transit Days
            HN2_Note                As String ' * 80
H23_END_NOTE                As String ' * 8 END NOTE
H24_EQUIPMENT               As String ' * 9 EQUIPMENT
H25_END                     As String ' * 13 END EQUIPMENT
H26_LOAD_CONTACT            As String ' * 12 LOAD CONTACT
             LC1_Contact_Name        As String ' * 60
             LC2_Contact_type        As String ' * 2  EM= E-mail, FX = Fax, TE = Telephone
             LC3_Contact_Data        As String ' * 80
H27_END_LOAD_CONTACT        As String ' * 16 END LOAD CONTACT
H28_STOP                    As String ' * 4 STOP  There will always be 2 - CL and CU
    S1_Stop_Number          As String ' * 2
    S2_Stop_Reason          As String ' * 2 CL = Complete Load, CU = Complete Unload (one of each required for every load)
    S3_LOCATION             As String ' * 8 LOCATION
        SL1_Location_ID     As String ' * 20
        SL2_Location_Name   As String ' * 60
        SL3_Location_Add1   As String ' * 55
        SL4_Location_Add2   As String ' * 55
        SL5_Location_City   As String ' * 30
        SL6_Location_State  As String ' * 2
        SL7_Location_Zip    As String ' * 10 (use only 5 digits)
        SL8_Location_Country As String ' * 3 USA, CAN, MEX
    S4_END_LOCATION         As String ' * 12 END LOCATION
    S5_STOP_DATE            As String ' * 9 STOP DATE
        SD1_Date_Qualifier  As String ' * 3 37 = No earlier than, 38 = No later than, 10 = Expected arrival time, 35 = Actual arrival
                                ' 11 = Actual departure
        SD2_Date_Time       As String ' * 12  yyyyMMddHHmm
    S6_END_STOP_DATE        As String ' * 13 END STOP DATE
    S7_STOP_REF             As String ' * 8 STOP REF
        SR1_Reference_Qualifier As String ' 3 72 = Transit Time, DK = Dock Number, OQ = Order Number
        SR2_Reference_Value As String ' * 80
    S8_END_STOP_REF         As String ' * 12 END STOP REF
H29_END_STOP                As String ' * 8 END STOP
H30_ORDER                   As String ' * 5 ORDER
    O1_Order_Number         As String ' * 80
H31_END_ORDER               As String ' * 9 END ORDER

这是一个示例消息,通常会在一行中:

EDI858FF~20140611~04~PP~1266010982~201406060700~CANOLA ML~0000000001~企业名称~RICHLAND~60000~~0~~L~REF~SA~客户 名称~END REF~STOP~01~CL~LOCATION~RICHLAND~~~~~~~~END LOCATION~STOP DATE~37~201406060000~END STOP DATE~STOP REF~OQ~5568~END STOP REF~END STOP~STOP~02~CU~LOCATION~261450~~~~~~~~END LOCATION~STOP DATE~37~201406060000~END STOP DATE~STOP REF~OQ~5568~END STOP REF~END 停止~订单~5568~结束订单

我真的认为这对 Filehelpers 来说可能是一项过于复杂的任务,但我想把它发布给社区,看看大家是否能提供帮助。

如您所见,该文件大部分以波浪号分隔,但定义中的某些字段也充当分隔符。例如 REF 或 STOP 都包含可能是许多记录深度的附加信息。您可以有多个 STOP 定义 1 到 999 个位置记录。我真的真的认为这对 Filehelpers 来说太过分了......

如果您要尝试对文件助手进行此配置,您将从哪里开始以及如何处理所有子字段?

【问题讨论】:

  • 您是否希望使用 FileHelpers 生成有效的 EDI?您的 EDI 样本不完整。 ANSI X12 文件中有三个分隔符:段终止符(可能是 CR 或 LF,无法从您的示例中分辨出来)、元素分隔符(在您的情况下为波浪号)和子元素分隔符(在您的样本中缺少 ISA 信封段)。您可能可以使用文件助手,但这将是大量的代码,而且很麻烦。 EDIDev.com 有可以在这里为您提供帮助的库,或者商业翻译也是明智的(用于 TP 管理和 FA 协调)
  • 感谢您的回复。我无法访问我们使用的供应商的实际 858 规范。只有他们希望我们提供给他们的系统的文件规范,这是我提供的。我会看看这些库,看看我们是否可以合并它们

标签: edi filehelpers


【解决方案1】:

FileHelpers 不是处理这种复杂格式的理想工具。原因如下:

  1. 在识别和报告错误方面没有足够的灵活性。
  2. 转义字符的困难(例如,当波浪号在字段中并且需要转义时)我对 EDI 格式不够熟悉,不知道这是否可能是一个问题。
  3. FileHelpers 提供的 master/detail 工具不足

对于 (1),您没有提及您是导入还是导出 EDI,或两者兼而有之。如果您只导出 EDI,则不需要错误报告。

对于 (2),您可以通过为问题字段提供 own custom converters 来解决转义问题,但您可能会发现每个字段都有一个自定义转换器。

对于 (3),有两种使用 FileHelpers 处理主/详细记录的方法,但是如果没有一些严重的黑客攻击,它们都不太可能满足您的要求

一种方法是to use the MasterDetailEngine,但这仅支持一种详细信息类型和一层嵌套,因此您必须为这两种方法找到解决方法。

另一种方法是使用to use the MultiRecordEngine。但是,它将每一行视为不相关的记录,层次结构(即哪个 S 记录属于哪个 H 记录)将难以确定。

【讨论】:

  • 是的,我们认为文件助手不能完全胜任这个任务。我要结束这个问题。谢谢您的意见。更难的是,该文件不是真正的 EDI 文件,它是一种文件布局,然后由 PI/SAP 转换为 EDI……我们采用了另一种方式,因为在这种情况下,文件助手无法使用。跨度>
猜你喜欢
  • 2011-07-25
  • 2011-08-03
  • 2011-08-15
  • 1970-01-01
  • 1970-01-01
  • 2020-12-25
  • 1970-01-01
  • 1970-01-01
  • 2011-09-25
相关资源
最近更新 更多