📄 jcledi_unedifact.pas
字号:
constructor TEDIFunctionalGroupSegment.Create(Parent: TEDIDataObject; ElementCount: Integer);
begin
inherited Create(Parent, ElementCount);
if Assigned(Parent) and (Parent is TEDIFunctionalGroup) then
FParent := Parent;
end;
function TEDIFunctionalGroupSegment.InternalAssignDelimiters: TEDIDelimiters;
begin
Result := nil;
// Attempt to assign the delimiters
if not Assigned(FDelimiters) then
begin
// Get the delimiters from the functional group
if Assigned(Parent) and (Parent is TEDIFunctionalGroup) then
begin
if Assigned(Parent.Delimiters) then
begin
Result := Parent.Delimiters;
Exit;
end;
// Get the delimiters from the interchange control
if Assigned(Parent.Parent) and (Parent.Parent is TEDIInterchangeControl) then
Result := Parent.Parent.Delimiters;
end;
end;
end;
//=== { TEDIInterchangeControlSegment } ======================================
constructor TEDIInterchangeControlSegment.Create(Parent: TEDIDataObject; ElementCount: Integer);
begin
inherited Create(Parent, ElementCount);
if Assigned(Parent) and (Parent is TEDIInterchangeControl) then
FParent := Parent;
end;
function TEDIInterchangeControlSegment.InternalAssignDelimiters: TEDIDelimiters;
begin
Result := nil;
// Attempt to assign the delimiters
if not Assigned(FDelimiters) then
// Get the delimiters from the interchange control
if Assigned(Parent) and (Parent is TEDIInterchangeControl) then
Result := Parent.Delimiters;
end;
//=== { TEDIMessage } ========================================================
constructor TEDIMessage.Create(Parent: TEDIDataObject; SegmentCount: Integer);
begin
if Assigned(Parent) and
((Parent is TEDIFunctionalGroup) or (Parent is TEDIInterchangeControl)) then
inherited Create(Parent, SegmentCount)
else
inherited Create(nil, SegmentCount);
FEDIDOT := ediMessage;
InternalCreateHeaderTrailerSegments;
end;
destructor TEDIMessage.Destroy;
begin
FUNTSegment.Free;
FUNHSegment.Free;
inherited Destroy;
end;
function TEDIMessage.AddSegment: Integer;
begin
Result := AddEDIDataObject;
end;
function TEDIMessage.AddSegments(Count: Integer): Integer;
begin
Result := AddEDIDataObjects(Count);
end;
function TEDIMessage.AppendSegment(Segment: TEDISegment): Integer;
begin
Result := AppendEDIDataObject(Segment);
end;
function TEDIMessage.AppendSegments(SegmentArray: TEDISegmentArray): Integer;
begin
Result := AppendEDIDataObjects(TEDIDataObjectArray(SegmentArray));
end;
function TEDIMessage.Assemble: string;
var
I: Integer;
begin
FData := '';
FLength := 0;
Result := '';
if not Assigned(FDelimiters) then // Attempt to assign the delimiters
begin
FDelimiters := InternalAssignDelimiters;
if not Assigned(FDelimiters) then
raise EJclEDIError.CreateRes(@RsEDIError031);
end;
FData := FUNHSegment.Assemble;
FUNHSegment.Data := '';
if GetCount > 0 then
for I := 0 to GetCount - 1 do
if Assigned(FEDIDataObjects[I]) then
FData := FData + FEDIDataObjects[I].Assemble;
DeleteSegments;
FData := FData + FUNTSegment.Assemble;
FUNTSegment.Data := '';
FLength := Length(FData);
Result := FData;
FState := ediAssembled;
end;
procedure TEDIMessage.DeleteSegment(Index: Integer);
begin
DeleteEDIDataObject(Index);
end;
procedure TEDIMessage.DeleteSegment(Segment: TEDISegment);
begin
DeleteEDIDataObject(Segment);
end;
procedure TEDIMessage.DeleteSegments;
begin
DeleteEDIDataObjects;
end;
procedure TEDIMessage.DeleteSegments(Index, Count: Integer);
begin
DeleteEDIDataObjects(Index, Count);
end;
procedure TEDIMessage.Disassemble;
var
I, StartPos, SearchResult: Integer;
S, S2: string;
begin
FUNHSegment.Data := '';
FUNHSegment.DeleteElements;
FUNTSegment.Data := '';
FUNTSegment.DeleteElements;
DeleteSegments;
// Check delimiter assignment
if not Assigned(FDelimiters) then
begin
FDelimiters := InternalAssignDelimiters;
if not Assigned(FDelimiters) then
raise EJclEDIError.CreateRes(@RsEDIError030);
end;
// Find the first segment
StartPos := 1;
SearchResult := StrSearch(FDelimiters.SD, FData, StartPos);
while SearchResult <> 0 do
begin
S := Copy(FData, StartPos, Length(UNHSegmentId));
S2 := Copy(FData, StartPos, Length(UNTSegmentId));
if (S <> UNHSegmentId) and (S2 <> UNTSegmentId) then
begin
I := AddSegment;
if (SearchResult - StartPos) > 0 then // data exists
begin
FEDIDataObjects[I].Data := Copy(FData, StartPos,
((SearchResult - StartPos) + FDelimiters.SDLen));
FEDIDataObjects[I].Disassemble;
end;
end
else
if S = UNHSegmentId then
begin
if (SearchResult - StartPos) > 0 then // data exists
begin
FUNHSegment.Data := Copy(FData, StartPos,
((SearchResult - StartPos) + FDelimiters.SDLen));
FUNHSegment.Disassemble;
end;
end
else
if S2 = UNTSegmentId then
begin
if (SearchResult - StartPos) > 0 then // data exists
begin
FUNTSegment.Data := Copy(FData, StartPos,
((SearchResult - StartPos) + FDelimiters.SDLen));
FUNTSegment.Disassemble;
end;
end;
StartPos := SearchResult + FDelimiters.SDLen;
SearchResult := StrSearch(FDelimiters.SD, FData, StartPos);
end;
FData := '';
FState := ediDisassembled;
end;
function TEDIMessage.GetSegment(Index: Integer): TEDISegment;
begin
Result := TEDISegment(GetEDIDataObject(Index));
end;
function TEDIMessage.InsertSegment(InsertIndex: Integer): Integer;
begin
Result := InsertEDIDataObject(InsertIndex);
end;
function TEDIMessage.InsertSegment(InsertIndex: Integer; Segment: TEDISegment): Integer;
begin
Result := InsertEDIDataObject(InsertIndex, Segment);
end;
function TEDIMessage.InsertSegments(InsertIndex, Count: Integer): Integer;
begin
Result := InsertEDIDataObjects(InsertIndex, Count);
end;
function TEDIMessage.InsertSegments(InsertIndex: Integer;
SegmentArray: TEDISegmentArray): Integer;
begin
Result := InsertEDIDataObjects(InsertIndex, TEDIDataObjectArray(SegmentArray));
end;
function TEDIMessage.InternalAssignDelimiters: TEDIDelimiters;
begin
Result := nil;
if FDelimiters = nil then // Attempt to assign the delimiters
if Assigned(Parent) and
((Parent is TEDIFunctionalGroup) or (Parent is TEDIInterchangeControl)) then
if Assigned(Parent.Delimiters) then
Result := Parent.Delimiters
else
if Assigned(Parent.Parent) and (Parent.Parent is TEDIInterchangeControl) then
Result := Parent.Parent.Delimiters;
end;
function TEDIMessage.InternalCreateSegment: TEDISegment;
begin
Result := TEDISegment.Create(Self);
end;
procedure TEDIMessage.InternalCreateHeaderTrailerSegments;
begin
FUNHSegment := TEDIMessageSegment.Create(Self);
FUNTSegment := TEDIMessageSegment.Create(Self);
end;
procedure TEDIMessage.SetSegment(Index: Integer; Segment: TEDISegment);
begin
SetEDIDataObject(Index, Segment);
end;
procedure TEDIMessage.SetUNTSegment(const UNTSegment: TEDIMessageSegment);
begin
FreeAndNil(FUNTSegment);
FUNTSegment := UNTSegment;
if Assigned(FUNTSegment) then
FUNTSegment.Parent := Self;
end;
procedure TEDIMessage.SetUNHSegment(const UNHSegment: TEDIMessageSegment);
begin
FreeAndNil(FUNHSegment);
FUNHSegment := UNHSegment;
if Assigned(FUNHSegment) then
FUNHSegment.Parent := Self;
end;
function TEDIMessage.InternalCreateEDIDataObject: TEDIDataObject;
begin
Result := InternalCreateSegment;
end;
//=== { TEDIFunctionalGroup } ================================================
constructor TEDIFunctionalGroup.Create(Parent: TEDIDataObject; MessageCount: Integer);
begin
if Assigned(Parent) and (Parent is TEDIInterchangeControl) then
inherited Create(Parent, MessageCount)
else
inherited Create(nil, MessageCount);
FEDIDOT := ediFunctionalGroup;
InternalCreateHeaderTrailerSegments;
end;
destructor TEDIFunctionalGroup.Destroy;
begin
FUNGSegment.Free;
FUNESegment.Free;
inherited Destroy;
end;
function TEDIFunctionalGroup.AddMessage: Integer;
begin
Result := AddEDIDataObject;
end;
function TEDIFunctionalGroup.AddMessages(Count: Integer): Integer;
begin
Result := AddEDIDataObjects(Count);
end;
function TEDIFunctionalGroup.AppendMessage(Message: TEDIMessage): Integer;
begin
Result := AppendEDIDataObject(Message);
end;
function TEDIFunctionalGroup.AppendMessages(
MessageArray: TEDIMessageArray): Integer;
begin
Result := AppendEDIDataObjects(TEDIDataObjectArray(MessageArray));
end;
function TEDIFunctionalGroup.Assemble: string;
var
I: Integer;
begin
FData := '';
FLength := 0;
Result := '';
if not Assigned(FDelimiters) then // Attempt to assign the delimiters
begin
FDelimiters := InternalAssignDelimiters;
if not Assigned(FDelimiters) then
raise EJclEDIError.CreateRes(@RsEDIError020);
end;
FData := FUNGSegment.Assemble;
FUNGSegment.Data := '';
if GetCount > 0 then
for I := 0 to GetCount - 1 do
if Assigned(FEDIDataObjects[I]) then
FData := FData + FEDIDataObjects[I].Assemble;
DeleteMessages;
FData := FData + FUNESegment.Assemble;
FUNESegment.Data := '';
FLength := Length(FData);
Result := FData;
FState := ediAssembled;
end;
procedure TEDIFunctionalGroup.DeleteMessage(Index: Integer);
begin
DeleteEDIDataObject(Index);
end;
procedure TEDIFunctionalGroup.DeleteMessage(Message: TEDIMessage);
begin
DeleteEDIDataObject(Message);
end;
procedure TEDIFunctionalGroup.DeleteMessages;
begin
DeleteEDIDataObjects;
end;
procedure TEDIFunctionalGroup.DeleteMessages(Index, Count: Integer);
begin
DeleteEDIDataObjects(Index, Count);
end;
procedure TEDIFunctionalGroup.Disassemble;
var
I, StartPos, SearchResult: Integer;
begin
FUNGSegment.Data := '';
FUNGSegment.DeleteElements;
FUNESegment.Data := '';
FUNESegment.DeleteElements;
DeleteMessages;
// Check delimiter assignment
if not Assigned(FDelimiters) then
begin
FDelimiters := InternalAssignDelimiters;
⌨️ 快捷键说明
复制代码
Ctrl + C
搜索代码
Ctrl + F
全屏模式
F11
切换主题
Ctrl + Shift + D
显示快捷键
?
增大字号
Ctrl + =
减小字号
Ctrl + -