Skip to content

Commit bfb3c9e

Browse files
committed
WIP
1 parent 41da3aa commit bfb3c9e

2 files changed

Lines changed: 53 additions & 2 deletions

File tree

src/ConversionExtensions.cs

Lines changed: 16 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -87,5 +87,21 @@ public static Entity ConvertSchema(Entity externalEntity, EntityMap entityMap)
8787

8888
return convertedEntity;
8989
}
90+
91+
public static Entity ConvertSchemaExternal(Entity xrmEntity, EntityMap entityMap)
92+
{
93+
Entity convertedEntity = new(entityMap.NameMap.ExternalName, xrmEntity.Id);
94+
95+
foreach (AttributeMap attribute in entityMap.AttributeMap)
96+
{
97+
if (!xrmEntity.Attributes.TryGetValue(attribute.NameMap.XrmName, out var xrmValue))
98+
continue;
99+
100+
// TODO: value conversion?
101+
convertedEntity.Attributes[attribute.NameMap.ExternalName] = xrmValue;
102+
}
103+
104+
return convertedEntity;
105+
}
90106
}
91107
}

src/LoopbackDataProviderPlugin.cs

Lines changed: 37 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -64,15 +64,15 @@ public void Execute(IServiceProvider serviceProvider)
6464
var relatedEntitiesQuery = (RelationshipQueryCollection)context.InputParameters[RelatedEntitiesQuery];
6565
if (relatedEntitiesQuery.Any())
6666
throw new NotImplementedException(RelatedEntitiesQuery);
67-
67+
6868
var retrieveResponse = (RetrieveResponse)service.Execute(new RetrieveRequest
6969
{
7070
ColumnSet = ConversionExtensions.ConvertSchema(columnSet, entityMap),
7171
Target = ConversionExtensions.ConvertSchema(target, entityMap),
7272
});
7373

7474
var mappedEntity = ConversionExtensions.ConvertSchema(retrieveResponse.Entity, entityMap);
75-
context.OutputParameters[Entity] = mappedEntity;
75+
context.OutputParameters["BusinessEntity"] = mappedEntity;
7676
return;
7777

7878
case "RetrieveMultiple":
@@ -100,8 +100,43 @@ public void Execute(IServiceProvider serviceProvider)
100100
return;
101101

102102
case "Create":
103+
var createEntityMap = EntityMapFactory.Create(entityMetadata, typeMapFactory, entityAlias: null);
104+
var createTarget = (Entity)context.InputParameters[Target];
105+
var createReponse = (CreateResponse)service.Execute(new CreateRequest
106+
{
107+
Target = ConversionExtensions.ConvertSchemaExternal(createTarget, createEntityMap),
108+
});
109+
context.OutputParameters[nameof(createReponse.id)] = createReponse.id;
110+
return;
111+
103112
case "Update":
113+
var updateEntityMap = EntityMapFactory.Create(entityMetadata, typeMapFactory, entityAlias: null);
114+
var updateTarget = (Entity)context.InputParameters[Target];
115+
116+
tracing.Trace($"{updateTarget.LogicalName} {updateTarget.Id} ({string.Join(",", updateTarget.Attributes.Select(a => $"{a.Key}: {a.Value} ({a.Value?.GetType()?.Name})"))})");
117+
118+
var convertedUpdateTarget = ConversionExtensions.ConvertSchemaExternal(updateTarget, updateEntityMap);
119+
tracing.Trace($"{convertedUpdateTarget.LogicalName} {convertedUpdateTarget.Id} ({string.Join(",", convertedUpdateTarget.Attributes.Select(a => $"{a.Key}: {a.Value} ({a.Value?.GetType()?.Name})"))})");
120+
121+
var updateConcurrencyBehavior = (ConcurrencyBehavior)context.InputParameters[nameof(ConcurrencyBehavior)];
122+
var updateResponse = (UpdateResponse)service.Execute(new UpdateRequest
123+
{
124+
Target = convertedUpdateTarget,
125+
ConcurrencyBehavior = updateConcurrencyBehavior,
126+
});
127+
return;
128+
104129
case "Delete":
130+
var deleteEntityMap = EntityMapFactory.Create(entityMetadata, typeMapFactory, entityAlias: null);
131+
var deleteTarget = (EntityReference)context.InputParameters[Target];
132+
var deleteConcurrencyBehavior = (ConcurrencyBehavior)context.InputParameters[nameof(ConcurrencyBehavior)];
133+
134+
var deleteResponse = (DeleteResponse)service.Execute(new DeleteRequest
135+
{
136+
Target = ConversionExtensions.ConvertSchema(deleteTarget, deleteEntityMap),
137+
ConcurrencyBehavior = deleteConcurrencyBehavior,
138+
});
139+
return;
105140
default:
106141
throw new NotImplementedException($"Message '{context.MessageName}'");
107142
}

0 commit comments

Comments
 (0)