Как исправить заглавный 18-значный идентификатор Salesforce - PullRequest
0 голосов
/ 30 ноября 2018

Если 18-значный идентификатор Salesforce возвращается (скажем, сторонней программой) в формате с большой буквы, это делает 18-значный идентификатор нечитаемым для Salesforce.Как я могу использовать python для исправления этого заглавного идентификатора?

1 Ответ

0 голосов
/ 30 ноября 2018

Эта публикация является реконструкцией вопроса " Преобразование 18-значного идентификатора в верхнем регистре в действительный идентификатор" на бирже стека Salesforce". Размещенное здесь решение преобразует решение Адриана Ларсона в восстановление идентификатора upcase из APEX.в Python 3.

Решение APEX, преобразованное в Python 3:

def getBitPatterns(c):
    CHARS = 'ABCDEFGHIJKLMNOPQRSTUVWXYZ012345'
    index = CHARS.find(c)
    result = []
    for bitNumber in range(0,5):
        result.append((index & (1 << bitNumber)) != 0)
    return result

def repairCasing(x18DigitId):
    if len(x18DigitId) < 18:
        return 'Error'
    toUpper = []
    toUpper.append(getBitPatterns(x18DigitId[15:16]))
    toUpper.append(getBitPatterns(x18DigitId[16:17]))
    toUpper.append(getBitPatterns(x18DigitId[17:18]))
    toUpper = [item for sublist in toUpper for item in sublist]

    output = ''.join([x18DigitId[x].upper() if toUpper[x] else x18DigitId[x].lower() for x in range(0,15)]) + x18DigitId[15:].upper()

    return output

Пример:

repairCasing('003i000001IIGW7AAH')

Out:

'003i000001IIGw7AAH'

Примечание:

Для учащихся

toUpper = [item for sublist in toUpper for item in sublist]

- это метод составления списков для объединения массивов в массиве в один массив (благодарность АлексуМартинелли на Как сделать плоский список из списка списков? ) и эквивалентен:

for sublist in toUpper:
    for item in sublist:
        newList.append(item)
toUpper = newList

Аналогично:

output = ''.join([x18DigitId[x].upper() if toUpper[x] else x18DigitId[x].lower() for x in range(0,15)]) + x18DigitId[15:].upper()

является списком-эквивалентом:

     output = ''

     for i in range(0,15):
         c = x18DigitId[i:i+1]
         if toUpper[i]:
             output += c.upper()
         else:
             output += c.lower()

     output += x18DigitId[15:18].upper()
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...