Programatically inserting "User Accounts" and "Tenants" in Dundas with C# code using the API

We have a requirement to integrate Dundas with our existing application in c# where we need to register more than 100 users with Dundas and then to create a Tenant for all of them. I am using the available API’s from Dundas BI “Developer Resources” here-
https://www.dundas.com/support/api-docs/rest/#Dundas%20BI%20REST%20API%20Reference/Account/POST.html%3FTocPath%3DDundas%20BI%20REST%20API%20Reference|Account|_____1
I am able to Insert Users using the API as the JSON sample was available.
While creating a required Tenant I am again using the available methods.
For Tenants I am using the methods from here-
https://www.dundas.com/support/api-docs/rest/#Dundas%20BI%20REST%20API%20Reference/Tenant/POST.html%3FTocPath%3DDundas%20BI%20REST%20API%20Reference|Tenant|_____1

Though passing the required JSON in the Request body I am still not able to insert the a Tenant.
My Sample Json:
{
“Id”:"",
“Name”:“CodedTenant”,
“AccountNamePattern”:“CodedTenant”,
“DataConnectorPropertyOverrides”:[

],
“TimeDimensionPropertyOverrides”:[

],
“LicenseSeatAllocation”:null,
“AdministratorsGroupId”:“00000000-0000-0000-0000-000000000000”,
“MembersGroupId”:“00000000-0000-0000-0000-000000000000”,
“CreatedTime”:"/Date(1543947056391)/",
“UIClassName”:""
}

Though on adding and removing different properties I am still getting the response with StatusCode:400 as Bad Request.
How I can be sure regarding the required JSON objects that I must include in the Request body.

Hello,

