Skip to content

Commit e5c9134

Browse files
committed
Fixes #41 by adding support for CMDT parent fields
1 parent 20c18d3 commit e5c9134

40 files changed

+142
-50
lines changed
Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -1,5 +1,5 @@
11
<?xml version="1.0" encoding="UTF-8"?>
22
<ApexClass xmlns="http://soap.sforce.com/2006/04/metadata">
3-
<apiVersion>60.0</apiVersion>
3+
<apiVersion>62.0</apiVersion>
44
<status>Active</status>
55
</ApexClass>
Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -1,5 +1,5 @@
11
<?xml version="1.0" encoding="UTF-8"?>
22
<ApexClass xmlns="http://soap.sforce.com/2006/04/metadata">
3-
<apiVersion>60.0</apiVersion>
3+
<apiVersion>62.0</apiVersion>
44
<status>Active</status>
55
</ApexClass>
Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -1,5 +1,5 @@
11
<?xml version="1.0" encoding="UTF-8"?>
22
<ApexClass xmlns="http://soap.sforce.com/2006/04/metadata">
3-
<apiVersion>60.0</apiVersion>
3+
<apiVersion>62.0</apiVersion>
44
<status>Active</status>
55
</ApexClass>
Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -1,5 +1,5 @@
11
<?xml version="1.0" encoding="UTF-8"?>
22
<ApexClass xmlns="http://soap.sforce.com/2006/04/metadata">
3-
<apiVersion>60.0</apiVersion>
3+
<apiVersion>62.0</apiVersion>
44
<status>Active</status>
55
</ApexClass>
Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -1,5 +1,5 @@
11
<?xml version="1.0" encoding="UTF-8"?>
22
<ApexClass xmlns="http://soap.sforce.com/2006/04/metadata">
3-
<apiVersion>60.0</apiVersion>
3+
<apiVersion>62.0</apiVersion>
44
<status>Active</status>
55
</ApexClass>
Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -1,5 +1,5 @@
11
<?xml version="1.0" encoding="UTF-8"?>
22
<ApexClass xmlns="http://soap.sforce.com/2006/04/metadata">
3-
<apiVersion>60.0</apiVersion>
3+
<apiVersion>62.0</apiVersion>
44
<status>Active</status>
55
</ApexClass>
Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -1,5 +1,5 @@
11
<?xml version="1.0" encoding="UTF-8"?>
22
<ApexClass xmlns="http://soap.sforce.com/2006/04/metadata">
3-
<apiVersion>60.0</apiVersion>
3+
<apiVersion>62.0</apiVersion>
44
<status>Active</status>
55
</ApexClass>

force-app/dml/DML.cls-meta.xml

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -1,5 +1,5 @@
11
<?xml version="1.0" encoding="UTF-8"?>
22
<ApexClass xmlns="http://soap.sforce.com/2006/04/metadata">
3-
<apiVersion>60.0</apiVersion>
3+
<apiVersion>62.0</apiVersion>
44
<status>Active</status>
55
</ApexClass>

force-app/dml/DMLMock.cls-meta.xml

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -1,5 +1,5 @@
11
<?xml version="1.0" encoding="UTF-8"?>
22
<ApexClass xmlns="http://soap.sforce.com/2006/04/metadata">
3-
<apiVersion>60.0</apiVersion>
3+
<apiVersion>62.0</apiVersion>
44
<status>Active</status>
55
</ApexClass>

force-app/dml/DMLTests.cls-meta.xml

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -1,5 +1,5 @@
11
<?xml version="1.0" encoding="UTF-8"?>
22
<ApexClass xmlns="http://soap.sforce.com/2006/04/metadata">
3-
<apiVersion>60.0</apiVersion>
3+
<apiVersion>62.0</apiVersion>
44
<status>Active</status>
55
</ApexClass>

