2016-06-01 8 views
1

CRMでシナリオを作成しました。ここで、ExcelファイルをアップロードするMVCアプリケーションを作成し、ファイルの検証を行い、レコードの検証が完了したら、 CRMでレコードを取得するには、CRMで現在ログインしているユーザーをどのように処理して、その特定のユーザーが作成を実行してレコードを所有しているかを知る必要があります。私は現在、ADで作成したCRMユーザーを使用していますが、これはプロセス/アプリケーションを実行するログインユーザーである必要があります。現在、CRMユーザーは、どのユーザーがアップロードしたかにかかわらず、アップロード時にすべてのレコードを所有しています。以下の私のコードを見てください。CRM Dynamics 2013レコードの所有者として現在のログを渡す方法

public ActionResult ImportDataToCRM(CRM_Embrace_IntegrationEntities1 db) 
{ 
    CrmConnection conn = new CrmConnection("CRM"); 
    IOrganizationService service = new OrganizationService(conn); 
    WhoAmIRequest whoReq = new WhoAmIRequest(); 
    WhoAmIResponse whoResp = (WhoAmIResponse)service.Execute(whoReq); 
    Guid userid = whoResp.UserId; 
    var cleanClaimsFromDB = db.CleanSupplierClaims.Select(x => x).ToList(); 

    foreach (var claim in cleanClaimsFromDB) 
    { 
     new_supplierclaimsupdate CRMSupplierClaimsData = new new_supplierclaimsupdate() 
     { 
      new_Action = claim.Action.Trim(), 
      new_InvoiceNumebr = claim.Line_Number.Trim(), 
      new_TotalClaim = Convert.ToDecimal(claim.Total_Claim).ToString(), 
      new_Currency = claim.Currency.Trim(), 
      new_Supplier = claim.ClaimReference.Trim(), 
      OwnerId = new EntityReference(SystemUser.EntityLogicalName, userid), 
     }; 

     service.Create(CRMSupplierClaimsData); 
    } 
} 

のConnectionStringは次のとおりです。

<add name="CRM" connectionString="Url=https://serername/OrgName; Username=domain\CRM_User; Password=mypassword" /> 

が、私はこれは一般的なことやCRMユーザーとしてアップロードしても、アプリケーションを実行している実際のユーザーとして、支援してくださいませんする必要があります。

+0

上記のコードでエラーが発生しましたか? –

答えて

1

OrganizationServiceProxy CallerIdプロパティを使用して、呼び出し元として渡すユーザーを設定します。

var service = new OrganizationService(conn); 
var whoReq = new WhoAmIRequest(); 
var whoResp = (WhoAmIResponse)service.Execute(whoReq); 
var cleanClaimsFromDB = db.CleanSupplierClaims.Select(x => x).ToList(); 
var service = organizationService as OrganizationService; 
if (service != null) 
{ 
    var serviceProxy = service.InnerService as OrganizationServiceProxy; 
    if (serviceProxy == null) throw new InvalidCastException("invalid cast"); 
    serviceProxy.CallerId = whoResp.UserId; //The user GUID you want to pass as the caller   
} 

var cleanClaimsFromDB = db.CleanSupplierClaims.Select(x => x).ToList(); 
foreach (var claim in cleanClaimsFromDB) 
{ 
    var CRMSupplierClaimsData = new new_supplierclaimsupdate() 
    { 
     new_Action = claim.Action.Trim(), 
     new_InvoiceNumebr = claim.Line_Number.Trim(), 
     new_TotalClaim = Convert.ToDecimal(claim.Total_Claim).ToString(), 
     new_Currency = claim.Currency.Trim(), 
     new_Supplier = claim.ClaimReference.Trim() 
    }; 

    service.Create(CRMSupplierClaimsData); 
} 
関連する問題