Toon posts:

[.Net] [UiPath] Waarde uit variable gebaseerd op de naam

Pagina: 1
Acties:

Vraag


  • Eppo ©
  • Registratie: Juni 2004
  • Niet online
Is het mogelijk om een waarde uit een variabele te halen als ik alleen de naam van de variabele als een string heb? En zo ja, hoe doe ik dat?

Even een voorbeeld omdat het makkelijker maakt:
code:
1
2
3
4
5
6
7
Var1 = "Hallo"
Var2 = "Hulp nodig!"
Var3 = "Van Tweakers"

PrintVar = GetValue("Var1")

Console.Writeline(PrintVar)

En dan hoop ik dat er "Hallo" komt te staan (en bij "Var2" moet er "Hulp nodig!" komen te staan).

Ik ben dus opzoek naar de GetValue code stukje. Alle variabele die ik nodig heb zijn al gedefinieerd, heb nog de waarde nodig.

Relevante software en hardware die ik gebruik
Het is een stukje dat ik wil gebruiken voor UiPath. We hebben daar verschillende .xaml bestanden met de 'code'. Om elke .xaml bestand te testen heb ik de waarde nodig van de argumenten die worden doorgegeven aan de .xaml bestand. Nu kan ik die waarde afzonderlijk noteren, maar het leek mij handig om ze weg te schrijven naar een .txt bestand (excel bestand. csv, net hetgeen handig is voor de verschillende var types) en dna het liefst op zo'n manier dat ik het stukje code op elke .xaml bestand kan gebruiken. Het lastige is dat elke xaml bestand steeds andere argumenten gebruikt. Om die reden leest hij nu het bestand in, haalt alle namen van de argumenten eruit en hoef ik alleen nog maar te achterhalen waat de waarde is van elk argument.

Wat ik al gevonden of geprobeerd heb
Denk dat ik dit zoek:
https://stackoverflow.com...-name-is-stored-as-string
Maar dat is voor Bash en ik zoek zoiets ook voor C#/UiPath
Kwam toen ook uit bij Reflection in C#, maar daar loop ik een beetje vast. Denk wel dat ik het nodig heb, maar weet niet goed hoe ik het kan toepassen.

edit: Kwam erachter dat UiPath mogelijk niet alleen C# gebruikt, maar ook VB.Net. Mogelijk is het daar wel mee mogelijk. Zie bijv https://stackoverflow.com...ng-value-by-variable-name

[Voor 5% gewijzigd door Eppo © op 02-01-2023 15:44]

Alle reacties


  • ThinkCreative
  • Registratie: Oktober 2009
  • Laatst online: 27-01 17:01
Kan je in dit geval niet gewoon een dictionary gebruiken?
https://learn.microsoft.c...dictionary-2?view=net-7.0

Anders moet je de variabelen als fields ipv locals definieren, dan kan je ze via reflection wel uitlezen.

[Voor 25% gewijzigd door ThinkCreative op 02-01-2023 14:55]


  • Eppo ©
  • Registratie: Juni 2004
  • Niet online
