Как вызвать асинхронную активность в UIPath - PullRequest
0 голосов
/ 21 сентября 2018

Я пытаюсь выполнить пользовательский asyncCodeActivity в UIPath.Добавлен пакет, передающий все данные, однако UIPath просто зависает, когда достигает пользовательской активности, и не выдает никаких исключений / или остановок.Я попытался создать библиотеку классов, используя CodeActivity и AsyncCodeActivity - моя активность должна создавать несколько APICall, но я получаю результат, он просто останавливается, когда достигает моей пользовательской активности, и не переходит к следующей.Есть ли пример, как создать пользовательскую асинхронную активность для UIPath?Моя библиотека классов работала нормально, когда я пытался протестировать ее вне UIpath.Буду признателен за любую помощь.
Моя библиотека классов с использованием CodeActivity:

public class AddInvoice : CodeActivity
 {       
    [Category("Input")]
    [RequiredArgument]
    public InArgument<string> PickupZip { get; set; }         

    [Category("Output")]
    [RequiredArgument]
    public OutArgument<String> Output { get; set; }

    public async Task<string> ApiTest(CodeActivityContext context)
    {            
        try
        { 
        var origin = await GoogleAPIWrapper.GetAddressByZip(PickupZip.Get(context));          
        string PickupAddress;
        string DeliveryAddress;
        var inv = new IList();
        if (origin.StatusId >= 0)
        {                
            invoice.PickupCity = origin.Locality;                
            invoice.PickupState = origin.AdminLevel1; 
        }
        else
        {               
            invoice.PickupCity = null;               
            invoice.PickupState = null;   
        }             
        var tkn = token.Get(context);
        var client = new HttpClient();
        HttpClientHandler handler = new HttpClientHandler();
        client = new HttpClient(handler, false);
        client.BaseAddress = new Uri("http://test.test.com/");
        client.DefaultRequestHeaders.Add("Authorization", "Bearer " + tkn);
        StringContent content = new StringContent(JsonConvert.SerializeObject(inv), Encoding.UTF8, "application/json");
        var response = await client.PostAsync("api/insert/", content);
        var resultContent = response.StatusCode;
            Output.Set(context, resultContent.ToString());
    }
        catch (Exception e)
        {                
            Output.Set(context, e.ToString());
        }
        return "ok";
}
    protected override void Execute(CodeActivityContext context)
    {
        try
        {
            string result = ApiTest(context).GetAwaiter().GetResult();
        }
        catch (Exception e)
        {
            Output.Set(context, e.ToString());
        }
    }      


    public class IList
    {            
        public string PickupState { get; set; }            
        public string PickupCity { get; set; }           
    }

}  

1 Ответ

0 голосов
/ 21 сентября 2018

Классы, производные от CodeActivity, являются синхронными по умолчанию.Так как UiPath основан на Windows Workflow, он должен работать с классом AsyncCodeActivity .

Вы явно не запрашивали его, но, поскольку вы по сути вызываете веб-службу, имейтепосмотрите на пакет веб-операций, в частности, HTTP-запрос .Это также идет с десериализацией JSON.Вы можете найти более подробную информацию об интеграции веб-службы здесь , например (заявление об отказе: я автор).

...