Ho un oggetto che ha una collezione di proprietà. Quando ottengo l'entità specifica posso vedere il campo che sto cercando (opportunityid
) e che è l'attributo Value
è l'Guid
per questa opportunità. Questo è il valore che voglio, ma non sarà sempre per un'opportunità, e quindi non posso sempre guardare a opportunityid
, quindi ho bisogno di ottenere il campo in base all'input fornito dall'utente.Come si ottiene il valore di una proprietà da PropertyInfo?
Il mio codice finora è:
Guid attrGuid = new Guid();
BusinessEntityCollection members = CrmWebService.RetrieveMultiple(query);
if (members.BusinessEntities.Length > 0)
{
try
{
dynamic attr = members.BusinessEntities[0];
//Get collection of opportunity properties
System.Reflection.PropertyInfo[] Props = attr.GetType().GetProperties();
System.Reflection.PropertyInfo info = Props.FirstOrDefault(x => x.Name == GuidAttributeName);
attrGuid = info.PropertyType.GUID; //doesn't work.
}
catch (Exception ex)
{
throw new Exception("An error occurred when retrieving the value for " + attributeName + ". Error: " + ex.Message);
}
}
La dinamica attr
contiene il campo che sto cercando (in questo caso opportunityid
), che a sua volta contiene un campo valore, che è la corretta Guid
. Tuttavia, quando ottengo le informazioni PropertyInfo
(opportunityid
) non è più presente un attributo Value
. Ho provato a guardare il PropertyType.GUID
ma questo non restituisce il corretto Guid
. Come posso ottenere il valore per questa proprietà?
Bella spiegazione! GetValue() ha un secondo parametro che deve essere nullo. – helb
Sembra proprio quello di cui ho bisogno. Sto solo andando a testarlo per essere sicuro di aver capito. – sr28
Hmmm, sono sicuro che questo metodo funzionerebbe se l'avessi capito. Tuttavia, sto ricevendo un'eccezione dicendo che non è possibile convertire CRMWebService.Key in System.Guid. Ho praticamente fatto attrGuid = (Guid) info.GetValue (attr, null); – sr28