/// ////////////////////////////////////////////////////// private static string GetKeyChamp(CChampCustom champ) { //TESTDBKEYOK return(CInfoRelationComposantFiltreEntiteToChampEntite.GetKeyChamp(champ, true) + "." + CDefinitionProprieteDynamique.c_strCaractereStartCleType + c_strCleType + CDefinitionProprieteDynamique.c_strCaractereEndCleType + CInfoRelationEValeurChampCustomToDisplay.GetKeyChamp(champ)); }
/// ////////////////////////////////////////////////////// private static string GetKeyChamp(CChampCustom champ) { if (champ.TypeDonneeChamp.TypeDonnee == sc2i.data.dynamic.TypeDonnee.tObjetDonneeAIdNumeriqueAuto) { return(CInfoRelationComposantFiltreChampToEntite.GetKeyChamp(champ, true) + "." + CDefinitionProprieteDynamique.c_strCaractereStartCleType + c_strCleType + CDefinitionProprieteDynamique.c_strCaractereEndCleType + CInfoRelationComposantFiltreEntiteToChampEntite.GetKeyChamp(champ, false)); } return(champ.Nom.Replace(" ", "_")); }
//------------------------------------------------------------ public override CResultAErreur GetValue(object objet, string strPropriete) { CResultAErreur result = CResultAErreur.True; result.Data = null; string strIdChamp = null; bool bEntiteToChamp = false; if ( /*Pour compatibilité, avant modifs de décembre 2015, le nom du champ était en fait le même qu'une propriété champ custom. * En décembre 2015, ajout de la possiblité de retourner les valeurs display de champ custom dans les requêtes, * ce qui a changé le nom de la propriétés * */ CInfoRelationEntiteToValeurChampCustom.DecomposeNomPropriete(strPropriete, ref strIdChamp) || /*fin pour compatiblité*/ CInfoRelationComposantFiltreEntiteToChampEntite.DecomposeNomPropriete(strPropriete, ref strIdChamp, ref bEntiteToChamp)) { IElementAChamps eltAChamps = objet as IElementAChamps; if (eltAChamps == null) { return(result); } result.Data = eltAChamps.GetValeurChamp(strIdChamp); CChampCustom champ = new CChampCustom(CContexteDonneeSysteme.GetInstance()); if (result.Data != null && champ.ReadIfExists(CDbKey.CreateFromStringValue(strIdChamp))) { if (!champ.IsChoixParmis()) { result.Data = result.Data.ToString(); } else { foreach (CValeurChampCustom valeur in champ.ListeValeurs) { if (valeur.Value.Equals(result.Data)) { result.Data = valeur.Display; return(result); } } } } } else if (CInfoRelationEValeurChampCustomToDisplay.DecomposeNomPropriete(strPropriete, ref strIdChamp)) { //Rien de spécial, il s'agit de la navigation vers la valeur du champ qui a déjà été reprise par le composant filtre to champ entité //car la propriété complète d'un definitionDisplayValue est donnée par GetKeyChamp qui ajoute un composant Element->ValeurChamp + ValeurChamp->Display value result.Data = objet; } return(result); }
//------------------------------------------------------------------------------------------ public void ReadArbre(CListeObjetsDonnees listeSource, CListeObjetsDonnees.CArbreProps arbre, List <string> lstPaquetsALire) { string strIdChamp = ""; string strPropriete = ""; string strCle = ""; if (listeSource.Count == 0) { return; } bool bFromEntiteToChamp = false; if (!CDefinitionProprieteDynamique.DecomposeNomProprieteUnique(arbre.ProprietePrincipale, ref strCle, ref strPropriete)) { return; } if (!CInfoRelationComposantFiltreEntiteToChampEntite.DecomposeNomPropriete(strPropriete, ref strIdChamp, ref bFromEntiteToChamp)) { //c'est une relation vers des valeurs de champ qui pointent sur cette valeur. //Ignore, et traite tout dans le composant suivant qui est un Entité to champ à l'envers listeSource.ReadDependances(arbre); return; } //On a affaire à une liste source qui contient des valeurs qui sont pointées //par des valeurs de champs, et on veut les éléments qui pointent sur ces valeurs de champs CChampCustom champ = new CChampCustom(listeSource.ContexteDonnee); CDbKey dbKeyChamp = CDbKey.CreateFromStringValue(strIdChamp); if (!champ.ReadIfExists(dbKeyChamp)) { return; } //Vérifie que la liste source est bien du type de données du champ custom if (champ.TypeDonnee.TypeDotNetNatif != listeSource.TypeObjets) { return; } IObjetDonneeAIdNumerique obj = listeSource[0] as IObjetDonneeAIdNumerique; if (obj == null) { return; } string strChampId = obj.GetChampId(); if (lstPaquetsALire == null) { lstPaquetsALire = listeSource.GetPaquetsPourLectureFils(strChampId, null); } //Trouve le type des éléments à champs Type typeElementsFinaux = champ.Role.TypeAssocie; //Trouve le type des relations aux elementAchamp_ChampCustom IObjetDonneeAChamps elt = Activator.CreateInstance(typeElementsFinaux, new object[] { listeSource.ContexteDonnee }) as IObjetDonneeAChamps; if (elt == null) { return; } string strNomTableRelToChamp = elt.GetNomTableRelationToChamps(); Type tpRelToChamp = CContexteDonnee.GetTypeForTable(strNomTableRelToChamp); if (tpRelToChamp == null) { return; } foreach (string strPaquet in lstPaquetsALire) { CListeObjetsDonnees lst = new CListeObjetsDonnees(listeSource.ContexteDonnee, typeElementsFinaux); //TESTDBKEYTODO string strChampCustomId = dbKeyChamp.IsNumericalId() ? CChampCustom.c_champId : CObjetDonnee.c_champIdUniversel; lst.Filtre = new CFiltreDataAvance( CContexteDonnee.GetNomTableForType(typeElementsFinaux), strNomTableRelToChamp + "." + strChampCustomId + "=@1 and " + strNomTableRelToChamp + "." + CRelationElementAChamp_ChampCustom.c_champValeurInt + " in " + strPaquet, dbKeyChamp.GetValeurInDb()); lst.AssureLectureFaite(); lst.ReadDependances(arbre); } }