smooks を使用して、Java プログラムで ANSI.X12 メッセージを作成しています。私はxmlファイルを使用してX12メッセージを自分で定義しています(http://www.milyn.org/schema/edi-message-mapping-1.2.xsd
. そのほとんどは十分に機能しますが、ISA セグメントに問題があります。私はそれを次のように定義しています:
<?xml version="1.0" encoding="UTF-8"?>
<medi:edimap xmlns:medi="http://www.milyn.org/schema/edi-message-mapping-1.2.xsd">
<medi:description name="Some X12 Message Definition" version="1.0" />
<medi:delimiters segment=" " field="*"
component="^" sub-component="~" escape="?" />
<medi:segments xmltag="Segments">
<medi:segment segcode="ISA" xmltag="InterchangeControlHeader">
<medi:field xmltag="AuthorizationInformationQualifier" />
<medi:field xmltag="AuthorizationInformation"/>
<medi:field xmltag="SecurityInformationQualifier"/>
<medi:field xmltag="SecurityInformation"/>
<medi:field xmltag="InterchangeSenderQualifier"/>
<medi:field xmltag="InterchangeSenderID"/>
<medi:field xmltag="InterchangeReceiverQualifier"/>
<medi:field xmltag="InterchangeReceiverID"/>
<medi:field xmltag="InterchangeDate" type="Date" typeParameters="format=yyMMdd"/>
<medi:field xmltag="InterchangeTime" type="Date" typeParameters="format=HHmm"/>
<medi:field xmltag="InterchangeControlStandardsIdentifier"/>
<medi:field xmltag="InterchangeControlVersionNumber"/>
<medi:field xmltag="InterchangeControlNumber"/>
<medi:field xmltag="AcknowledgmentRequested"/>
<medi:field xmltag="UsageIndicator"/>
<medi:field xmltag="ComponentElementSeparator"/>
</medi:segment>
[...]
正しい長さの文字列を挿入する限り、これは主に使用できます。問題はコンポーネントセパレーターにあります(^
この場合)。ISA セグメントは、どの文字がセグメントや要素などを区切るために使用される特別な文字であるかを定義し"^"
ますComponentElementSeparator
。特別な ISA セグメント。
私は得る
ISA*00* *00* *01*000000987654321*01*000000123456789*141031*1656*U*00401*000002388*0*T*?^
どこにあるべきか
ISA*00* *00* *01*000000987654321*01*000000123456789*141031*1656*U*00401*000002388*0*T*^
?
(の前の最後の に注意してください^
)。
medi:delimiters
これまでに得た唯一の回避策は、などに別の文字を入れる<medi:delimiters segment=" " field="*" component="<" sub-component="~" escape="?" />
ことですが、その文字がデータのどこかに現れるとすぐに問題が発生します。メッセージは分離する必要のあるコンポーネントを使用していないため、これは特にイライラします。
smooks のドキュメントでそれに関する情報を見つけることができませんでしたが、何らかの方法でそれを行う必要があります。結局のところ、X12 は私が知っている 2 つの理由のうちの 1 つであり、誰もがそもそも smook を使用する (もう 1 つは EDIFACT である) ということです。
smooks メッセージの説明に ISA を挿入する正しい方法を知っている人はいますか?