force-app/dml/IDML.cls-meta.xml

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -1,5 +1,5 @@
11
<?xml version="1.0" encoding="UTF-8"?>
22
<ApexClass xmlns="http://soap.sforce.com/2006/04/metadata">
3-
<apiVersion>60.0</apiVersion>
3+
<apiVersion>62.0</apiVersion>
44
<status>Active</status>
55
</ApexClass>
Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -1,5 +1,5 @@
11
<?xml version="1.0" encoding="UTF-8"?>
22
<ApexClass xmlns="http://soap.sforce.com/2006/04/metadata">
3-
<apiVersion>60.0</apiVersion>
3+
<apiVersion>62.0</apiVersion>
44
<status>Active</status>
55
</ApexClass>
Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -1,5 +1,5 @@
11
<?xml version="1.0" encoding="UTF-8"?>
22
<ApexClass xmlns="http://soap.sforce.com/2006/04/metadata">
3-
<apiVersion>60.0</apiVersion>
3+
<apiVersion>62.0</apiVersion>
44
<status>Active</status>
55
</ApexClass>
Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -1,5 +1,5 @@
11
<?xml version="1.0" encoding="UTF-8"?>
22
<ApexClass xmlns="http://soap.sforce.com/2006/04/metadata">
3-
<apiVersion>60.0</apiVersion>
3+
<apiVersion>62.0</apiVersion>
44
<status>Active</status>
55
</ApexClass>
Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -1,5 +1,5 @@
11
<?xml version="1.0" encoding="UTF-8"?>
22
<ApexClass xmlns="http://soap.sforce.com/2006/04/metadata">
3-
<apiVersion>60.0</apiVersion>
3+
<apiVersion>62.0</apiVersion>
44
<status>Active</status>
55
</ApexClass>
Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -1,5 +1,5 @@
11
<?xml version="1.0" encoding="UTF-8"?>
22
<ApexClass xmlns="http://soap.sforce.com/2006/04/metadata">
3-
<apiVersion>60.0</apiVersion>
3+
<apiVersion>62.0</apiVersion>
44
<status>Active</status>
55
</ApexClass>
Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -1,5 +1,5 @@
11
<?xml version="1.0" encoding="UTF-8"?>
22
<ApexClass xmlns="http://soap.sforce.com/2006/04/metadata">
3-
<apiVersion>60.0</apiVersion>
3+
<apiVersion>62.0</apiVersion>
44
<status>Active</status>
55
</ApexClass>
Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -1,5 +1,5 @@
11
<?xml version="1.0" encoding="UTF-8"?>
22
<ApexClass xmlns="http://soap.sforce.com/2006/04/metadata">
3-
<apiVersion>60.0</apiVersion>
3+
<apiVersion>62.0</apiVersion>
44
<status>Active</status>
55
</ApexClass>
Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -1,5 +1,5 @@
11
<?xml version="1.0" encoding="UTF-8"?>
22
<ApexClass xmlns="http://soap.sforce.com/2006/04/metadata">
3-
<apiVersion>60.0</apiVersion>
3+
<apiVersion>62.0</apiVersion>
44
<status>Active</status>
55
</ApexClass>
Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -1,5 +1,5 @@
11
<?xml version="1.0" encoding="UTF-8"?>
22
<ApexClass xmlns="http://soap.sforce.com/2006/04/metadata">
3-
<apiVersion>60.0</apiVersion>
3+
<apiVersion>62.0</apiVersion>
44
<status>Active</status>
55
</ApexClass>
Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -1,5 +1,5 @@
11
<?xml version="1.0" encoding="UTF-8"?>
22
<ApexClass xmlns="http://soap.sforce.com/2006/04/metadata">
3-
<apiVersion>60.0</apiVersion>
3+
<apiVersion>62.0</apiVersion>
44
<status>Active</status>
55
</ApexClass>
Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -1,5 +1,5 @@
11
<?xml version="1.0" encoding="UTF-8"?>
22
<ApexClass xmlns="http://soap.sforce.com/2006/04/metadata">
3-
<apiVersion>60.0</apiVersion>
3+
<apiVersion>62.0</apiVersion>
44
<status>Active</status>
55
</ApexClass>
Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -1,5 +1,5 @@
11
<?xml version="1.0" encoding="UTF-8"?>
22
<ApexClass xmlns="http://soap.sforce.com/2006/04/metadata">
3-
<apiVersion>60.0</apiVersion>
3+
<apiVersion>62.0</apiVersion>
44
<status>Active</status>
55
</ApexClass>
Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -1,5 +1,5 @@
11
<?xml version="1.0" encoding="UTF-8"?>
22
<ApexClass xmlns="http://soap.sforce.com/2006/04/metadata">
3-
<apiVersion>60.0</apiVersion>
3+
<apiVersion>62.0</apiVersion>
44
<status>Active</status>
55
</ApexClass>
Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -1,5 +1,5 @@
11
<?xml version="1.0" encoding="UTF-8"?>
22
<ApexClass xmlns="http://soap.sforce.com/2006/04/metadata">
3-
<apiVersion>60.0</apiVersion>
3+
<apiVersion>62.0</apiVersion>
44
<status>Active</status>
55
</ApexClass>
Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -1,5 +1,5 @@
11
<?xml version="1.0" encoding="UTF-8"?>
22
<ApexClass xmlns="http://soap.sforce.com/2006/04/metadata">
3-
<apiVersion>60.0</apiVersion>
3+
<apiVersion>62.0</apiVersion>
44
<status>Active</status>
55
</ApexClass>

