Skip to content

Commit 9ddaf08

Browse files
changes in findCollectionName functionality; replace LogicalCollectionName with EntitySetName for a collection name
1 parent 2fe75b6 commit 9ddaf08

File tree

5 files changed

+45
-31
lines changed

5 files changed

+45
-31
lines changed

lib/requests/sendRequest.js

Lines changed: 30 additions & 18 deletions
Original file line numberDiff line numberDiff line change
@@ -13,7 +13,8 @@ var _entityNames;
1313
*/
1414
function findCollectionName(entityName) {
1515
var xrmInternal = Utility.getXrmInternal();
16-
if (!Utility.isNull(xrmInternal)) {
16+
17+
if (!Utility.isNull(xrmInternal) && typeof xrmInternal.getEntitySetName === "function") {
1718
return xrmInternal.getEntitySetName(entityName) || entityName;
1819
}
1920

@@ -23,7 +24,7 @@ function findCollectionName(entityName) {
2324
collectionName = _entityNames[entityName];
2425
if (Utility.isNull(collectionName)) {
2526
for (var key in _entityNames) {
26-
if (_entityNames[key] == entityName) {
27+
if (_entityNames[key] === entityName) {
2728
return entityName;
2829
}
2930
}
@@ -234,26 +235,37 @@ function sendRequest(method, path, config, data, additionalHeaders, responsePara
234235

235236
function _getEntityNames(entityName, config, successCallback, errorCallback) {
236237

237-
var resolve = function (result) {
238-
_entityNames = {};
239-
for (var i = 0; i < result.data.value.length; i++) {
240-
_entityNames[result.data.value[i].LogicalName] = result.data.value[i].LogicalCollectionName;
241-
}
238+
var xrmUtility = Utility.getXrmUtility();
242239

243-
successCallback(findCollectionName(entityName));
244-
};
240+
//try using Xrm.Utility.getEntityMetadata first (because D365 caches metadata)
241+
if (!Utility.isNull(xrmUtility) && typeof xrmUtility.getEntityMetadata === "function") {
242+
xrmUtility.getEntityMetadata(entityName).then(function (response) {
243+
successCallback(response.EntitySetName);
244+
}, errorCallback);
245+
}
246+
else {
247+
//make a web api call for Node.js apps
248+
var resolve = function (result) {
249+
_entityNames = {};
250+
for (var i = 0; i < result.data.value.length; i++) {
251+
_entityNames[result.data.value[i].LogicalName] = result.data.value[i].EntitySetName;
252+
}
245253

246-
var reject = function (error) {
247-
errorCallback({ message: 'Unable to fetch EntityDefinitions. Error: ' + error.message });
248-
};
254+
successCallback(findCollectionName(entityName));
255+
};
249256

250-
var request = RequestConverter.convertRequest({
251-
collection: 'EntityDefinitions',
252-
select: ['LogicalCollectionName', 'LogicalName'],
253-
noCache: true
254-
}, 'retrieveMultiple', config);
257+
var reject = function (error) {
258+
errorCallback({ message: 'Unable to fetch EntityDefinitions. Error: ' + error.message });
259+
};
255260

256-
sendRequest('GET', request.url, config, null, request.headers, null, resolve, reject, false, request.async);
261+
var request = RequestConverter.convertRequest({
262+
collection: 'EntityDefinitions',
263+
select: ['EntitySetName', 'LogicalName'],
264+
noCache: true
265+
}, 'retrieveMultiple', config);
266+
267+
sendRequest('GET', request.url, config, null, request.headers, null, resolve, reject, false, request.async);
268+
}
257269
}
258270

259271
function _isEntityNameException(entityName) {

lib/utilities/Utility.js

Lines changed: 9 additions & 7 deletions
Original file line numberDiff line numberDiff line change
@@ -16,13 +16,13 @@ function generateUUID() { // Public Domain/MIT
1616
}
1717

1818
function getXrmContext() {
19-
if (typeof GetGlobalContext != 'undefined') {
19+
if (typeof GetGlobalContext !== 'undefined') {
2020
return GetGlobalContext();
2121
}
2222
else {
23-
if (typeof Xrm != 'undefined') {
23+
if (typeof Xrm !== 'undefined') {
2424
//d365 v.9.0
25-
if ((!isNull(Xrm.Utility) && !isNull(Xrm.Utility.getGlobalContext))) {
25+
if (!isNull(Xrm.Utility) && !isNull(Xrm.Utility.getGlobalContext)) {
2626
return Xrm.Utility.getGlobalContext();
2727
}
2828
else if (!isNull(Xrm.Page) && !isNull(Xrm.Page.context)) {
@@ -51,11 +51,11 @@ function initWebApiUrl(version) {
5151

5252
function getXrmInternal() {
5353
//todo: Xrm.Internal namespace is not supported
54-
if (typeof Xrm !== 'undefined') {
55-
return Xrm.Internal;
56-
}
54+
return typeof Xrm !== "undefined" ? Xrm.Internal : null;
55+
}
5756

58-
return null;
57+
function getXrmUtility() {
58+
return typeof Xrm !== "undefined" ? Xrm.Utility : null;
5959
}
6060

6161
var Utility = {
@@ -97,6 +97,8 @@ var Utility = {
9797

9898
getXrmInternal: getXrmInternal,
9999

100+
getXrmUtility: getXrmUtility,
101+
100102
getClientUrl: getClientUrl,
101103

102104
initWebApiUrl: initWebApiUrl

tests/common-tests.js

Lines changed: 3 additions & 3 deletions
Original file line numberDiff line numberDiff line change
@@ -1674,7 +1674,7 @@ describe('Request.makeRequest', function () {
16741674
var response = mocks.responses.response200;
16751675
var response2 = mocks.responses.responseEntityDefinitions;
16761676
scope = nock(mocks.webApiUrl)
1677-
.get('/EntityDefinitions?$select=LogicalCollectionName,LogicalName')
1677+
.get('/EntityDefinitions?$select=EntitySetName,LogicalName')
16781678
.once()
16791679
.reply(response2.status, response2.responseText, response2.responseHeaders)
16801680
.get('/tests(' + mocks.data.testEntityId + ')')
@@ -1721,7 +1721,7 @@ describe('Request.makeRequest', function () {
17211721
var response = mocks.responses.response200;
17221722
var response2 = mocks.responses.responseEntityDefinitions;
17231723
scope = nock(mocks.webApiUrl)
1724-
.get('/EntityDefinitions?$select=LogicalCollectionName,LogicalName')
1724+
.get('/EntityDefinitions?$select=EntitySetName,LogicalName')
17251725
.once()
17261726
.reply(response2.status, response2.responseText, response2.responseHeaders)
17271727
.get('/tests(' + mocks.data.testEntityId + ')')
@@ -1785,7 +1785,7 @@ describe('Request.makeRequest', function () {
17851785
var response = mocks.responses.response200;
17861786
var response2 = mocks.responses.responseEntityDefinitions;
17871787
scope = nock(mocks.webApiUrl)
1788-
.get('/EntityDefinitions?$select=LogicalCollectionName,LogicalName')
1788+
.get('/EntityDefinitions?$select=EntitySetName,LogicalName')
17891789
.once()
17901790
.reply(response2.status, response2.responseText, response2.responseHeaders)
17911791
.get('/tests(' + mocks.data.testEntityId + ')')

tests/main-tests.js

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -1177,7 +1177,7 @@ describe("promises -", function () {
11771177
var response = mocks.responses.basicEmptyResponseSuccess;
11781178
var response2 = mocks.responses.responseEntityDefinitions;
11791179
scope = nock(mocks.webApiUrl)
1180-
.get('/EntityDefinitions?$select=LogicalCollectionName,LogicalName')
1180+
.get('/EntityDefinitions?$select=EntitySetName,LogicalName')
11811181
.once()
11821182
.reply(response2.status, response2.responseText, response2.responseHeaders)
11831183
.post("/tests(" + mocks.data.testEntityId + ")/tests_records/$ref", {

tests/stubs.js

Lines changed: 2 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -72,11 +72,11 @@ var dataStubs = {
7272
'@odata.context': 'context',
7373
oDataContext: 'context',
7474
value: [{
75-
"LogicalCollectionName": "tests",
75+
"EntitySetName": "tests",
7676
"LogicalName": "test",
7777
"MetadataId": "9dceed2b-9513-4a14-b09e-c176a6f1d9c3"
7878
}, {
79-
"LogicalCollectionName": "records",
79+
"EntitySetName": "records",
8080
"LogicalName": "record",
8181
"MetadataId": "18eb9672-3070-478c-be5b-e0324acb1188"
8282
}]

0 commit comments

Comments
 (0)