Criar a classe de script
Nesta unidade, você verá como criar a classe de script C# para implementar sua lógica de transformação.
O código personalizado usado com um conector deve atender aos seguintes requisitos:
O nome da classe deve ser Script.
A classe Script deve implementar ScriptBase.
A classe Script deve implementar um método chamado ExecuteAsync.
O código personalizado deve levar menos de cinco segundos para ser executado.
O código personalizado deve ter menos de 1 MB no total.
Apenas um arquivo ou classe de script tem suporte.
Explorar ScriptBase
ScriptBase é uma classe que a infraestrutura de conector personalizado fornece com interfaces e métodos auxiliares de suporte. Sua classe Script precisa usar essa classe abstrata como sua classe base.
public class Script : ScriptBase
{
public override Task<HttpResponseMessage> ExecuteAsync()
{
// Your code here
}
}
Além do método ExecuteAsync, essa classe também tem o método auxiliar CreateJsonContent que você usa para criar um objeto StringContent do JSON serializado. Por exemplo, no código a seguir, o método auxiliar CreateJsonContent preenche response.Content da resposta transformada que foi criada.
// Wrap the original JSON object into a new JSON object with just one key ('wrapped')
var newResult = new JObject
{
["wrapped"] = result,
};
response.Content = CreateJsonContent(newResult.ToString());
A classe ScriptBase também fornece uma propriedade CancellationToken. Se você fizer chamadas usando SendAsync, usará a propriedade CancellationToken. Se a solicitação demorar muito ou for solicitado um cancelamento, o método sinalizará o CancellationToken que for passado para ele.
A classe ScriptBase também tem uma propriedade pública Context, que está disponível para sua lógica para fornecer contexto para a solicitação que está sendo processada. A propriedade Context é do tipo IScriptContext e tem as seguintes propriedades e métodos úteis:
OperationId: essa propriedade é mais útil quando você precisa identificar qual operação está sendo processada para que sua lógica forneça as transformações corretas.
Request: esse método é o HttpRequestMessage para a operação que está sendo processada. Se precisar transformar a solicitação, modifique esse método e passe-o para SendAsync para enviar a solicitação ao serviço.
Logger: esse método fornece uma instância de um ILogger que você pode usar para registrar informações de diagnóstico do código nos Logs de Código para a operação do conector.
SendAsync: use essa propriedade para enviar uma solicitação HTTP ao serviço. Você deve usar esse método em vez de fazer sua própria chamada HttpClient.SendAsync.
Compilar seu código localmente
Compilar seu código localmente pode facilitar a identificação de problemas de compilação. Para compilar o código localmente, você precisará criar um projeto em seu computador local e criar arquivos para a classe ScriptBase e a interface IScriptContext. Você copiará o código para esses arquivos da documentação de Definição de classes e interfaces de suporte.
O projeto de software livre Microsoft/MTC_CustomConnectorCodeProject no GitHub também pode ser útil para o desenvolvimento local. Esse projeto fornece uma predefinição de projeto de console para desenvolvimento de código personalizado.
Namespaces com suporte
O código personalizado que você implementa é limitado a um conjunto de namespaces com suporte. Esses namespaces são principalmente uma coleção de namespaces System.* comuns, inclusive criação de log e Newtonsoft JSON, para ajudar a dar suporte à lógica em seu código personalizado. Para obter uma lista completa dos namespaces com suporte no momento, acesse Namespaces com suporte.
Além disso, o código personalizado pode não fazer referência a outros assemblies .NET; portanto, é limitado à lógica que você coloca em seu script carregado.
Outros exemplos de código personalizado
Para saber mais sobre os diferentes tipos de transformações que você concluirá usando código personalizado, procure exemplos de conectores do Microsoft Power Platform publicados. Pesquisar ScriptBase no repositório público-alvo PowerPlatformConnectors, você pode exibir os conectores atuais que implementam o código personalizado.