Чтобы адаптировать прикладной код для перехода на большие ИД:
1.Запустите сборку решения. В окне вывода отобразятся ошибки, где тип элементов кода не соответствует новому типу long. Доработайте найденные места кода.
2.Доработайте остальные элементы кода, которые не отображаются при сборке: числовые свойства сущностей и функции сервиса интеграции.
Доработка элементов кода по ошибкам сборки
В результатах сборки могут отобразиться ошибки к элементам кода:
Структуры. Если в структурах есть поля, содержащие ИД сущностей, то тип таких полей необходимо изменить с int на long.
Параметры функций. Если в параметрах функций содержится ИД сущностей, то тип таких параметров также необходимо изменить с int на long.
Например, у функции GetBusinessUnit() есть параметр id, в котором содержится ИД нашей организации. Для работы с большими ИД тип параметра заменен на long:
Переменные. Если в переменных типа int сохранялись ИД сущностей, то тип таких переменных необходимо изменить на long.
Код конвертации идентификаторов. Если в прикладном коде выполняются запросы к базе данных, которые возвращают ИД сущностей, то для дальнейшей работы с результатами запросов их также необходимо привести к типу long.
Функция GetDocumentsToTransfer() отвечает за получение документов из базы данных для дальнейшего переноса их из одного файлового хранилища в другое. Ранее функция получала ИД документов и ИД файловых хранилищ с помощью метода GetInt32(). Но так как с версии 4.7 в базе данных значения ИД хранятся с типом bigint, то для корректной работы функции метод GetInt32() заменен на GetInt64(): |
С помощью запроса к базе данных функция GetStartNewId() получает первый ИД документа из списка зарезервированных идентификаторов. Так как в базе данных ИД хранятся с типом bigint, в функции метод конвертации ToInt32() заменен на ToInt64(): |
В примере встречается сразу несколько ситуаций, когда тип int нужно заменить на long. Функция GetForReapprovingAssignmentResultId() получает ИД последнего задания, выполненного с результатом «На повторное согласование». Во-первых, функция работает с идентификаторами, поэтому ее тип возвращаемого значения изменен на long. Во-вторых, параметр функции taskId() содержит ИД задачи на согласование, поэтому его тип также изменен. И в-третьих, функция получает идентификаторы из базы данных, где все ИД хранятся с типом bigint, поэтому для переменной result тип заменен на long: |
Параметры асинхронных обработчиков. Параметры с типом «Целое», в которых хранятся ИД сущностей, необходимо удалить. Затем создать одноименные параметры и указать для них тип «Идентификатор».
Например, в модуле Docflow есть асинхронный обработчик CompareDocuments, который отвечает за сравнение документов и их версий. У асинхронного обработчика есть параметр ComparisonInfold, в котором хранится ИД записи справочника с результатом сравнения. Чтобы параметр корректно определялся в системе, его тип «Целое» изменен на «Идентификатор»:
Доработка свойств типов сущностей и интеграционных функций
Чтобы доработать остальные элементы разработки, их необходимо найти вручную. В результатах сборки ошибки для них не отображаются:
Числовые свойства для хранения ИД сущностей. Если у типов сущностей есть свойства типа «Целое», в которых хранятся ИД других сущностей, то для таких свойств необходимо изменить тип «Целое» на «Идентификатор».
Например, в стандартной поставке в абстрактном типе документа AccountingDocumentBase для свойства SellerTitleId, в котором хранится ИД версии титула продавца, тип «Целое» изменен на «Идентификатор». Таким же образом изменен тип свойств BuyerTitleId, SellerSignatureId и BuyerSignatureId:
Чтобы быстро найти все сущности, у которых есть свойство типа int, откройте текстовый редактор с поддержкой разных видов кодировок. В инструкции приведен порядок действий с использованием текстового редактора Notepad++:
1.Запустите поиск по исходным файлам решения с помощью горячих клавиш Ctrl+Shift+F и в открывшемся окне заполните поля:
•Найти. Укажите значение «"$type": "Sungero.Metadata.Integer»;
•Фильтры. Укажите значение «*.mtd»;
•Папка. Укажите папку с исходными кодами решения.
2.Установите флажок поиска Во всех подпапках, переключатель Расширенный и нажмите на кнопку Найти все.
В результатах поиска отобразятся файлы решения, которые могут содержать свойства с типом int. По имени можно найти конкретный тип сущности.
ВАЖНО. При смене типа данные в базе данных сохраняются. При публикации решения значения колонки со свойствами в базе данных автоматически преобразуются к типу bigint. Но если используется СУБД Microsoft SQL Server и для свойств в базе данных были созданы уникальные индексы и ограничения (constraints), то после автоматического преобразования типа они удаляются, их необходимо восстановить вручную. Для этого напишите скрипт, который заново создаст удаленные индексы и ограничения (constraints). Если используется СУБД на базе PostgreSQL, то скрипт конвертации писать не нужно.
Параметры функций сервиса интеграции. Если в функциях сервиса интеграции использовались параметры, содержащие ИД сущностей, то тип этих параметров необходимо изменить с int на long.
Например, в стандартной поставке есть функция ConvertToPdfWithSignatureMarkInteractively(), которая преобразует документ в формат PDF и проставляет отметку об электронной подписи. Функция получает документ по ИД – параметр documentId. При получении ИД с типом long функция должна уметь его обрабатывать. Поэтому для параметра documentId тип int заменен на long:
Чтобы найти все функции интеграции с параметрами и возвращаемыми значениями типа int, используйте текстовый редактор. Если вы работаете с Notepad++, то запустите поиск по исходным файлам решения с помощью горячих клавиш Ctrl+Shift+F и в открывшемся окне заполните поля:
•Найти. Укажите значение «WebApiRequestType.*[\r\n]+([^\r\n]+).*int»;
•Фильтры. Укажите значение «*ServerFunctions.cs»;
•Папка. Укажите папку с исходными кодами решения.
Затем установите флажок поиска Во всех подпапках, переключатель Регуляр. выражен. и нажмите на кнопку Найти все. В результатах поиска отобразятся все найденные файлы функций сервиса интеграции.
© Компания Directum, 2024 |