force-app/repository/IRepository.cls

Lines changed: 7 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -26,4 +26,11 @@ public interface IRepository extends IDML {
2626
Map<String, RepositorySortOrder> fieldToSortOrder,
2727
Integer limitBy
2828
);
29+
IRepository addChildFields(
30+
Schema.SObjectField childFieldToken,
31+
List<QueryField> childFields,
32+
List<Query> optionalWhereFilters,
33+
Map<String, RepositorySortOrder> fieldToSortOrder,
34+
Integer limitBy
35+
);
2936
}
Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -1,5 +1,5 @@
11
<?xml version="1.0" encoding="UTF-8"?>
22
<ApexClass xmlns="http://soap.sforce.com/2006/04/metadata">
3-
<apiVersion>60.0</apiVersion>
3+
<apiVersion>62.0</apiVersion>
44
<status>Active</status>
55
</ApexClass>
Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -1,5 +1,5 @@
11
<?xml version="1.0" encoding="UTF-8"?>
22
<ApexClass xmlns="http://soap.sforce.com/2006/04/metadata">
3-
<apiVersion>60.0</apiVersion>
3+
<apiVersion>62.0</apiVersion>
44
<status>Active</status>
55
</ApexClass>

force-app/repository/QueryField.cls

Lines changed: 39 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,39 @@
1+
public without sharing virtual class QueryField {
2+
private final String fieldValue;
3+
4+
public QueryField(List<Schema.SObjectField> fieldTokens) {
5+
this(getFieldNames(fieldTokens));
6+
}
7+
8+
public QueryField(List<String> fieldNames) {
9+
this.fieldValue = String.join(fieldNames, ',');
10+
}
11+
12+
public QueryField(Schema.SObjectField token) {
13+
this.fieldValue = token.toString();
14+
}
15+
16+
public QueryField(List<Schema.SObjectField> parentFieldChain, List<Schema.SObjectField> parentFields) {
17+
String base = '';
18+
while (parentFieldChain.isEmpty() == false) {
19+
base = parentFieldChain.remove(0).getDescribe().getRelationshipName() + '.';
20+
}
21+
List<String> fields = new List<String>();
22+
for (Schema.SObjectField field : parentFields) {
23+
fields.add(base + field.toString());
24+
}
25+
this.fieldValue = String.join(fields, ',');
26+
}
27+
28+
public override String toString() {
29+
return this.fieldValue;
30+
}
31+
32+
private static List<String> getFieldNames(List<Schema.SObjectField> fieldTokens) {
33+
List<String> fieldNames = new List<String>();
34+
for (Schema.SObjectField token : fieldTokens) {
35+
fieldNames.add(token.toString());
36+
}
37+
return fieldNames;
38+
}
39+
}
Lines changed: 5 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,5 @@
1+
<?xml version="1.0" encoding="UTF-8"?>
2+
<ApexClass xmlns="http://soap.sforce.com/2006/04/metadata">
3+
<apiVersion>62.0</apiVersion>
4+
<status>Active</status>
5+
</ApexClass>
Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -1,5 +1,5 @@
11
<?xml version="1.0" encoding="UTF-8"?>
22
<ApexClass xmlns="http://soap.sforce.com/2006/04/metadata">
3-
<apiVersion>60.0</apiVersion>
3+
<apiVersion>62.0</apiVersion>
44
<status>Active</status>
55
</ApexClass>

force-app/repository/Repository.cls

