2013-02-21 33 views
2

有一些更好/正式的方式,如何CRM 2011米的GUID在JavaScript比较JS MSCRM的GUID

2e9565c4-fc5b-e211-993c-000c29208ee5=={2E9565C4-FC5B-E211-993C-000C29208EE5} 

比较不使用.replace().toLowerCase()

第一个是有直通的XMLHttpRequest/JSON:

JSON.parse(r.responseText).d.results[0].id 

第二个是从形式有:

Xrm.Page.getAttribute("field").getValue()[0].id 

回答

3

有在JavaScript中比较的GUID,因为没有原始GUID没有官方途径类型。因此,您应该将GUID视为字符串。

如果你不能使用replace()toLowerCase()你可以使用正则表达式:

// "i" is for ignore case 
var regExp = new RegExp("2e9565c4-fc5b-e211-993c-000c29208ee5", "i"); 

alert(regExp.test("{2E9565C4-FC5B-E211-993C-000C29208EE5}")); 

它可能会比更换/ toLowerCase慢()。

+0

更换()和toLowerCase()不禁止的,但它并没有出现我的权利;我希望MS在SDK中提供了一些方法,当CRM以两种不同的形式返回相同的GUID时。 你的解决方案与正则表达式似乎对我来说就像一个更清晰的代码。 – jcjr 2013-02-21 12:56:59

1

您可以使用node-uuid(https://github.com/broofa/node-uuid)库并在将字符串解析为字节后进行字节比较。字节以数组的形式返回,并可以使用lodash _.difference方法进行比较。这将处理GUID不使用相同大小写或者没有' - '破折号的情况。

的CoffeeScript:

compareGuids: (guid1, guid2) -> 
    bytes1 = uuid.parse(guid1) 
    bytes2 = uuid.parse(guid2) 
    # difference returns [] for equal arrays 
    difference = _.difference(bytes1, bytes2) 
    return difference.length == 0 

使用Javascript(更新):

compareGuids: function(guid1, guid2) { 
    var bytes1, bytes2, difference; 
    bytes1 = uuid.parse(guid1); 
    bytes2 = uuid.parse(guid2); 
    difference = _.difference(bytes1, bytes2); 
    return difference.length === 0; 
    } 
+1

我更喜欢JS中的代码示例和下载其他库的信息,但是我使它工作并且工作正常。在CRM表单上快速使用似乎很复杂,但对于大型项目来说可以很好。谢谢! – jcjr 2014-12-08 08:12:25

1
var rgx = /[\{\-\}]/g; 
function _guidsAreEqual(left, right) { 
    var txtLeft = left.replace(rgx, '').toUpperCase(); 
    var txtRight = right.replace(rgx, '').toUpperCase(); 
    return txtLeft === txtRight; 
}; 
+0

函数删除分隔符,然后执行不区分大小写的比较。正则表达式可以放在函数体内。 – user1920925 2015-11-04 19:09:36