2016-06-26 4 views
1

Ich mache einen Windows-Dienst, der auf die Erstellungsnachricht einer benutzerdefinierten Aktivitäts-SMS auslöst. Dieses Programm sendet die tatsächlichen SMS mit einem SMS-Dienstanbieter von Drittanbietern.Wie bekomme ich die Guids und das Handy von einer Party List?

Daher muss ich die Mobiltelefonnummern für jeden Kontakt/Führung/Benutzer/Konto in das Feld "An" der SMS-Aktivität erhalten. Dies ist ein Feld vom Typ: Party List.

Zusätzlich habe ich ein anderes Feld („new_msisdn“), die ich es verwenden, wenn „auf“ Feld leer sein. (In diesem Feld Benutzer Telefonnummern direkt eingeben)

Ich bin derzeit mit dem folgenden Code :

EntityCollection results = CrmService.RetrieveMultiple(query);   
string msisdn; 
string newmessage; 
Entity entity; 
int encode; 
bool flash; 
res = new Message[results.Entities.Count]; 
if (results != null && results.Entities.Count > 0) 
{     
    try 
     { 
     for (int i = 0; i < results.Entities.Count; i++) 
      { 
      entity = results.Entities[i]; 
       msisdn = (string)entity["new_msisdn"]; 
// I have to add an condition here to check if "to" is not empty , then get mobilephones. 
       newmessage = (string)entity["new_message"]; 
       encode = ((OptionSetValue)entity["new_messagetype"]).Value; 
       flash = (bool)entity["new_flashsms"]; 
       res[i] = new Message(); 
       res[i].crmId = entity.Id; 
       res[i].senderNumber = msisdn; 
       res[i].sendDate = DateTime.Now; 
       res[i].message = newmessage; 
       if (encode == 1) 
       res[i].encoding = 1; 
       else 
       res[i].encoding = 2; 
       if (flash) 
       res[i].flash = 2; 
       else res[i].flash = 1; 
      } 
     } 

Ich habe keine Ideen, dies zu tun. Übrigens verwende ich CRM 2015.

Antwort

0

Versuchen Sie, etwas wie unten zu verwenden.

if(entity.Attributes.Contains("to")) 
{ 
EntityCollection to=(EntityCollection)entitiy["to"]; 
foreach(Entity toEntity in to.Entities) 
    { 
    //You will get each to field record here. 
    //Use that information to get the mobile numbers of respective users. 
    Guid Id=toEntity.Id; 
    //Below code mostly will return string.empty. 
    //You may have to query CRM to get mobile number for respective contacts. 
    string mobileNumber=toEntity.Attributes.Contains("mobilenumber")?toEntity["mobilenumber"].ToString():string.Empty; 
    } 
} 

Ich hoffe, ich habe Ihre Anfrage angesprochen. Bitte lassen Sie uns wissen, wenn Sie weitere Fragen dazu haben.

Es ist auch eine bewährte Methode zu prüfen, ob das Attribut bereits im Entitätsobjekt verfügbar ist oder nicht, bevor ein bestimmtes Attribut verwendet wird.

+0

Vielen Dank für Ihre Antwort. Aber ich fand es besser, die Entity-Referenz zu verwenden, die den Namen der Entity und ihre GUID enthält – Farhad

+0

Farhad, ich dachte, du willst Guid und MobileNumber bekommen. Wenn Sie möchten, dass der Name Entity Object dieses Attribut auch haben kann. Ich habe versucht, auf Ihren Ansatz zu antworten, die Daten in einer Entitätssammlung zu erhalten und diese Daten dann weiter zu verwenden. Entity Reference ist auch eine andere Option, um die GUID zu erhalten. Aber für die Handynummer müssen Sie möglicherweise erneut die Datenbank mit diesem guid und logischen Namen treffen. Da Sie bereits eine Sammlung von Berechtigungen haben, können Sie das nicht wiederverwenden. Das vermeidet unnötige DB-Treffer richtig. – Renjith

+0

Vielen Dank Renjith. Ihre Antwort zeigt mir den Weg. Übrigens, Sie haben recht, beide Lösungen sind korrekt, aber Ihre wird weniger Treffer verursachen. – Farhad