正確にCRM Webサービスへの参照を追加しようとしているのはなぜですか?あなたが何をする必要があるか、あなたは、サーバー側のコードからCRMにアクセスしたいと仮定すると:
は
- コアCRM SDKのアセンブリへの参照を追加します(Microsoft.Crm.Sdk.Proxy.dllとMicrosoft.Xrm.Sdk.dll )。ダウンロード可能なSDKからダウンロードすることも、「Microsoft.CrmSdk.CoreAssemblies」NuGetパッケージを追加することもできます。
- これを実行すると、CRMと「話す」コードを書くことができます。しかし、あなたが欠けているのは実際の "接続"です。取得する方法はいくつかありますが、Xrm Toolingヘルパークラスを使用するのが最も簡単です(https://msdn.microsoft.com/en-us/library/mt608573.aspx)。必要なアセンブリを参照するか、 "Microsoft.CrmSdk.XrmTooling.CoreAssembly" NuGetパッケージを使用する必要があります。
これをすべて実行すると、Dynamics CRMに対して正常にコードを作成できるようになります。
CrmServiceClient crmSvc = new CrmServiceClient(ConfigurationManager.ConnectionStrings["MyCRMServer"].ConnectionString);
IOrganizationService orgService = crmSvc.OrganizationServiceProxy;
// Who am I?
WhoAmIResponse whoAmIResp = orgService.Execute(new WhoAmIRequest()) as WhoAmIResponse;
Guid myUserId = whoAmIResp.UserId;
// Get all accounts starting with 'A'
QueryExpression query = new QueryExpression("account");
query.ColumnSet = new ColumnSet("accountid", "name");
query.Criteria.AddCondition("name", ConditionOperator.BeginsWith, "a");
EntityCollection ecoll = orgService.RetrieveMultiple(query);
foreach(Entity account in ecoll.Entities)
{
if(account.Attributes.Contains("name"))
{
Console.WriteLine((string)account["name"]);
}
}
// Update some account
Entity accountToUpdate = new Entity("account");
accountToUpdate["accountid"] = new Guid("_some_guid_here");
accountToUpdate["name"] = "new name";
orgService.Update(accountToUpdate);
あなたがタイプセーフなアプローチを使用する場合は、プロキシクラスを生成する必要があります - のように、ここで説明:https://msdn.microsoft.com/en-us/library/gg327844.aspx
その後あなたがこのようなコードを書くことができるようになります:
DataContext data = new DataContext(orgService);
// DataContext is the name of the service context, as defined in the CrmScv tool
var myAccountData = (from a in data.AccountSet
where a.Address1_Telephone1 == "12312313"
select new
{
a.AccountId,
a.Name,
a.EMailAddress1,
a.PrimaryContactId
}).First();
Contact contactToUpdate = new Contact()
{
ContactId = myAccountData.PrimaryContactId.Id,
EMailAddress1 = myAccountData.EMailAddress1
};
orgService.Update(contactToUpdate);
...これははるかに良く、エラーを起こしにくいです。