Я отвечаю на свой вопрос с помощью решения. Наконец, я отказался от своих планов по объединению CF8 в файл neo-datasource.xml CF9. Чтобы настроить источники данных на сервере CF9, я нашел способ использования API администрирования CF9.
Шаги:
- Читайте в CF8 нео-datasource.xml
- преобразовать его в массив CFML с Структуры проведения данных
- инициируют администрирования CF9 API, вход в систему и использовать datasources.cfc создать каждый источник данных в качестве нового на сервере CF9
Распознать и преобразования данных XML:
<cfset wddx = fileRead(path_to_file) />
<cfwddx action="wddx2cfml" input="#wddx#" output="_array" validate="yes" />
Это строит массив, содержащий структуры с информацией о источниках данных. Нам нужен только первый элемент массива, который хранит структуры источников данных.
<cfset _str = _array[1] />
Сначала войдите в систему с cfadministrator:
<cfset admin = new cfide.adminapi.Administrator() />
<cfset login = admin.login("cf_admin_password_here", "admin") />
Я использовал для сортировки структуру с «textnocase», чтобы иметь источники данных, отсортированные по имени. Поэтому я перебираю StructKeyList(), сортируя его textnocase. Это потому, что я выполняю некоторый вывод во время выполнения цикла. Чтобы сделать вывод, просто вставьте выходной блок с данными «dsn» -структуры после создания структуры. Я оставил его в этом сообщении, чтобы сэкономить место.
<cfloop index="key" list="#ListSort(StructKeyList(str), 'textnocase')#">
<cfset _str = str[key] />
<cfset db = _str.name />
<cfset dsn = {
driver = 'mysql5',
name = _str.name,
host = 'localhost',
port = '3306',
database = TRIM(ReReplaceNoCase(_str.url, ".*\/(.+?)(\/?\?{0}|\/?\?{1}.*)$", "\1", "ALL")),
username = 'db_user',
password = 'db_password',
args = 'useUnicode=true&characterEncoding=utf8'
}
/>
<cfset dsnAPI = new cfide.adminapi.datasource() />
<cfset dsnAPI.setMySQL5(argumentCollection = dsn) />
</cfloop>
Имя базы данных берется из соединения URL, созданный с помощью опции драйвера MySQL 4/5 в DataSources настройках администратора CF9.
TRIM(ReReplaceNoCase(_str.url, ".*\/(.+?)(\/?\?{0}|\/?\?{1}.*)$", "\1", "ALL"))
Я думаю, что структура «str» само собой разумеется, если вы посмотрите на нее с помощью cfdump.
Надеюсь, что это поможет другим ppl в их потребностях.
Основная идея получена из блога Шон Уолш на:
http://swalsh.org/blog/2013/03/20/programmatically-creating-new-datasource-in-coldfusion/
Большое спасибо, Шон.
Вы столкнулись с входом в блог Чарли во время поиска решения? [Импорт настроек CF Admin в ЛЮБОЙ выпуск через «мастер импорта», даже ПОСЛЕ установки] (http://www.carehart.org/blog/client/index.cfm/2014/11/11/import_cfadmin_settings_anytime_using_import_wizard) ** Прочитать на end ** Я уверен, что вы не хотите мигрировать _ALL_ из настроек. –
Спасибо, Мигель. Я, наконец, нашел пост Чарли после того, как решил его, написав небольшой инструмент, который читает в XML-файле CF8, получает данные о соединении и базе данных и использует API администрирования CF9 для создания всего нового источника данных на сервере CF9. –