簡體   English   中英

Dynamics 365(本地):與多個團隊共享記錄-C#

[英]Dynamics 365 (On-Prem): Share record with multiple teams - C#

我遇到需要與所有團隊共享記錄的情況。 我所有的痕跡都表明所有的團隊名稱和記錄都是應有的(我在代碼中刪除了痕跡以節省空間)。 但是,記錄不會在測試時共享。 我寫的正確嗎? 我想我的邏輯是遍歷所有團隊並分享記錄。 用一根把我的頭發拉出來。 以下是我的wf匯編代碼:

using Microsoft.Xrm.Sdk.Workflow;
using System;
using System.Activities;
using System.Diagnostics;
using System.ServiceModel;
using Microsoft.Crm.Sdk.Messages;
using Microsoft.Xrm.Sdk.Query;

namespace workfow_ShareWithAllTeams
{
public class workfow_ShareWithAllTeams : CodeActivity
{
protected override void Execute(CodeActivityContext executionContext)
{
ITracingService tracer = executionContext.GetExtension<ITracingService>();
IWorkflowContext context = executionContext.GetExtension<IWorkflowContext>();
IOrganizationServiceFactory serviceFactory = executionContext.GetExtension<IOrganizationServiceFactory>();
IOrganizationService service = serviceFactory.CreateOrganizationService(context.UserId);

try
{
Entity entity = (Entity) context.InputParameters["Target"];

//TODO: Do stuff
QueryExpression qe = new QueryExpression();
qe.EntityName = "team";
qe.ColumnSet = new ColumnSet();
qe.ColumnSet.Columns.Add("teamid");
qe.ColumnSet.Columns.Add("name");

var teams = service.RetrieveMultiple(qe);

Guid Id = context.PrimaryEntityId;

QueryExpression query = new QueryExpression("item");
query.ColumnSet = new ColumnSet();
query.ColumnSet.Columns.Add("itemid");
query.ColumnSet.Columns.Add("name");
query.Criteria.AddCondition(new ConditionExpression("itemid", ConditionOperator.Equal, Id));


var recordToShare = service.RetrieveMultiple(query);


foreach (Entity team in teams.Entities) //looping through all teams to share
{
foreach (Entity record in recordToShare.Entities)//only one record in entity collection
{

GrantAccessRequest grant = new GrantAccessRequest();
grant.Target = new EntityReference(entity.LogicalName, entity.Id);


PrincipalAccess principal = new PrincipalAccess();
principal.Principal = new EntityReference(team.LogicalName, team.Id);
principal.AccessMask = AccessRights.ReadAccess | AccessRights.AppendAccess |
AccessRights.WriteAccess | AccessRights.AppendToAccess |
AccessRights.ShareAccess | AccessRights.AssignAccess;
grant.PrincipalAccess = principal;

}

}

}
catch (Exception e)
{
throw new InvalidPluginExecutionException(e.Message);
}
}

}
}

好吧,我想我回答了我自己的問題。 花了我幾個小時才弄清楚我缺少以下1條重要代碼:

GrantAccessResponse granted = (GrantAccessResponse)serice.Execute(grant);

添加此工作。

一切都很完美,但缺少以下行:

service.Execute(grant);

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM