Dynamics 365 et WINDEV®

Lecture de l'entity "account" sur 2 attributs
Après avoir réalisé la connection à l'environnement Microsoft Dynamics 365, le premier code de lecture des données sera une simple lecture de "l'entity account" sur les attributs "telephone1" et "telephone1"

Pour arriver à ce résultat, nous allons utiliser les outils XRM de lecture des données.
PREREQUIS
Le code d'initialisation à l'environnement Dynamics365 doit fonctionner correctement. Dans le cas contraire retournez sur la fiche technique qui détaille la méthode pour se connecter à Dynamics 365 en WLangage Windev.

Il est fortement conseillé de prendre connaissance des articles techniques du support Microsoft Dynamics365. C'est d'ailleurs à partir de ces exemples fournis par Microsoft que ce projet Windev et la traduction en WLangage a pû être réalisée.

Fiche technique 20170106-1334 : exemple de lecture entity account en WLangage Windev

Cet exemple utilise la méthode de connexion précédemment proposée et vous aurez simplement à construire une fenêtre avec les trois zones "SAI_xxx" pour finaliser le passage de paramètres de l'identification CrmServiceClient.

nItem est entier
TableSupprimeTout(TABLE_Resultat)

//Comment_1 
sUserName est une chaîne = SAI_User     		
sPassword est une chaîne = SAI_Password	
sCrmRegion est une chaîne = "EMEA"	
sOrgName est une chaîne = SAI_Organisme	
bisOffice365 est booléen = 1

clCrmServiceClient est un CrmServiceClient(sUserName,CrmServiceClient.MakeSecureString(sPassword),sCrmRegion,sOrgName,0,0,Null,bisOffice365) 

sEntity est une chaîne = "account"
sAttName est une chaîne = "name"
sAttTelephone1 est une chaîne = "telephone1"
sAttTelephone2 est une chaîne = "telephone2"

//Comment_2 
sFetchXML est une chaîne =[
‹fetch version='1.0' output-format='xml-platform' mapping='logical' distinct='false' returntotalrecordcount='true' ›
‹entity name='_account_'›
	‹attribute name='_name_' /›
	‹attribute name='_telephone1_' /›
	‹attribute name='_telephone2_' /›
‹/entity›
‹/fetch›
]

sFetchXML = Remplace(sFetchXML,"_account_",sEntity)
sFetchXML = Remplace(sFetchXML,"_name_",sAttName)
sFetchXML = Remplace(sFetchXML,"_telephone1_",sAttTelephone1)
sFetchXML = Remplace(sFetchXML,"_telephone2_",sAttTelephone2)

//Comment_3
pclEntityCollection est une EntityCollection dynamique
pclEntityCollection = allouer un EntityCollection
pclEntityCollection <- clCrmServiceClient.GetEntityDataByFetchSearchEC(sFetchXML,clCrmServiceClient.GetMyCrmUserId())

//Comment_4
clConverter est un GuidConverter	
clEntity est un Entity(sEntity) dynamique

//Comment_5
POUR i=0 _A_ pclEntityCollection.TotalRecordCount -1
	clEntity = allouer un Entity
	clEntity <- pclEntityCollection.get_item(i)
	TableAjoute(TABLE_Resultat) ; nItem++
	TABLE_Resultat.COL_Colonne1[nItem] = (clEntity.Contains(sAttTelephone1)=1 ? clConverter.ConvertToString(clEntity.get_Item(sAttTelephone1)) SINON "")
	TABLE_Resultat.COL_Colonne2[nItem] = (clEntity.Contains(sAttName)=1 ? clConverter.ConvertToString(clEntity.get_Item(sAttName)) SINON "") 
	TABLE_Resultat.COL_Colonne3[nItem] = (clEntity.Contains(sAttTelephone2)=1 ? clConverter.ConvertToString(clEntity.get_Item(sAttTelephone2)) SINON "")
	TABLE_Resultat.COL_GUID[nItem] = clConverter.ConvertToString(clEntity.get_Id())
FIN	

  • Comment_1
  • La fenêtre doit contenir 3 zones de saisies (SAI_xxx) pour initialiser les variables d'identification de votre environement Dynamics 365.
  • Comment_2
  • "Searches for data based on a FetchXML query" : pour toutes les chaines FetchXML il faudra ajouter la variable "returntotalrecordcount" qui sera utilisée pour parcourir le résultat de la requête. C'est LA DIFFERENCE avec les FetchXML proposés dans les exemples Microsoft et aussi ceux que vous pouvez générer avec l'environnement Dynamics 365.
  • Comment_3
  • Déclaration dynamique de l'objet EntityCollection et recherche des données basée sur une requête FetchXML
  • Comment_4
  • Convertisseur de type pour convertir Guid objets vers et à partir d’autres représentations
  • Comment_5
  • Reste à parcourir les données et les affecter dans une table mémoire. Attention, s'il n'ya a pas de données dans un attribut, il y a un risque d'erreur d'ou le test (clEntity.Contains(Attribut)=1...

Nom de la fenêtre Windev : FEN_Dynamics_01.wdw

Cette fenêtre est maintenant totalement opérationnelle et l'objectif de départ qui consiste à lire un "entity" sur 1 ou plusieurs attributs est atteint.
En cliquant sur le bouton "account", le programme charge et affiche en table mémoire Windev toutes les données de l'entity account sur les deux attributs telephone1 et telephone2.

Il reste maintenant un point important qui consiste à identifier dynamiquement tous les attributs d'un entity car l'objectif final est d'avoir un browser d'identity dynamique. Ce sera l'objet de la fiche technique suivante.

Conseilsicone

Gardez cette première fenêtre avec un code réduit à sa plus simple expression.
Il vous sera utile pour faire des tests sur d'autres entity et attribut, sans avoir de doute sur un code plus complexe.