Wordt lastig, dit omdat de code is geschreven in UiPath (een RPA oplossing). Alle code staan in verschillende Xaml bestanden die variabele door kunnen geven aan elkaar (de genoemde argumenten. Zie bijv: https://docs.uipath.com/studio/docs/using-arguments).

Nu heeft een xaml bijv de volgende argumenten
argsURL - String - www.iets.net
argDTVerzekeringen - DataTable - [Data]
argbUitbetalen - Boolean - True

maar een andere xaml heeft weer andere argumenten. Nu kan ik per Xaml bestand wel gaan zetten dat hij de argumenten moet exporteren (bijv. string en booleans in een tekstbestand, datatable in een excel), maar wilde graag een generieke oplossing hebben.

Een proces is bijv al volgt opgebouwd:
Begin> Stap 1 > Stap 2 > Stap 3 > Eind

Als ik dan alleen stap 2 wil testen, heb ik wel alle variabelen nodig die stap 1 naar stap 2 heeft doorgegeven. Wil daarom mijn generieke code in stap 1, 2 en 3 zetten. Dan heb ik alle data om de stappen los van elkaar te starten.

Kwam er nu ook achter dat UiPath mogelijk niet met C# werkt, maar met VB.Net, dus mogelijk is het daar wel mogelijk. Kwam nu dit tegen:
https://stackoverflow.com...ng-value-by-variable-name

Daarin staat dit:
code:
1
2
3
The short answer for your question is "Yes" it is possible :

myValue = Me.GetType.GetField("_tipo" & validationString).GetValue(Me)

Maar wat is Me voor iets? Wat voor variabele gebruik ik daar?

  • Haan
  • Registratie: Februari 2004
  • Laatst online: 27-01 21:23

Haan

dotnetter

Me is het VB equivalent van this

Kater? Eerst water, de rest komt later


  • Eppo ©
  • Registratie: Juni 2004
  • Niet online
denk dat ik het dan niet werkend ga krijgen in UiPath. Krijg als ik Me gebruik de volgende foutmelding:
'Me is valid only within an instance method'

Als ik daar op zoek dan kom er aan uit hoe ik dit oplos. Denk dat het toch het mijn lot wordt makkelijkste gaat worden dat ik gewoon handmatig voor elke variabele het handmatig exporteer.

  • RobIII
  • Registratie: December 2001
  • Laatst online: 04:17

RobIII

Admin Devschuur®

^ Romeinse Ⅲ ja!

Eppo © schreef op maandag 2 januari 2023 @ 16:17:
denk dat ik het dan niet werkend ga krijgen in UiPath. Krijg als ik Me gebruik de volgende foutmelding:
'Me is valid only within an instance method'
@Haan zegt toch dat Me het VB.Net equivalent van this is in C# :?

Verder ken ik UIPath niet maar dit stinkt als een vuilnisbelt. Het is echt niet onmogelijk wat je wil, maar het is wel ont-zet-tend vies.

Wat is er mis met een dedicated class (a-la "Customer" en "Product" etc.) te maken en die door te geven in een "Order" naar het volgende stapje? En als je dan toch een 'dumpbak' wil hebben waar je allerlei dingen in wil gooien, gebruik dan, zoals aangegeven door @ThinkCreative een dictionary (...of een array of een list of...).

[Voor 25% gewijzigd door RobIII op 02-01-2023 16:26]

There are only two hard problems in distributed systems: 2. Exactly-once delivery 1. Guaranteed order of messages 2. Exactly-once delivery.

Roses are red Violets are blue, Unexpected ‘{‘ on line 32.

Over mij


  • Eppo ©
  • Registratie: Juni 2004
  • Niet online
ja klopt, maar dat kwam omdat ik dacht dat UiPath gemaakt was met C#, maar blijkbaar had ik het mis en is het gemaakt met .Net. Het is handig om te gebruiken voor het automatiseren van taken, maar op sommige vlakken beperkt het je wel (het is een beetje een vorm van lowcode). Daarnaast is mijn beperkte Dev kennis te weinig om het werkend te krijgen, dus dan maar handmatig...

  • MrSenne
  • Registratie: Maart 2012
  • Laatst online: 27-01 16:40
Ik werk zelf al 5 jaar met UiPath, maar moet toegeven dat je vraag mij niet helemaal duidelijk is.

Kan je iets concreter uitleggen wat je wilt doen, en vooral welk resultaat je wilt bereiken? Dan wil ik gerust wel even meedenken. :)

  • Eppo ©
  • Registratie: Juni 2004
  • Niet online
@MrSenne Heb even een tekening gemaakt, misschien maakt het dan duidelijker:

We hebben een robot die uit verschillende xaml's bestaat. Het is niet de beste robot, maar hij is out en hij is vroeger zo gemaakt. Daar moet ik helaas mee dealen. Versimpeld ziet hij er zo uit:


In stap 4 komen dus een hoop argumenten voor die uit de andere stappen zijn gehaald. Als ik stap 4 aanpas, dan moet ik alle andere stappen ook laten draaien wat veel tijd kost. Dus nu wil ik een test maken voor alleen stap 4. Hiervoor heb ik de data nodig die uit de andere stappen komt. Normaal gesproken pas ik de code aan dat hij voordat hij aan stap 4 begint, hij alle argumenten exporteerd (datatabellen naar een excel bestand, strings en booleans naar een kladblok, etc). Dan kan ik een test xaml maken, waarin ik al die data inlees en dan invoke ik stap 4 en kan ik alleen die testen. Een beetje zoals dit:



Als ik dit voor een nieuwe stap moet doen, dan moet ik handmatig alle inkomende argumenten wegschrijven. Nu dacht ik dat het handiger kon. Ik kan de robot namelijk de xaml inlezen, daaruit alle inkomende argumenten halen (naam, soort, richting). Waar ik nu vast loop is dat ik dus de naam als string heb, maar ik heb de waarde nodig van die variabele. Maar ik kom er niet aan uit hoe ik er voor zorg dat hij de string niet als sting behandeld, maar als de naam van de variabele.

Snap dat ik voor elke stap de code moet aanpassen, maar ik wilde dat gewoon met een snippet doen. Dus dat ik een zo'n algemeen mogelijk code heb, die ik keer op keer kan hergebruiken met wat kleine aanpassingen.
Pagina: 1


Tweakers maakt gebruik van cookies

Tweakers plaatst functionele en analytische cookies voor het functioneren van de website en het verbeteren van de website-ervaring. Deze cookies zijn noodzakelijk. Om op Tweakers relevantere advertenties te tonen en om ingesloten content van derden te tonen (bijvoorbeeld video's), vragen we je toestemming. Via ingesloten content kunnen derde partijen diensten leveren en verbeteren, bezoekersstatistieken bijhouden, gepersonaliseerde content tonen, gerichte advertenties tonen en gebruikersprofielen opbouwen. Hiervoor worden apparaatgegevens, IP-adres, geolocatie en surfgedrag vastgelegd.

Meer informatie vind je in ons cookiebeleid.

Sluiten

Toestemming beheren

Hieronder kun je per doeleinde of partij toestemming geven of intrekken. Meer informatie vind je in ons cookiebeleid.

Functioneel en analytisch

Deze cookies zijn noodzakelijk voor het functioneren van de website en het verbeteren van de website-ervaring. Klik op het informatie-icoon voor meer informatie. Meer details

janee

    Relevantere advertenties

    Dit beperkt het aantal keer dat dezelfde advertentie getoond wordt (frequency capping) en maakt het mogelijk om binnen Tweakers contextuele advertenties te tonen op basis van pagina's die je hebt bezocht. Meer details

    Tweakers genereert een willekeurige unieke code als identifier. Deze data wordt niet gedeeld met adverteerders of andere derde partijen en je kunt niet buiten Tweakers gevolgd worden. Indien je bent ingelogd, wordt deze identifier gekoppeld aan je account. Indien je niet bent ingelogd, wordt deze identifier gekoppeld aan je sessie die maximaal 4 maanden actief blijft. Je kunt deze toestemming te allen tijde intrekken.

    Ingesloten content van derden

    Deze cookies kunnen door derde partijen geplaatst worden via ingesloten content. Klik op het informatie-icoon voor meer informatie over de verwerkingsdoeleinden. Meer details

    janee