Page 1 sur 1

OM - rendre objet non persistant

MessagePosté: Mer 23 Nov 2016 11:38
de romulus001
Bonjour,

Je développe ma première application à l'aide des objets métiers, où je dois créée un BL client.
Dans mon cas, je fais appel aux objets métiers pour remonter le prix unitaire d'un article (comme je ne sais pas si le client a ou non un tarif préférentiel, je préfère faire ainsi). Pour y arriver, je fais appel à un processus de création d'un BL client mais je n'exécute pas le processus, j'insère une unique ligne dans mon document de vente avec l'article dont il est question, puis je remonte la valeur du champ "prix unitaire", voici mon code (en vb.net) :

Code: Tout sélectionner
Public Function GetPrixVente(ByVal _ar_ref As String, ByVal _ct_num As String) As Double
        Dim OM_ProcDocVente As Objets100Lib.IPMDocument = Nothing
        OM_ProcDocVente = _OM_Gescom.CreateProcess_Document(Objets100Lib.DocumentType.DocumentTypeVenteLivraison)

        Dim OM_CLIENT As Objets100Lib.IBOClient3 = _OM_Gescom.CptaApplication.FactoryClient.ReadNumero(_ct_num)

        Dim OM_DocVenteEntete As Objets100Lib.IBODocumentVente3 = OM_ProcDocVente.Document

        OM_DocVenteEntete.SetDefaultClient(OM_CLIENT)

        Dim OM_ARTICLE As Objets100Lib.IBOArticle3 = _OM_Gescom.FactoryArticle.ReadReference(_ar_ref)

        OM_ProcDocVente.AddArticle(OM_ARTICLE, 10)
        Dim pLig As Objets100Lib.IBODocumentVenteLigne3 = OM_ProcDocVente.Document.FactoryDocumentLigne().List(1)

        Return pLig.DL_PrixUnitaire
End Function


Ce code fonctionne. Là, j'ai voulu ajouter une info libre au niveau de l'entête du document, et là, le vilain message d'erreur qui apparait à l'écran : Ce fichier est en cours d’utilisation !

Quand je ferme mon application, je n'ai pas de problème pour créer mon info libre.

Je pensais instancier mon objet processus de document en faisant
Code: Tout sélectionner
        Using OM_Proc As Objets100Lib.IPMDocument = _OM_Gescom.CreateProcess_Document(Objets100Lib.DocumentType.DocumentTypeVenteLivraison)

        End Using


Mais j'ai l'erreur
l'opérande 'Using' de type 'IPMDocument' doit implémenter 'System.IDisposable'


Vous auriez des suggestions?

Merci

PS: je suis en version 6.0 sur les objets métiers

Re: OM - rendre objet non persistant

MessagePosté: Ven 25 Nov 2016 22:01
de asr31
Bonjour,

Les Objets Métiers suivent la même logique que l'application cliente (la gescom dans ce cas), et on le voit en traçant sous SQL ce que fait l'application :
On crée une entête de document (la gescom dit alors INSERT à SQL) et après on met à jour les informations libre s'y référant (la gescom dit UPDATE de l'objet déjà créé).

L'entête de document doit être un objet persistant pour pouvoir y appliquer des règles sur des tables ou règles dépendantes comme le sont les informations libres.

Cordialement,

Re: OM - rendre objet non persistant

MessagePosté: Lun 28 Nov 2016 12:30
de romulus001
Bonjour,

asr31 a écrit:On crée une entête de document (la gescom dit alors INSERT à SQL) et après on met à jour les informations libre s'y référant (la gescom dit UPDATE de l'objet déjà créé).


Sauf que le processus IPMDocument permet de créer directement l'entête et les lignes du document, si processus ne peut pas être exécuté, rien n'est crée en base, et justement ce que je fais. Normalement, si la méthode du processus CanProcess renvoie la valeur False, il doit bien y avoir un moyen de pouvoir détruire l'objet, ce qui rendrait l'objet non persistant.

Re: OM - rendre objet non persistant

MessagePosté: Lun 28 Nov 2016 15:43
de romulus001
J'ai trouvé, j'ai eu raison de récupérer les exemples et exercices lors de la formation sur les objets métiers :

Code: Tout sélectionner
 If OM_DocVenteEntete IsNot Nothing Then
    OM_DocVenteEntete.Read() 'déverrouillage du document
    _OM_Gescom.Close()
End If