1
1
using McTools . Xrm . Connection ;
2
2
using Microsoft . Xrm . Sdk ;
3
+ using Microsoft . Xrm . Sdk . Metadata ;
3
4
using Microsoft . Xrm . Sdk . Query ;
4
- using Rappen . XTB . Helpers ;
5
5
using Rappen . XTB . Helpers . ControlItems ;
6
6
using Rappen . XTB . Helpers . Controls ;
7
- using Rappen . XTB . Helpers . Interfaces ;
8
7
using System ;
9
8
using System . Collections . Generic ;
10
9
using System . Collections . Specialized ;
11
10
using System . ComponentModel ;
12
11
using System . Data ;
13
12
using System . Diagnostics ;
14
13
using System . Linq ;
15
- using System . Net . Http . Headers ;
16
14
using System . Web ;
17
15
using System . Windows . Forms ;
18
16
using xrmtb . XrmToolBox . Controls ;
@@ -189,12 +187,27 @@ private void PermissionSelected(EntityItem permissionitem)
189
187
panItem . Controls . OfType < XRMDataTextBox > ( ) . ToList ( ) . ForEach ( c => c . Entity = permissionitem ? . Entity ) ;
190
188
btnItemOpen . Enabled = permissionitem != null ;
191
189
btnItemNewChild . Enabled = permissionitem != null ;
192
- txtItemEntityName . Text = permissionitem != null && permissionitem . Entity . TryGetAttributeValue ( "adx_entitylogicalname" , out string itementity )
193
- ? GetEntityMetadataItem ( itementity ) . DisplayName
194
- : string . Empty ;
190
+ txtItemEntityName . Text = GetPermissionEntityName ( permissionitem ) ;
195
191
LoadWebroles ( ) ;
196
192
}
197
193
194
+ private string GetPermissionEntityName ( EntityItem permissionitem )
195
+ {
196
+ if ( permissionitem == null )
197
+ {
198
+ return string . Empty ;
199
+ }
200
+ if ( permissionitem . Entity . TryGetAttributeValue ( "adx_entitylogicalname" , out string itementity ) )
201
+ {
202
+ if ( GetEntityMetadataItem ( itementity ) is EntityMetadataItem emdi )
203
+ {
204
+ return emdi . DisplayName ;
205
+ }
206
+ return itementity ;
207
+ }
208
+ return string . Empty ;
209
+ }
210
+
198
211
private void LoadWebroles ( )
199
212
{
200
213
var permission = txtItemName . Entity ;
@@ -328,9 +341,11 @@ private void btnItemNewChild_Click(object sender, EventArgs e)
328
341
}
329
342
var url = GetDeepLink ( GetFullWebApplicationUrl ( ConnectionDetail ) , "adx_entitypermission" , Guid . Empty , Guid . Empty ,
330
343
new NameValueCollection {
331
- { "adx_scope" , "756150003" } ,
332
- { "adx_parententitypermission" , permission . Id . ToString ( ) } ,
333
- { "adx_parententitypermissionname" , txtItemName . Text }
344
+ { EntitypeRmission . Scope , ( ( int ) EntitypeRmission . Scope_OptionSet . Overordnad ) . ToString ( ) } ,
345
+ { EntitypeRmission . WebsiteId , cmbWebsite . SelectedEntity . Id . ToString ( ) } ,
346
+ { EntitypeRmission . WebsiteId + "name" , cmbWebsite . Text } ,
347
+ { EntitypeRmission . ParentEntitypeRmission , permission . Id . ToString ( ) } ,
348
+ { EntitypeRmission . ParentEntitypeRmission + "name" , txtItemName . Text }
334
349
} ) ;
335
350
if ( ! string . IsNullOrEmpty ( url ) )
336
351
{
@@ -348,9 +363,13 @@ internal EntityMetadataItem GetEntityMetadataItem(string entityname)
348
363
{
349
364
return meta ;
350
365
}
351
- meta = new EntityMetadataItem ( Service . GetEntity ( entityname ) , true ) ;
352
- entities . Add ( entityname , meta ) ;
353
- return meta ;
366
+ if ( Service . GetEntity ( entityname ) is EntityMetadata entitymeta )
367
+ {
368
+ meta = new EntityMetadataItem ( entitymeta , true ) ;
369
+ entities . Add ( entityname , meta ) ;
370
+ return meta ;
371
+ }
372
+ return null ;
354
373
}
355
374
356
375
private void rbTreeNames_CheckedChanged ( object sender , EventArgs e )
@@ -372,12 +391,23 @@ private void GetChildNodeDetails(TreeNodeCollection nodes)
372
391
Message = "Loading details" ,
373
392
Work = ( w , args ) =>
374
393
{
375
- nodes . OfType < TreeNode > ( )
394
+ var items = nodes . OfType < TreeNode > ( )
376
395
. Where ( n => n . Tag is PermissionItem item && ! item . DetailsLoaded )
377
- . Select ( n => n . Tag as PermissionItem )
378
- . ToList ( ) . ForEach ( i => i . LoadDetails ( ) ) ;
396
+ . Select ( n => n . Tag as PermissionItem ) ;
397
+ var total = items . Count ( ) ;
398
+ var current = 0 ;
399
+ foreach ( var item in items )
400
+ {
401
+ current ++ ;
402
+ w . ReportProgress ( current * 100 / total , $ "Loading details\n { current } / { total } ") ;
403
+ item . LoadDetails ( ) ;
404
+ }
379
405
args . Result = nodes . OfType < TreeNode > ( ) ;
380
406
} ,
407
+ ProgressChanged = ( args ) =>
408
+ {
409
+ SetWorkingMessage ( args . UserState . ToString ( ) ) ;
410
+ } ,
381
411
PostWorkCallBack = ( args ) => HandleWorkAsync < IEnumerable < TreeNode > > ( args , ( childnodes ) =>
382
412
{
383
413
childnodes . ToList ( ) . ForEach ( c => c . Text = ( c . Tag is PermissionItem item ) ? item . TreeNodeText : "?" ) ;
0 commit comments