Exemple Annuaire des Objets Métiers en Delphi

Forum consacré aux développements d'applications interfacées avec les logiciels Sage

Modérateurs: Super Modérateur, Modérateurs

Règles du forum
Merci de prendre connaissance des règles d'utilisation du forum

Avant de poster un nouveau message, utilisez la fonction RECHERCHER. Indiquez la VERSION de votre logiciel et toutes informations utiles à la résolution de votre question. Ne rédigez pas vos messages en MAJUSCULES. Soyez courtois et pensez aux formules de POLITESSE d'usage. Les messages à vocation COMMERCIALE ou PUBLICITAIRE seront supprimés.

*** LORSQU'UN SUJET EST RESOLU, SON AUTEUR DOIT EDITER LE 1ER MESSAGE DU SUJET EN HAUT DE PAGE ET COCHER "SUJET RESOLU" ***

Exemple Annuaire des Objets Métiers en Delphi

Messagede tbothorel » Lun 27 Sep 2010 16:04

Bonjour,

dans un but d'apprentissage je converti tous les exemples de formation, web formations de VB en Delphi. Je bute sur un problème dans l'exemple Annuaire installé avec les objets métiers (V3), pour remplir les ComboBox des devises. Le code VB se trouve dans la fonction InitSaisieBanque() du fichier FrmDetail.vb :

Code: Tout sélectionner
            For Each CDevise As IBPDevise2 In Me.BaseCpta.FactoryDevise.List
                Me.cmbBqDevise.Items.Add(New CBODevise(CDevise))
            Next


que j'ai converti en Delphi pour l'instant en

Code: Tout sélectionner
var CBODevise : TCBODevise;

    with FBaseCpta.FactoryDevise.List do
    begin
      for I := 1 to Count do
        CBODevise := TCBODevise.Create(Item[I] as IBPDevise2);
        try
          cbBqDevise.Items.AddObject(CBODevise.ToString, CBODevise);
        finally
          TCBODevise.Free;
        end;
      end;
    end;


en VB.net que je ne connais pas, apparemment en stockant directement un objet dans le ComboBox, il renvoie la représentation de la fonction ToString si elle existe. En delphi l'objet est "attaché" à chaque item du combobox en plus de la chaine affichée.

Pour info Sage est passé par un objet CBODevise qui ne fait pas partie des objet métiers, défini dans Mod_Adapter.vb :

Code: Tout sélectionner
   Public Class ControlObjet100
        Private mPersistObject As IBIPersistObject

        Public Sub New(ByVal obj As IBIPersistObject)
            mPersistObject = obj
        End Sub

        Public Overridable Function GetObject() As IBIPersistObject
            Return mPersistObject
        End Function

        Public Overrides Function ToString() As String
            Return ""
        End Function
    End Class

    Public Class CBODevise
        Inherits ControlObjet100

        Public Sub New(ByVal obj As IBIPersistObject)
            MyBase.New(obj)
        End Sub

        Public Overrides Function ToString() As String
            Return GetInterface().D_Intitule
        End Function

        Public Function GetInterface() As IBPDevise2
            Return GetObject()
        End Function

    End Class


que j'ai converti en Delphi par :

Code: Tout sélectionner

{ TControlObjet100 }

constructor TControlObjet100.Create(AObj: IBIPersistObject);
begin
  FPersistObject := AObj;
end;

function TControlObjet100.GetObject: IBIPersistObject;
begin
  Result := FPersistObject;
end;

function TControlObjet100.ToString: String;
begin
  result := '';
end;

{ TCBODevise }

function TCBODevise.ToString: String;
begin
  Result := GetInterface.D_Intitule;
end;

function TCBODevise.GetInterface: IBPDevise2;
begin
  Result := GetObject() as IBPDevise2;
end;



Le problème : Sous delphi, dans la boucle de récupération des devises, CBODevise.ToString renvoie à chaque fois une chaine vide. Ce que je ne comprend pas, c'est que dans FrmFetail.vb/IniTxtContact(), on a exactement la même chose pour récupérer la liste des services des contacts :

Code: Tout sélectionner
        For Each mCBPService As IBPServiceContact In BaseCpta.FactoryServiceContact.List
            Me.cbCtcService.Items.Add(New CBPService(mCBPService))


En Delphi :

Code: Tout sélectionner
var CBPService : TCBPService;

  with FBaseCpta.FactoryServiceContact.List do
  begin
    for i := 1 to Count do
    begin
      CBPService := TCBPService.Create(Item[I] as IBPServiceContact);
      try
        cbCtcService.Items.AddObject(CBPService.ToString, CBPService);
      finally
        CBPService.Free;
      end;
    end;
  end;


L'objet CBPService est construit de la même manière que CBODevise :

Code: Tout sélectionner
function TCBPService.ToString: String;
begin
  Result := GetInterface.S_Intitule;
end;

function TCBPService.GetInterface: IBPServiceContact;
begin
  Result := GetObject() as IBPServiceContact;
end;


et je récupère parfaitement la liste des services.
tbothorel
Posteur néophyte
Posteur néophyte
 
Messages: 19
Inscription: Mer 30 Avr 2008 12:22

Retourner vers Développements ODBC, Objets métiers, SQL

Qui est en ligne

Utilisateurs parcourant ce forum: Aucun utilisateur enregistré et 0 invités