You need to include the license seat allocation. I would recommend when having issues with REST objects not being accepted is to take a look at what the web application is doing. This is documented here in the tips and tricks section (https://www.dundas.com/support/api-docs/rest/#Getting%20Started/Overview.html%3FTocPath%3DGetting%20Started|_____1).

{
“__classType”: “dundas.account.Tenant”,
“name”: “Test”,
“accountNamePattern”: “T”,
“dataConnectorPropertyOverrides”: [],
“timeDimensionPropertyOverrides”: [],
“licenseSeatAllocation”: {
“__classType”: “dundas.account.TenantSeatAllocation”,
“floatingDeveloperAllocation”: {
“__classType”: “dundas.account.TenantSeatAllocationDetail”
},
“floatingPowerUserAllocation”: {
“__classType”: “dundas.account.TenantSeatAllocationDetail”,
“baseSeatCount”: “”,
“elasticSeatCount”: “”,
“elasticHourCount”: “”
},
“floatingStandardUserAllocation”: {
“__classType”: “dundas.account.TenantSeatAllocationDetail”,
“baseSeatCount”: “”,
“elasticSeatCount”: “”,
“elasticHourCount”: “”
},
“reservedDeveloperAllocation”: {
“__classType”: “dundas.account.TenantSeatAllocationDetail”,
“baseSeatCount”: “”
},
“reservedPowerUserAllocation”: {
“__classType”: “dundas.account.TenantSeatAllocationDetail”,
“baseSeatCount”: “”
},
“reservedStandardUserAllocation”: {
“__classType”: “dundas.account.TenantSeatAllocationDetail”,
“baseSeatCount”: “”
}
}
}

Alternatively there are other options like the ones below that can be used to directly integrate and use your existing users directly in the application:

creating a custom accounts provider: https://www.dundas.com/support/developer/samples/extensions/create-a-custom-accounts-provider
creating a custom tenants provider: https://www.dundas.com/support/developer/samples/extensions/create-a-custom-accounts-provider

1 Like

Hello David,

Thanks a lot for help and that really worked. I have completed almost all the steps that were required.
These includes -
Registering a User
Creating a Tenant
Allocating a User with the Tenant
But got stuck with the last one i.e. “Data Connector Override” functionality while I was doing this programmatically with C#.
Still struggling with the right API call for this.
Thanks

The dataConnectorPropertyOverrides is an array of overrides. Each override contains an array of values which are data provider property ID’s, the key is the data connector ID. The data providers are extensions, so we don’t have a list of the ID’S of the values mapped in the API Documentation. The best way is to go through the UI and F12 into dev tools and inspect each element to get the ID’s. You should be able to pass them when creating or updating a tenant. Using REST this would be a call to https://www.dundas.com/support/api-docs/rest/#Dundas%20BI%20REST%20API%20Reference/Tenant/{id}/PUT.html or https://www.dundas.com/support/api-docs/rest/#Dundas%20BI%20REST%20API%20Reference/Tenant/POST.html. This is an example of the REST created when I updated my Tenant for the dataConnector properties:

“dataConnectorPropertyOverrides”: [
{
“__classType”: “dundas.account.ProviderPropertyOverride”,
“key”: “a102fefc-62c9-4517-9bf4-77c9a08c4f76”,
“name”: “Corgent”,
“location”: “/Projects Root/Corgent/DataConnectorsRootFolder”,
“value”: [
{
“__classType”: “dundas.data.SingleStringValue”,
“value”: “dbtest\”,
“parameterId”: “280CCCD2-4B23-4C0B-8D62-9DF6F9C6FA72”,
“isInverted”: false,
“parameterValueType”: “SingleString”
},
{
“__classType”: “dundas.data.SingleNumberValue”,
“value”: 1,
“parameterId”: “9C6F4CA3-E36A-4FB0-B288-2AD8FA86F7E5”,
“isInverted”: false,
“parameterValueType”: “SingleNumber”
},
{
“__classType”: “dundas.data.SingleNumberValue”,
“value”: 10,
“parameterId”: “60251FF5-5D89-4804-AC68-BF500C800621”,
“isInverted”: false,
“parameterValueType”: “SingleNumber”
},
{
“__classType”: “dundas.data.SingleStringValue”,
“value”: “Auto”,
“parameterId”: “DBA27BBD-5ABE-4E2B-B6F1-1571DBAFCEE0”,
“isInverted”: false,
“parameterValueType”: “SingleString”
},
{
“__classType”: “dundas.data.SingleStringValue”,
“value”: “disabled”,
“parameterId”: “D3747A39-BA02-4B49-A555-A02CFCE6E99F”,
“isInverted”: false,
“parameterValueType”: “SingleString”
},
{
“__classType”: “dundas.data.SingleBooleanValue”,
“value”: true,
“parameterId”: “E5FA4D02-EA0D-476E-9561-D59ACA0E45EB”,
“isInverted”: false,
“parameterValueType”: “SingleBoolean”
}
]
}
]

The property with ID = ‘280CCCD2-4B23-4C0B-8D62-9DF6F9C6FA72’ is representing the Server name on the provider. The Key is the data connector ID.

A link to the property which contains the type information:

https://www.dundas.com/support/api-docs/net/#html/T_Dundas_BI_AccountServices_MultiTenancy_Tenant.htm

Alternately, if you are starting the Engine in .NET and using the API’s directly without REST you would call the save method on the IMultiTenancyService: https://www.dundas.com/support/api-docs/net/#html/N_Dundas_BI_AccountServices_MultiTenancy.htm

Hi David,
Thanks again,
For DataConnectorPropertyOverride
I am looking into this for the class info.-
https://www.dundas.com/support/api-docs/net/#html/P_Dundas_BI_AccountServices_Extensibility_TenantData_DataConnectorPropertyOverrides.htm%3FTocPath%3DLanguage%20Reference|Dundas.BI.Core%20Assembly|Dundas.BI.AccountServices.Extensibility|TenantData%20Class|TenantData%20Properties|_____5

Moving Further with “ParameterCollectionValue” on DundasDoc its showing 4 properties
https://www.dundas.com/support/api-docs/net/Content/html/T_Dundas_BI_Data_Parameters_ParameterValueCollection.htm

But actually through code I am able to fetch just two -

Where I am going wrong?

Hi David,
I am still struggling at the last step of “Data Connector Override”. I think once its done our 95% of the Integration will be completed.
I have the Data Connector ID and other Id’s that are required.If you can help on this a bit more or any other sample code if available will be highly appreciable.
Also need to ask while creating a Tenant can we set the “DataConnectorOverride” property ?
As from Dundas Interface we can only set the “DataConnectorOverride” property while we update a Tenant and not at the time of Creation.

I am using the following class for Creating a new Tenant through code -

Thanks

When using .NET you will use the Tenant object. TenantData is used when for REST calls. I’ve created a simple sample below that creates a tenant and assigns the data connector property overrides:

IMultiTenancyService multiTenancyService =
Engine.Current.GetService<IMultiTenancyService>();

Guid dataConnectorId = new Guid(“a102fefc-62c9-4517-9bf4-77c9a08c4f76”);

ParameterValueCollection parameterValueCollection = new ParameterValueCollection();

ParameterValue parameterValue = new SingleStringValue(new Guid(“280CCCD2-4B23-4C0B-8D62-9DF6F9C6FA72”), “dbtest\”);

parameterValueCollection.Add(parameterValue);

Tenant tenant = new Tenant(“MyTenant”);
tenant.AccountNamePattern = “T”;
tenant.DataConnectorPropertyOverrides.Add(dataConnectorId, parameterValueCollection);

multiTenancyService.SaveTenant(tenant);

Also need to ask while creating a Tenant can we set the “DataConnectorOverride” property ?

Yes, it is not done in our user interface but it is possible in the API.

Hi David,
Thanks, but I am using TenantData class knowingly as we need Rest Calls.
What is “dbtest” in the below line of sample code?

ParameterValue parameterValue = new SingleStringValue(new Guid(“280CCCD2-4B23-4C0B-8D62-9DF6F9C6FA72”), “dbtest\”);

Hi David,
I got the following JSON while creating an Override-

dataConnectorPropertyOverrides: [{key: "4babfff6-efe6-4e17-917f-e54cfe2571a4", name: "DynamicVenue",…}]

0: {key: "4babfff6-efe6-4e17-917f-e54cfe2571a4", name: "DynamicVenue",…}

key: "4babfff6-efe6-4e17-917f-e54cfe2571a4"

location: "/Projects Root/CEO Dashboards/DataConnectorsRootFolder"

name: "DynamicVenue"

value: [{parameterValueType: "SingleString", parameterId: "8ffe4086-6013-4586-902c-fda2502548d4",…}]

0: {parameterValueType: "SingleString", parameterId: "8ffe4086-6013-4586-902c-fda2502548d4",…}

__classType: “dundas.account.ProviderPropertyOverride”
location: “/Projects Root/CEO Dashboards/DataConnectorsRootFolder”
name: “DynamicVenue”
value: [{parameterValueType: “SingleString”, parameterId: “8ffe4086-6013-4586-902c-fda2502548d4”,…}]
__classType: “dundas.account.ProviderPropertyOverride”

Where I need to add the name of new “Initial Catalogue” for which I am overriding?
Thanks

Created a new sample below for using TenantData, the one for initial catalog is 8ffe4086-6013-4586-902c-fda2502548d4:

TenantData tenantData = new TenantData();
tenantData.AccountNamePattern = “T”;
tenantData.Name = “MyTenant”;

Guid dataConnectorId = new Guid(“a102fefc-62c9-4517-9bf4-77c9a08c4f76”);

string sqlServerDatasourceName = “dbtest\”;

Guid dataSourceId = new Guid(“280CCCD2-4B23-4C0B-8D62-9DF6F9C6FA72”);

ParameterValueData dataSourceParameterValueData = new ParameterValueData();

dataSourceParameterValueData.ParameterValueType = ParameterValueTypes.SingleString;
dataSourceParameterValueData.Value = sqlServerDatasourceName;
dataSourceParameterValueData.ParameterId = dataSourceId;

Guid initialCatalogId = new Guid(“8FFE4086-6013-4586-902C-FDA2502548D4”);
string initialCatalog = “SomeDatabase”;

ParameterValueData initialCatalogParameterValueData = new ParameterValueData();

dataSourceParameterValueData.ParameterValueType = ParameterValueTypes.SingleString;
dataSourceParameterValueData.Value = initialCatalog;
dataSourceParameterValueData.ParameterId = initialCatalogId;

ProviderPropertyOverrideData providerPropertyOverrideData = new ProviderPropertyOverrideData();
providerPropertyOverrideData.Key = dataConnectorId;
providerPropertyOverrideData.Value.Add(dataSourceParameterValueData);
providerPropertyOverrideData.Value.Add(initialCatalogParameterValueData);

tenantData.DataConnectorPropertyOverrides.Add(providerPropertyOverrideData);

1 Like

Hi David,
Thanks a lot for the samples.
I changed the static values in the sample code with that of mine actual ones but I am getting the Internal Server error while posting the request to the API.
Do we need to pass more parameters that includes the server credentials and other?

Also what would be the best approach to find the InitialCatalouge ID through the API '?

Thanks

Do we need to pass more parameters that includes the server credentials and other?

You only need to pass the parameters that you want to override, if you do not want to override the server credentials I would not include them.

Also what would be the best approach to find the InitialCatalouge ID through the API '?

Unfortunately there is not an easy way to do this as they are part of the extension and are not documented in the API docs. I’ve put a request in to have them documented but as of now they are not. Below is a picture of how you can get the ID for the initial catalog property for the SQL Server database using developer tools.

Hi David,
Thanks
So in our case we need to just override the Databases and may be there is a requirement to override the DataSource but that will be in future. There could be just few Data Connectors which we need to include in our current Dashboards currently and for those we can get their Id’s from the Console.
But there are more than 100 Databases that we need to override programmatically so for that I think it will be sensible if we can fetch their Id’s too and pass them to the DataConnectorPropertyOverride method.
Any alternative solution for this that can help for now.
Thanks in advance.

Those IDs are for each data provider, which means the parameter ID will be the same for any data connector connecting to the same type of database server, such as SQL Server.

Hi David,
Thanks but can you also help on the second query?
That is - There are more than 100 Databases that we need to override programmatically so for that I think it will be sensible if we can fetch their Id’s from within the Dundas code/ Dundas db / API’s itself rather than manually copying them from the Browser Console and passing them to the DataConnectorPropertyOverride method.

Also I used the Rest Sample code that you provided in the same thread and passed the static Guid’s that are actually in our Dundas app in the same way( Copied from the browser’s console in the Response Payload) and passed the values to the API while creating a Tenant but I am still getting a bad request.
I am still revolving around the DataConnectorOverride, once its done I think my integration will be completed to 98%.
Following is the code and the guid’s are all perfect.

Little more help will be really appreciable.
I will forward you all my Rewards points if there is a way to share the reward points among the advocates :wink: .

To query for the dataconnectors to get the ID’s for them you will need to query the file system, you have already created dataconnectors?

https://www.dundas.com/support/api-docs/rest/#Dundas%20BI%20REST%20API%20Reference/File/Query/POST.html

I’ve added a small sample below that queries the dataconnector folder mine has an ID of ‘dbc93987-6486-425f-869c-fa9e39f7a091’ returns the an array of FileData:

void Main()
{

using (HttpClient httpClient = new HttpClient())
{
	// Get Session Id
	string logonUri = "http://localhost:8001/Api/LogOn/";
	var logonOptions = new
	{
		accountName = "admin",
		password = "1234",
		cultureName = string.Empty,
		deleteOtherSessions = true,
		isWindowsLogOn = false
	};

	JavaScriptSerializer serializer = new JavaScriptSerializer();
	var requestBodyAsString = serializer.Serialize(logonOptions);
	StringContent content =
		new StringContent(
			requestBodyAsString,
			Encoding.UTF8,
			"application/json"
		);

	string jsonString = string.Empty;

	using (var response = httpClient.PostAsync(logonUri, content).Result)
	{
		jsonString =
			response.Content.ReadAsStringAsync().Result;
	}

	var obj = (Dictionary<string, object>)serializer.DeserializeObject(jsonString);
	string sessionId = obj["sessionId"].ToString();
	string url = "http://localhost:8001/API/File/Query/?sessionId=" + sessionId + "";

	// Define the request body
	HttpContent requestBody = null;
	requestBody =
		new StringContent(@"
		{
		  ""queryFileSystemEntriesOptions"": {
		    ""entryIds"": [
		      ""dbc93987-6486-425f-869c-fa9e39f7a091"",
		    ],
		    ""pageNumber"": 1,
		    ""pageSize"": 10000,
		    ""accountId"": null,
		    ""objectPrivilegeId"": null,
		
		    ""filter"": [
		
		    ]
		  }
		}
    ", Encoding.UTF8, "application/json");
	using (var response = httpClient.PostAsync(url, requestBody).Result)
	{
		if (response.StatusCode == HttpStatusCode.OK)
		{
			Console.WriteLine("Success");

			// A Dundas.BI.WebApi.Models.AccountData
			// object as a JSON string.
			string jsonObject = response.Content.ReadAsStringAsync().Result;
			Console.WriteLine(jsonObject);
		}
		
	
	}
}

}

Created a simple table of data provider property ID’s for reference:
There is a feature request ticket that will allow them to be easily extracted directly from the UI.

BasicHttpPropertyIds

Property ID
NetworkCredential 77475408-2D75-4B41-B800-2C8A3D4F5A13
Password 69B4AC2B-C691-4AFD-9BDB-79B5C035176B
UserName AE138773-84D0-4286-B6AE-BDA598913705

BigQueryPropertyIds

Property ID
AllowLargeResults C7C5B7CC-AF18-4DED-A642-7C9F9633ED93
BilledProject 53A401A2-ADD2-4232-8564-BF3B5FF315CA
CatalogProjects C41503EA-E1A6-4804-81A8-D3BFF50B6786
CertificateFile F7FD7971-D009-4DC7-81B9-8DF94CA4D91E
CertificatePassword 5B1C49B2-3C87-48B7-B818-7CA93346A9AE
LargeResultsDataset B83F682E-7FA7-4BAC-A3B7-D0463FD40D74
Location A45F31F2-F314-4563-8E70-3B38D2D6799F
ServiceEmail F2931C10-1670-4EA7-92F4-E7287355D87E
UseLegacySql 7AD72650-499E-4594-9C98-A11F714CD44E

DB2PropertyIds

Property ID
Authentication 7A138572-4A0A-4579-A66E-42E857786132
ClientAccountingString C9D08B9F-929E-4D65-9D07-AC1E976D2E54
ClientApplicationName D6805B8E-54AD-4763-A682-3FB83954E20E
ClientCorrelationToken 3A526E6C-4E7B-4CE1-B89E-9FCEB81DAA41
ClientEncAlg BC9405DA-A772-4D3C-999E-B110689CA634
ClientUserId 79109087-C78D-48C5-A5D4-DD07D5B5E88B
ClientWorkstationName 3D770581-28C0-468F-A175-1D3C3C066A2E
CodePage 51DDE93B-7337-4772-9AE9-05131330ADE1
ConcurrentAccessResolution 0C688653-493A-4F04-A4C9-B7AD5FD5C80C
ConnectionLifetime 04A9FAFD-D654-4C64-9DC4-C673855C8DDD
ConnectionTimeout 8B4282D0-F340-4BCA-97C0-8F24E2A555F6
ConnectNodeNumber 20267097-5B38-4A80-9040-BEA0BF498B3D
CurrentSchema 2A67E800-AFC4-4CEA-A8FA-717AEC2A59EA
CurrentSQLID 783172AE-6FB7-43A8-B105-91017B26C9BC
Database 44A0B164-E2B4-4A36-99EC-05C1FB315C95
DB2DumpSQLCodes E94D681F-3F2B-46D9-AE40-5BD744E19764
DB2DumpSQLCodesInterval A278D3F0-0C6D-4C88-B766-B3305F68D6FC
DBName A87700A3-F265-4E65-9265-CED68CACCAF0
EnsureDefaultDFRM 9161F118-DB0F-4E2D-A323-11746C86E749
MaxPoolSize F90D05CF-9754-4690-88C1-302813A0DFBA
MinPoolSize ED8DDAC7-875A-4618-AADC-0E6AF9CEA011
Password 1CAFC995-B5E4-45C9-AC8C-C3C28B227A20
Pooling FC51BA5A-1830-4B6B-8160-7AB00139CB76
ProgramId 8502B164-720D-43F8-ABDF-3BF20842946D
ProgramName 316B101D-B082-4CD5-B690-EC1F8C16E1D2
SchemaList 4F844E94-8F2D-4E33-81A7-5D3B38B8BE6B
Security E8C262C8-76C5-4CE0-9481-E90B4FFAB0F2
Server EC5F6FED-F3E2-4D5A-B695-BAA00500404F
ServerType 4AFE5E31-F86C-41C2-870B-10F048882D4F
SessionTimeZone 94B0F905-E123-4DB9-AD75-455F3330B188
SslClientKeystash 0BAA2DBE-9859-4BB6-9796-7D9D53AFA46A
SslClientKeystoreDb 248D0424-5864-46EA-8383-8C3778D763AC
SslClientKeystoreDbPassword 3240AEAE-884C-4CE0-A2CB-1F0419821F8A
SslClientLabel ABFD0DF3-E3A3-4454-9297-FBBB83263BE4
SslServerCertificate FDCB2EDA-B62C-479D-9E93-C4B5C3370A27
StatementConcentrator 156659D1-C5F2-4760-AD8E-BF6B0289740E
SysSchema 0CE97A1D-0EA0-4536-9ED0-7E0459E45664
TrustedContextSystemPassword 9AA8AA97-0AD1-4688-BAFF-9C13ED6B188E
TrustedContextSystemUserId 154EC46B-138D-446E-9E0A-F25FFDF6EDA3
TrustedContextUserRegistryName 2D630506-3673-43A7-A18D-7CC0D31892AB
UserId EF41B719-D887-42F5-B2DA-703EC8FA2E26
WalletId 6154F061-C437-45D6-B5B2-519FD3F119BE
WalletPassword A7F00726-0DA4-48C9-B5BB-2B9C213F8E91

DynamicsCrmPropertyIds

Property ID
Authentication C54C616B-B4CD-4453-9F67-D66D99C770B9
Domain 4C3417DA-8E3E-4C21-A795-FA36B24CBB6C
OrganizationUrl 8E1B8835-727B-4F81-93D4-8128C93E52E7
Password 0023252E-64B6-48CE-806A-59B723FB89B0
ServerName A5F39287-0D0F-4338-9F45-67EFCA8006C7
UseInternetFacingDeployment
UserName C71AED9A-8F35-4A4B-94EF-0A8D1E53C60A
UseSsl E78C1464-2DED-4BA1-A6BC-839E31E45331

EXAPropertyIds

Property ID
Encryption 1442D9C4-A609-4728-A9A5-2C275A7C2453
LogFile 3CEE4B83-39FB-45C9-8697-7733272E3E07
OnConnect 4A8EE10A-88B7-4521-A307-50E2635B17B9
Password BED1D688-3163-450A-9025-2E63D0F6A9C6
Port C349A738-89F4-47BA-8158-B08FD5C317FD
ReuseConnection D892A095-CDE6-4526-BD62-7984FE90BC25
Schemas F3EE2EAA-0C5F-40CD-9A95-9BEFE540F708
Server 88B42E2D-2B6B-4102-869E-D7481ABFAA33
UserId DEA2F22D-898D-4CAF-9823-3EB7D43E1709

ExcelPropertyIds

Property ID
Authentication 2F428249-F7C9-4696-8A3F-D819C0B23FA0
CellRange 70E450C6-D20D-48F2-9158-1D92D4AA7A81
CultureName 36C7AD2D-DF59-4C2C-9374-D251B4755C9C
DataSource 1E62C8F4-94AE-4F64-B1E2-84C47024B4C2
HeaderRow 7EFD674B-A0F6-4F98-9274-12A1BFAD911E
MixedTypesAsText 4E31D7BC-513D-4D9A-8647-C55DB2097129
NamedRange DEB721C3-68FB-4EF8-8D7E-9158954A3269
RangeType D97F4480-F360-40CC-A96B-C8090811167F
UseLegacyProvider B336FDC7-00DD-4394-94A9-C13055A412F2
WorksheetName 1BED311F-3D99-44F9-9B36-ACB482DA0632

FlatFilePropertyIds

Property ID
Authentication 58541D6C-D852-401F-89D1-4AB5E4304A78
CodePage C438CEA9-8B78-4149-B97F-91E10830823A
CultureName DE1C943C-1DDA-4C4D-BC53-B8F25F2F7282
Delimiter 65C20C87-2C6B-4A23-827F-10C838BA3B2B
FileName B0CD567B-E3CE-434C-9D79-C1A32903A711
HasFieldsEnclosedInQuotes D0A4EB7D-B91B-4369-A11A-774A357BAFEE
IsFirstLineHeader A2BC7FF4-D84C-4063-A41B-2998D87C1027

GAPropertyIds

Property ID
CertificateFile ED830438-14CB-4BD0-8FCB-5B8DB448D1F6
CertificatePassword 5E02991F-3FAB-42AD-A6B5-D9A4F8783198
Email 7026D17C-520B-436A-B61B-DCF4F507F68F
SamplingLevel 9B5AE1CB-36D0-4772-B539-72ACDBAEBA94
UseReportingApi 506C752E-CDEA-412B-BD1C-B4CB9EFE0755

GAPropertyIds (1)

Property ID
CertificateFile ED830438-14CB-4BD0-8FCB-5B8DB448D1F6
CertificatePassword 5E02991F-3FAB-42AD-A6B5-D9A4F8783198
Dimensions BB463EAA-0BA9-4794-A618-581E8630A996
Email 7026D17C-520B-436A-B61B-DCF4F507F68F
EndDate 3598A90D-F55C-4FDC-854A-A29EB68E1AAE
Metrics 621632FA-800F-4C6E-BFEB-FB7D780DE4CD
ProfileId 506C752E-CDEA-412B-BD1C-B4CB9EFE0755
StartDate 9B5AE1CB-36D0-4772-B539-72ACDBAEBA94

JetPropertyIds

Property ID
Authentication 30141303-7757-445E-BACF-1CFF1E4EC4AA
DataSource 942B8845-165D-4D52-B8B6-11E473A5A2D1
ExtendedProperties E1709274-047C-4EC7-8F82-7A0C2939F0B3
JetDatabaseLockingMode 6B0E8A3F-7C76-4643-84D6-F1001A5096F8
JetDatabasePassword E2BE7EAE-2D77-430E-90BA-F03EC8AD8D67
JetRegistryPath 671E7B5C-0259-457C-8EA2-BD5209EEB24F
JetSystemDatabase ED2C5372-B016-4812-9DCD-56E9918DA766
LocaleIdentifier 524D6B21-2EB0-452C-9169-2FFD583515A9
Mode 68995983-BF0F-4A25-BFC2-167740CC1C60
Password B6C81571-61BF-45F9-B0D6-5A21280BE3FC
UserID F9CE2E4E-EF53-4C34-9374-529BA449CDDF

MySqlPropertyIds

Property ID
AllowBatch 07F0B688-034F-4500-B388-D2F3B86BD596
BlobAsUTF8ExcludePattern FFC7B8F1-B054-466E-BF03-19AD4228B9D9
BlobAsUTF8IncludePattern ADF338EF-7D63-48B2-973D-2E546C5B423D
CertificateFile 0A722964-31F3-40E8-BB9A-B842D26B693D
CertificatePassword 70C152FD-7452-4912-BE84-FBA148A0AA6E
CertificateStoreLocation 61D44CF1-13AD-4833-86CA-DFFDA8C2604B
CertificateThumbprint B54443E1-90FF-4426-AB81-4398B5F6B2E4
CharacterSet 2200983D-CBBB-47AF-9F65-E3363DCF1E89
ConnectionLifetime F4060F62-8578-41D3-8D65-4D9E633C4E05
ConnectionReset F2FFB223-2346-4324-9517-8CE5DDF59F15
ConnectionTimeout 54A1C105-10CF-4B3A-892B-60CF115C64B2
ConvertZeroDatetime 7AB53F0D-F96F-46B1-B916-273BCCCC5CD8
DatabaseName 67280BBD-4BD8-4DD2-A613-A7AB056559E7
FunctionsReturnString 9B5F1B9C-847E-4D7C-80FF-4403BB9A9562
IgnorePrepare B0443AF7-53A7-41FE-B001-EEED2D7EBCD5
Keepalive 14C1B649-63B8-4FFC-A508-81BEC8095A96
Logging 45A92480-EC0B-4A59-B004-F3CDECD5F2F1
MaxPoolSize 15550998-DEE3-4372-8CC5-2FFA29373416
MinPoolSize 4C136DA0-B38B-4F9A-A9A4-4C053EA47EC3
OldGuids 4598F58A-4055-449B-8F23-0A3FDD63178E
Password 3EA2D08A-3B94-4BA1-BED8-3732C81089AB
PipeName 05CA99C6-14A4-42F2-8FB1-34146183D5EE
Pooling EE95139B-A5B2-4422-A01E-EA02FD70EB69
Port 7B72962C-7B2C-477D-834C-928EE98557B8
ProcedureCacheSize 5CB5838E-9BAA-4E1D-873E-4BA3ABC81B50
Protocol 543A294B-2A2B-41D2-AEBC-43E513A07005
RespectBinaryFlags 3DBF9F9A-9E22-4F44-B18F-85F201B8D8C6
Schemas 0A6D4526-ED70-4E19-B8F6-ED36F59B3B79
ServerName 9A8ED883-043C-48A0-82D4-26C72381B57A
SharedMemoryName 194A4754-5B43-42AA-9182-AA167C4C5735
SslMode 2C316612-6DA6-40BB-8722-35F47167159C
TreatBlobsAsUTF8 AC175F77-D18D-49DC-9D7E-D33AC1DB7455
TreatTinyAsBoolean 4A7112B8-709E-487C-B499-C181B0AA744D
UseCompression 06F14F1B-980D-4C48-AE4C-224A4B72B01B
UsePerformanceMonitor A252A464-D0B3-4D3F-A45A-DB585C950CB5
UserName 258744A4-B401-44EA-BBD2-85776DA58E1E
UseUsageAdvisor 40030174-B750-4EE5-BA42-1A83A0AB0111

ODataPropertyIds

Property ID
Address B9872D55-E223-4558-9A9B-2C8C9538C489
CredentialsType 9671019F-B66E-4B1C-8898-9D7E325B03E8
DataServiceVersion C7B852D1-462F-4793-B0FB-E28482293E3E
HttpResponseTimeout 9CF67EB1-CEBF-4527-9A28-A9CE1DAC6620
RecordsPerPage 32480360-05CD-4160-B609-AED0354FA162

OdbcPropertyIds

Property ID
Authentication E192D38E-1D40-4F35-A7FA-9A0F872809ED
Driver 67E64086-6776-42F5-8C4E-CA899B4FBC94
DriverString B473BF86-62F6-4B0E-938F-FB12C81521BD
Dsn D8A84CDF-B280-4C4D-9909-8C5311E4DD7A
IsSystemDsn EC2B2595-E784-4208-A64B-D5FD4BB30C63
OverwriteCapabilities 7F2C0DE0-79CE-4A17-A589-EDE2D7B39101
Password 04ECBA17-2DEB-4E8A-812F-22658152C82B
SpecifiedCapabilities B5ECDE61-A13D-40B4-A4A0-B3E0C6647F99

OlapMsgIds

Property ID

OraclePropertyIds

Property ID
ConnectionLifetime 65964F3C-ADEC-4FDE-BB1B-23ED387DCD13
ConnectionTimeout BC02AC75-756C-4D84-97D8-5C5F408F7FB2
DataSource 0C6CC4BF-6108-49C3-B5BB-F7C77BA75427
DecrPoolSize E7DE1B40-3949-40F1-92CA-D86A628B7A9C
HAEvents 737D50EB-7D84-4927-800B-78C2D7D125E2
IncrPoolSize 0AD50918-F9EC-4767-915E-75E93BB3FF94
LoadBalancing 6CEBE2A2-BD8B-45ED-AAD7-965EB5F8BD9B
MaxPoolSize A10B1972-43CB-40D6-B9DA-86C8E9A85541
MetadataPooling 21469885-2064-49EE-B603-B01FD8D16D01
MinPoolSize 6817154D-E0A0-43F0-BB4B-7A6D83B50753
Password F26279C4-21B3-4A63-928A-DA757A6CC4CC
Pooling D57E0945-5C90-43C1-8435-92A30D2DA343
ProxyPassword 1AACA0B0-04D5-4F45-8EE8-92F3038DBAAC
ProxyUserId 7C936B1C-3270-4503-AF83-87848B5A4910
Schemas DC7D47A4-0784-4643-9955-4F79296AAF62
SelfTuning 1431D651-01F7-4446-8198-E85DDD894BE2
StatementCachePurge 6174730D-8194-4DCD-AD64-818C1B387164
StatementCacheSize 9DE32902-A41F-4CE1-A6E3-9A38E1153529
UserName 1D86F3E2-F963-412D-B0F0-5232713ECF94
ValidateConnection A66E5611-9212-4C36-8C52-8882A520C4BB

PardotPropertyIds

Property ID
Email 05DE7368-431B-488A-A093-8E2D9F97E5A2
Password BEDB0A97-1B62-43AB-B1E2-3D0DFAD24669
UserKey 706C7DF2-5430-4862-B4A2-5CBCC77D922D
Version 565DCBFD-C897-440F-AD64-3CF9D5EF66A5

PostgresPropertyIds

Property ID
CheckCertificateRevocation FA5D17B0-FAC5-49DD-90E1-906E43060959
ConnectionIdleLifetime 05958C13-0A5C-44B0-A302-B6EF599D452E
ConnectionPruningInterval 9ED4810D-5524-48B4-A813-689286DA3413
ConnectionTimeout 485B7140-90BA-4393-B5D5-62DCC41FE9D1
ConvertInfinityDateTime 89A111CD-67E4-46D2-B785-2D35175BDF59
Database 5B61910B-B614-48F2-917A-9F4C2DCCBDB7
Keepalive 9B7BE38A-C650-4B16-A43B-9AAAC45C7FCE
MaxPoolSize 1D41B045-6CFA-4892-8591-94002F35A88A
MinPoolSize 38C2F287-4893-4A9F-AE97-216656864E3C
OdbcConnectionString 4C667F56-06A5-462E-AA2B-3A70309847C5
Password AA6CD926-8761-42FD-B313-FE06909225A2
Pooling F20C365E-CEF3-430F-BFD0-2444755DE1CC
Port 4C89A5AD-4DD0-4B4F-8905-84F144467FB1
ReadBufferSize 44B4419D-9582-4219-B0EB-098A20AE7003
SearchPath EFC79E52-58AE-4BB9-B26E-CC45534B3B6D
Server 2E3AA512-753A-43E4-8CD9-E76B8D126BA1
SslMode 5C21F699-9898-4DB9-9A8C-B5DF57E218F1
TcpKeepaliveInterval 22AD4319-EEFE-41AB-A069-5FAD2F8449FC
TrustServerCertificate 8E76C10F-A3A4-4D1B-A7B8-7B57616071A6
UserId 41B0748D-E574-49E0-A120-38E90EF408D5
UseSslStream 13BFA5BE-032D-4135-9D29-2397549DB6B2
WriteBufferSize 4D527048-31EE-4BEA-A799-4B8BAA1F0F8A

SalesforcePropertyIds

Property ID
Client A9D64A1D-EF6C-454A-9845-70F9DB713927
LoginUrl 0D2A9D4F-02DE-45C4-912E-9B252EDAF94E
Password 3261509A-90A9-4533-A8A8-E77526FA548E
ProxyPassword 6900A29A-EAF7-4FB0-B1E1-CE18CEFEDCFA
ProxyUrl 4FABA4F7-3BD7-40B1-A5F9-C9B0D028B165
ProxyUser 8A6BFA37-780A-44C8-B208-EF03C620B169
SecurityToken 9808F871-9A38-4B65-B39D-D0EAA204FBEC
UseProxy 17A5C320-D897-4492-8346-8AE29AF8BA82
UserName 7F0A4EBA-4FB2-433E-9255-DDBF7C6C62E8

SharePointExcelPropertyIds

Property ID
Authentication 3115D091-8129-48F9-A36D-3EA46B6EC7E4
FileName D811E3F3-7CAD-4673-87FE-934BAC57FDAE
IsHeaderExists 56EF469B-8FFE-4ACD-9D31-014369029061
ServerUrl B4097C2E-7499-4DA5-BE81-161C1A1A2085
SheetName 31FAA131-890D-4DD4-879D-570279839F6C

SharePointListPropertyIds

Property ID
Authentication 9824D917-D3D2-4438-97B5-3561B553AB14
ListId 0EA7D8C3-E0FB-4E7E-8129-A1D14ED67170
ListName AC6B7F02-F333-4DE2-931F-21A78B7A94A7
SiteUrl 1F0D3077-C3BD-4D96-8092-129F30C53D97
ViewId B3AB33DF-1D8E-4955-ABBD-D158DF43BC5C
ViewName E39850EF-5DD7-4CE8-AB24-ADC8D94DA973

SheetsPropertyIds

Property ID
CertificateFile A94FF901-1D82-4225-A8F3-2A363E2A963D
CertificatePassword 4C961E0C-25D8-4656-8004-D86FF9F1285D
IsHeaderExists 489900F8-B23D-4404-90F8-7C23C76BC9E0
Range 255BC3CC-3057-4EBA-A6D1-200C596BEC55
ServiceEmail 0790AD10-9B8C-48FE-9D79-8B3943E28BFC
SheetName 1E6E1FC2-A0D6-4803-A4CB-F36B16273843
SpreadsheetTitle 1A2274EB-3803-4DF2-A6AF-2E533F1FB99A
UserEmail 6AD30BC1-7AA5-43A2-917A-A65641C04ECA

SnowflakePropertyIds

Property ID
Account F7DA5B27-3584-43D5-B178-CA2A8273C0F0
ConnectionTimeout 3C2E62A9-E2BE-4623-A7AB-9E5BF6D72A81
Database 08DA1365-E9D7-4B28-B2CE-716518526391
Host 76AFC4D2-04D2-4F72-89F7-71DB8C14A9B1
Password 029568A1-541E-4E86-A87C-4F9D886794BB
Port 22D34EE1-0B60-460B-BCAB-965B8C5F0CFD
Role B86CEFD3-7C64-47B1-BBD6-7D99E0B20429
Schema ABA2B41C-DBA0-42DF-B1F9-2B8EA83749C3
Scheme F28271AC-935F-4709-BB52-B1905382AC72
User A4798C75-7EF6-434D-81CE-2BCA0285F8A2
Warehouse 5C1938A6-070B-4BF1-9B24-92482FF9E557

SqlServerPropertyIds

Property ID
ApplicationIntent 138AE099-85D0-491C-8000-0CA81BE7367C
ApplicationName 4AF81912-F05F-4BD4-999E-161A6E426E62
AttachDBFilename 506683FB-0AD7-4FDD-A9AC-5558E904C738
Authentication 6B8BB8A8-38EC-4F04-BA6F-053B95FE0AF2
ColumnEncryptionSetting D3747A39-BA02-4B49-A555-A02CFCE6E99F
ConnectRetryCount 9C6F4CA3-E36A-4FB0-B288-2AD8FA86F7E5
ConnectRetryInterval 60251FF5-5D89-4804-AC68-BF500C800621
ConnectTimeout 1859C6E6-131A-4C84-94F0-2644F8866296
DataSource 280CCCD2-4B23-4C0B-8D62-9DF6F9C6FA72
Encrypt 4CF363A0-C3DA-4AA6-83A9-2A2E85FFC0DA
FailoverPartner 5C9BADF2-024F-4CA1-AEF6-74641CC24FE3
InitialCatalog 8FFE4086-6013-4586-902C-FDA2502548D4
LoadBalanceTimeout 0C687CA8-FF2A-48EB-AE91-C65F6764ACDF
MaxPoolSize 2B3FAC86-ED96-4848-B2B3-341CB9DB6262
MinPoolSize A7DBD4EF-D250-40F4-B59F-EFFBDCE6F7E3
MultiSubnetFailover E91FF83C-E556-4C9E-B548-F2C447E7E54F
NetworkLibrary DAFB90C7-7AAD-4641-B48F-A6F6C3BD6629
PacketSize 32E83152-F51A-4639-BD35-450CEB19CDE1
Password 5A30FC90-3F56-471C-A40E-7D1B2FE96571
PoolBlockingPeriod DBA27BBD-5ABE-4E2B-B6F1-1571DBAFCEE0
Pooling 1A8420D6-4E41-451D-819D-1BD157184C44
Replication B717AA32-7F00-477B-BFF9-763A05B4E44A
TransparentNetworkIPResolution E5FA4D02-EA0D-476E-9561-D59ACA0E45EB
TrustServerCertificate EE970444-1804-421A-AE78-16EC40F9919C
TypeSystemVersion 219BC647-A0FD-4657-A5A7-9BD5CAEB5DDC
UserID 7A4FD686-1867-4118-BF00-F489663F4DED
UserInstance 1FFDA985-064B-42DE-AD7F-DAE292A43FFD

TeradataPropertyIds

Property ID
AccountString 0815F80E-C598-47DF-8860-E17EA94534A5
Authentication 64423097-1127-44C5-9EAD-0657E641273E
AuthenticationMechanism EBDFA77F-9A43-40DE-B9D9-14876C32185E
AuthenticationString 64899863-4DBC-40F9-8DD5-D7AF666911E4
ConnectionPooling AD092C05-AA6D-4EF2-8957-4492E11062CE
ConnectionPoolingTimeout 43CFA55E-4971-45F1-87D5-CE7E9D51A63E
Database 02A54166-076F-47EB-A3E7-64BF85227A98
DataEncryption 16602D8A-FE73-44D6-A54D-41BD1C87D881
DataIntegrity 369FA254-4ACE-40C4-B77E-CE80FF1DDAEB
DataSource 2E66F977-4D08-450E-BC2D-B6BD1CBD0211
DataSourceDnsEntries 68081059-7258-4C5F-A4D4-61E3534E2503
MaxPoolSize 24D3B92C-BF5B-4C7F-B44C-C882B7703621
MinPoolSize 35FCB42A-808B-4DE4-B121-5B15083C45C1
NodeDownTimeout 99946E9F-E2A9-4152-8B54-4B2A28F23840
Password B30CFDF4-6F34-4D01-8CDD-51359F68A58B
PortNumber 1436E296-8421-4196-BCBB-8E282799CC5F
ReadAhead 27359BDB-208A-49A0-B13D-E44401A316DD
ResponseBufferSize 87D3375C-E077-4828-B71B-AA0988C7714C
RestrictToDefaultDatabase 40ED3BA9-D4EF-4372-9E0D-A118FEFB7FD6
SessionCharacterSet C69B5D2C-8126-44E8-90B1-786A1E58F613
SessionMode 3CBB77A3-010E-47E1-BE8C-053BF2CC53C0
UserId E31A0172-194E-4BCD-BAE1-4D8CB8CF0180
UseXViews 038140D8-798F-46F5-875A-ED8F677F3032

VerticaPropertyIds

Property ID
Authentication C95942E4-BA2A-4CF3-93E2-57919682AB79
BackupServerNode 86D9B94E-A52D-490A-BF2D-9930A3EACB29
BinaryTransfer 6281A15E-B163-4117-BBFA-C990720B4716
ConnectionLoadBalance 659BC44A-B9EE-4C65-9943-8568F622F8C2
ConnectionTimeout ECD590F2-0A25-4B76-BCFA-C965940EFE3B
ConnSettings C7EF01F3-CC86-48F4-91CB-127D18B6635D
Database 822B7D87-7ED5-4E78-8534-7BE8867FB2A2
Host 554E40C7-1306-4A15-A8C6-8C1158AB7825
IsolationLevel 2480FEF8-B0E1-45E5-AD30-D0308DAEBB7D
KerberosHostName 09D388B0-A5BF-4CA3-B469-E45BA2279400
KerberosServiceName 32F1C52D-5268-4C88-A48A-84F470404273
Label E7C99425-329F-422E-BB92-4DEF0468E59B
LoadBalanceTimeout 952F88C4-B76D-4EE1-B168-6BF3F4921247
MaxPoolSize 9E35AB95-C187-40C2-825C-702E46BE86CB
MinPoolSize 42AD90E3-E05A-4AC5-9273-819653C629B5
Password E226D4E2-1A5E-4DE7-8CFF-95B2E2412BF5
Pooling 8E119B2F-2E01-42DB-BF1E-6360476F67C9
Port AB0D093F-6149-4DFD-B651-FE555A4CFFA3
PreferredAddressFamily 0596BE7D-B80C-4507-98FF-0389F4F54420
ReadOnly 84F0D14A-438A-4CE5-96E0-7AE13EB120A0
ResultBufferSize B1FC4A68-B7E0-4623-8DE9-EE919F15B6E1
SSL F5F7E9D8-317A-4FE7-ABAF-8B6918F4F216
User 407EDC80-716F-41BB-AC58-603B975304A4

XmlFilePropertyIds

Property ID
Authentication 37D5C172-E061-4FC5-A173-F5F571FE4392
InferSchema 78181667-770C-4D28-BB5E-77D1734E57E7
Namespace E88FB1E0-8990-435A-AC37-F38FAF650657
SchemaLocation 9A5E113C-7D56-476F-9463-8767BC1C6ABF
XmlFileName A1DD58F9-F933-4AFD-8E1F-0810163C84E0
XsdFileName ED9B8C23-BD17-4A08-BD9D-28009DD4C9CB

Hi David,
Thanks,The FileQuery API code sample that you provided above is of no use for me as there is no information of the Databases ID.

Can you please let me know how much time that ticket will take?

Thanks & Regards
Aseem

Thanks,The FileQuery API code sample that you provided above is of no use for me as there is no information of the Databases ID.

There is not database ID, only a data connector ID. The data connector needs to be created by you, and then you want to override it on a per tenant basis. The override that you are trying to create can then override the properties of that data connector (eg. Initial Catalog property).

Can you please let me know how much time that ticket will take?

If time is critical I suggest emailing support@dundas.com, they will provide a ticket number and have dedicated resources so they can directly assist in getting this done as fast as possible. They can also set up a go to meeting if the situation requires it.

With that, It will be possible for me to access the Initial Catalogue ID/ Database ID/ Parameter ID by Data base name ??

I think you need to do is

  1. create one dataconnector which connects to a database (this would be one of the “there are more than 100 Databases”) .

  2. Then override that data connector when creating a tenant. You would use the data connector ID you would override the initial catalog by using the property on the SQL server dataconnector which is defined as “8FFE4086-6013-4586-902C-FDA2502548D4” as defined in the table above. You would use the dataconnector ID. You would never use a database ID.

Note the schema needs to be the same when using dataconnector overrides.

I’ve puts some comments on the example below:

void Main()
{

string baseUrl = "http://localhost:8001";

using (HttpClient httpClient = new HttpClient())
{
	// Get Session Id
	string logonUri = baseUrl + "/Api/LogOn/";
	var logonOptions = new
	{
		accountName = "admin",
		password = "1234",
		cultureName = string.Empty,
		deleteOtherSessions = true,
		isWindowsLogOn = false
	};

	JavaScriptSerializer serializer = new JavaScriptSerializer();
	var requestBodyAsString = serializer.Serialize(logonOptions);
	StringContent content =
		new StringContent(
			requestBodyAsString,
			Encoding.UTF8,
			"application/json"
		);

	string jsonString = string.Empty;

	using (var response = httpClient.PostAsync(logonUri, content).Result)
	{
		jsonString =
			response.Content.ReadAsStringAsync().Result;
	}


	TenantData tenantData = new TenantData();
	tenantData.AccountNamePattern = "T";
	tenantData.Name = "MyTenant";

	// The data connector you created, This should be the same for the 100's of databases.
	// You will need to get this ID when you create the data connector.
	Guid dataConnectorId = new Guid("a102fefc-62c9-4517-9bf4-77c9a08c4f76");

	// The initial catalog property ID, this will not need to change.
	Guid initialCatalogId = new Guid("8FFE4086-6013-4586-902C-FDA2502548D4");
	string initialCatalog = "Corgent Data New";

	// The value for the inital catalog that will be set in the override data.
	ParameterValueData initialCatalogParameterValueData = new ParameterValueData();
	initialCatalogParameterValueData.ParameterValueType = ParameterValueTypes.SingleString;
	initialCatalogParameterValueData.Value = initialCatalog;
	initialCatalogParameterValueData.ParameterId = initialCatalogId;
	

	// Create the override data.
	ProviderPropertyOverrideData providerPropertyOverrideData = new ProviderPropertyOverrideData();
	providerPropertyOverrideData.Key = dataConnectorId;
	providerPropertyOverrideData.Value.Add(initialCatalogParameterValueData);

	
	// Add the override 
	tenantData.DataConnectorPropertyOverrides.Add(providerPropertyOverrideData);
	
	tenantData.LicenseSeatAllocation = new TenantSeatAllocationData();
	

	var obj = (Dictionary<string, object>)serializer.DeserializeObject(jsonString);
	string sessionId = obj["sessionId"].ToString();
	string url = baseUrl + "/API/Tenant/?sessionId=" + sessionId + "";

	// Define the request body
	HttpContent requestBody = null;
	requestBody =
		new StringContent(
		JsonConvert.SerializeObject(tenantData), 
		Encoding.UTF8, 
		"application/json");
		
	using (var response = httpClient.PostAsync(url, requestBody).Result)
	{
		
		
		
		if (response.StatusCode == HttpStatusCode.OK)
		{
			Console.WriteLine("Success");


			string jsonObject = response.Content.ReadAsStringAsync().Result;
			Console.WriteLine(jsonObject);
		}
		

	}
}

}

1 Like

Thanks A lot David. This was really useful.