Versions Compared

Key

  • This line was added.
  • This line was removed.
  • Formatting was changed.

Nadat je jouw dataset klaar hebt door bronnen toe te voegen, de dataset te bewerken en eventueel te filteren, kan het voorkomen dat dit toch nog niet genoeg is. Sommige situaties hebben nog een extra stuk logica nodig.

Daarvoor kan in dit gedeelte de dataset nog verder bewerkt worden. Dit kan door de variabele van de dataset binnen de scripting aan te passen.

Variabelen aanwezig in dit gedeelte

Om de dataset te kunnen bewerken, dient deze uiteraard ook in dit gedeelte aanwezig te zijn. Het resultaat tot op dit punt (zie volgorde van dataset verwerking bij Bewerken) zit in de variabele dataset.

In totaal zijn de volgende variabelen beschikbaar:

Naam variabele

Omschrijving

Datatype

dataset

Dit is de huidige dataset

System.Data.DataTable

mappingfiles

Dit is een verzameling (array) van alle beschikbare bronnen uit Verzamelen. Door mappingfiles['100098'] bijvoorbeeld te pakken, wordt de bron met ID 100098 opgehaald en kan gebruikt worden. Door bij het verzamelen met de muis over de bron te gaan, wordt de ID zichtbaar.

System.Collections.Generic.Dictionary<string,System.Data.DataTable>

Kolomnamen in dataset

De kolomnamen in de dataset zijn als volgt:

  1. Voor de kolommen afkomstig bij de bronnen/verzamelen is het de ID van de kolom. Deze kan gevonden worden door op de bewerken knop te klikken bij Verzamelen.

  2. Voor de berekende kolommen welke zijn toegevoegd in het Bewerken gedeelte, geldt ook ID van de kolom maar dan met een “C” er voor. De ID kan gevonden worden door over de kolom heen te gaan met de muis in het bewerken gedeelte

    Image Added

Je kunt ook een klein script toevoegen bovenaan het script gedeelte waardoor je op basis van de kolomnaam de ID kunt ophalen.

Code Block
languagepy
#Get fieldnames based on name
def GetFieldIDByName(datatable,fieldName):
	for col in datatable.Columns:
		if col.Caption == fieldName:
			return col.ColumnName

Door naar bovenstaand script de DataTable te sturen waar de kolom uit komt en de naam van de kolom, krijg je het ID terug.

Code Block
languagepy
COLUMNID_dataset_Volgnummer = GetFieldIDByName(dataset, 'Volgnummer')

In bovenstaande script is nu de variabele COLUMNID_dataset_Volgnummer gevuld met de ID van de kolom (bijvoorbeeld waarde C100056)

Hierdoor kan dit weer gebruikt worden in een vervolg gedeelte

Code Block
languagepy
for rw in dataset.Rows:
    rw[COLUMNID_dataset_Volgnummer] = "1"

Dit zorgt er dus voor dat voor iedere regel de waarde van de kolom met naam “Volgnummer” de waarde 1 krijgt

Het totale script wordt in dit geval:

Code Block
languagepy
#Get fieldnames based on name
def GetFieldIDByName(datatable,fieldName):
	for col in datatable.Columns:
		if col.Caption == fieldName:
			return col.ColumnName

#Set variable for COLUMN ID
COLUMNID_dataset_Volgnummer = GetFieldIDByName(dataset, 'Volgnummer')

#Iteratie through rows
for rw in dataset.Rows:
    rw[COLUMNID_dataset_Volgnummer] = "1"

Iteratie/loop door alle regels in de dataset

Code Block
languagepy
for rw in dataset.Rows:
    rw[0] = "abc"

Hier wordt door alle regels in het het resultaat gegaan en wordt de waarde van iedere eerste kolom (index 0) gevuld met waarde abc.

Van onder naar boven door de dataset gaan

In sommige situaties wil je van onder (onderste regel) naar boven (bovenste regel) door de dataset gaan. Bijvoorbeeld omdat je af en toe (op basis van logica) een regel wilt verwijderen. Door dit van onder naar boven te doen, raakt de volgorde (iteratie/loop) niet verstoord.

Code Block
#Iterate through rows for bottom to top
for rwIndex in range(dataset.Rows.Count-1,-1,-1):
	#set row based on index
	rw = dataset.Rows[rwIndex]
	
	#Check if column value equal to 1
	if rw['100008'] == '1':
		#if so, delete row
		rw.Delete()

Filteren op meerdere regels in bron

Om het mogelijk te maken om data uit een andere verzameling te halen, kunnen we bijvoorbeeld gebruik maken van de zogenaamde DataView. Deze biedt de mogelijkheid om te sorteren en daardoor een zogenaamde indexing aan te leggen. Hierdoor wordt het zoeken in een gesorteerde DataView sneller.

Code Block
languagepy
#Get fieldnames based on name
def GetFieldIDByName(datatable,fieldName):
	for col in datatable.Columns:
		if col.Caption == fieldName:
			return col.ColumnName

#Get source 2
source2ID = '100095'
source2 = mappingfiles[source2ID]

#Set sort/index columns
COLUMN_source2_Crediteurnaam = GetFieldIDByName(source2,'Crediteurnaam')
COLUMN_source2_Inkooprelatie = GetFieldIDByName(source2,'Inkooprelatie.')

#create DataView
dv = DataView(source2)

#Sort dataView and create index
dv.Sort = "[" + COLUMN_source2_Crediteurnaam + "] asc, [" + COLUMN_source2_Inkooprelatie + "] asc"

#Function to get from dataview based on parameters
def GetNumberOfRows(Crediteurnaam, Inkooprelatie):
    #Create filter. This is an array of all values. Sequense is important
	xFilterArray = System.Array[System.String]([Crediteurnaam,Inkooprelatie])
	DataRowViews = dv.FindRows(xFilterArray)

	#if found return length
	if DataRowViews.Length>0:
		return DataRowViews.Length
	else:
		return None

#Iterate through rows
for rw in dataset.Rows:
    #Set first column of each row to number of results found
	rw[0] = GetNumberOfRows('Mooqe','12345')

In bovenstaand script wordt uit de functie GetNumberOfRows voor iedere regel het aantal regels gehaald gevonden o.b.v. de input. In het voorbeeld worden vaste waarden gebruikt (Mooqe en 12345). In een echte situatie zullen hier bijvoorbeeld waarden staan uit de regel van de dataset.