Piezīmes
Lai piekļūtu šai lapai, ir nepieciešama autorizācija. Varat mēģināt pierakstīties vai mainīt direktorijus.
Lai piekļūtu šai lapai, ir nepieciešama autorizācija. Varat mēģināt mainīt direktorijus.
Šajā piemērā parādīts, kā ieviest pielāgotu datu nodrošinātāju, lai izveidotu virtuālu tabulu, kas atbalsta izveides, izgūšanas, atjaunināšanas un dzēšanas darbības. Katrai no šīm darbībām ir jāievieš vispārējs spraudnis, jāreģistrē tas, izmantojot spraudņu reģistrācijas rīku, un jāiespējo virtuālās tabulas datu avoti, lai izveidotu virtuālo tabulu.
Papildinformāciju par datu nodrošinātājiem un spraudņu izstrādi skatiet sadaļā Pielāgoti datu nodrošinātāji
Detalizēta informācija par datu avotu
Šajā ceļvedī jūs iestatīsit vienkāršu tabulu ārējā SQL serverī, lai izveidotu virtuālo tabulu. Šajā piemērā izmantotais tabulas nosaukums ir VETicket.
Piezīmes
Atjauniniet spraudņa kodu, ja vēlaties mainīt tabulas vai kolonnas(-u) nosaukumu.
| Kolonnas nosaukums | Datu tips | Mērķis |
|---|---|---|
| TicketID | Unikāla identificēta, primārā atslēga | Tabulas primārā atslēga. |
| Smagums | Integer | Biļetes smaguma vērtība. |
| Vārds | String | Biļetes apraksts. |
Ir četras darbības, lai iespējotu pielāgotu datu nodrošinātāju izveidot virtuālo tabulu.
1. darbība: CRUD spraudņu ieviešana un montāžas reģistrēšana
2. darbība: datu nodrošinātāja izveide un spraudņu pievienošana pakalpojumu sniedzējam
3. darbība: virtuālās tabulas izveide Dataverse vidē
4. darbība: ierakstu izveide, atjaunināšana, skatīšana un dzēšana, izmantojot virtuālo tabulu
1. darbība: CRUD spraudņu ieviešana un montāžas reģistrēšana
Izveidojiet spraudņa projektu un instalējiet tālāk norādītās NuGet pakotnes. Šajā piemērā risinājuma nosaukums ir StubProvider.
Montāžas vietrādis URL Microsoft.CrmSdk.CoreAssemblies https://www.nuget.org/packages/Microsoft.CrmSdk.CoreAssemblies Microsoft.CrmSdk.Data https://www.nuget.org/packages/Microsoft.CrmSdk.Data Microsoft.CrmSdk.Deployment https://www.nuget.org/packages/Microsoft.CrmSdk.Deployment Microsoft.CrmSdk.Workflow https://www.nuget.org/packages/Microsoft.CrmSdk.Workflow Microsoft.CrmSdk.XrmTooling.CoreAssembly https://www.nuget.org/packages/Microsoft.CrmSdk.XrmTooling.CoreAssembly Microsoft.IdentityModel.Clients.ActiveDirectory https://www.nuget.org/packages/Microsoft.IdentityModel.Clients.ActiveDirectory Microsoft.Rest.ClientRuntime https://www.nuget.org/packages/Microsoft.Rest.ClientRuntime Newtonsoft.Json https://www.nuget.org/packages/Newtonsoft.Json/13.0.1-beta2 Pievienojiet savam risinājumam šādus sešus klases failus. Katrā no klases failiem pievienojiet šādus apgalvojumus
using System; using System.Collections.Generic; using System.Data.SqlClient; using System.Linq; using System.Text; using System.Threading.Tasks; using Microsoft.Xrm.Sdk; using Microsoft.Xrm.Sdk.Extensions; using Microsoft.Xrm.Sdk.Data.Exceptions; using Newtonsoft.Json;Piezīmes
Katrā no šiem klases failiem atjauniniet tabulas nosaukumu, lai tas atbilstu iestatītajam avota tabulas nosaukumam. Piemērā kā avota tabulas nosaukums tiek izmantots VETicket .
Klases faila nosaukums Mērķis Connection.cs Šajā klasē ir kods, lai izveidotu un pārvaldītu savienojumu ar ārējo SQL datu avotu. Tas ietver savienojuma virknes parametrus, kas raksturīgi ārējai datu bāzei, un SQL autentifikācijas informāciju, kas nepieciešama, lai izveidotu savienojumu. Aizstājiet vērtības, kas atbilst jūsu datu bāzes serverim, lietotāja ID, parolei un tabulas nosaukumam, ko izveidosit virtuālajā tabulā Dataverse. CreatePlugin.cs Šī klase satur kodu, kas apstrādā virtuālās tabulas izveides operāciju. UpdatePlugin.cs Šī klase satur kodu, kas apstrādā ierakstu atjaunināšanu virtuālajā tabulā. RetrievePlugin.cs Šī klase satur kodu, kas izgūst konkrētu ierakstu no virtuālās tabulas. RetrieveMultiplePlugin.cs Šī klase satur kodu vairāku ierakstu iegūšanai no virtuālās tabulas. DeletePlugin.cs Šī klase satur kodu, kas ļauj izdzēst ierakstu virtuālajā tabulā.
Izlasiet šo svarīgo informāciju par savienojuma virknes vai lietotājvārda/paroles autentifikācijas izmantošanu lietojumprogrammas kodā.
Svarīgi
Microsoft iesaka izmantot visdrošāko pieejamo autentifikācijas plūsmu. Šajā rakstā aprakstītā autentifikācijas plūsma prasa ļoti augstu uzticības pakāpi lietojumprogrammai, un tā rada riskus, kas nav citās plūsmās. Šo plūsmu vajadzētu izmantot tikai tad, ja citas drošākas plūsmas, piemēram, pārvaldītās identitātes, nav dzīvotspējīgas.
Connection.cs kods
public static class Connection
{
public static SqlConnection GetConnection()
{
try
{
//sample database to connect to
SqlConnectionStringBuilder builder = new SqlConnectionStringBuilder();
builder.DataSource = "Enter name or network address of the SQL Server";
builder.UserID = "Enter User Name";
builder.Password = "Enter password";
builder.InitialCatalog = "Enter database details";
SqlConnection connection = new SqlConnection(builder.ConnectionString);
return connection;
}
catch (SqlException e)
{
Console.WriteLine(e.ToString());
throw;
}
}
}
CreatePlugin.cs kods
public class CreatePlugin : IPlugin
{
public void Execute(IServiceProvider serviceProvider)
{
var context = serviceProvider.Get<IPluginExecutionContext>();
if (context.InputParameters.Contains("Target") && context.InputParameters["Target"] is Entity)
{
Entity entity = (Entity)context.InputParameters["Target"];
Guid id = Guid.NewGuid();
//change the table name below to the source table name you have created
string cmdString = "INSERT INTO VETicket (TicketID,Name,Severity) VALUES (@TicketID, @Name, @Severity)";
SqlConnection connection = Connection.GetConnection();
using (SqlCommand command = connection.CreateCommand())
{
command.CommandText = cmdString;
command.Parameters.AddWithValue("@TicketID", id);
command.Parameters.AddWithValue("@Name", entity["new_name"]);
command.Parameters.AddWithValue("@Severity", entity["new_severity"]);
connection.Open();
try
{
var numRecords = command.ExecuteNonQuery();
Console.WriteLine("inserted {0} records", numRecords);
}
finally
{
connection.Close();
}
// other codes.
}
context.OutputParameters["id"] = id;
}
}
}
UpdatePlugin.cs kods
public class UpdatePlugin: IPlugin {
public void Execute(IServiceProvider serviceProvider)
{
var context = serviceProvider.Get<IPluginExecutionContext>();
Guid id = Guid.Empty;
if (context.InputParameters.Contains("Target") && context.InputParameters["Target"] is Entity)
{
Entity entity = (Entity)context.InputParameters["Target"];
//change the table name below to the source table name you have created
string cmdString = "UPDATE VETicket SET {0} WHERE TicketID=@TicketID";
SqlConnection connection = Connection.GetConnection();
using (SqlCommand command = connection.CreateCommand())
{
command.Parameters.AddWithValue("@TicketID", entity["new_ticketid"]);
List<string> setList = new List<string>();
if (entity.Attributes.Contains("new_name"))
{
command.Parameters.AddWithValue("@Name", entity["new_name"]);
setList.Add("Name=@Name");
}
if (entity.Attributes.Contains("new_severity"))
{
command.Parameters.AddWithValue("@Severity", entity["new_severity"]);
setList.Add("Severity=@Severity");
}
command.CommandText = string.Format(cmdString, string.Join(",", setList)); connection.Open();
try
{
var numRecords = command.ExecuteNonQuery();
Console.WriteLine("updated {0} records", numRecords);
}
finally
{
connection.Close();
}
// other codes.
}
}
}
}
RetrievePlugin.cs kods
public class RetrievePlugin : IPlugin
{
public void Execute(IServiceProvider serviceProvider)
{
var context = serviceProvider.Get<IPluginExecutionContext>();
Guid id = Guid.Empty;
if (context.InputParameters.Contains("Target") && context.InputParameters["Target"] is EntityReference)
{
EntityReference entityRef = (EntityReference)context.InputParameters["Target"];
Entity e = new Entity("new_ticket");
//change the table name below to the source table name you have created
string cmdString = "SELECT TicketID, Severity, Name FROM VETicket WHERE TicketID=@TicketID";
SqlConnection connection = Connection.GetConnection();
using (SqlCommand command = connection.CreateCommand())
{
command.CommandText = cmdString;
command.Parameters.AddWithValue("@TicketID", entityRef.Id);
connection.Open();
try
{
using (SqlDataReader reader = command.ExecuteReader())
{
if (reader.Read())
{
e.Attributes.Add("new_ticketid", reader.GetGuid(0));
e.Attributes.Add("new_severity", reader.GetInt32(1));
e.Attributes.Add("new_name", reader.GetString(2));
}
}
}
finally
{
connection.Close();
}
// other codes.
}
context.OutputParameters["BusinessEntity"] = e;
}
}
}
RetrieveMultiplePlugin.cs kods
public class RetrieveMultiplePlugin : IPlugin
{
public void Execute(IServiceProvider serviceProvider)
{
var context = serviceProvider.Get<IPluginExecutionContext>();
EntityCollection collection = new EntityCollection();
//change the table name below to the source table name you have created
string cmdString = "SELECT TicketID, Severity, Name FROM VETicket";
SqlConnection connection = Connection.GetConnection();
using (SqlCommand command = connection.CreateCommand())
{
command.CommandText = cmdString;
connection.Open();
try
{
using (SqlDataReader reader = command.ExecuteReader())
{
while (reader.Read())
{
Entity e = new Entity("new_ticket");
e.Attributes.Add("new_ticketid", reader.GetGuid(0));
e.Attributes.Add("new_severity", reader.GetInt32(1));
e.Attributes.Add("new_name", reader.GetString(2));
collection.Entities.Add(e);
}
}
}
finally
{
connection.Close();
}
context.OutputParameters["BusinessEntityCollection"] = collection;
}
}
}
DeletePlugin.cs kods
public class DeletePlugin : IPlugin
{
public void Execute(IServiceProvider serviceProvider)
{
var context = serviceProvider.Get<IPluginExecutionContext>();
//comment
Guid id = Guid.Empty;
if (context.InputParameters.Contains("Target") && context.InputParameters["Target"] is EntityReference)
{
EntityReference entityRef = (EntityReference)context.InputParameters["Target"];
id = entityRef.Id;
//change the table name below to the source table name you have created
string cmdString = "DELETE VETicket WHERE TicketID=@TicketID";
SqlConnection connection = Connection.GetConnection();
using (SqlCommand command = connection.CreateCommand())
{
command.CommandText = cmdString; command.Parameters.AddWithValue("@TicketID", id);
connection.Open();
try
{
var numRecords = command.ExecuteNonQuery();
Console.WriteLine("deleted {0} records", numRecords);
}
finally
{
connection.Close();
}
// other codes.
}
}
}
}
Kompilējiet un veidojiet risinājumu. Tagad jums būs montāžas fails (.dll), kuru varat izmantot, lai reģistrētos savā Dataverse vidē. Šo failu atradīsit risinājuma mapē / bin / Debug direktorijā.
Reģistrējiet montāžu, izmantojot spraudņu reģistrācijas rīku. Jūs varat iegūt jaunāko spraudņu reģistrācijas rīka pakotni no NuGet.
Atveriet spraudņu reģistrācijas rīku. Lai reģistrētu montāžu, jums ir nepieciešamas sistēmas administrēšanas tiesības. Atlasiet IZVEIDOT JAUNU SAVIENOJUMU , lai izveidotu savienojumu ar savu Dataverse vidi. Atlasiet nolaižamo izvēlni Reģistrēt un pēc tam atlasiet Reģistrēt jaunu montāžu.
Atlasiet montāžas failu un reģistrējiet spraudņus. Pārliecinieties, vai esat atlasījis visus spraudņus (Izveidot, Atjaunināt, Dzēst, Izgūt un Izgūt vairākus spraudņus).
2. darbība: datu nodrošinātāja izveide un spraudņu pievienošana pakalpojumu sniedzējam
Atlasiet nolaižamo izvēlni Reģistrēties un pēc tam atlasiet Reģistrēt jaunu datu nodrošinātāju.
Dialoglodziņā Reģistrēt jaunu datu sniedzēju ievadiet šādu informāciju:
Ievadiet datu nodrošinātāja nosaukumu.
Opcijā Risinājumi atlasiet esošu risinājumu vai nolaižamajā izvēlnē izveidojiet jaunu risinājumu. Ja vēlaties izveidot jaunu risinājumu, nolaižamajā izvēlnē atlasiet opciju Jauns risinājums . Dialoglodziņā Jauna risinājuma izveide ievadiet nepieciešamo informāciju un atlasiet Saglabāt.
Opcijā Datu avota tabula (entītija) atlasiet Izveidot jaunu datu avotu. Ievadiet informāciju. Pārliecinieties, vai datu avots ir daļa no izveidotā vai atlasītā risinājuma.
Piezīmes
Datu avota tabulā Dataverse ir datu avota ieraksta konfigurācijas dati, kas jānodod nodrošinātāja spraudņiem.
Kartējiet katru reģistrēto spraudni uz tā attiecīgajām darbībām.
Reģistrējiet jauno datu sniedzēju.
Spraudņu reģistrācijas rīkā redzēsit jauno datu avota ierakstu un saistīto datu nodrošinātāju. Izvēloties datu avotu, tiks parādīta detalizēta informācija, kas ietver spraudņus un to reģistrēto GUID.
3. darbība: virtuālās tabulas izveide Dataverse vidē
Izveidojiet jaunu virtuālās tabulas datu avotu, pārejot uzAdministrēšanas>virtuālās tabulas (entītijas) datu avotuiestatīšana>.
Atlasiet Jauns un pēc tam nolaižamajā izvēlnē atlasiet iepriekšējā darbībā izveidoto datu nodrošinātāju.
Ievadiet datu avota nosaukumu un atlasiet Saglabāt un aizvērt.
Tagad esat gatavs izveidot virtuālo tabulu, kas attēlo ārējo datu avotu. Lai to izdarītu, dodieties uz Iestatījumi>Pielāgot sistēmu.
Risinājumu pārlūka kreisajā navigācijas rūtī atlasiet Tabulas (entītijas) un pēc tam atlasiet Jauns.
Ievadiet tālāk norādīto informāciju:
Column Apraksts Datu avots Atlasiet iepriekšējā darbībā izveidoto datu avotu. Parādāmais vārds Virtuālās tabulas nosaukums. Daudzskaitļa vārds Vērtība tiks automātiski aizpildīta, pamatojoties uz parādāmo vārdu. Vārds Tas tiks izveidots automātiski, pamatojoties uz parādāmā vārda vērtību. Ārējais nosaukums Avota tabulas nosaukums. Ārējo kolekciju nosaukums To pašu vērtību var izmantot kolonnā Daudzskaitļa nosaukums. Atlasiet Saglabāt un aizvērt.
Kreisajā navigācijas rūtī atlasiet un izvērsiet izveidoto virtuālo tabulu.
Atlasiet Lauki , lai atjauninātu un izveidotu jaunas kolonnas, kas attēlo ārējo avotu.
Atlasiet virtuālās tabulas kolonnu Primārā atslēga un atlasiet Rediģēt.
Atjauniniet kolonnu Ārējais nosaukums , lai tā atbilstu kolonnas nosaukumam ārējā datu avotā. Šajā piemērā ārējās kolonnas nosaukums ir TicketID.
Atlasiet vienumu Saglabāt un aizvērt.
Atlasiet virtuālās tabulas lauku Nosaukums un atlasiet Rediģēt.
Atjauniniet lauku Ārējais nosaukums , lai tas atbilstu lauka nosaukumam ārējā datu avotā. Šajā piemērā ārējās kolonnas nosaukums ir Nosaukums.
Atlasiet vienumu Saglabāt un aizvērt.
Atlasiet Jauns , lai virtuālajā tabulā izveidotu jaunu kolonnu. Šī kolonna attēlos smaguma kolonnu ārējā datu avotā.
Ievadiet šādu informāciju par jaunajām kolonnām:
Kolonnas nosaukums Vērtība Parādāmais vārds Smagums Vārds new_severity Ārējais nosaukums Smagums Lauka prasības Nepieciešams bizness Datu tips Vesels skaitlis
Atlasiet vienumu Saglabāt un aizvērt.
4. darbība: ierakstu izveide, atjaunināšana, skatīšana un dzēšana, izmantojot virtuālo tabulu
Izveidojiet modeļa vadītu programmu un pievienojiet virtuālo tabulu vietnes kartei. Pēc tam atlasiet virtuālās tabulas galveno formu un papildu lauka skatu. Publicēt programmu. Papildinformācija Pirmās modeļa vadītas programmas izveide no jauna
Lietojumprogrammu lietotāji var veikt lasīšanas, izveides, atjaunināšanas, dzēšanas darbības, izmantojot virtuālo tabulu tāpat kā jebkuru citu tabulu Microsoft Dataverse.
Skatiet arī:
Darba sākšana ar virtuālajiem galdiem
API apsvērumi virtuālajām tabulām
Pielāgoti virtuālo tabulu datu nodrošinātāji
Virtuālās tabulas norādījums, izmantojot OData v4 datu nodrošinātāju