Lines changed: 37 additions & 9 deletions
Original file line numberDiff line numberDiff line change
@@ -1,6 +1,7 @@
11
public virtual without sharing class Repository implements IRepository {
22
private final Map<Schema.SObjectField, String> childToRelationshipNames;
33
private final IDML dml;
4+
@TestVisible
45
private final List<Schema.SObjectField> queryFields;
56
private final Set<String> selectFields = new Set<String>();
67

@@ -79,13 +80,7 @@ public virtual without sharing class Repository implements IRepository {
7980
}
8081

8182
public Repository addParentFields(List<Schema.SObjectField> parentTypes, List<Schema.SObjectField> parentFields) {
82-
String parentBase = '';
83-
for (SObjectField parentId : parentTypes) {
84-
parentBase += parentId.getDescribe().getRelationshipName() + '.';
85-
}
86-
for (SObjectField parentField : parentFields) {
87-
this.selectFields.add(parentBase + parentField.getDescribe().getName());
88-
}
83+
this.selectFields.addAll(this.getParentFields(parentTypes, parentFields));
8984
return this;
9085
}
9186

@@ -105,6 +100,22 @@ public virtual without sharing class Repository implements IRepository {
105100
List<Query> optionalWhereFilters,
106101
Map<String, RepositorySortOrder> fieldToSortOrder,
107102
Integer limitAmount
103+
) {
104+
return this.addChildFields(
105+
childFieldToken,
106+
new List<QueryField>{ new QueryField(childFields) },
107+
optionalWhereFilters,
108+
fieldToSortOrder,
109+
limitAmount
110+
);
111+
}
112+
113+
public Repository addChildFields(
114+
Schema.SObjectField childFieldToken,
115+
List<QueryField> childFields,
116+
List<Query> optionalWhereFilters,
117+
Map<String, RepositorySortOrder> fieldToSortOrder,
118+
Integer limitBy
108119
) {
109120
if (this.childToRelationshipNames.containsKey(childFieldToken) == false || this.shouldAddChildFields == false) {
110121
return this;
@@ -118,8 +129,8 @@ public virtual without sharing class Repository implements IRepository {
118129
')';
119130

120131
Set<String> childFieldNames = new Set<String>{ 'Id' };
121-
for (SObjectField childField : childFields) {
122-
childFieldNames.add(childField.getDescribe().getName());
132+
for (QueryField childField : childFields) {
133+
childFieldNames.add(childField.toString());
123134
}
124135

125136
this.selectFields.add(
@@ -158,6 +169,22 @@ public virtual without sharing class Repository implements IRepository {
158169
this.limitAmount = null;
159170
}
160171

172+
private List<String> getParentFields(
173+
List<Schema.SObjectField> parentTypes,
174+
List<Schema.SObjectField> parentFieldTokens
175+
) {
176+
List<String> parentFields = new List<String>();
177+
String parentBase = '';
178+
for (Schema.SObjectField parentToken : parentTypes) {
179+
String parentName = parentToken.getDescribe().getRelationshipName() ?? parentToken.toString().replace('__c', '__r');
180+
parentBase += parentName + '.';
181+
}
182+
for (Schema.SObjectField parentField : parentFieldTokens) {
183+
parentFields.add(parentBase + parentField.getDescribe().getName());
184+
}
185+
return parentFields;
186+
}
187+
161188
private Map<Schema.SObjectField, String> getChildRelationshipNames(Schema.SObjectType repoType) {
162189
Map<Schema.SObjectField, String> localChildToRelationshipNames = new Map<Schema.SObjectField, String>();
163190
for (Schema.ChildRelationship childRelationship : repoType.getDescribe().getChildRelationships()) {
@@ -276,6 +303,7 @@ public virtual without sharing class Repository implements IRepository {
276303
return String.join(objectsPreJoin, ',');
277304
}
278305

306+
// DML
279307
public Database.SaveResult doInsert(SObject record) {
280308
return this.dml.doInsert(record);
281309
}
Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -1,5 +1,5 @@
11
<?xml version="1.0" encoding="UTF-8"?>
22
<ApexClass xmlns="http://soap.sforce.com/2006/04/metadata">
3-
<apiVersion>60.0</apiVersion>
3+
<apiVersion>62.0</apiVersion>
44
<status>Active</status>
55
</ApexClass>
Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -1,5 +1,5 @@
11
<?xml version="1.0" encoding="UTF-8"?>
22
<ApexClass xmlns="http://soap.sforce.com/2006/04/metadata">
3-
<apiVersion>60.0</apiVersion>
3+
<apiVersion>62.0</apiVersion>
44
<status>Active</status>
55
</ApexClass>

0 commit comments

Comments
 (0)