Конференция "Corba" » Передать запись с множеством полей через COM
 
  • Дмитрий Белькевич (20.05.11 09:30) [0]
    Как лучше передать запись через COM, учитывая, что набор полей может меняться со временем, а интерфейс метода, передающего запись, менять не желательно.


    TArchiveSettings = record
     AMsgBalloon:    boolean;
     AMsgEmail:      boolean;
     AMsgNetSend:    boolean;
     AMsgPrinter:    boolean;
     AMsgNetworkFile: boolean;
     AMsgPrinterName: string;
     AMsgEmailSMTPServer: string;
     AMsgEmailPort:  integer;
     AMsgEmailUserName: string;
     AMsgEmailPassword: string;
     AMsgEmailFromAddress: string;
     AMsgEmailToAddress: string;
     AMsgEmailSubject: string;
     AMsgEmailNeedAuthentication: boolean;
     AMsgEmailAuthenticationType: integer;
     AMsgFileFileName: string;
     AMsgFileOverrideFile: boolean;
     AMsgNetSendFromUser: string;
     AMsgNetSendToComputer: string;
     RetryCount:     integer;
     TimeDelay:      integer;
     AcceptUnknownSOPClass: boolean;
     ServerPort:     integer;
     DBPathFormat:   integer;
     AutoStoreOperMode: integer;
     AutoStoreOperTime: integer;
     AutoStoreLongMode: integer;
     AutoStoreLongTime: integer;
     HL7Port:        integer;
     HL7Host:        string;
     HL7WaitForACK:  boolean;
     HL7Enabled:     boolean;
     HL7TestMessage: string;
     AETitlePrg:     string;
    end;



    С контролем версий записи буду разбираться отдельно.
  • Дмитрий Белькевич (20.05.11 09:31) [1]
    Да, Delphi 2010, если это важно.
  • int64 © (20.05.11 14:41) [2]
    Если структура данных будет меняться, то зачем транспортному уровню что-то знать об этой структуре?
    Передавай в каком-нить XML.
  • _Юрий (21.05.11 19:37) [3]
    Добавить к записи методы сохранения в стрим\чтения из стрима.
    Сохранить в стрим, стрим передать как вариант - массив байт. Вначале стрима писать версию, чтобы можно было безопасно грузитьcя.
  • DiamondShark © (01.06.11 12:05) [4]
    Проще всего -- сейфэррэй вариантов.
    Кошерный вариант -- в виде COM-объекта контейнера.
    Заодно проблема контроля версий решается набором реализуемых интерфейсов.
  • Дмитрий Белькевич (06.06.11 17:05) [5]
    Сделал с помощью TJvSimpleXML:


    ParamContainer:    TJvSimpleXML;




    Form1.ParamContainer.LoadFromString(Form1.ArchiveGUI1.GetSettingsToGUI);
    with Form1.ParamContainer.Root.Items do
    begin
     SpTBXCheckBox5.Checked := BoolValue('AMsgBalloon');
     SpTBXCheckBox6.Checked := BoolValue('AMsgEmail');
     SpTBXCheckBox7.Checked := BoolValue('AMsgNetSend');
     SpTBXCheckBox8.Checked := BoolValue('AMsgPrinter');
     SpTBXCheckBox9.Checked := BoolValue('AMsgNetworkFile');
     .........

  • Дмитрий Белькевич (06.06.11 17:10) [6]
    Циклическая вложенность полей-массивов в записях при таком подходе достаточно просто получилась. У меня так не только TArchiveSettings передаётся, а еще 3 записи.
 
Конференция "Corba" » Передать запись с множеством полей через COM
Есть новые Нет новых   [134427   +34][b:0][p:0.002]