<< Click to Display Table of Contents >> Интеграция с внешними системами > Создание функций интеграции Переопределение функций интеграции на слое |
Модули базового решения можно перекрывать и дорабатывать функции интеграции, которые в них созданы. Кроме этого, на своем слое можно делать интеграционными существующие серверные и разделяемые функции из базового решения.
ВАЖНО. Переопределять можно только те функции, для которых в родительском модуле указан модификатор virtual.
Предположим, в модуле базового решения есть интеграционная функция:
[Public(WebApiRequestType = RequestType.Get)]
public virtual double SumFunction(double firstNumber, double secondNumber)
{
return firstNumber + secondNumber;
}
На своем слое разработки модуль перекрыт и функция доработана так:
public override double SumFunction(double firstNumber, double secondNumber)
{
return base.SumFunction(firstNumber, secondNumber) + 12.4;
}
Если функция в базовом решении уже интеграционная, то при доработке функции атрибут [Public(WebApiRequestType = {тип запроса})] добавлять не обязательно.
ВАЖНО. В перекрытии нельзя изменять тип запроса интеграционной функции, например с POST на GET.
После переопределения функции интеграции в метаданных OData не генерируется отдельной функции, отображается только функция интеграции с базового слоя. Но при вызове функции интеграции из внешней системы фактически выполняется код переопределенной функции.
Чтобы обычную функцию из модуля базового решения сделать интеграционной, перекройте модуль и при переопределении функции добавьте атрибут [Public(WebApiRequestType = {тип запроса})].
Например, в модуле Company из базового решения есть функция IsRecipientRestrict(). В перекрытии модуля функцию сделали интеграционной и добавили еще одну свою интеграционную функцию SumFunction(int firstNumber, int secondNumber):
// Функция из модуля Company, которую сделали интеграционной.
[Remote, Public(WebApiRequestType = RequestType.Get)]
public override bool IsRecipientRestrict()
{
…
return true;
}
// Новая интеграционная функция.
[Public(WebApiRequestType = RequestType.Post)]
public void SumFunction(int firstNumber, int secondNumber)
{
…
}
После публикации обе функции генерируются в пространстве имен перекрытого модуля и доступны по адресу:
https://{имя сервера, на котором установлен сервис интеграции}/{имя сервиса интеграции}/odata/Company/{Имя функции}
Метаданные функций:
<Schema Namespace="Company" xmlns="http://docs.oasis-open.org/odata/ns/edm">
<Function Name="IsRecipientRestrict" IsBound="true">
<Parameter Name="bindingParameter" Type="Collection(Sungero.IntegrationService.Controllers.Generated.Company)" />
<ReturnType Type="Edm.Boolean" Nullable="false" />
</Function>
<Action Name="SumFunction" IsBound="true">
<Parameter Name="bindingParameter" Type="Collection(Sungero.IntegrationService.Controllers.Generated.Company)" />
<Parameter Name="firstNumber" Type="Edm.Int32" Nullable="false" />
<Parameter Name="secondNumber" Type="Edm.Int32" Nullable="false" />
</Action>
</Schema>
© Компания Directum, 2024 |