/
Helper.cs
349 lines (302 loc) · 14.4 KB
/
Helper.cs
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
74
75
76
77
78
79
80
81
82
83
84
85
86
87
88
89
90
91
92
93
94
95
96
97
98
99
100
101
102
103
104
105
106
107
108
109
110
111
112
113
114
115
116
117
118
119
120
121
122
123
124
125
126
127
128
129
130
131
132
133
134
135
136
137
138
139
140
141
142
143
144
145
146
147
148
149
150
151
152
153
154
155
156
157
158
159
160
161
162
163
164
165
166
167
168
169
170
171
172
173
174
175
176
177
178
179
180
181
182
183
184
185
186
187
188
189
190
191
192
193
194
195
196
197
198
199
200
201
202
203
204
205
206
207
208
209
210
211
212
213
214
215
216
217
218
219
220
221
222
223
224
225
226
227
228
229
230
231
232
233
234
235
236
237
238
239
240
241
242
243
244
245
246
247
248
249
250
251
252
253
254
255
256
257
258
259
260
261
262
263
264
265
266
267
268
269
270
271
272
273
274
275
276
277
278
279
280
281
282
283
284
285
286
287
288
289
290
291
292
293
294
295
296
297
298
299
300
301
302
303
304
305
306
307
308
309
310
311
312
313
314
315
316
317
318
319
320
321
322
323
324
325
326
327
328
329
330
331
332
333
334
335
336
337
338
339
340
341
342
343
344
345
346
347
348
349
public class Helper
{
public static void ShareToUser(Guid callerUser, Guid caseId, IOrganizationService crmService)
{
GrantAccessRequest grantAccessRequest = new GrantAccessRequest
{
PrincipalAccess = new PrincipalAccess
{
Principal = new EntityReference("systemuser", callerUser),
AccessMask = AccessRights.WriteAccess
},
Target = new EntityReference("incident", caseId)
};
crmService.Execute(grantAccessRequest);
}
public static void UnShareToUser(Guid callerUser, Guid caseId, IOrganizationService crmService)
{
RevokeAccessRequest revokeAccessRequest = new RevokeAccessRequest
{
Revokee = new EntityReference("systemuser", callerUser),
Target = new EntityReference("incident", caseId)
};
crmService.Execute(revokeAccessRequest);
}
public static Guid? RetrieveTeamByQueueId(IOrganizationService crmService, Guid queueId, OptionSetValue caseType)
{
QueryExpression query = new QueryExpression("new_initializequeuesetting")
{
ColumnSet = new ColumnSet("new_targetowner"),
Criteria =
{
Conditions = {
new ConditionExpression("new_targetqueue",ConditionOperator.Equal,queueId)
}
}
};
EntityCollection result = crmService.RetrieveMultiple(query);
if (result.Entities != null && result.Entities.Count >= 1)
{
return (result[0]["new_targetowner"] as EntityReference).Id;
}
return null;
}
public static void CheckActionPermission(IOrganizationService crmService, Entity caseEntity, string errorMessage = "")
{
if (!caseEntity.Contains("new_casetype") || !caseEntity.Contains("new_casesubtype"))
{
return;
}
QueryExpression query = new QueryExpression("new_casetypesecuritysetting")
{
ColumnSet = new ColumnSet("new_casetypesecuritysettingid"),
Criteria =
{
Conditions = {
new ConditionExpression("new_casetype",ConditionOperator.Equal,(caseEntity["new_casetype"] as OptionSetValue).Value),
new ConditionExpression("new_casesubtype",ConditionOperator.Equal,(caseEntity["new_casesubtype"] as OptionSetValue).Value)
}
}
};
EntityCollection result = crmService.RetrieveMultiple(query);
if (result.Entities.Count == 0)
{
if (string.IsNullOrEmpty(errorMessage))
{
errorMessage = "You do not have enough privileges to update this case, contact your FieldOps Admin.";
}
throw new InvalidPluginExecutionException(errorMessage);
}
}
public static string GetFetchXML()
{
return String.Format(@"<fetch version='1.0' output-format='xml-platform' mapping='logical' distinct='true'>
<entity name='incident'>
<attribute name='title' />
<attribute name='ticketnumber' />
<attribute name='mc_symptomtypeid' />
<attribute name='mc_symptomsubtypeid' />
<attribute name='statuscode' />
<attribute name='modifiedon' />
<attribute name='incidentid' />
<order attribute='ticketnumber' descending='false' />
<filter type='and'>
<condition attribute='statecode' operator='eq' value='0' />
</filter>
</entity>
</fetch>");
}
public static List<Guid> ToGuidList(IEnumerable<Entity> entities)
{
var guids = new List<Guid>();
foreach (Entity e in entities)
{
guids.Add(e.Id);
}
return guids;
}
public static EntityReferenceCollection CreateEntityReferenceCollection(List<Guid> guidList, string logicalName)
{
var entityRefCollection = new EntityReferenceCollection();
foreach (Guid guid in guidList)
{
entityRefCollection.Add(new EntityReference(logicalName, guid));
}
return entityRefCollection;
}
public static void CopyRelatedEntities(IOrganizationService service, MappingProfile profile, Guid srcId, Guid dstId)
{
List<Guid> srcList = ToGuidList(RetrieveRelatedEntities(service, profile, srcId));
List<Guid> destList = ToGuidList(RetrieveRelatedEntities(service, profile, dstId));
srcList.RemoveAll(item => destList.Contains(item));
EntityReferenceCollection erc = CreateEntityReferenceCollection(srcList, profile.RelationShip);
AssociateRequest req = new AssociateRequest
{
Target = new EntityReference(profile.ToEntity, dstId),
RelatedEntities = erc,
Relationship = new Relationship(profile.RelationShip)
};
service.Execute(req);
}
public static DataCollection<Entity> RetrieveRelatedEntities(IOrganizationService service, MappingProfile profile, Guid entityId)
{
string fetchxml = @"
<fetch version='1.0' output-format='xml-platform' mapping='logical' distinct='true'>
<entity name='" + profile.FromEntity + @"'>
<attribute name='" + profile.FromEntity + @"id' />
<link-entity name='" + profile.RelationShip + @"' from='" + profile.FromEntity + @"id' to='" + profile.FromEntity + @"id' visible='false' intersect='true'>
<link-entity name='" + profile.ToEntity + @"' from='" + profile.ToEntity + @"id' to='" + profile.ToEntity + @"id' alias='ae'>
<filter type='and'>
<condition attribute='" + profile.ToEntity + @"id' operator='eq' value='" + entityId + @"' />
</filter>
</link-entity>
</link-entity>
</entity>
</fetch>"
;
EntityCollection ec = service.RetrieveMultiple(new FetchExpression(fetchxml));
//QueryExpression qry = ConvertFetchXmlToQuery(fetchxml, service);
return ec.Entities;
}
public static DataCollection<Entity> RetrieveSharepointNotes(IOrganizationService service)
{
QueryExpression query = new QueryExpression("annotation")
{
//ColumnSet = new ColumnSet(true),
Criteria =
{
Filters =
{
new FilterExpression(LogicalOperator.Or)
{
Conditions =
{
new ConditionExpression("subject",ConditionOperator.Equal, "Attachment Error"),
},
Filters =
{
new FilterExpression(LogicalOperator.And)
{
Conditions =
{
new ConditionExpression("subject", ConditionOperator.Equal, "File Attachment"),
new ConditionExpression("notetext", ConditionOperator.Like, "http://spark.partners.extranet.microsoft.com%"),
}
}
}
}
}
}
};
EntityCollection ec = service.RetrieveMultiple(query);
return ec.Entities;
}
public static string ConvertQueryToFetchXml(QueryExpression query, IOrganizationService crmService)
{
QueryExpressionToFetchXmlRequest request = new QueryExpressionToFetchXmlRequest();
request.Query = query;
QueryExpressionToFetchXmlResponse response
= (QueryExpressionToFetchXmlResponse)crmService.Execute(request);
return response.FetchXml;
}
public static QueryExpression ConvertFetchXmlToQuery(string fetchXml, IOrganizationService crmService)
{
FetchXmlToQueryExpressionRequest fetchXmlRequest = new FetchXmlToQueryExpressionRequest();
fetchXmlRequest.FetchXml = fetchXml;
FetchXmlToQueryExpressionResponse fetchXmlResponse
= (FetchXmlToQueryExpressionResponse)crmService.Execute(fetchXmlRequest);
return fetchXmlResponse.Query;
}
public static IOrganizationService CreateService(string url, string user, string password, string domain)
{
Uri organizationUri = new Uri(url);
Uri homeRealmUri = null;
ClientCredentials credentials = new ClientCredentials();
NetworkCredential networkCredential = new NetworkCredential(user, password);
credentials.Windows.ClientCredential = networkCredential;
OrganizationServiceProxy orgProxy = new OrganizationServiceProxy(organizationUri, homeRealmUri, credentials, null);
return (IOrganizationService)orgProxy;
}
//string name = GetPickListText("opportunity", "new_opportunitystate", 0, service);
public static string GetPickListText(string entityName, string attributeName, int optionSetValue, IOrganizationService service)
{
string AttributeName = attributeName;
string EntityLogicalName = entityName;
RetrieveEntityRequest retrieveDetails = new RetrieveEntityRequest();
retrieveDetails.EntityFilters = EntityFilters.All;
retrieveDetails.LogicalName = EntityLogicalName;
RetrieveEntityResponse retrieveEntityResponseObj = (RetrieveEntityResponse)service.Execute(retrieveDetails);
EntityMetadata metadata = retrieveEntityResponseObj.EntityMetadata;
PicklistAttributeMetadata picklistMetadata = metadata.Attributes.FirstOrDefault(attribute => String.Equals(attribute.LogicalName, attributeName, StringComparison.OrdinalIgnoreCase)) as PicklistAttributeMetadata;
OptionSetMetadata options = picklistMetadata.OptionSet;
IList<OptionMetadata> picklistOption = (from o in options.Options where o.Value.Value == optionSetValue select o).ToList();
string picklistLabel = (picklistOption.First()).Label.UserLocalizedLabel.Label;
return picklistLabel;
}
public static void ChangeRecordState(IOrganizationService service, EntityReference entityMoniker, OptionSetValue state, OptionSetValue status)
{
SetStateRequest req = new SetStateRequest
{
EntityMoniker = entityMoniker,
State = state,
Status = status
};
service.Execute(req);
}
public static void CreateEmailFromTemplate(IOrganizationService service, EntityCollection sendFromCol, EntityCollection sendToCol, string emailSubject, string previewTriggerVaule, EntityReference regard, Guid contactId, Entity template, string btnOrder)
{
if (template != null)
{
// Use the InstantiateTemplate message to create an e-mail message using a template.
InstantiateTemplateRequest instTemplateReq = new InstantiateTemplateRequest
{
TemplateId = template.Id,
ObjectId = contactId,
ObjectType = "contact"
};
InstantiateTemplateResponse instTemplateResp = (InstantiateTemplateResponse)service.Execute(instTemplateReq);
Entity email = instTemplateResp.EntityCollection.Entities[0];
email.Attributes["new_campaigninvatationid"] = previewTriggerVaule;
email.Attributes["subject"] = emailSubject;
email.Attributes.Add("from", sendFromCol);
service.Create(email);
}
}
public static EntityCollection RetrieveNNRecords(IOrganizationService service, Guid ToEntityId, string FromEntity, string ToEntity, string RelationShip)
{
QueryExpression qe = new QueryExpression()
{
EntityName = FromEntity,
ColumnSet = new ColumnSet(true),
Criteria =
{
FilterOperator = LogicalOperator.And,
Conditions =
{
new ConditionExpression("statecode",ConditionOperator.Equal,0)
}
},
LinkEntities =
{
new LinkEntity()
{
LinkFromEntityName = FromEntity,
LinkToEntityName = RelationShip,
LinkFromAttributeName = FromEntity+"id",
LinkToAttributeName = FromEntity+"id",
EntityAlias = RelationShip,
Columns = new ColumnSet(),
JoinOperator = JoinOperator.Inner,
LinkEntities =
{
new LinkEntity()
{
LinkFromEntityName = FromEntity,
LinkToEntityName = ToEntity,
LinkFromAttributeName = ToEntity+"id",
LinkToAttributeName = ToEntity+"id",
EntityAlias =ToEntity,
Columns = new ColumnSet(),
JoinOperator = JoinOperator.Inner,
LinkCriteria = new FilterExpression
{
Conditions =
{
new ConditionExpression
{
AttributeName = ToEntity+"id",
Operator = ConditionOperator.Equal,
Values = {
ToEntityId
}
}
}
}
}
}
}
}
};
return service.RetrieveMultiple(qe);
}
}