Политика BRE - Где хранить строки подключения для фактов БД - PullRequest
0 голосов
/ 07 ноября 2018

Использование BizTalk 2016 FP3 CU5.

У меня есть правило BRE, которое принимает 4 типизированных XML-документа и одно соединение для передачи данных. Я настроил оркестровку, чтобы выполнить ее, используя форму правил вызова.

Я использую BizTalk Deployment Framework (BTDF) для развертывания, и это делает хорошую работу по развертыванию политик BRE для. Моя проблема в том, что в экспортированном xml для политики (с именем NotificationService.xml) есть жестко запрограммированная ссылка на базу данных, используемую в правиле, как показано ниже:

 <datarow ref="db_32" server="SDEIDBTI04\CrossRef" dataset="CrossRef" table="Lookups"

Это относится к моему dev vm, но поскольку решение продвигается через тестирование и в производство, имя сервера должно измениться соответствующим образом.

Мое текущее решение этой проблемы состоит в том, чтобы использовать возможность BTDF для предварительной обработки XML-файлов и замены значением из файла Excel EnvironmentSettings, взятым из SSO. Итак, я создал «NotificationService.Dynamic.xml», в котором я изменил предыдущую строку на:

<!-- ifdef ${_xml_preprocess} -->
  <datarow ref="db_32" server="${Common.Components.CrossRefDbServer}\CrossRef" dataset="CrossRef" table="Lookups" instances="16" selectivity="1" isdataconnection="true" instance="0" />
  <!-- endif -->

(* есть веская причина, по которой я должен был оставить ifdefs!)

В моем файле deploy.btdfproj я добавил следующее, чтобы обеспечить развертывание предварительно обработанной политики:

<FilesToXmlPreprocess Include="NotificationService.Dynamic.xml" 
Condition="'$(Configuration)' == 'Server'">
  <LocationPath>..\</LocationPath>
  <OutputFilename>NotificationService.Dynamic_Processed.xml</OutputFilename>
</FilesToXmlPreprocess>

<FilesToXmlPreprocess Include="NotificationService.Dynamic.xml" Condition="'$(Configuration)' != 'Server'">
  <LocationPath>..\NotificationService\NotificationService.BRE</LocationPath>
  <OutputFilename>NotificationService.Dynamic_Processed.xml</OutputFilename>
</FilesToXmlPreprocess>

<RulePolicies Include="NotificationService.Dynamic_Processed.xml">
  <LocationPath>..\NotificationService\NotificationService.BRE</LocationPath>
</RulePolicies>

Это работает, но я не могу не думать, что слишком усложнил решение. Каждый раз, когда я экспортирую новую версию политики, мне приходится проходить через сложность создания файла NotificationService.Dynamic.xml из экспортированного файла NotificationService.xml. Как люди решают ту же проблему, когда не используют BTDF?

Если окажется, что я выбрал лучший путь, то, надеюсь, этот вопрос поможет другим в будущем - я не смогу найти ответы от Google!

1 Ответ

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

Я бы сделал статический метод, где вы создаете всю логику, получая значение поиска.

Таким образом, в этом методе вы получите параметр SSO CrossRefDbServer, используя SSOSettingsFileReader.dll , а затем сделаете некоторый код на c # для вызова вашей таблицы поиска и возврата значения.

Затем вы можете вызвать этот метод в своем BRE, если для параметра реестра StaticSupport установлено значение 1.

...