2011-11-16 4 views
3

カスタムアクティビティSMSの作成メッセージでトリガするプラグインを作成しています。 これらのプラグインは、サードパーティのSMSサービスプロバイダを使用して実際のSMSを送信します。プラグインのPartyListからContact Guidを取得するにはどうすればいいですか?

したがって、私はSMSアクティビティの "To"フィールドにすべての連絡先の携帯電話番号を取得する必要があります。これは型のフィールドです:PartyList。

私は現在、次のコードを使用しています:

EntityCollection Recipients; 
Entity entity = (Entity) context.InputParameters["Target"]; 

IOrganizationServiceFactory serviceFactory = (IOrganizationServiceFactory)serviceProvider.GetService(typeof(IOrganizationServiceFactory)); 
IOrganizationService service = serviceFactory.CreateOrganizationService(context.UserId); 

Content = entity.GetAttributeValue<String>("subject"); 
Recipients = entity.GetAttributeValue<EntityCollection>("to"); 

for (int i = 0; i < Recipients.Entities.Count; i++) 
{ 
    Entity ent= Recipients[i]; 

    string number = ent["MobilePhone"].ToString();  
} 

をしかし、これは動作していない、私は耳鼻咽喉科の変数属性が格納されていないと思います。

私もActivityPartyでコーディングしようとしましたが、運が足りません。

私はあなたの誰かがこれで私を助けてくれることを願っています。

ありがとうございます!

答えて

6

ここだが、私は最終的にそれをやった方法です:返信用

EntityCollection Recipients; 
Entity entity = (Entity) context.InputParameters["Target"]; 

IOrganizationServiceFactory serviceFactory 
    = (IOrganizationServiceFactory)serviceProvider.GetService(
    typeof(IOrganizationServiceFactory)); 
IOrganizationService service = serviceFactory 
    .CreateOrganizationService(context.UserId); 

Content = entity.GetAttributeValue<String>("subject"); 
Recipients = entity.GetAttributeValue<EntityCollection>("to"); 

for (int i = 0; i < Recipients.Entities.Count; i++) 
{ 
    ActivityParty ap = Recipients[i].ToEntity<ActivityParty>(); 
    String contactid = ap.PartyId.Id.ToString(); 
    Contact c = (Contact) service.Retrieve(
    Contact.EntityLogicalName, 
    ap.PartyId.Id, 
    new ColumnSet(new string[]{ "mobilephone" })); 
    String mobilephone = c.MobilePhone; 
    ... 
} 
+0

私はプラグインで初期バインド型を使用していますが、電子メールの宛先フィールドをフェッチするのと同じ方法で問題がありました。ここに示すように、コードをlate-boundに変更することで、私の問題も解決しました。 – Sal

+0

こんにちは@ThdK、プラグインをすべてのコードに投稿できますか? –

6

Recipientsは、ActivityPartyのリストであり、連絡先、アカウント、...のリストではありません。 したがって、あなたがこののPartyIdでreferecendされたレコードを探すために必要があり、この情報を使用してPartyId

EntityReference partyId = ent.GetAttributeValue<EntityReference>("partyid"); 

を読まなければなりません。それはあなたが次にあなたが番号を読み取るために、レコードにこのレコードを取得することができ、この情報トラフ

var partyType = partyId.LogicalName; 

を得るでしょう接触、アカウント、systemuser、... である可能性があります。

+0

感謝。私はActivityPartyを使ってみました。しかし、それは決してうまくいかなかった。私のコードで何を変えなければならないのですか? 1. ActivityParty受信者。 (またはActivityParty [])? 2.受信者= entity.GetAttributeValue ( "to"); (またはActivityParty [])? これを行うと、EntityCollectionをActivityPartyにキャストできないというエラーが表示されます。 私はentitycollection型を使用し、コレクションの各オブジェクトをactivitypartyにキャストするとエラーが表示されます。 "'Microsoft.Xrm.Sdk.Entity'型のオブジェクトをキャストして 'ActivityParty'を入力できません。 私はまだ間違っていますか? – ThdK

関連する問題