Определение уникальности роли
Тут надо было решить несколько задач.
Первая – не загружать те роли, которые уже по факту были загружены и не изменились.
Для этого мы воспользовались технологией хешей, а именно, вначале происходит чтение текстового файла, потом считается его хеш вот такой вот функцией:
Function HashMD5(Data) Export
Hash = New DataHashing(HashFunction.MD5);
Hash.Append(Data);
HashSum = Hash.HashSum;
HashSumString = String(HashSum);
HashSumString = StrReplace(HashSumString, " ", "");
HashSumStringUUID = Left(HashSumString, 8) + "-" +
Mid(HashSumString, 9, 4) + "-" +
Mid(HashSumString, 15, 4) + "-" +
Mid(HashSumString, 18, 4) + "-" +
Right(HashSumString, 12);
Return HashSumStringUUID;
EndFunction
Она возвращает строку, которую можно преобразовать UUID. Можно, конечно, передавать сам бинарник, тогда как бы и не надо было бы читать файл, однако, нам все равно из файла надо получить UUID роли, чтобы сопоставить с тем, что в базе.
И этот же UUID из ролей – является UUID элемента справочника ролей. Поэтому, если вы по какой-то причине потеряли эти UUID, а их можно иногда потерять, например, при слиянии конфигураций по наименованию, а не ID объектов. То тогда можно получить дубли.