@@ -16,6 +16,13 @@ namespace LoopbackDataProvider
1616{
1717 public sealed class LoopbackDataProviderPlugin : IPlugin
1818 {
19+ private const string RelatedEntitiesQuery = "RelatedEntitiesQuery" ;
20+ private const string Query = "Query" ;
21+ private const string Target = "Target" ;
22+ private const string ColumnSet = "ColumnSet" ;
23+ private const string Entity = "Entity" ;
24+ private const string BusinessEntityCollection = "BusinessEntityCollection" ;
25+
1926 public void Execute ( IServiceProvider serviceProvider )
2027 {
2128 var context = serviceProvider . Get < IPluginExecutionContext > ( )
@@ -44,87 +51,60 @@ public void Execute(IServiceProvider serviceProvider)
4451
4552 var targetEntityName = dataSource . Attributes . First ( x => x . Value is string ) . Value . ToString ( ) ;
4653
47-
48- var mapping = Mapping . Create ( service , context . PrimaryEntityName ) ;
49-
5054 var entityMetadata = service . GetEntityMetadata ( context . PrimaryEntityName ) ;
51-
5255 var typeMapFactory = new DefaultTypeMapFactory ( ) ;
5356
54-
5557 switch ( context . MessageName )
5658 {
5759 case "Retrieve" :
58- var entityMap = EntityMapFactory . Create ( entityMetadata , typeMapFactory , "mappingEntityAlias" ) ;
59-
60- var target = ( EntityReference ) context . InputParameters [ " Target" ] ;
61- var columnSet = ( ColumnSet ) context . InputParameters [ " ColumnSet" ] ;
62- var relatedEntitiesQuery = ( RelationshipQueryCollection ) context . InputParameters [ " RelatedEntitiesQuery" ] ;
60+ var entityMap = EntityMapFactory . Create ( entityMetadata , typeMapFactory , entityAlias : null ) ;
61+
62+ var target = ( EntityReference ) context . InputParameters [ Target ] ;
63+ var columnSet = ( ColumnSet ) context . InputParameters [ ColumnSet ] ;
64+ var relatedEntitiesQuery = ( RelationshipQueryCollection ) context . InputParameters [ RelatedEntitiesQuery ] ;
6365 if ( relatedEntitiesQuery . Any ( ) )
64- throw new NotImplementedException ( " RelatedEntitiesQuery" ) ;
66+ throw new NotImplementedException ( RelatedEntitiesQuery ) ;
6567
66- var mappedTarget = Mapping . ReplaceEntityLogicalNames ( target , context . PrimaryEntityName , entityMetadata . ExternalName ) ;
67- var mappedColumns = columnSet . Columns . Select ( entityMap . MapAttributeNameExternal ) . ToArray ( ) ;
68-
69- var retrieveResponse = ( RetrieveResponse ) service . Execute ( new RetrieveRequest {
70-
71- ColumnSet = new ( mappedColumns ) ,
72- Target = mappedTarget ,
68+ var retrieveResponse = ( RetrieveResponse ) service . Execute ( new RetrieveRequest
69+ {
70+ ColumnSet = ConversionExtensions . ConvertSchema ( columnSet , entityMap ) ,
71+ Target = ConversionExtensions . ConvertSchema ( target , entityMap ) ,
7372 } ) ;
7473
75- var mappedEntity = retrieveResponse . Entity . ToEntity ( entityMap ) ;
76- context . OutputParameters [ " Entity" ] = mappedEntity ;
74+ var mappedEntity = ConversionExtensions . ConvertSchema ( retrieveResponse . Entity , entityMap ) ;
75+ context . OutputParameters [ Entity ] = mappedEntity ;
7776 return ;
78-
77+
7978 case "RetrieveMultiple" :
80-
8179 var queryMapFactory = new QueryMapFactory ( service , typeMapFactory ) ;
8280
83- var query = ( QueryExpression ) context . InputParameters [ " Query" ] ;
81+ var query = ( QueryExpression ) context . InputParameters [ Query ] ;
8482 var queryMap = queryMapFactory . Create ( query ) ;
85-
83+
84+ foreach ( var attr in queryMap . PrimaryEntityMap . AttributeMap )
85+ tracing . Trace ( $ "attr ({ attr . IsPrimaryAttributeId } ) : { attr . NameMap . ExternalName } -> { attr . NameMap . XrmName } ") ;
86+
8687 var convertedQuery = query . ConvertSchema ( queryMap ) ;
8788
8889 tracing . Trace ( $ "{ nameof ( convertedQuery ) } : { convertedQuery . EntityName } ({ string . Join ( ", " , convertedQuery . ColumnSet . Columns ) } )") ;
8990 tracing . Trace ( $ "{ nameof ( convertedQuery ) } : Conditions: { convertedQuery . Criteria . Conditions . Count ( ) } ") ;
9091
9192 var retrieveMultipleResponse = service . RetrieveMultiple ( convertedQuery ) ;
92- var mappedEntities = new EntityCollection ( ) ;
93-
94- mappedEntities . Entities . AddRange ( retrieveMultipleResponse . Entities . Select ( x=> x . ToEntity ( queryMap . PrimaryEntityMap ) ) ) ;
9593
96- foreach ( var item in mappedEntities . Entities )
97- {
98- tracing . Trace ( $ "{ item . LogicalName } { item . Id } ({ string . Join ( "," , item . Attributes . Select ( a=> $ "{ a . Key } : { a . Value } ({ a . Value ? . GetType ( ) ? . Name } )") ) } )") ;
99- }
94+ var mappedEntities = ConversionExtensions . ConvertSchema ( retrieveMultipleResponse , queryMap ) ;
10095
101- mappedEntities . MoreRecords = retrieveMultipleResponse . MoreRecords ;
102- mappedEntities . MinActiveRowVersion = retrieveMultipleResponse . MinActiveRowVersion ;
103- mappedEntities . TotalRecordCountLimitExceeded = retrieveMultipleResponse . TotalRecordCountLimitExceeded ;
104- mappedEntities . TotalRecordCount = retrieveMultipleResponse . TotalRecordCount ;
105- mappedEntities . PagingCookie = retrieveMultipleResponse . PagingCookie ;
96+ foreach ( var item in mappedEntities . Entities )
97+ tracing . Trace ( $ "{ item . LogicalName } { item . Id } ({ string . Join ( "," , item . Attributes . Select ( a => $ "{ a . Key } : { a . Value } ({ a . Value ? . GetType ( ) ? . Name } )") ) } )") ;
10698
107- context . OutputParameters [ " BusinessEntityCollection" ] = mappedEntities ;
99+ context . OutputParameters [ BusinessEntityCollection ] = mappedEntities ;
108100 return ;
109101
110102 case "Create" :
111103 case "Update" :
112104 case "Delete" :
113105 default :
114- break ;
106+ throw new NotImplementedException ( $ "Message ' { context . MessageName } '" ) ;
115107 }
116-
117- var request = new OrganizationRequest ( context . MessageName ) ;
118-
119- request . Parameters . AddRange (
120- mapping . ConvertSchema ( context . InputParameters ) ) ;
121-
122- var response = service . Execute ( request ) ;
123-
124- context . OutputParameters . AddRange (
125- mapping . ConvertSchema ( response . Results ) ) ;
126108 }
127-
128-
129109 }
130110}
0 commit comments