Ações limitadas de API e OData
Você já aprendeu como ler dados existentes e criar ou atualizar dados. Você também tem a possibilidade de executar um procedimento por meio do OData. Como a API é criada no OData, você pode usar a mesma funcionalidade nos serviços Web da API e do OData v4.
No entanto, não é possível executar qualquer procedimento em uma página da API. Você pode adicionar um atributo [ServiceEnabled] ao procedimento usando WebServiceActionContext e WebServiceActionResultCode no procedimento para definir o resultado da função.
Para implementar essa função, adicione o nome da função à URL. Existe uma pequena diferença entre API e OData v4 na URL para ações associadas. Com OData, você usaria NAV. como um prefixo. Com a API, você usaria Microsoft.NAV. como um prefixo.
A URL do OData v4 será a seguinte:
POST /ODataV4/Company(<companyName>)/Customers(<code>)/NAV.<functionName>
A URL da API serio o seguinte:
POST /api/v2.0/Company(<companyid>)/customers(<id>)/Microsoft.NAV.<functionName>
No exemplo a seguir, você deseja aplicar um modelo em um cliente quando o cliente é criado usando a API. Os modelos dependem da região fornecida como parâmetro. Existe alguma lógica em um codeunit que recupera o modelo correto e aplica esse modelo no registro do cliente.
[ServiceEnabled]
procedure ApplyTemplate(var actionCnxt: WebServiceActionContext; region: Text[20])
var
CustomLogicMngt: Codeunit "Custom Logic Management";
begin
if region = '' then
Error('You must provide a valid region code for this function.');
CustomLogicMngt.ApplyCustomerTemplate(Rec, region);
actionCnxt.SetObjectType(ObjectType::Page);
actionCnxt.SetObjectId(Page::"My Custom Customer API");
actionCnxt.AddEntityKey(Rec.FieldNo(SystemId), Rec.SystemId);
actionCnxt.SetResultCode(WebServiceActionResultCode::Updated);
end;
O enumerador WebServiceActionResultCode é onde você pode especificar se um registro é criado ou atualizado ou a função foi concluída com êxito e deve retornar um código de status HTTP 200.
Ações não associadas
Os serviços Web OData também oferecem suporte a Ações não associadas. Essas ações não associadas são criadas em Codeunits e não estão vinculadas a uma entidade específica (portanto, Não associadas). As ações não associadas não estão disponíveis para os serviços de API, somente para serviços Web OData. Um procedimento em um codeunit publicado como uma ação não associada não precisa de um atributo ServiceEnabled. Você só precisará criar um procedimento público e publicar o codeunit como um serviço Web.
A URL para a ação OData v4 Não associada seria a seguinte:
POST /ODataV4/{serviceName}_{procedureName}?company={companyName}
codeunit 50100 "MiscOperations"
{
procedure Ping(input: Integer): Integer
begin
exit(-input);
end;
procedure Delay(delayMilliseconds: Integer)
begin
Sleep(delayMilliseconds);
end;
procedure GetLengthOfStringWithConfirmation(inputJson: Text): Integer
var
c: JsonToken;
input: JsonObject;
begin
input.ReadFrom(inputJson);
if input.Get('confirm', c) and c.AsValue().AsBoolean() = true and input.Get('str', c) then
exit(StrLen(c.AsValue().AsText()))
else
exit(-1);
end;
}
Se você publicar o codeunit com um nome de serviço MiscOperations, os procedimentos estarão disponíveis com as seguintes URLs:
POST /ODataV4/MiscOperations_Ping?company=CRONUS%20USA%20Inc.
POST /ODataV4/MiscOperations_Delay?company=CRONUS%20USA%20Inc.
POST /ODataV4/MiscOperations_GetLengthOfStringWithConfirmation?company=CRONUS%20USA%20Inc.