123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112113114115116117118119120121122123124125126127128129130131132133134135136137 |
- unit ReportInteractInfo;
- interface
- uses
- Classes, ScFileArchiver, XmlDoc, XmlIntf;
- Type
- TInteractInfo = class
- private
- FTemplateFile: string;
- FInteractFlag: Integer;
- FInteractSubFlag: Integer;
- FMemoryStream: TMemoryStream;
- FAudits: TStringList;
- FSql: string;
- FSpecialProjGatherTypes: TStringList;
- procedure LoadReportTemplate;
- procedure LoadAuditor(AXmlNode: IXMLNode);
- procedure LoadSql(AXmlNode: IXMLNode);
- procedure LoadSpecialProjGatherTypes(AXmlNode: IXMLNode);
- procedure LoadInteractInfo(AXmlNode: IXMLNode);
- public
- constructor Create(const AFileName: string);
- destructor Destroy; override;
- procedure LoadXmlFromStream;
- property Audits: TStringList read FAudits;
- property Sql: string read FSql;
- property SpecialProjGatherTypes: TStringList read FSpecialProjGatherTypes;
- end;
- implementation
- uses
- UtilMethods;
- { TInteractInfo }
- constructor TInteractInfo.Create(const AFileName: string);
- begin
- FTemplateFile := AFileName;
- FAudits := TStringList.Create;
- FSpecialProjGatherTypes := TStringList.Create;
- LoadReportTemplate;
- LoadXmlFromStream;
- end;
- destructor TInteractInfo.Destroy;
- begin
- FMemoryStream.Free;
- inherited;
- end;
- procedure TInteractInfo.LoadAuditor(AXmlNode: IXMLNode);
- var
- vAudits: IXMLNodeList;
- vAudit: IXMLNode;
- i: Integer;
- begin
- if AXmlNode = nil then Exit;
- FAudits.Clear;
- vAudits := AXmlNode.ChildNodes;
- for i := 0 to vAudits.Count - 1 do
- begin
- vAudit := AXmlNode.ChildNodes.Nodes[i];
- if vAudit.HasAttribute('职位') then
- FAudits.Add(vAudit.Attributes['职位']);
- end;
- end;
- procedure TInteractInfo.LoadInteractInfo(AXmlNode: IXMLNode);
- var
- XmlNode: IXMLNode;
- begin
- XmlNode := AXmlNode.ChildNodes.FindNode('附加信息');
- LoadAuditor(XmlNode.ChildNodes.FindNode('审核意见'));
- LoadSql(XmlNode.ChildNodes.FindNode('查询语句'));
- LoadSpecialProjGatherTypes(XmlNode.ChildNodes.FindNode('特殊汇总项目'));
- end;
- procedure TInteractInfo.LoadReportTemplate;
- var
- vArchiver: TReportArchiver;
- begin
- vArchiver := TReportArchiver.Create;
- vArchiver.FileName := FTemplateFile;
- FMemoryStream := vArchiver.Extract;
- end;
- procedure TInteractInfo.LoadSpecialProjGatherTypes(AXmlNode: IXMLNode);
- var
- vSpecialProjs: IXMLNodeList;
- vSpecialProj: IXMLNode;
- i: Integer;
- begin
- if AXmlNode = nil then Exit;
- FSpecialProjGatherTypes.Clear;
- vSpecialProjs := AXmlNode.ChildNodes;
- for i := 0 to vSpecialProjs.Count - 1 do
- begin
- vSpecialProj := vSpecialProjs.Nodes[i];
- if vSpecialProj.HasAttribute('类型') then
- FSpecialProjGatherTypes.Add(vSpecialProj.Attributes['类型']);
- end;
- end;
- procedure TInteractInfo.LoadSql(AXmlNode: IXMLNode);
- begin
- if AXmlNode = nil then Exit;
- if AXmlNode.HasAttribute('Sql语句') then
- FSql := AXmlNode.Attributes['Sql语句'];
- end;
- procedure TInteractInfo.LoadXmlFromStream;
- var
- FXmlDocument: IXMLDocument;
- begin
- FXmlDocument := TXMLDocument.Create(nil) as IXMLDocument;
- try
- FXmlDocument.Options := [doNodeAutoCreate,doNodeAutoIndent,doAutoPrefix,doNamespaceDecl];
- if not Assigned(FMemoryStream) then Exit;
- FXmlDocument.LoadFromStream(FMemoryStream);
- LoadInteractInfo(FXmlDocument.DocumentElement);
- finally
- FXmlDocument := nil;
- end;
- end;
- end.
|